1

openGLでは、いくつかのポリゴンを作成し、関数'pushMatrix()'によってグループとして接続してから、それらを回転させて1つのオブジェクトとして移動することができます。

xnaでそれを行う方法はありますか?3つのポリゴンがあり、それらをすべてグループとして回転および移動したい場合、どうすればよいですか?

編集:私はPrimitives Shapesを使用して、バスケットボール選手のスケルトンを作成しています。

ゲームはバスケットへのシュートアウトゲームのみになります。つまり、プレーヤーは

彼の腕を動かすだけです。

腕のパーツを完全に制御する必要があります。そのためには、移動する必要があります。

原始的な形から作られた腕は調和的に形作られています。それをするために、

マトリックス変換を実行するためにMatrixStackを実装しようとしましたが、

失敗。何か提案はありますか?</ p>

4

1 に答える 1

3

XNAまたはグラフィックス開発全般にどれだけ精通しているのか、あなたの質問からはよくわからないので、基本的な言葉でこれに答えます。あなたの問題がどこにあるのかさえわかりません。それはコード、構造、またはOpenGLと比較したXNAの動作方法ですか?

簡単に言うと、マトリックススタックは組み込まれていません。

OpenGLとXNA/DXで行うことは、マトリックスを操作するときとまったく同じです。pushMatrixで行うことは、実際には、便宜上、スタック上の行列(変換)状態を保持することだけです。

オブジェクトをグループとして接続することは単なるセマンティクスであり、実際にはオブジェクトをグループとして接続することはありません。あなたがしているのは、GPUがレンダリング状態を設定することです。これは、その後、その状態が再び変更されるまで、描画呼び出しごとに頂点を変換および描画するために使用されます。これは、OpenGLと同じ方法でXNA/DXで実行できます。

オブジェクトの描画に使用しているものに応じて、変換を適用するさまざまな方法があります。あなたの説明から、GraphicsDeviceオブジェクトでDrawPrimitives(またはそのようなもの)を使用していると思いますが、どちらを使用していても、以前に適用された変換、通常はEffectで使用されます。これらの中で最も単純なのはBasicEffectで、これには3つのメンバーがあります。

  • 世界
  • 意見
  • 投影

BasicEffectを使用する場合は、Worldメンバーのマトリックスを使用して変換を適用するだけです。変換を現在の効果に適用した後に描画するものはすべて、それらの変換を使用します。カスタムエフェクトを使用している場合は、エフェクトにマトリックスを設定する方法(パラメーターコレクションを使用)を除いて、これと非常によく似た操作を行います。見て:

求めているのが実際の変換スタックである場合、これは非常に単純ですが、自分で実装する必要があります。このようなもの:

Stack<Matrix> matrixStack = new Stack<Matrix>();
...
matrixStack.Push( armMatrix );
...
basicEffect.World = matrixStack.Peek();
foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes)
{
    pass.Apply();

    graphics.GraphicsDevice.DrawPrimitives(...);
}
basicEffect.End();
...
matrixStack.Pop();
于 2012-10-26T13:59:12.760 に答える