光照模型的计算方式总结(1.Diffuse分量2.Specular分量 Phong model和Blinn-Phong model (Or Blinn))

来源:互联网 发布:英镑符号 mac系统 编辑:程序博客网 时间:2024/05/19 18:45

光照模型的计算方式总结(1.Diffuse分量2.Specular分量 Phong model和Blinn-Phong model (Or Blinn)),

在计算机图形学以及游戏开发过程中光照是必不可少的,研究光照模型就离不开漫反射分量、镜面反射分量、环境光分量等,在这里

以opengl里的光照计算方式Blinn-Phong model (Or Blinn)来探讨光照模型的计算方法

总结如下:

补充知识:

镜面的反射向量求法在光照中非常重要,在这里给出他的求解如图:

R=I-2(I.N)N


证明:

设入射光线向量I和反射平面的法向量N之间的夹角为theta。连接I的始端和R的末端,则有

R = 2P - I              (1)

现在问题变成了如何求取P,设入射点0到P与N的交点的向量为S,那么有

P = I + S               (2)

现在问题变成了如何求取向量S,向量S即向量-N(注意,这里是-N,因为S和N的方向相反。)在向量N上的投影,根据向量的投影公式有

因为N是单位向量,简化一下得到

将S代入公式(2),再将P代入公式(1)得到


1.Diffuse分量

Lambertian Reflection模型是针对diffuse分量的, diffuse假定接收到得光的密度跟观察者的位置无关, 它正比于lights diffuse intensity 和material's diffuse reflection 系数, 同时还正比于光线与表面法线的夹角.

                 Diffuse        计算公式为:          

 

Lambert的历史:

          This is known as Lambertian Reflection. 'Lambert's cosine law' states that the brightness of a diffusely radiating plane surface is proportional to the cosine of the angle formed by the line of sight and the normal to the surface. This was more than 200 years ago (Johann Heinrich Lambert, 1728-1777)!


2.Specular分量

1. Phong model

phong model表明specular分量正比于反射光与观察点向量的夹角的余弦值(cosine).

                

               L向量: 光源--->顶点.     N: 法向量      Eye向量: 顶点--->Eye.   R: 反射光

       当Eye与R的夹角越大,specular越衰减, 衰减系数由shininess控制。shininess越大,衰减越快。

       

 

2. Blinn-Phong model (Or Blinn)

该模型是Phong的简化版, 它是基于Half-Vector的,Half-Vector是入射光与Eye的中间向量。如下图:

                             

          Specular的计算如下:

3.OpenGL光照计算公式总结

在光的传播过程中会出现衰减,在OpenGL中有两种情况:1.点光源;2.椎体光.  最终落到顶点时光的各个分量为:

               LAmbient  = 衰减系数 * 椎体光影响 * 初始的ambient;

               LDiffuse    = 衰减系数 * 椎体光影响 * 初始的diffuse;

       LSpecular = 衰减系数 * 椎体光影响 * 初始的specular;

然后和材质进行计算公式为:

        顶点Color =  全局环境光*全局环境光材质  + 各个光源的作用{ Ma * LAmbient) + DFactor * Md * LDiffuse) + SFactor * Ms * LSpecular)}

将上面的等式代入得:

        顶点Color = 全局环境光*全局环境光材质 +

        各个光源的作用{衰减系数 * 椎体光影响 * (Ma * 初始的ambient + DFactor * Md * 初始的diffuse + SFactor * Ms * 初始的specular)}

 

中间涉及到的变量的计算


1 0