OpenGL学习之路之光照贴图

OpenGL学习之路之光照贴图

十二月 07, 2021

Phong光照模型

效果混合相加:diffuse + ambient + specular

图片混和相乘:(diffuse + ambient + specular) * objColor

1
FragColor =vec4((diffuse + ambient + specular) * objColor,1.0f);

环境光–ambient

ambient具体能表现无光照区域的颜色,在物体较暗的部分加上漫反射贴图会更真实

1
vec3 ambient=texture(material.diffuse, TexCoord).rgb * ambientColor;

漫反射贴图—diffuse

出现的大概像表面的纹理像木箱的表面,相当于简单反射到眼睛的获得的颜色

1
2
vec3 diffuse=texture(material.diffuse,TexCoord).rgb * max( dot( lightDir, Normal), 0) * lightColor;
//vec3 diffuse=texture(material.diffuse,TexCoord).rgb;

镜面反射—specular

可以将光照和高光进行反射,提高真实度

1
2
3
vec3 reflectVec=reflect(-lightDir,Normal);
float specularAmount=pow(max(dot(reflectVec,cameraVec),0),material.shininess); //高光的集中度,倍数越高,同一视角高光点越小
vec3 specular=texture(material.specular,TexCoord).rgb * specularAmount * lightColor;//镜面反射图中为数值0或者为黑色表示不需要镜面反射,木块和铁最好对比

发射光贴图—emission

1
vec3 emission=texture(material.emission,TexCoord).rgb;