OpenGL 入门学习之七——使用光照来表现立体感2009-01-07 11:49从生理学的角度上讲,眼睛之所以看见各种物体,是因为光线直接或间接的从它们那里到达了眼睛
人类对于光线强弱的变化的反应,比对于颜色变化的反应来得灵敏
因此对于人类而言,光线很大程度上表现了物体的立体感
请看图 1,图中绘制了两个大小相同的白色球体
其中右边的一个是没有使用任何光照效果的,它看起来就像是一个二维的圆盘,没有立体的感觉
左边的一个是使用了简单的光照效果的,我们通过光照的层次,很容易的认为它是一个三维的物体
图 1OpenGL 对于光照效果提供了直接的支持,只需要调用某些函数,便可以实现简单的光照效果
但是在这之前,我们有必要了解一些基础知识
一、建立光照模型在现实生活中,某些物体本身就会发光,例如太阳、电灯等,而其它物体虽然不会发光,但可以反射来自其它物体的光
这些光通过各种方式传播,最后进入我们的眼睛——于是一幅画面就在我们的眼中形成了
就目前的计算机而言,要准确模拟各种光线的传播,这是无法做到的事情
比如一个四面都是粗糙墙壁的房间,一盏电灯所发出的光线在很短的时间内就会经过非常多次的反射,最终几乎布满了房间的每一个角落,这一过程即使使用目前运算速度最快的计算机,也无法精确模拟
不过,我们并不需要精确的模拟各种光线,只需要找到一种近似的计算方式,使它的最终结果让我们的眼睛认为它是真实的,这就可以了
OpenGL 在处理光照时采用这样一种近似:把光照系统分为三部分,分别是光源、材质和光照环境
光源就是光的来源,可以是前面所说的太阳或者电灯等
材质是指接受光照的各种物体的表面,由于物体如何反射光线只由物体表面决定(OpenGL 中没有考虑光的折射),材质特点就决定了物体反射光线的特点
光照环境是指一些额外的参数,它们将影响最终的光照画面,比如一些光线经过多次反射后,已经无法分清它究竟是