因此,我可以更好地理解事情,我试图摆脱调用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)相同吗? (我是专栏专业的。为确保没有倒退,我调换了上面的矩阵,它仍然没有用。只是似乎将所有内容展平到了另一个轴上。)

我在某处缺少标准化步骤吗?何时是将矩阵归一化的好主意。

提前感谢您为我提供了一些知识!

这些是我的轮换矩阵:
X轴

{ 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 };

最佳答案

这看起来对我来说是转置的。元素顺序应为:

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


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

===编辑===

抱歉,刚刚注意到您已经说过移调它。但是x肯定应该在元素12中,只是为了为您确认。我认为您无需对矩阵做任何额外的操作即可使其工作。

10-02 04:21