XNA(およびDirect3D、OpenGLなど)の2Dグラフィックスは、投影する頂点の深さを基本的に無視する正射影を使用して、本質的に3Dシーンをレンダリングすることによって実現されます(遠ざかっても小さくなりません)。 。を使用して、独自の正射影行列を作成できますMatrix.CreateOrthographic
。
この方法で任意の3Dジオメトリをレンダリングできますが、スプライトレンダリングは、SpriteBatch
カメラに面した「クワッド」(4つの頂点で形成された2つの三角形で構成される正方形または長方形)を描画するだけです。これらのクワッドには3D座標があり、正投影ではZ軸が無視されます。
頂点シェーダーは基本的にGPU上で実行され、渡された頂点を操作してから、それらが形成する三角形がラスター化されます。確かに、2Dレンダリングに使用されるこれらの頂点で頂点シェーダーを使用できます。
最新のすべてのハードウェアでは、頂点変換(上記の正射影変換を含む)は通常、頂点シェーダーで実行されます。これは基本的に定型文であり、2Dゲームで複雑な頂点シェーダーを使用することは珍しいことです。しかし、それは前代未聞ではありません。たとえば、私自身のゲームDarkは、頂点シェーダーを使用して2Dシャドウプロジェクションを実行します。
ただし、を使用していてSpriteBatch
、必要なのがピクセルシェーダーVertexShader
だけの場合は、ファイルからを省略でき.fx
ます。ピクセルシェーダーは引き続き機能します。(これを使用するには、としてロードし、このオーバーロードにEffect
渡します)。SpriteBatch.Begin
置き換えない場合はSpriteBatch
、デフォルトの頂点シェーダーを使用します。ここでそのソースを表示できます。単一の行列変換を実行します(渡された行列は正射影行列であり、に渡されたオプションの行列が乗算されますBegin
)。