私は、ここに開始する前に、この質問の良い検索を持っていた:dev-> SetRenderState(D3DRS_ALPHAREF、value)と同等のDirectX 11とは何ですか?
How to set RenderState in DirectX11?
があまりにも一般的です。最初の答えを調べるには、私はブレンドステートが必要だと思うが、アルファ比較を設定する方法は明白ではない。
D3DRS_ALPHAREFのスタックオーバーフローを検索すると、他にもわずか7つの質問が発生しました。https://stackoverflow.com/search?q=D3DRS_ALPHAREFどれもリモートでも近くにありません。
私はこれを、1パスの画像から2パスへの2パスレンダリングを行うプログラムに使用しています。私はレンダリングしているテクスチャと同じサイズのコントロールテクスチャを持っており、シングルチャンネルの輝度です。私のピクセルシェーダの
最後の行は、次のとおりです。
// Copy rgb from the source texture
out.color.rgb = source.color.rgb;
// copy alpha from the control texture.
out.color.a = control.color.r;
return out;
その後、私は持っている私のレンダリングセットアップに:
frameNumは、移行の現在のフレーム番号であるDWORD const reference = static_cast<DWORD>(frameNum);
D3DCMPFUNC const compare = pass == 0 ? D3DCMP_GREATEREQUAL : D3DCMP_LESS;
m_pd3dDevice->SetRenderState(D3DRS_ALPHAREF, reference);
m_pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, compare);
:0〜255。
- 編集 - DirectX 9のこの特定の機能に精通していない人にとって、最終段階では、比較機能を使用してpiからのアルファ出力を比較しますxelシェーダを参照値と比較し、比較が真の値を返す場合は実際にピクセルを描画します。
この結果はすべて、コントロールテクスチャの輝度レベルが、トランジションの各ピクセルの変化の早さまたは遅さを制御することです。
DirectX 11ではどのように正確にこれを行うのですか?
はい、私は同じ結果を達成するための他の方法があることを認識しています。適切に細工されたピクセルシェーダにframeNumを渡すと、同じ場所に移動できます。
これは重要なことではありませんが、代替実装を探しているわけではありません.DirectX 9で随時有用なツールとして実証されているため、DirectX 11でアルファ比較を行う方法を学びたいと考えています。