- 3
- 0
- 约1.29万字
- 约 13页
- 2015-08-11 发布于山西
- 举报
第九节:灯光和灯泡
本节中你将学到:
How to…… 将要用到的函数 设置灯光模式 glLightModel 设置灯光参数 glLight 设置材料反射特性 glColorMaterial, glMaterial 使用表面的法向量 glNormal 本节讨论光线:依我看这是OpenGL中最甜蜜的部分。你已经学到OpenGL的基本知识了。怎样从图元组装成物体及怎样在三维空间来控制。第八节中我们讨论了给物体加上颜色并作光滑消隐。所有这些一个好学生仅使用Windows GDI也可达到同样的效果。
如果你要研究一下灯光的数学模型,可以参考附录B。
本节若要用另一个名字来说的话可能是“真实化场景”;你清楚的,现实生活中没有几个物体是我们第八节讨论的那个样子。除了颜色,物体还可以显示出亮的,暗的甚至是鲜艳的。一个物体的颜色将在灯光的作用下显得不同。
本书的第二部分的剩余部分和第三部分将关注给你的场景添加真实感的技术。所以扔掉你的计算器,带上你的魔法帽,深呼吸一下,开始我们的魔幻旅程。
现实世界中的光
真实的物体不会显示出一种颜色或消隐。OpenGL对灯光处理做了很好的工作。如果一个物体自己不发光,那么它可以被三种光照亮:环境光Ambient light、漫射光Diffuse light、镜面反射光specular。
Ambient Light环境光
环境光Ambient Light不是从一个特定的方向传来的光。它有光源,但是在光线经过房间、场景等的反射后就变得没有方向了。被环境光照亮的物体每个方向的表面都被照亮。你可以把我们原来的例子都当成是被环境光照亮的,因为不管它们怎样旋转或处于哪种方向,都是可见的且被均匀着色。图9-2所示为一个被环境光照亮的物体。
图9-2 被环境光照亮的物体
漫射光Diffuse Light
漫射光Diffuse Light来自一个特定的方向但是它在一个表面被均匀的反射了。尽管光线被均匀地反射,当它直接照射到物体的表面时要比从一个角度照射到表面时要亮一些。一个漫反射的好例子就是荧光灯,或中午照射在玻璃表面的阳光。在图9-3中所示为一个被漫射光照亮的物体:
图9-3 只由漫射光照亮的物体
镜面反射光Specular Light (全反射光)
同漫射光一样,镜面反射光也是有方向的,但是它的反射光也是朝一个方向的。如一个点光源照射一个金属球时会在球面上形成一块特别亮的区域,呈现所谓“高光(Highlight)”,它是光源在金属球面上产生的镜面反射光(Specular Light)。对于较光滑物体,其镜面反射光的高光区域小而亮;相反,粗糙表面的镜面反射光呈发散状态,其高光区域大而不亮。图9-4所示为被镜面反射光照亮的物体:
图9-4
把它们放在一起Put It All together
三种光中的任意一个都不可能组成全部,而是由它们以不同的强度共存。例如实验室里的一个红色激光束可以是由一个纯红镜面反射光构成。但是有一些烟或灰散布在激光束中,它们在房间中到处可见。这意味着光的漫反射。如果激光很亮而又没有其它的光源存在,你会看到房间中的物体是红色的,这就是很小的环境光。
因此一个场景中的光源是由这三种光组成的:环境光,漫射光,镜面反射光。就像组成颜色的三部分是由RGBA值来描述一样。例如上面红色激光就可以这样来描述,见表9-1:
表9-1 红色激光的颜色和光强分布
RED红 绿GREEN 蓝BLUE 透明度Alpha Specular镜面反射光 0.99 0.0 0.0 1.0 Diffuse漫射光 0.10 0.0 0.0 1.0 Ambient环境光 0.05 0.0 0.0 1.0 注意到红色的激光束没有绿或蓝色光部分。同样的镜面反射光,漫射光,环境光的强度范围是从0.0到1.0。你可以把这个表认为一个红色的激光束是一个非常强的镜面反射光部分,一小部分漫射光和一个非常小部分的环境光组成。
现实世界中的材质Materials in the real world
光只是现实世界的一个组成部分,在现实世界中每个物体都有自己的颜色。在第八节中,我们讨论了物体颜色的定义那就是物体反射了一定的光波的缘故。一个蓝色的球反射了大多数的蓝色光子并吸收了其它的光子。这就是光照在球上反射了蓝色光子被你接收到就看到了蓝色。通常现实世界中的物体是被白光照亮的,白光里面包含了所有的颜色。在白光的照耀下,大多数物体表现出它们本来的颜色。但是也不都是这样。把一个蓝色的球放在只有黄光的黑色房间里,因为所有的黄色光线都将被吸收,所以没有蓝色光子被反射出来,你也就看不到蓝色的球了。
材质特性Material Properties
当我们使用灯光时,不需要给一个多边形指定颜色,但是需要指定材质即有
原创力文档

文档评论(0)