0

希望の色の三角形をレンダリングする関数があります。ステンシル テストを有効にして、黄色の三角形をレンダリングし、その上に赤い三角形をレンダリングしようとしています。ステンシル ウィンドウとして円を使用しています。以下の出力を得るには、私のステンシル テスト方程式と演算はどうあるべきですか。DirectX09 のみでのすべてのレンダリング。 望ましい出力 以下の API のいくつかの適切で単純な例を親切にガイドしてください....

SetRenderState(D3DRS_STENCILFUNC,
SetRenderState(D3DRS_STENCILREF,
SetRenderState(D3DRS_STENCILMASK,
SetRenderState(D3DRS_STENCILWRITEMASK,
SetRenderState(D3DRS_STENCILZFAIL,
SetRenderState(D3DRS_STENCILFAIL
SetRenderState(D3DRS_STENCILPASS,

DirectX09 シェーダー エフェクト ファイル (vs_3_0 および ps_3_0) で Stencil 操作を使用するにはどうすればよいですか?

4

1 に答える 1

1

renderstatesのドキュメントは、関連する質問のほとんどに答える必要があります。

ステンシルマスクを作成するには、メソッドが必要です

SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_INCRSAT)
SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_INCRSAT)
SetRenderState(D3DRS_STENCILFUNC,D3DCMP_ALWAYS)

円のレンダリング中にステンシルバッファをインクリメントするためです。次に、ステンシル バッファを使用せずに黄色の三角形を描画します。その後、あなたは赤い三角形を描いています

SetRenderState(D3DRS_STENCILZFAIL,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILFAIL,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILPASS,D3DSTENCILOP_KEEP)
SetRenderState(D3DRS_STENCILFUNC,D3DCMP_LESS)    
SetRenderState(D3DRS_STENCILREF,0)

そのため、あなたの stenciltest は、以前に円が描かれた場合に true のみを返します (0 より大きい stencilvalue があるはずです)。その後、何も正しく描画されない場合は、三角形の順序が正しくない可能性があるため、Z テストを無効にしてみてください。

DirectX09 シェーダー エフェクト ファイル (vs_3_0 および ps_3_0) で Stencil 操作を使用するにはどうすればよいですか?

ステンシル操作は、メイン プログラム コードからのみ使用されます。シェーダーはステンシルテストに影響を与えることはできません。

于 2013-01-12T11:12:38.583 に答える