如何将环境光编码到片段着色器中?OpenGL

41ik7eoe  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(196)

我尝试着找出如何使用片段着色器将环境光正确地添加到我的场景中,但似乎并不正确。我不太确定如何将环境光正确地添加到我的场景中,但这是我的片段着色器目前的样子。


# version 330

uniform vec4 uLightPosition; 
uniform vec4 uEyePosition;
uniform vec3 uAmbientLight;

in vec4 oNormal; 
in vec4 oSurfacePosition; 

out vec4 FragColour; 

void main()  
{  
 vec4 lightDir = normalize(uLightPosition - oSurfacePosition); 
 vec4 eyeDirection = normalize(uEyePosition - oSurfacePosition);
 vec4 scatteredLight = vec4(vec3(uAmbientLight),1);
 vec4 reflectedVector = reflect(-lightDir, oNormal);

 float diffuseFactor = max(dot(oNormal, lightDir), 0); 
float specularFactor = pow(max(dot(reflectedVector, eyeDirection), 0.0), 30); 
float ambientFactor = max(dot(oNormal, scatteredLight),0);

 FragColour = vec4(vec3(diffuseFactor + specularFactor + ambientFactor), 1); 
}

如果你能帮我解出一个方程是错的还是完全错了,我将不胜感激。
这是我的场景目前的样子,灯光看起来不是很逼真。Current Progress of Scene

nom7f22z

nom7f22z1#

环境光是恒定的。只需将其添加到片段颜色中-将光线因子与对象的颜色相乘:

vec3 color = vec3(1.0);

vec3 finalColor = 
    color * uAmbientLight +
    color * diffuseFactor +
    color * specularFactor;

FragColour = vec4(finalColor, 1);

相关问题