【发布时间】:2015-04-10 11:53:30
【问题描述】:
我在一个文本文件中有以下矩阵,该矩阵带入一个浮点缓冲区,然后将其存储到 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 将矩阵更改为什么格式?有区别吗,我应该用转置功能改回来吗?
【问题讨论】:
-
您确定您的
num数组按列主要顺序保存浮点数吗?因为根据文档,Matrix4f.load方法将按列主要顺序加载数组。 -
@Nitram 是的,因为如果您看到我用于调试的 println,它会打印出pastebin.com/rNC5rRD1(这是正确的顺序)。翻转功能会不会弄乱顺序?
-
打印输出显示您的列表主要是行而不是列主要。 Column Major 表示该列是外循环。因此,您在切换到下一列之前获取一列中的所有行。
-
嗯,是的。您的列表是行专业的,
Matrix4f的load函数需要列专业。编辑:嘿,删除评论是卑鄙的! :P -
@Nitram 好的,现在我明白为什么矩阵的顺序不同了,那么我应该按原样加载它还是使用转置函数?应该使用哪个,这样我就可以使用这个变换矩阵来乘以一个顶点进行变换。有没有办法以正确的顺序将它从浮点数加载到矩阵而不使用转置函数来修复它?抱歉,公共 Wifi...!