一、Phong Lighting Model 光照模型的计算方式
二、计算步骤
1、给定环境色ambient、灯光lightColor、物体本身的颜色objColor
2、计算漫反射diffuse
2.1、根据灯光位置和物体某点的位置计算光源的指向
vec3 lightDir = normalize(lightPos - FragPos);
2.2、根据光源的指向和法向量的内积(均为单位向量)计算反射的百分比,最后乘上光源
vec3 diffuse = max(dot(lightDir,Normal),0.0f)*lightColor;
2.3、如果模型矩阵执行了不等比缩放,法向量
Normal = mat3(transpose(inverse(modelMat)))*aNormal;
否则
Normal = mat3(modelMat)*aNormal;
3、计算镜面反射specular
3.1 计算反射向量
vec3 reflectVec =reflect(lightDir,Normal);
3.2计算相机方向向量
vec3 cameraVec = normalize(cameraPos - FragPos);
3.3计算放射光线的百分比
float specularAmount = pow(max(dot(reflectVec,cameraVec),0.0f),128);
3.4百分比乘以灯光得出反射光
vec3 specular = specularAmount*lightColor;
4、得出物体的光照
FragColor = vec4((ambientColor+diffuse+specular)*objColor,1.0f);