Floatbuffer到Matrix4f错误订单LWJGL

时间:2015-04-10 11:53:31

标签: java opengl matrix lwjgl

我在文本文件中有以下矩阵,它引入浮动缓冲区,然后将其存储到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是值的float数组。当我打印出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

为什么LWJGL在创建Matrix4f时会改变值的顺序?文本文件将矩阵保存在colum主矩阵排序中,这就是我需要的OpenGl。 LWJGL将矩阵更改为什么格式?它是否会产生影响,我应该使用转置功能将其更改回来吗?

1 个答案:

答案 0 :(得分:3)

好的,这就是答案:

load类的Matrix4f函数需要浮点值为列主要值。

所以,如果您的矩阵是这样的:

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

列主要订单为:11 21 31 41 12 22 ...

阅读文件的更自然的顺序是行专业。评论显示你确实做到了。

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