0
//          Draw primitives
        device.VertexFormat = CustomVertex.PositionColored.Format;
        device.DrawUserPrimitives(PrimitiveType.TriangleFan, 4, verts);

        device.Transform.World = Matrix.RotationY(angle += 0.05f);

        //          Draw primitives
        device.VertexFormat = CustomVertex.PositionColored.Format;
        device.DrawUserPrimitives(PrimitiveType.TriangleFan, 4, verts);

        device.Transform.World = Matrix.RotationZ(angle += 0.05f);

Transform.World がわかりません。私が理解する方法(論理的でしょう)最初の三角形を描くとYを回転させます...次に、2番目の三角形を描くと、両方の三角形をZ軸に回転させます..このコードは機能します=> 1つの三角形はYのみを回転させ、2番目Zだけ。なぜ?

4

2 に答える 2

0

複数の変換を組み合わせたい場合は、行列乗算を実行する必要があります。つまり、最後のコマンドはdevice.Transform.World *= Matrix.RotationZ(angle += 0.05f);. コードは、Y 軸に沿った回転を Z 軸に沿った回転に置き換えるだけです。ところで、最初に変換を適用してから、プリミティブをレンダリングする必要があります (その逆ではありません)。

多くの詳細な変換チュートリアルをオンラインで見つけることができるはずです。

于 2013-02-09T13:27:16.900 に答える
0

最初の三角形が Z 軸に沿って回転する理由は、前の関数で回転を設定したためであり、変更するまで保持されます。それを描いた後、Y 軸に沿った回転に変更してから、2 番目の三角形を描きます。次に、マトリックスを Z 軸に沿った回転に再び設定すると、プロセス全体が最初からやり直されます。

以前にあった回転に追加するのではなく、device.Transform.World単にリセットするだけです。それらを合計したい場合は、それらを乗算する必要があります。

于 2013-02-09T15:02:30.707 に答える