GLSL(8)关于实现Phong shading model 中的一个小trick

Phong shading model 其实包括三部分:

        ambient light color、diffuse light color、specular light color。

        ambient light color就是环境光部分,也是很重要的是一部分,可以把它理解成一个常数;就好比在一个阴天的白天里,你走在外面,此时环境中没有diffuse light,也没有 specular light,因为这两个都需要阳光照射到物体上才能出效果,所以此时就只有ambient light。虽然没有太阳,但其实因为环境光的存在,其他物体你还是能看见,如果连 ambient light 都没有的话,那就一片漆黑了,就是酱紫的。其实环境光是一个比较独特的东西,具体它的原理可以自行谷歌。

       与ambient light不同的是diffuse light 和specular light的计算都需要光源的方向。

       在shader中,关于diffuse light和specular light部分,我们都是使用的cos theta来描述光源和物体表面一点的法线之间的关系。

      比如说,diffuse light:

      

 // The diffuse shading equation    LightIntensity = Ld * Kd * max( dot( s, tnorm ), 0.0 );
 
     max一下,是为了排除去小于0的部分。

     既然ambient light color部分是一个常数,那么其实,可以这样写:

 // The diffuse shading equation    LightIntensity = Ld * Kd * max( dot( s, tnorm ), 0.4 );
 
    把max函数中的最后一个参数从0改成了一个常数,这样其实就暗含着包含了ambient light color 部分了,一个小trick。

    


你可能感兴趣的:(OpenGL)