opengl介绍讲解.ppt

  1. 1、本文档共87页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
opengl介绍讲解

void main(void) { auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); //窗口显示单缓存和RGB(彩色)模式 auxInitPosition(0,0,200,200); //大小 x=200、y=200 , (0,0)是屏幕左上点 auxInitWindow(“Perspective 3-D Cubes”); //初始化窗口,参数是标题 myinit(); auxReshapeFunc(myReshape); auxMainLoop(display); } 10.3.5 光照处理 光照处理是OpenGL中绘制逼真的三维图形的一个重要步骤。否则,就无法使最终显示在屏幕上的物体表现出立体感。 在RGBA模式下,如果不启用光照处理,则顶点的颜色由当前颜色值所确定;启用光照处理后,则另行计算。 场景中物体的光照计算不仅取决于光源的属性,而且与材料的特性直接相关。即光照计算要反映出在场景中使用的光照特性,以及场景中的物体对这种光的反射和吸收特性。 1. OpenGL光照的基本概念 OpenGL中将光视为由红、绿、蓝三种成分所组成,光源的特性由所发出的三种颜色的光的比例来确定。 说明:光源的RGB值代表各种颜色占最大光强的比例,通过调整各数值可以使光源呈现出各种不同的颜色。例如:R=G=B=1时得到最强的白光,而R=G=B=0.5时,由于光强减弱,得到灰白光。 OpenGL在光照模拟中将光线分为辐射光、环境光、漫反射光和镜面反射光 4 种独立的成分。 辐射光:源自发光体,并且不受其他光源的影响。 环境光(泛光):它经过环境的多次散射,已不可能确定其方向,而是好像来自各个方向。它作用于物体的表面时,将沿各个方向均匀反射。 漫反射光:它来自一个方向,但作用于物体表面后将沿各个方向均匀散射。 镜面反射光:来自一个方向,并沿一特定方向离开。 顺便指出,可以在场景中设置多个独立的光,通过调整各光源的参数,得到满意的光照效果。 物体表面的材质特性: OpenGL中认为,材料的颜色决定于其对入射光中的红、绿、蓝各成分的反射比例。例如,对于理想的红色物体来说,它完全反射红色光,完全吸收绿色光和蓝色光。因而,白光照射下物体呈红色;纯绿光照射下物体则呈黑色。 说明:材料的设置参数中也包括对R、G、B值的设定,但与光照的参数设置相比,两者的含义是不同的。对材料来说,上述各值分别对应材料对各种颜色光的反射比例。如上述理想的红色物体对应的参数为R=1,G=0,B=0。一般地,如果光源和材料的参数分别为(Rl,Gl,Bl)和(Rm,Gm,Bm),若不考虑其它影响因素,则观察到的光线的参数为(Rl*Rm,Gl*Gm, Bl*Bm)。 与光线的情况相似,材料也具有辐射色、环境色、漫反射色和镜面反射色。 为了模拟场景中的发光体,可以设定材料的辐射光特性;而环境色、漫反射色和镜面反射色则反映材料对环境光、漫反射光和镜面反射光的反射系数。 材料的泛光与每个入射光源的泛光组分相结合;漫反射与入射光源的漫反射光组分相结合;镜面反射与入射光源的镜面反射光组分相结合。 2. 光照步骤的处理 以下程序绘制一个有光照的球体: #include windows.h #include GL/gl.h #include GL/glu.h #include GL/glaux.h void myinit(void); void CALLBACK myReshape(int w, int h); void CALLBACK display(void); void myinit(void) //初始化 { glClearColor(0.0,0.0,0.0,0.0); //将窗口清为黑色 Glfloat mat_specular[]={1.0, 1.0, 1.0, 1.0}; Glfloat mat_shininess={50.0}; Glfloat light_position[] = {1.0, 1.0,1.0,0.0};//无穷远光源 glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular); glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess); glLightfv(GL_LIGHT0,GL_POSITION,light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glDepthFunc(GL_LESS); glEnable(GL_DEPTH_TE

文档评论(0)

此项为空 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档