- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
光照模型 主讲:史广顺 主要参考书: 《OpenGL编程指南》 机械工业出版社 主要内容 材料颜色和光照模型相关的概念 (1)创建、定位和启用光源 (2)选择光照模型 (4)为场景中的物体定义材料属性 创建光源 (1)颜色 (2)光的位置和衰减 (3)聚光灯 (4)多光源 (5)控制光源的位置和方向 材料颜色 OpenGL的光照模型根据材料反射的红、绿和蓝光的比例来模拟它的颜色。例如一个纯红的球体,它会反射所有的红色光线吸收所有的蓝色和绿色光线。所以,如果给红色的球体仅仅投上绿色的光线,那么它看起来就是黑色的 和光一样,材料也具有不同的环境、散射和镜面颜色,它们决定了材料对红、绿和蓝光的反射率。材料的环境反射属性,散射反射属性,镜面反射属性和分别和对应的每种入射光的相应颜色值进行组合。 注:镜面反射属性通常是白色或灰色的,因此镜面亮点的颜色也就是光源的镜面光的颜色。 光照条件下的不同材料属性的小球 光和材料的RGB值 光线的颜色成分与材料的颜色成分的含义并不相同。 对于光照而言,颜色成分的数量对应于每种颜色的完全强度百分比。比如说,如果一束光线的RGB为(0.5,0.5,0.5),那么它理论上应该是白色的,但是强度只有一半,因此看上去却像是灰色的。对于材料而言,它的RGB值和它对颜色的反射比例相对应。如果值为(1,0.5,0),那么它将反射所有的红光,一半的绿光,不反射蓝光。 在忽略其它所有的反射效果情况下,如果一束OpenGL光线的成分是(LR,LG,LB),一种材料具有相应的成分(MR,MG,MB),那么进入眼睛的颜色值就是(LR*MR,LG*MG,LB*MB) 类似的,如果两束光进入人眼,它的成分分别是(R1,G1,B1)和(R2,G2,B2),那么,叠加在一起的光颜色就是: (R1+R2,G1+G2,B1+B2),当值超过1的,它会被自动截取为1 在OpenGL中使用颜色 设置绘制的颜色,我们要回顾一下函数: void glColor*(red,green,blue,alpha); 函数的名字会随着参数的类型和数目有相应的少许变化。但是三个基本参数就是红、绿、蓝。当我们的参数为四个元素时,alpha表征颜色的透明度。 函数中的b、d、f、i、s、ui、us,分别代表着字节型、双精度型、浮点型、整型、短整型、无符号字节型和无符号短整型。 设置明暗处理 glColor可以设置当前的颜色,在函数之后绘制的所有顶点都使用该颜色。 如果是一个顶点,指定给定顶点的颜色就是该点最终的颜色,而对于线来说,它有两个端点,可以设置成不同颜色。线的颜色取决于明暗处理的模型。所谓的明暗处理实际上是一种颜色到另外一种颜色的平滑过渡。 明暗处理的数学方法是先找到三维RGB空间中连接两点的直线方程,再从线的一端循环到另一端,沿线检索每点的坐标,给屏幕上的每个像素供点的颜色。 设置明暗处理的模型 OpenGL会默认进行光滑明暗处理的明暗处理模型,也是我们讨论的模型。设置模型为GL_SMOOTH。 另外一种处理模式为GL_FLAT,它用来实现平直明暗处理。平直明暗处理意味着图元的内部不做明暗处理计算。一般的来说,平直明暗处理模型下,一个图元的内部的颜色就是最后一个顶点的颜色。 唯一例外的一个情况:GL_POLYGON图元,它采用的是第一个顶点的颜色 现实世界中的颜色 OpenGL根据光照条件创造出类似现实环境中的模型来。除了物体本身发光以外,还可以有三种类型的光照:环境光,散射光和镜面光。 不同光源混合 在现实场景中,没有一种光源完全是由一种光组成,它总是由不同的几种光进行组合构成。例如:红色的激光几乎都是由红色的镜面光成分组成,然而由于环境的灰尘进行散射,所以显示效果很明显也会受到影响。 一种光源一般可以由如上介绍的三种模型进行模拟 例如现实中红色激光的光色分布图: 红 绿 蓝 alpha 镜面光 0.99 0.0 0.0 1.0 散射光 0.10 0.0 0.0 1.0 环境光 0.05 0.0 0.0 1.0 现实世界中的材质 光只是综合因素的一部分,在现实世界中,材质本身拥有自己的颜色。这样,材质的颜色是由它所反射的光的波长决定的。举个例子:黄色光照射蓝色的球体,当没有其它光源时候,球体所见到的颜色应该是黑色的。 材质属性: 当我们描述一个物体时候,总是说它由具有某些反射属性的材质组成,而不说它具有特殊的颜色。不说某些多边形是红色的,而说它由某种主要反射红光的材质组成。 给材质加入光线 绘制某个物体时,OpenGL决定物体的每个像素所使用的颜色。物体有反射的“颜色”,而光源也有自己的“颜色”。 在具体的OpenGL中,图元的每个顶点都被赋予了一个RGB值,该值是根据环境、散射和镜
文档评论(0)