转变为眼睛空间的问题

时间:2012-06-25 18:40:04

标签: c++ glsl shader transformation space

我一直在努力让我所有的灯都进入我正在使用的GLSL着色器的眼睛空间,但我遗漏了一些东西。我不知道我错过了什么。这是我的着色器代码,以防它导致问题...

varying vec3 normal, lightDir;

uniform vec3 lightPos;

//gl_Normal: Object Space
//gl_Vertex: Object Space
//lightDir: Eye Space

void main()
{
    vec4 vert;
    normal = gl_NormalMatrix * gl_Normal;
    vert = gl_ModelViewMatrix * gl_Vertex;
    lightDir = normalize(vec3(vec4(lightPos, 1.0) - vert));

    gl_Position = ftransform();
    gl_FrontColor = gl_Color;
}

如果不是这样,那么它一定是我改变CPU位置的方式,所以这就是我正在做的......

eye = inverse(camera->climb(root));
glMultMatrixf(value_ptr(eye));
glUniform3fv(sLight, 1, value_ptr(vec3(eye * light->climb(root) * vec4())));

我的程序中的其他所有内容都完美无缺,但我在这里找不到一些东西。注意:camera-> climb(root)会在世界空间中生成摄像机场景节点的变换。 light-> climb(root)产生光在世界空间中的场景节点的变换。

编辑:我所拥有的确切症状是我的光线总是出现在眼睛空间的原点(与相机位于同一位置)。

1 个答案:

答案 0 :(得分:2)

要从评论中移除答案:

为了得到光线的眼睛空间位置而相乘的原点坐标应该是vec4(0,0,0,1)而不是vec4(0,0,0,0)。