1

これまで調べてきたように、xna で描画するには 2 つの方法があります。スプライトバッチを使用するか、アイテムを 3D ワールドに配置してから、カメラを使用してレンダリングします。

現在、私は 2.5D ゲームに取り組んでいます。より深いスプライトの変換を遅くするメカニズムを使用しているため、ゲームに本当に深みがあるように見えます。

ただし、エフェクト、つまり後処理を考慮すると、これらのエフェクトを中間レベルの深度にレンダリングする場合、つまり深度 = 0.5 のキャラクターにレンダリングする場合、深度 = 0.8 にフォアグラウンド ツリーがある場合、問題が生じる可能性があります。

したがって、実際の 3D の世界でゲームをレンダリングすることを検討しています。

しかし、これまでスプライトを配置して 3D の世界でアニメーション化する方法を探してきたので、見つけられませんでした。(正しいキーワードを知らなかったせいかもしれません。) 最も近いトピックは、XNA4.0 から削除された PointSprite に関するもので、そのように実装することはできませんでした。

私の質問は、アニメーション スプライト (つまり、キャラクターの動き) を 3D の世界でレンダリングするにはどうすればよいかということです。

ありがとう、ドーム

4

2 に答える 2

0

XNA 4.0の新機能であるSpriteBatchは、BasicEffectで使用できます

このブログ投稿はそれを説明しています。また、BasicEffectを介してデフォルトのSpriteBatch機能を模倣するサンプルコードも提供しますが、3Dワールド用に独自のマトリックスを渡すことができます。

具体的には、「ワールド」マトリックスは、スプライトが描画される平面の3D空間での位置を表します。「ビュー」マトリックスは、カメラの世界観を表します。そして、「プロジェクト」行列は3D投影行列になります(おそらくからMatrix.CreatePerspective)。

ちなみに、あなたが説明しているエフェクトの名前は「視差スクロール」です。これは実際の3Dと同じものではありません(2.5Dもまた別のものです)。

シーン内の特定のレイヤーにのみエフェクトを適用する場合:ピクセルシェーダーを使用してエフェクトをSpriteBatch.Beginに渡すことにより、これらのスプライトにエフェクトを直接適用することができます。または、エフェクトが実際後処理エフェクトである場合(つまり、画面全体に適用する場合)、レンダリングターゲットを使用してその特定のレイヤーを画面外にレンダリングし、エフェクトを使用して画面にレンダリングし直すことができます。

于 2010-10-27T11:54:41.617 に答える
0

秘訣は、スプライトバッチを使用して画面に「直接」描画する代わりに、これまで行ってきたことを正確に再現することです。代わりに、2D画像を3Dワールドのフラットな「シート」に描画します(各「シート」は正方形を形成する2つの三角形)。

開始点として、create.msdn.comサイトでクワッド、テクスチャ、および場合によってはレンダリングターゲットを構築するためのサンプルを確認することをお勧めします。

于 2010-10-27T10:11:55.103 に答える