我正在学习 Phong 着色并遇到一些困惑:
- Phong 着色中光线位置的坐标是多少? (模型空间、模型 View 或其他什么?)
- 根据这个: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?
最佳答案
- 坐标系与阴影类型无关。您可以在模型空间、世界空间、 View 空间或任何您想要的组合空间中进行 phong 着色。唯一重要的是确保公式中所有相关 vector 都变换到同一个空间。
- 在这种情况下,看起来着色是在 View 空间中完成的。在 View 空间中,顶点坐标是相对于眼睛定义的。因此,从顶点到眼睛的 vector (eyeVec) 是从眼睛到顶点的 vector (vVertex) 的负值。
关于c - phong 着色中的灯光位置坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10877147/