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。

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值