1

だから私は物事をよりよく理解することができます、私は代わりに私自身の行列を作成してglMultMatrixf()を使用しているgl変換関数(glTranslatef / glRotatefなど)を呼び出さないようにしています。

x / y / z回転用に作成したマトリックスは問題なく機能しているように見えますが、変換マトリックスはメッシュのすべての頂点を1つの軸に折りたたんでいるように見えます。

行列を渡すことを考えると、私はベースから外れていますか?

    { 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)を実行するのと同じですか?(私はコラム専攻です。すべてが逆になっていないことを確認するために、上記のマトリックスを転置しましたが、それでも機能しませんでした。すべてを別の軸に平坦化したようです。)

どこかに正規化ステップがありませんか?ISの場合、行列を正規化することをお勧めします。

私の人々にいくつかの知識を落としてくれてありがとう!

これらは私の回転行列です: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 }; 

YAxis

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

ZAxis

 { (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 に答える