StarkerSong Get Busy Living

OpenGL光照模型

2016-11-01

OpenGL光照模型

  • 隐藏面消除
  • 控制场景中的光照
  • 光照概念模型
  • 设置光照参数

隐藏表面消除就是消除实心物体被其他物体所遮挡的那部分,实现隐藏表面消除的最简单方法是使用深度缓冲区。深度缓冲区的原理是把一个距离观察平面的深度值(或距离)与窗口中的每个像素关联。一开始,使用glClear()函数把所有像素的深度值设置为最大可能的距离(通常是远侧裁剪平面),随后在场景中以任意顺序绘制所有的物体。

环境光、散射光、镜面光和发射光

  • 环境光:在环境中充分的散射,无法辨别其方向的光,似乎来自所有的方向。
  • 散射光:来自某个特定位置或方向的任何光很可能具有散射成分。
  • 镜面光:来自某个特定的方向,并且倾向于从表面向某个特定的方向反射。
  • 发射光:模拟源自某个物体的光。

材料颜色

OpenGL光照模型根据材料反射的红、绿和蓝光的比例来模拟颜色。纯红反射所有红色光线,吸收所有绿色和蓝色光线。颜色成分的数量对应于每种颜色的完全强度的百分比。

光源

创建光源:

创建light指定的光源,可以是GL_LIGHT 0GL_LIGHT1,…,或GL_LIGHT7。被设置的光源属性是由pname定义。

颜色:

如果想创建逼真效果,可以把GL_SPECULARGL_DIFFUSE参数的值设置为相同。

位置和衰减:

  • 方向性光源:光源位于无限远,当光线到达物体表面,可以认为所有的光线都是平行的。例如太阳。
  • 位置性光源:在场景中的准确位置决定对场景所产生的效果。例如台灯。

环境光、散射光和镜面光的强度都进行衰减,只有发射光和全局环境光的强度没有衰减。


Comments