- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL5光照与材质.ppt
5.1光照及材质介绍 5.2 OpenGL光照模型 使用光照的一般步骤: 为物体的所有顶点定义法线向量。决定物体相对于光源的朝向。 创建光源、设置位置。 创建和选择光照模型,它定义了全局环境光的等级和观察点的位置。 并启用光照和对应光源。 设置物体的材料属性。 5.2.1 法线向量 法线向量:垂直于表面的向量。 法线决定了物体相对于光线的方向。 在OpenGL中,可以给一个多边形指定法线,也可以给每个顶点指定法线,但不能在顶点以外的其他地方指定法线。 对于每个顶点,OpenGL根据指定的法线来确定有多少来自光源的光将照射到该顶点上。 5.2.1 法线向量 设置法线函数: void glNormal3*[v](TYPE nx, TYPE ny, TYPE nz) 该函数指定一个向量(nx,ny,nz),并被作为法线, 接下来在调用glVertex*()函数时,当前法线被赋值给 指定的顶点 法线向量仅表示方向,长度无关紧要,在计算光照之前,必须将法线向量的长度转换为1 ,称为法线的规范化,可调用以下函数进行法线向量的自动规范化: glEnable(GL_NORMALIZE); 5.2.2 创建光源 指定光源属性函数: void glLight{if}(GLenum light, GLenum pname,TYPE param); 创建light所指定的光源,可以是GL_LIGHT0, GL_LIGHT1,….,GL_LIGHT7,pname定义被设置的光 源属性,它指定一个命名参数,param表示pname属 性将要设置的值。 glLight*()函数的pname参数默认值 例: GLfloat light_ambient[] = {0.0,0.0,1.0,1.0}; GLfloat light_diffuse[] = {1.0,1.0,0.0,1.0}; GLfloat light_specular[] = {1.0,0.0,1.0,.0.0} GLfloat light_position[] = {1.0,1.0,1.0,0.0}; glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); glLightfv(GL_LIGHT0,GL_POSITION,light_position); 颜色 GL_AMBIENT:表示一个特定的光源在场景中所添加的环境光的RGBA强度。 GL_DIFFUSE:定义特定的光源在场景中所添加的散射光的RGBA强度,最接近于想象中“光的颜色”。 GL_SPECULAR:影响物体上镜面亮点的颜色。 位置 方向性(directional)光源:光源被放在无限远处,光线照射在物体上时其方向是平行的(例:太阳) 位置性(positional)光源:光源在场景中的准确位置决定了它对场景产生的效果(例:台灯) 用GL_POSITION指定光照属性时,w=0,则光源为方向性光源,反之,则为位置性光源。 衰减 现实世界中,随光源距离增加,光的强度衰减。 衰减不适用于方向性光源,但可对位置性光源发 出的光进行衰减。 OpenGL把光源的强度乘以衰减因子,对它实行衰减 聚光灯 聚光灯:对位置性光源加以限制,使它的发射范围限制在一个锥体之内 【步骤】 1)使用GL_SPOT_CUTOFF指定光锥轴和光锥边缘的 角度,取值范围为[0.0,90.0]和180。 例: glLightf(GL_LIGHT0, GL_SPOT_CUTOFF,45.0) 2)使用GL_SPOT_DIRECTION指定聚光灯方向,以 确定光锥的轴线方向。 例: GLfloat spot_direction[ ] = {-1.0,-1.0,0.0}; glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction) 3)使用GL_SPOT_EXPONENT设置聚光指数,聚光指数控制光的集中程度,光锥中心的光强最大,越靠边的光强越小,默认为0 ,均匀照射。 例:glLightf(GL_LIGHT0, GL_SPOT_EXPONENT,2.0) 【注意】 聚光灯发出的光不会到达光锥边沿的外侧 默认情况下,聚光灯是被禁用的, 因为GL_SPOT_CUTOFF的值是180度。 5.2.3 选择光照模型 OpenGL的光照模型概念包括以下部分: 全局环境光强度。 观察点位置是
原创力文档


文档评论(0)