gpt4 book ai didi

opengl - 将矩阵传递给 glsl 是行不通的?

转载 作者:行者123 更新时间:2023-12-04 20:52:54 24 4
gpt4 key购买 nike

我目前使用 lwjgl 和编程 glsl 1.20。

这是尝试将 4x4 浮点矩阵发送到着色器的代码的样子:

    int normalMatrixLocation = ARBShaderObjects.glGetUniformLocationARB(handlers.ShaderHandler.get().getShader("sphere"), "normalMatrix");
tempFloatBuffer = BufferUtils.createFloatBuffer(16);
tempFloatBuffer.put(helpers.Matrix.doubleToFloat4x4(normalMatrix.getArray()));
tempFloatBuffer.rewind();
ARBShaderObjects.glUniformMatrix4ARB(normalMatrixLocation, false, tempFloatBuffer);

辅助函数如下所示:
    public static float[] doubleToFloat4x4(double[][] dArray) {
float[] newFloat = new float[16];
for(int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
newFloat[j+4*i] = (float)dArray[i][j];
}
}
return newFloat;
}

在着色器中,我有以下内容,以便我能够在着色器的不同功能中使用它:
uniform mat4 normalMatrix;

虽然这个制服总是一个空的 4x4 矩阵......

我究竟做错了什么?

最佳答案

uniform mat4x4 matrixName;

据我所知,它是“mat4x4”而不是“mat4”。

此外,发送浮点缓冲区需要使用字节缓冲区和 ByteOrder 类。我的代码看起来像:
 qbuffer.rewind();

ByteBuffer temp = ByteBuffer.allocateDirect(64);
temp.order(ByteOrder.nativeOrder());

int qLocation = ARBShaderObjects.glGetUniformLocationARB(shaderProgram, "q");
ARBShaderObjects.glUniformMatrix4ARB(qLocation,
false, (FloatBuffer)temp.asFloatBuffer().put(qbuffer).flip());

令人费解,是的,但它确保了本地秩序。

关于opengl - 将矩阵传递给 glsl 是行不通的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com