原理区别:
phong使用视线与入射光线反射向量的夹角:
blinn-phong使用halfway(视线与入射光线的中间方向)与normal的夹角:
效果区别:
1.phong因为视线与光反射向量夹角大于90度时取0,因此有明显的边缘
2.由于blinn-phong所用计算的夹角往往小于phong所使用的夹角,因此blinn-phong的点积值更大,需要更大(往往为2-4倍)的exp值才能达成与phong相似效果
代码区别:
void main()
{
[...]
float spec = 0.0;
if(blinn)
{
vec3 halfwayDir = normalize(lightDir + viewDir);
spec = pow(max(dot(normal, halfwayDir), 0.0), 16.0);
}
else
{
vec3 reflectDir = reflect(-lightDir, normal);
spec = pow(max(dot(viewDir, reflectDir), 0.0), 8.0);
}
}