3
XNAで2Dスプライトをマスクする最良の方法は?
現在、いくつかのスプライトをマスクしようとしています。言葉で説明するのではなく、いくつかのサンプル写真を作成しました。 マスクする領域(白) さて、トリミングする必要がある赤いスプライト。 最終結果。 今、私はXNAでこれを達成するために2つのことができることを知っています。 ステンシルバッファを使用します。 ピクセルシェーダーを使用します。 私はピクセルシェーダーを試してみましたが、これは本質的にこれを行いました: float4 main(float2 texCoord : TEXCOORD0) : COLOR0 { float4 tex = tex2D(BaseTexture, texCoord); float4 bitMask = tex2D(MaskTexture, texCoord); if (bitMask.a > 0) { return float4(tex.r, tex.g, tex.b, tex.a); } else { return float4(0, 0, 0, 0); } } これは画像を切り取るように見えますが(画像が動き始めると正しくありませんが)、私の問題は画像が絶えず動いている(静的ではない)ので、この切り抜きは動的である必要があります。 シェーダーコードを変更して、その位置を考慮する方法はありますか? あるいは、ステンシルバッファーの使用について読んだことがありますが、ほとんどのサンプルはレンダーターゲットの使用に依存しているようです。(私はすでにゲームの残りの部分で3または4を使用していますが、その上にもう1つ追加すると過剰に思えます) 私が見つけたRendertargetsを使用しない唯一のチュートリアルは、Shawn …