镜面反射光照
镜面光照依赖因素:
- 光的方向向量;
- 物体的法向量;
- 观察者的观察方向;
计算过程
- 计算反射向量;
- 计算视线向量和发射向量的夹角,夹角越小,镜面光的作用越大;
观察向量的计算
使用观察者世界空间位置和片段位置来计算
实现
镜面光照的实现主要是修改片段着色器,在片段着色器中:
- 加入观察者位置,以摄像机位置为观察者位置
uniform vec3 viewPos;
- 在片段着色器中计算观察者视线方向,光线反射向量,两者之间的夹角,根据夹角值计算光线对物体的影像
//Specular
float specularStrength = 0.5f;
vec3 viewDir = normalize(viewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, Normal);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 128);
vec3 speclular = specularStrength * spec * lightColor;
运行效果
这个效果图和文章示例中的差很远呢,看不到一个比较亮的光斑
网友评论