1

所以我可以更好地理解事情,我试图摆脱调用 gl 转换函数(glTranslatef / glRotatef 等),而是创建自己的矩阵并使用 glMultMatrixf()。

我为 x/y/z 旋转创建的矩阵似乎完美无缺,但我的平移矩阵似乎将我的网格的所有顶点折叠成一个轴。

我是否认为传递矩阵是错误的:

    { 1.0f,0.0f,0.0f,x
      0.0f,1.0f,0.0f,y,
      0.0f,0.0f,1.0f,z,
      0.0f,0.0f,0.0f,1.0f };

到 glMultMatrixf 和 glTranslatef(x,y,z) 一样吗?(我是专栏专业的。为了确保我没有完全倒退,我转置了上面的矩阵,但它仍然没有用。似乎把所有东西都压平到不同的轴上。)

我在某处错过了标准化步骤吗?什么时候标准化你的矩阵是个好主意。

提前感谢您对我的一些知识!

这些是我的旋转矩阵:XAxis

{ 1.0f, 0.0f, 0.0f, 0.0f,
  0.0f, (float) Math.cos(x), (float) -Math.sin(x), 0.0f,
  0.0f, (float) Math.sin(x), (float) Math.cos(x), 0.0f,
  0.0f, 0.0f, 0.0f, 1.0f }; 

Y轴

{ (float) Math.cos(y),0.0f,(float) Math.sin(y),0.0f,
   0.0f,1.0f,0.0f,0.0f,
  (float) -Math.sin(y),0.0f,(float) Math.cos(y),0.0f,
   0.0f,0.0f,0.0f,1.0f };

Z轴

 { (float) Math.cos(z),(float) -Math.sin(z),0,0,
   (float) Math.sin(z),(float) Math.cos(z),0,0,
   0.0f,0.0f,1.0f,0.0f,
   0.0f,0.0f,0.0f,1.0f };
4

1 回答 1

2

对我来说,这看起来是换位的。元素顺序应该是:

   0   4   8   12
   1   5   9   13
   2   6   10  14
   3   7   11  15

但是你在元素 3 中有 x,它应该是元素 12(y 和 z 相同)。

===编辑===

抱歉刚刚注意到你已经说过你转置了它。但是 x 绝对应该在元素 12 中,只是为了为您确认。我认为你不必对矩阵做任何额外的事情来让它工作。

于 2012-04-26T17:15:36.763 回答