在 OpenGL 中从照明和颜色材料中获得什么颜色?

What color is obtained from lighting and color materials in OpenGL?

嗨,我有一个问题。

我正在尝试了解 OpenGL 中的照明和 material。

但我不知道照明如何影响物体的颜色和反射。

这是我找到的光照公式:

result Light = ambient + diffuse * (intensity) + specular

这是一个用法示例:

ambient = 64,64,64

diffuse = 192,192,192

specular = 32,32,32 

intentisy = 0.5 

Light = 64 + 192*0.5+ 32 = 192

Result Light = (192,192,192)

下面是它如何组合在一起形成最终输出:

Object Color = (Or,Og,Ob)

Material reflect = (Mr,Mg,Mb)

Real Color = (Or * Mr , Og * Mg ,Ob * Mb )

对于我的问题,

不知道"result light"对"real color"有什么影响? 更具体地说:最终像素输出如何使用所有光线、material 和对象颜色输入来实现。

有点模棱两可,因为 real 的范围从基于物理的渲染技术到使用各种自定义照明着色器的不同着色。

根据 "Material" 我们将有一个使用 "Result Light" 的不同方程。

以下是一些基本材料:

环境光:

float ambientStrength = 0.1f;
vec3 ambient = ambientStrength * lightColor;

vec3 result = ambient * objectColor;
color = vec4(result, 1.0f);

漫射照明:

in vec3 FragPos;  // input
vec3 norm = normalize(Normal);

vec3 lightDir = normalize(lightPos - FragPos);
float diff = max(dot(norm, lightDir), 0.0);

vec3 diffuse = diff * lightColor;
vec3 result = (ambient + diffuse) * objectColor;
color = vec4(result, 1.0f);

镜面光照:

float specularStrength = 0.5f;
vec3 viewDir = normalize(viewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm); 


float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
vec3 specular = specularStrength * spec * lightColor; 

vec3 result = (ambient + diffuse + specular) * objectColor;
color = vec4(result, 1.0f);

综合 Phong:

回收上面的代码。

Source