Floatbuffer 到 Matrix4f 的错误顺序 LWJGL

Floatbuffer to Matrix4f Wrong Order LWJGL

我在文本文件中有以下矩阵,将其放入浮点缓冲区,然后将其存储到 LWJGL 中的 Matrix4f class 中。这是文本文件中的矩阵

1.0, 0.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, -1.0, 0.0, 0.0,
0.0, 0.0, 0.03641997277736664, 1.0

当我像这样将浮点缓冲区添加到矩阵时

   System.out.println("------------");
   for(float x : nums){
       System.out.println(x);
   }
   System.out.println("------------");
   Matrix4f matrix4f = new Matrix4f();
   FloatBuffer buffer = BufferUtils.createFloatBuffer(nums.length);
   buffer.put(nums);
   buffer.flip();
   matrix4f.load(buffer);

其中 nums 是值的浮点数组。当我打印出 Matrix4f class 时,它显示

   1.0 0.0 0.0 0.0
   0.0 0.0 -1.0 0.0
   0.0 1.0 0.0 0.036419973
   0.0 0.0 0.0 1.0

但是如果我在 Matrix4f class 中使用转置函数,它会回到

1.0, 0.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, -1.0, 0.0, 0.0,
0.0, 0.0, 0.03641997277736664, 1.0

当我创建 Matrix4f 时,为什么 LWJGL 会更改值的顺序 I? 文本文件以列主矩阵顺序保存矩阵,这正是 OpenGl 所需要的. LWJGL 将矩阵更改为什么格式?有区别吗,要不要用transpose函数改回来?

好的,这就是答案:

Matrix4f class 的 load 函数期望浮点值是主列。

所以如果你的矩阵是这样的:

11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44

列优先顺序为:11 21 31 41 12 22 ...

读取文件的更自然顺序是行优先。评论表明你确实做到了。

我的建议是你就这样吧。将文件加载为主要列比转置矩阵更实惠。