1

私は小さなXNAベースのゲームを作ろうとしていますが、画面の周りの複数のモバイルサークル内に、大きな画像の一部を示す「スポットライト」であるかのように、単一のテクスチャを描画できる必要があります。それをどのように行うことができるかを探していると、ステンシルがそれを達成するのに役立つ可能性があることがわかりましたが、ステンシルを使用してそれを行う方法がわかりません。私がそれをどのように行うことができるかについて誰かが何か情報やアイデアを持っているなら、私は非常に感謝するでしょう。

編集:ゲームが2Dであることに言及するのを忘れました。

4

1 に答える 1

1

まず、目的のステンシルの形状 (この場合は円) のメッシュが必要です。XNA は多くのプリミティブをサポートしていないため、円を三角形で近似する必要があります。

次に、そのメッシュをほぼ通常どおりにレンダリングしますが、以下を使用します。

graphics.DepthStencilState.DepthBufferFunction = CompareFunction.Never;
graphics.DepthStencilState.StencilEnable = true;
graphics.DepthStencilState.ReferenceStencil = 1;
graphics.DepthStencilState.StencilPass = StencilOperation.Replace;

これで、穴のあるステンシルができました。

次に、通常の設定でステンシルを介してテクスチャをレンダリングしますが、次のようにします。

graphics.DepthStencilState.StencilEnable = true;
graphics.DepthStencilState.ReferenceStencil = 1;
graphics.DepthStencilState.StencilFunction = CompareFunction.Equal;

詳細については、DepthStencilState クラスのリファレンスを参照してください。

これは、3D に関する私の知識に基づいています。スプライトを使用する場合は、さらに多くの作業が必要になる場合があります。

于 2012-05-31T20:35:01.463 に答える