我有以下着色器: 我的片段着色器:
#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 处于非 Activity 状态?
最佳答案
问题出在顶点着色器的最后一行:
gl_Position = projectionMatrix * world;
您的意思可能是 projectionMatrix * camera
。否则,GLSL 编译器会发现 camera
没有被使用并优化它,这意味着 viewMatrix
也不再被使用。未使用的制服不被视为活跃,这会导致您的困境。
注意:您的 View 变换也是向后的。您可能需要 vec4 camera = viewMatrix * world
。
关于java - 着色器中使用的制服处于非 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20498731/