c - phong 着色中的灯光位置坐标

标签 c opengl glsl

我正在学习 Phong 着色并遇到一些困惑:

  1. Phong 着色中光线位置的坐标是多少? (模型空间、模型 View 或其他什么?)
  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?

最佳答案

  1. 坐标系与阴影类型无关。您可以在模型空间、世界空间、 View 空间或任何您想要的组合空间中进行 phong 着色。唯一重要的是确保公式中所有相关 vector 都变换到同一个空间。
  2. 在这种情况下,看起来着色是在 View 空间中完成的。在 View 空间中,顶点坐标是相对于眼睛定义的。因此,从顶点到眼睛的 vector (eyeVec) 是从眼睛到顶点的 vector (vVertex) 的负值。

关于c - phong 着色中的灯光位置坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10877147/

相关文章:

c - 没有任何 cpp 选项的系统调用 stat() 转换为 stat64()

php - 在 PHP 中应用 FXAA?

c - 指向字符串的指针数组,发生段错误

java - OpenGL 的理想显示同步速率

c++ - 在 GPU 上执行计算时 OpenGL 窗口没有响应

ubuntu - 是否仍然可以访问已弃用/删除的 OpenGL 函数?

c++ - OpenGL Shader Program使用时导致屏幕变黑

three.js - 如何为这个简单的着色器设置动画

c - gcc 实际上是否将原型(prototype)视为函数并且它们的参数是否分配了内存?

c - 如何释放结构指针内的字符指针的内存