Java 浮动缓冲区到Matrix4f顺序错误LWJGL
我在一个文本文件中有下面的矩阵,它被带到一个floatbuffer中,然后将它存储到LWJGL中的Matrix4f类中。这是文本文件中的矩阵Java 浮动缓冲区到Matrix4f顺序错误LWJGL,java,opengl,matrix,lwjgl,Java,Opengl,Matrix,Lwjgl,我在一个文本文件中有下面的矩阵,它被带到一个floatbuffer中,然后将它存储到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){
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
当我创建矩阵4f时,为什么LWJGL会更改值的顺序I?文本文件以列主矩阵顺序保存矩阵,这是我在OpenGl中需要的。LWJGL将矩阵更改为什么格式?这有区别吗?我应该使用转置函数将其更改回吗?好的,下面是答案:
Matrix4f
类的load
函数要求浮点值为主列
如果你的矩阵是这样的:
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
列的主要顺序是:112131411222…
读取文件的更自然的顺序是行主顺序。评论显示你就是这么做的
我的建议是你就这样离开。将文件作为主列加载比转置矩阵更经济。您确定
num
数组按主列顺序保存浮点值吗?因为根据文档,Matrix4f.load
方法将按列的主要顺序加载数组。@Nitram是的,因为如果您看到用于调试的println,它会打印出来(这是正确的顺序)。翻转功能是否可能弄乱了顺序?打印输出显示您的列表是行主列表,而不是列主列表。Column major表示该列是外部循环。因此,在切换到下一列之前,先获取列中的所有行。是的,确实如此。您的列表是row major,而Matrix4f
的load
函数需要使用column major。编辑:嘿,删除评论是卑鄙的P@Nitram好了,现在我明白了为什么矩阵的顺序不同了,我应该如何加载它,还是使用转置函数?应该使用它,这样我可以使用这个变换矩阵乘以一个顶点进行变换。有没有一种方法可以在不使用转置函数的情况下,以正确的顺序将其从浮点加载到矩阵?对不起,公共Wifi。。。!太好了,很抱歉给你带来困惑,我只是想了解一下订单之间的区别。太好了!我一直在努力解决同一个问题,直到我找到这篇文章,我一直都在盯着这个问题。非常感谢!