phong着色中的光位置坐标

Bìn*_*yên 4 c opengl glsl

我正在学习Phong阴影并且有些困惑:

  1. Phong着色中光位置的坐标是多少?(模型空间,modelview或还有什么?)
  2. 根据这个:http://www.ozone3d.net/tutorials/glsl_lighting_phong_p2.php:

顶点着色器是:

varying vec3 normal, lightDir, eyeVec;

void main()
{   
    normal = gl_NormalMatrix * gl_Normal;
    vec3 vVertex = vec3(gl_ModelViewMatrix * gl_Vertex);

    lightDir = vec3(gl_LightSource[0].position.xyz - vVertex);
    eyeVec = -vVertex;

    gl_Position = ftransform();
}
Run Code Online (Sandbox Code Playgroud)

为什么eyeVec = -vVertex?

Tim*_*Tim 8

  1. 坐标系与着色类型无关.您可以在模型空间,世界空间,视图空间或任何想要的空间中进行phong着色.唯一重要的是确保公式中的所有相关向量都转换为相同的空间.
  2. 在这种情况下,它看起来像是在视图空间中完成着色.在视图空间中,顶点坐标是相对于眼睛定义的.因此,从顶点到眼睛的矢量(eyeVec)是从眼睛到顶点(vVertex)的矢量的否定.