作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试让我所有的灯光进入我正在使用的 GLSL 着色器的眼睛空间,但我遗漏了一些东西。我不知道我错过了什么。这是我的着色器代码,以防它导致问题...
varying vec3 normal, lightDir;
uniform vec3 lightPos;
//gl_Normal: Object Space
//gl_Vertex: Object Space
//lightDir: Eye Space
void main()
{
vec4 vert;
normal = gl_NormalMatrix * gl_Normal;
vert = gl_ModelViewMatrix * gl_Vertex;
lightDir = normalize(vec3(vec4(lightPos, 1.0) - vert));
gl_Position = ftransform();
gl_FrontColor = gl_Color;
}
如果不是那样,那一定是我改变光位置 CPU 端的方式,所以这就是我正在做的......
eye = inverse(camera->climb(root));
glMultMatrixf(value_ptr(eye));
glUniform3fv(sLight, 1, value_ptr(vec3(eye * light->climb(root) * vec4())));
我程序中的其他所有内容都运行良好,但这里有一些我没有发现的地方。注意:camera->climb(root) 产生世界空间中相机场景节点的转换。 light->climb(root) 产生世界空间中灯光场景节点的变换。
编辑:我的确切症状是我的光总是出现在眼睛空间的原点(与相机位于同一位置)。
最佳答案
从评论中移走答案:
您乘以得到光眼空间位置的原点坐标应该是 vec4(0,0,0,1) 而不是 vec4(0,0,0,0)。
关于c++ - 转换为眼空间的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195302/
我是一名优秀的程序员,十分优秀!