DrawUserIndexedPrimitives を使用して、線で構成されるモデルを描画することにより、XNA で 3D WP7 ゲームを作成しようとしています。現在、すべてのモデルを描画するために BasicEffect を使用しています。回転を設定できますが、すべてのオブジェクトが同じ回転になります。オブジェクトごとに異なる回転を設定する方法はありますか? 現在、使用できるいくつかのソリューションを考え出しましたが、どちらにも満足していません。
- 独自の World を使用して、すべてのオブジェクトに新しい BasicEffect を作成し、すべてのオブジェクトをループして基本的な効果を取得して描画します。これらすべての BasicEffects は多くのオーバーヘッドを作成すると思います。モデル。
- 自分でポイントの計算を行います (つまり、回転を計算し、それらの値を DrawUserIndexedPrimitives メソッドに渡します) - これは非常にコストのかかる計算であり、パフォーマンスを大幅に低下させます。
ここでおすすめのルートはありますか?
DrawUserIndexedPrimitives が使用するのに最適な方法であるかどうかはわかりません。線を描画して回転できるようにしたいだけです。これを行うためのより良い方法があれば、教えてください:)
私の現在の解決策:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
foreach (var model in _models)
{
foreach (var pass in model.Effect.CurrentTechnique.Passes)
{
pass.Apply();
model.Effect.World = _model.GetWorld();
var points = model.GetPoints();
GraphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.LineList, points, 0, points.Length, model.Lines, 0, model.Lines.Length / 2);
_models[0].Draw(GraphicsDevice);
}
}
base.Draw(gameTime);
}
model.GetWorld() は、オブジェクトの回転、平行移動、およびスケールを含むマトリックスを返します。model.GetPoints() は、ポイントと model.Lines を含むリストです。接続されたポイントのインデックスを含むリストです。