我在一个文本文件中有以下矩阵,它带入一个浮点缓冲区,然后将它存储到 LWJGL 中的 Matrix4f 类中。这是文本文件中的矩阵

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 类时,它显示
   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 类中使用转置函数,它会回到
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 将矩阵更改为什么格式?它有什么不同,我应该使用转置功能将其改回来吗?

最佳答案

好的,这里是答案:
load 类的 Matrix4f 函数期望浮点值是列主要的。

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

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

列主序为:11 21 31 41 12 22 ...
读取文件的更自然的顺序是行主要的。评论表明你正是这样做的。

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

关于java - Floatbuffer 到 Matrix4f 错误顺序 LWJGL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29560782/

10-12 19:19