java - 着色器中使用的制服处于非 Activity 状态

标签 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 处于非 Activity 状态?

最佳答案

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

gl_Position = projectionMatrix * world;

您的意思可能是 projectionMatrix * camera。否则,GLSL 编译器会发现 camera 没有被使用并优化它,这意味着 viewMatrix 也不再被使用。未使用的制服不被视为活跃,这会导致您的困境。

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

关于java - 着色器中使用的制服处于非 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20498731/

相关文章:

c++ - C/C++ 有效指针,但获取 EXC_BAD_ACCESS 和 KERN_INVALID_ADDRESS

c++ - 对于 OpenGL 着色器,您将如何在 C++ 中编写接受所有类型的统一函数?

java - 带有内联图像的 JEditorPane

java - 我可以将 MongoDB 用于 ActiveMQ 主/从架构吗?

java - 如何创建与他人共享的 URL

glsl - 使用 smoothstep() 和 dot() 或 length() 绘制圆会产生不同的结果

c++ - 如何使用 GLSL 向简单三角形添加旋转?

java - 在 Maven 中,我如何发现依赖于特定依赖项的内容?

Ubuntu 13.10 中的 C 编译错误,可能是 makefile 中的错误

c++ - 如何修复 "unresolved external symbol _gladLoadGLLoader referenced in function _main"和 "unresolved external symbol _glad_glViewport"?