1

HLSL を学習するためにいくつかのチュートリアルを検索しましたが、見つかったすべてのチュートリアルで VertexShader と PixelShader について説明されていました。(チュートリアルでは、例として 3D ゲームを使用しました)。

vertexShader が 2D ゲームに役立つかどうかはわかりません。私が知っているように、2D ゲームには頂点がありませんよね?

後処理としてシェーダーを使用する必要があります。
私の質問は:Could you tell me if I have to learn VertexShader for my 2D game ?

4

2 に答える 2

1

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)。

于 2013-02-05T13:55:09.810 に答える
0

そうは思わないでください。ゲームに集中している場合は、プロジェクトを完了するためにシェーダー2Dを学習することを避けることができます。

もう 1 つのオプション2D、 で実際に生成されたシーンでレンダリングする3Dことです。つまり、シーンをサーフェスに投影してレンダリングします。3Dこの場合、特に CPU なしでクールな変換を行いたい場合は、それらを使用する必要があるかもしれません (多くの場合、それが唯一のオプションです)。

お役に立てれば。

于 2013-02-05T13:16:14.570 に答える