定向光變換到攝像機空間我有照明下面GLSL代碼:如何GLSL
uniform vec3 lightDir; // Parallel light
uniform float ambient;
uniform vec3 lightColour;
void main()
{
gl_Position = ftransform();
vec3 eyeNormal = normalize(gl_NormalMatrix * gl_Normal);
float intensity = max(ambient, dot(eyeNormal, normalize(-lightDir));
gl_FrontColor = gl_Color * vec4(lightColour, 1.0) * intensity;
}
的光載體在世界空間中指定。我使用gluLookAt
設置相機的方向和位置。由於OpenGL假定光矢量位於相機空間中,因此光線會隨相機移動,而不是保持固定的方向。
我試過在調用gluLookAt
之前和之後激活着色器和設置光矢量,但是我得到了相同的效果。我要做什麼才能正確轉換光矢量?
我試圖通過gl_NormalMatrix着色器乘以lightDir,也沒有效果。我試着乘以gl_ModelViewMatrix,像這樣:'vec3 lightEyeDir = normalize(vec3(gl_ModelViewMatrix * vec4(-lightDir,1.0)));' 這樣做完全消除了彌散貢獻。 要在程序代碼中轉換光照矢量,我會做什麼轉換? – Aaron 2009-12-11 23:36:06
通過逆模型矩陣轉換光的方向,您應該獲得模型空間燈。 – Tryum 2009-12-14 08:38:50
NormalMatrix只是ModelView矩陣的旋轉部分(沒有平移和縮放)。將光線與它相乘意味着還可以應用模型旋轉(並且您不需要)。 – MaR 2010-03-01 12:27:20