【问题标题】:Light position coordinate in phong shadingphong 着色中的灯光位置坐标
【发布时间】:2012-06-04 14:35:52
【问题描述】:

我正在学习 Phong 着色并有些困惑:

  1. Phong 着色中灯光位置的坐标是什么? (模型空间、模型视图或其他什么?)
  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();
}

为什么 eyeVec = -vVertex?

【问题讨论】:

    标签: c opengl glsl


    【解决方案1】:
    1. 坐标系与着色类型无关。您可以在模型空间、世界空间、视图空间或任何您想要的合成空间中进行 phong 着色。唯一重要的是确保公式中的所有相关向量都转换到同一个空间中。
    2. 在这种情况下,似乎正在视图空间中进行着色。在视图空间中,顶点坐标是相对于眼睛定义的。所以从一个顶点到眼睛的向量(eyeVec)是从眼睛到顶点的向量(vVertex)的否定。

    【讨论】:

    • 正如 Tim 所写...所有这些向量必须在相同的空间中。
    • 感谢蒂姆快速详细的回答!
    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2023-03-26
    • 2023-04-05
    • 1970-01-01
    • 2016-02-01
    • 2019-10-21
    • 2014-07-30
    相关资源
    最近更新 更多