OpenGL光照模型
- 隐藏面消除
- 控制场景中的光照
- 光照概念模型
- 设置光照参数
隐藏表面消除就是消除实心物体被其他物体所遮挡的那部分,实现隐藏表面消除的最简单方法是使用深度缓冲区。深度缓冲区的原理是把一个距离观察平面的深度值(或距离)与窗口中的每个像素关联。一开始,使用glClear()函数把所有像素的深度值设置为最大可能的距离(通常是远侧裁剪平面),随后在场景中以任意顺序绘制所有的物体。
环境光、散射光、镜面光和发射光
- 环境光:在环境中充分的散射,无法辨别其方向的光,似乎来自所有的方向。
- 散射光:来自某个特定位置或方向的任何光很可能具有散射成分。
- 镜面光:来自某个特定的方向,并且倾向于从表面向某个特定的方向反射。
- 发射光:模拟源自某个物体的光。
材料颜色
OpenGL光照模型根据材料反射的红、绿和蓝光的比例来模拟颜色。纯红反射所有红色光线,吸收所有绿色和蓝色光线。颜色成分的数量对应于每种颜色的完全强度的百分比。
光源
创建光源:
创建light指定的光源,可以是GL_LIGHT 0
,GL_LIGHT1
,…,或GL_LIGHT7
。被设置的光源属性是由pname
定义。
颜色:
如果想创建逼真效果,可以把GL_SPECULAR
和GL_DIFFUSE
参数的值设置为相同。
位置和衰减:
- 方向性光源:光源位于无限远,当光线到达物体表面,可以认为所有的光线都是平行的。例如太阳。
- 位置性光源:在场景中的准确位置决定对场景所产生的效果。例如台灯。
环境光、散射光和镜面光的强度都进行衰减,只有发射光和全局环境光的强度没有衰减。