定向光变换到摄像机空间我有照明下面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