1.1 光照效果
通过光照,能反映模型的空间几何形态,通过光照明模型,计算模型表面任一点被光照后投射到观察者眼中的光亮度的大小。光照的计算就是计算投射到观察者眼中的光,这部分光与物体与光源的位置、物体与视点、物体表面的材质,物体的法相等因素相关。
1.2 光照明模型(Illumination Model)
- 通过数学的方法,光照的计算抽象为一个数学表达式,来模拟光照效果。
- 通过对光的分解,分而治之的解决每种光的模拟,主要分为环境光(间接光)、漫反射光、高光(镜面反射光)。
1.3 漫反射光(Diffuse reflection)
- 粗糙表面的光会向四周均匀反射;
- 入射光相对于物体表面越斜,反射光越弱。
- 对上述现象抽象为数学表达:采用cos函数,cos函数在0 - 90度是一个递减的函数,与实际递减的情况也相符合,因此Lamert‘s Cosine Law就采用了如下数学模型,是一个经验值模型,而不是一个准确的物理模型;
1.4 镜面反射光(Specular reflection)
- Phong提出了模拟的经验公式:V为视线方向向量。
图中指数n为高光指数,它用来控制物体表面的光滑程度,如下图,n的值与放射出的光量的关系。
1.5 环境光(Ambient light)
- 三种光里面最难进行模拟的一种光;
- Phong 模型中只采用一个常数来表示环境光。
1.6 Phong Illumination Model(Phong光照明模型)与Blinn-Phong Model(Blinn-Phong光照明模型)
将各种光加起来,就形成了光照明模型。
- 从公式中,镜面反射光与视点有光,而其他两项与视点无关,当视点发生变化时,整个光照都需要重新计算。
- 光照参数:IaI_aIa,IlI_lIl,LLL;L是光线方向;
- 材质参数:Ka,Kd,Ks,n,NK_a,K_d,K_s,n,NKa,Kd,Ks,n,N,K是反射系数;n是高光指数,N是法向量;
- R的计算:
- 实际使用中,由于R的计算较复杂,因此常采用(N.H)(N.H)(N.H)代替(R.V)(R.V)(R.V);H为沿L和V的角平分线的单位向量;
- 这就是Blinn-Phong Model,它效率更高,因此也比较常用;
1.7 光亮度的表达
- 实际使用中,由于R的计算较复杂,因此常采用(N.H)(N.H)(N.H)代替(R.V)(R.V)(R.V);H为沿L和V的角平分线的单位向量;
- 采用R,G,B三个分量来表示颜色,因此可以采用上述公式对每个分量进行计算,就能得到最终的颜色。
- 多光源的情况
1.8 OpenGL中的光照明模型
OpenGL中的光照模型就是Blinn-Phong模型,在其基础上,OpenGL考虑了自发光,整体环境光与每盏灯的环境等,以及每盏灯的衰减系数,聚光灯等各种因素。