- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.1 光照技术;(d) 理想镜面反射方向
与视线方向的夹角 ;环境光的反射:
环境光(ambient light)来自周围环境(如墙面)散射的光,在空间近似均匀分布,入射至物体表面后向空间各个方向均匀反射出去。物体对环境光的反射分量表示: ; 兰伯特反射光照模型 ; Phong 光照模型;计算物体上可见点光亮度时通常是将光亮度转换成为光栅图形显示器采用的RGB三基色,这时计算需要在三个基色上分别进行。如果存在多个光源,则将效果线性相加。此时光照模型可以描述为 :; 明暗处理;图6-8 对P点进行双线性插值 ;5.2 OpenGL中的光照 ;OpenGL认为物体表面的反射光包含三个分量:物体本身发出的光、对环境光的反射,对特定光源的反射。
① 物体本身发出的光。OpenGL认为物体本身是可以发光的,但是这种光只会对物体本身的亮度产生影响,不能影响其它物体的光亮度。物体本身发出的光记为 。
② 对环境光的反射。这里的环境光指的是全局环境光,它不依赖于任何特定光源。全局环境光概念的提出使得即使场景中没有任何光源,观察者也可以看到物体。假设全局环境光亮度Iglobal,物体表面的环境光反射系数为Ka,则物体对全局环境光的反射为 。
③ 对特定光源的反射。 ;图6-15 视线和反射光线夹角 图6-16 聚光灯;
;6.6.1、光照模型◇ 介绍例程:ep_7_1_光照球
;6.6.1、光照模型◇ OpenGL光组成 在OpenGL简单光照模型中的几种光分为:辐射光(Emitted Light)、环境光(Ambient Light)、漫射光(Diffuse Light)、镜面光(Specular Light)。 辐射光是最简单的一种光,它直接从物体发出并且不受任何光源影响。 环境光是由光源发出经环境多次散射而无法确定其方向的光,即似乎来自所有方向。一般说来,房间里的环境光成分要多些,户外的相反要少得多,因为大部分光按相同方向照射,而且在户外很少有其他物体反射的光。当环境光照到曲面上时,它在各个方向上均等地发散(类似于无影灯光)。;;6.6.1、光照模型◇ OpenGL光组成 漫射光来自一个方向,它垂直于物体时比倾斜时更明亮。一旦它照射到物体上,则在各个方向上均匀地发散出去。于是,无论视点在哪里它都一样亮。来自特定位置和特定方向的任何光,都可能有散射成分。 镜面光来自特定方向并沿另一方向反射出去,一个平行激光束在高质量的镜面上产生100%的镜面反射。光亮的金属和塑料具有很高非反射成分,而象粉笔和地毯等几乎没有反射成分。;6.6.1、光照模型◇创建光源(Light Source) 光源有许多特性,如颜色、位置、方向等。选择不同的特性值,则对应的光源作用在物体上的效果也不一样,这在以后的章节中会逐步介绍的。下面详细讲述定义光源特性的函数glLight*(): void glLight{if}[v](GLenum light , GLenum pname, TYPE param) 创建具有某种特性的光源。其中第一个参数light指定所创建的光源号,如GL_LIGHT0、GL_LIGHT1、...、GL_LIGHT7。第二个参数pname指定光源特性,这个参数的辅助信息见表10-1所示。最后一个参数设置相应的光源特性值。;6.6.1、光照模型;6.6.1、光照模型◇创建光源举例 (1)指定光源的位置: GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); GLfloat light_ambient [] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat light_diffuse [] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 }; (2)指定环境光颜色、散射光、镜面反射光
glLightfv(GL_LIGHT0, GL_AMBIENT , light_ambient ); glLightfv(GL_LIGHT0, GL_DIFFUSE , light_diffuse ); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);;6.6.1、光照模型◇启动光照 在OpenGL中,必须明确指出光照是否有效或无效。如果光照无效,则只是简单地将当前
文档评论(0)