我有以下着色器: 我的片段着色器:
#version 110
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
void main() {
gl_FragColor = vec4(1, 0, 0, 1);
}
我的顶点着色器:
#version 110
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
attribute vec3 vertex;
void main() {
vec4 world = modelMatrix * vec4(vertex, 1);
vec4 camera = world * viewMatrix;
gl_Position = projectionMatrix * world;
}
他们编译和链接都很好。当我打印出我活跃的制服时,我得到了
projectionMatrix
modelMatrix
但没有viewMatrix。当我尝试使用glGetUniformLocation获取Uniform时,我可以获得projectionMatrix,modelMatrix和我的顶点属性,那么为什么viewMatrix不活动?
答案 0 :(得分:6)
问题在于顶点着色器的最后一行:
gl_Position = projectionMatrix * world;
你可能意味着projectionMatrix * camera
。否则,GLSL编译器会看到camera
未被使用并将其优化掉,这意味着不再使用viewMatrix
。未使用的制服不被认为是活跃的,这会导致你的困境。
注意:您的观看转换也是向后的。您可能需要vec4 camera = viewMatrix * world
。