最经典的模型被称为冯氏光照模型,分为环境光照,漫反射和镜面反射
环境光照乘以常量环境因子和物体颜色,作为最终片段颜色
float ambientStrength = 0.1f;
vec3 ambient = ambientStrength*lightColor;
vec3 result = ambient*objectColor;
漫反射光照指的是根据光源和物体的夹角不同,亮度也不同进行的计算
vec3 lightDir = normalize(lightPos-FragPos);//计算光照向量
float diff = max(dot(norm,lightDir),0.0f);//判断是否是锐角,并算出cos值
vec3 diffuse = diff*lightColor;//用cos值乘以光照向量即为最终漫反射向量
镜面光照是指根据物体本身的属性来进行反光的程度
vec3 viewDir = normalize(viewPos-FragPos);//计算目光向量
vec3 reflectDir = reflect(-lightDir,norm);//计算反射向量
float spec = pow(max(dot(viewDir,reflectDir),0.0f)32.0f);//根据最后的32参数计算物体的镜面反射程度
三个光照因素都算出来了之后,相加在乘以物体光照即为最终的颜色
vec3 result = (ambient+diffuse+specular)*objectColor;