着色器中使用的统一处于非活动状态

时间:2013-12-10 15:41:28

标签: java opengl glsl

我有以下着色器: 我的片段着色器:

#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不活动?

1 个答案:

答案 0 :(得分:6)

问题在于顶点着色器的最后一行:

gl_Position = projectionMatrix * world;

你可能意味着projectionMatrix * camera。否则,GLSL编译器会看到camera未被使用并将其优化掉,这意味着不再使用viewMatrix。未使用的制服不被认为是活跃的,这会导致你的困境。

注意:您的观看转换也是向后的。您可能需要vec4 camera = viewMatrix * world