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 ...
读取文件的更自然顺序是行优先。评论表明你确实做到了。
我的建议是你就这样吧。将文件加载为主要列比转置矩阵更实惠。
我在文本文件中有以下矩阵,将其放入浮点缓冲区,然后将其存储到 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 ...
读取文件的更自然顺序是行优先。评论表明你确实做到了。
我的建议是你就这样吧。将文件加载为主要列比转置矩阵更实惠。