Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 浮动缓冲区到Matrix4f顺序错误LWJGL_Java_Opengl_Matrix_Lwjgl - Fatal编程技术网

Java 浮动缓冲区到Matrix4f顺序错误LWJGL

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){

我在一个文本文件中有下面的矩阵,它被带到一个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){
       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。。。!太好了,很抱歉给你带来困惑,我只是想了解一下订单之间的区别。太好了!我一直在努力解决同一个问题,直到我找到这篇文章,我一直都在盯着这个问题。非常感谢!