光照模型
如果世界没有光影效果,那么我们看到的所有3D物体都是平面的,下面给出一个例子来模拟这种情况,您仅仅可以分辨出几何的外轮廓,但看不到它的立体效果。

只有当我们定义了几何表面对光照的不同反应效果,比如镜面反射、漫反射,使得几何表面分布着不同的光强度,这样我们才能像现实生活中那样快速识别出物体。
OpenGL中提供了几种光照模型,都是基于人们对于光的物理特性的理解。我们提供的Material库中将这些光照模型封装成材料,这样可以避免开发者直接和繁琐的着色器编码打交道,可拿来即用。下面我们以phong Material为例,来看一下它的光照效果是如何实现的,以及开发者如何使用它。更多的材质效果,您可以从我们的API文档中了解到。
Phong Lighting Model
冯氏光照模型(Phong Lighting Model)是一个相对现实世界而言作了简化的光照模型,它包含了三个分量:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照
环境光照(Ambient Lighting)
即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。
把环境光照添加到场景里的方法非常简单,我们用光的颜色乘以一个很小的常量环境因子,再乘以物体的颜色,然后将最终结果作为片段的颜色:
漫反射光照(Diffuse Lighting)
模拟光源对物体的方向性影响(Directional Impact)。它是冯氏光照模型中视觉上最显著的分量。物体的某一部分越是正对着光源,它就会越亮。
镜面光照(Specular Lighting)
模拟有光泽物体上面出现的亮点。镜面光照的颜色相比于物体的颜色会更倾向于光的颜色。