0

2 つのモデルがあり、それぞれが別々の VBO に保存されています。私がやりたいのは、一方を回転させると他方が回転するようにそれらをリンクし、他方を最初のモデルに接続したままにすることです。私が今行っているのは、3 つのモデル マトリックスを用意することです。1 つはオブジェクト全体用のメイン マトリックスで、もう 1 つは各モデル用で、メイン マトリックスに関連して変換できるようにします。ただし、これを行うと、2 つのモデルを回転させると切断されます。2 つのモデルをリンクして、回転または移動中に接続を維持するにはどうすればよいですか?

4

2 に答える 2

0

通常、次のようにします。

glLoadMatrix( mainMatrix );
glPushMatrix();
glMultMatrix( firstModelMatrix );
drawFirstModel();
glPopMatrix();
glMultMatrix( secondModelMatrix );
drawSecondModel();

もちろん、firstModelMatrixまたはを変更するsecondModelMatrixと、2つのモデルが切断されてレンダリングされる可能性があります。しかし、それよりも、これはあなたが意図していることです。接続を維持したい場合は、を変更するだけmainMatrixです。

ただし、これらの行列演算は非推奨であることに注意してください。それでも、コードからトリックを取得できるはずです。

編集:あなたが頭と体を持っていると仮定します。頭を回転させたい。ヘッドマトリックスの計算方法よりも、平行移動と回転をどの順序で適用するかが特に重要です。私は、今あなたはこのようなものを持っていると思います:

HeadMatrix = Rotation * Translation

しかし、あなたが必要とするのは、頭を体の上に保つためにこれです:

HeadMatrix = Translation * Rotation
于 2013-01-25T16:10:59.627 に答える
0

モデルが 2 つありません。あなたが持っているのはバイトの2つのバッファだけで、バッファ内のデータにアクセスして三角形として解釈するglDrawArraysまたはglDrawElements呼び出しと組み合わせた場合にのみジオメトリになります。

OpenGL は「モデル」が何であるかを知りません。OpenGL は、シーンやモデル間の関係を維持しません。これは、ポイント、ライン、または三角形を一度に 1 つずつフレーム バッファに描画するだけであり、他のどのポイント、ライン、または三角形が以前に描画されたかを思い出すことはありません。

シーンが必要な場合は、自分で維持する必要があります。

于 2013-01-26T01:23:35.243 に答える