簡體   English   中英

如何將環境光編碼到片段着色器中? OpenGL

[英]How to code ambient light into a fragment shader? OpenGL

我正在嘗試弄清楚如何使用片段着色器將環境光正確添加到我的場景中,但結果似乎並不正確。 我不太確定如何正確地將環境光添加到我的場景中,但這就是我的片段着色器當前的樣子。

#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); 
} 

任何關於我是否做錯了方程式或者我是否完全偏離的幫助將不勝感激。

這是我的場景目前的樣子,燈光看起來不太逼真。 目前現場進展

環境光是恆定的。 只需將它添加到片段顏色 - 將光因子與 object 的顏色相乘:

vec3 color = vec3(1.0);

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

FragColour = vec4(finalColor, 1); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM