phong着色中的光位置坐标

时间:2012-06-04 06:28:16

标签: c opengl glsl

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

  1. Phong阴影的光位置坐标是多少? (模型空间,模型视图还是其他什么?)
  2. 根据这个:http://www.ozone3d.net/tutorials/glsl_lighting_phong_p2.php
  3. 顶点着色器是:

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

    为什么eyeVec = -vVertex?

1 个答案:

答案 0 :(得分:8)

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