2 つのモデルがあり、それぞれが別々の VBO に保存されています。私がやりたいのは、一方を回転させると他方が回転するようにそれらをリンクし、他方を最初のモデルに接続したままにすることです。私が今行っているのは、3 つのモデル マトリックスを用意することです。1 つはオブジェクト全体用のメイン マトリックスで、もう 1 つは各モデル用で、メイン マトリックスに関連して変換できるようにします。ただし、これを行うと、2 つのモデルを回転させると切断されます。2 つのモデルをリンクして、回転または移動中に接続を維持するにはどうすればよいですか?
2 に答える
通常、次のようにします。
glLoadMatrix( mainMatrix );
glPushMatrix();
glMultMatrix( firstModelMatrix );
drawFirstModel();
glPopMatrix();
glMultMatrix( secondModelMatrix );
drawSecondModel();
もちろん、firstModelMatrix
またはを変更するsecondModelMatrix
と、2つのモデルが切断されてレンダリングされる可能性があります。しかし、それよりも、これはあなたが意図していることです。接続を維持したい場合は、を変更するだけmainMatrix
です。
ただし、これらの行列演算は非推奨であることに注意してください。それでも、コードからトリックを取得できるはずです。
編集:あなたが頭と体を持っていると仮定します。頭を回転させたい。ヘッドマトリックスの計算方法よりも、平行移動と回転をどの順序で適用するかが特に重要です。私は、今あなたはこのようなものを持っていると思います:
HeadMatrix = Rotation * Translation
しかし、あなたが必要とするのは、頭を体の上に保つためにこれです:
HeadMatrix = Translation * Rotation
モデルが 2 つありません。あなたが持っているのはバイトの2つのバッファだけで、バッファ内のデータにアクセスして三角形として解釈するglDrawArraysまたはglDrawElements呼び出しと組み合わせた場合にのみジオメトリになります。
OpenGL は「モデル」が何であるかを知りません。OpenGL は、シーンやモデル間の関係を維持しません。これは、ポイント、ライン、または三角形を一度に 1 つずつフレーム バッファに描画するだけであり、他のどのポイント、ライン、または三角形が以前に描画されたかを思い出すことはありません。
シーンが必要な場合は、自分で維持する必要があります。