无法将Matrix赋予Shader统一

时间:2014-09-20 23:05:51

标签: opengl matrix shader lwjgl

我目前在我的enigne中实现矩阵。使用标准的glTranslate和glRotate,然后在着色器中使用ftransform()。手动完成。

我如何将黑客赋予着色器:

public static void loadMatrix(int location, Matrix4f matrix)
{
    FloatBuffer buffer = BufferUtils.createFloatBuffer(16);
    matrix.store(buffer);
    buffer.flip();
    glUniformMatrix4(location, false, buffer);
}

发送viewMatrix:

shaderEngine.loadMatrix(glGetUniformLocation(shaderEngine.standard, "viewMatrix"), camera.viewMatrix);
    shaderEngine.loadMatrix(glGetUniformLocation(shaderEngine.obj, "viewMatrix"), camera.viewMatrix);
    System.out.println(camera.viewMatrix.toString());

在着色器中我得到它:

uniform mat4 viewMatrix;

并在着色器主要设置碎片颜色:

gl_FragColor = vec4(viewMatrix[0][3] / -256,0,0,1);

哪个是BLACK(所以viewMatrix [0] [3] == 0),而我在java中的矩阵输出如下所示:

1.0 0.0 0.0 -128.0
0.0 1.0 0.0 -22.75
0.0 0.0 1.0 -128.0
0.0 0.0 0.0 1.0

2 个答案:

答案 0 :(得分:1)

您的困惑似乎来自数组下标如何处理GLSL中矩阵的元素。第一个下标是列,第二个是行。

因此,除非您转置矩阵,否则第1列第4行== 0.0

如果您转置矩阵或交换下标,您将获得 -128.0

顺便说一下,glUniformMatrix4 (...)调用中的第二个参数允许你在GLSL获得它之前转置矩阵。这将允许您将所有内容视为行专业,如果这对您来说更自然。

答案 1 :(得分:0)

我的问题是,当使用的程序为0时,我正在给着色器发送矩阵。