2016-08-11 9 views
0

私自身の試行錯誤の経験から、DirectXピクセルシェーダは、DirectXでレンダリングされた幾何学プリミティブの範囲内にあるピクセル/フラグメントに対してのみ実行され、フレームのピクセルに対しては実行されないようですクリアカラー。WPFピクセルシェーダのようなフレームの各ピクセルでDirectXピクセルシェーダが動作しますか?

MSDN saysは:

ピクセルシェーダが頂点シェーダと協調して動作します。頂点シェーダの出力はピクセルシェーダの入力を提供します。これは、WPFは3Dプリミティブをレンダリングしていないため、フレームの画素毎に実行され、したがって、それは、幾何学的プリミティブピクセルであることの意味を知っているか気にしないWPFのピクセルシェーダとは対照的である

またはクリアカラーピクセルである。

次の画像では、DirectXピクセルシェーダは、頂点シェーダによる幾何学的プリミティブ出力に対応するため、黒色領域ではないため、白領域でのみ実行されます。一方、WPFピクセルシェーダは、フレームのすべてのピクセル(白と黒の両方)に対して実行されます。

は、この理解は正しいですか?

+0

私の大学のコース(2年前)から、頂点シェーダーとピクセルシェーダーの両方が正しく記憶されていると思います。頂点シェーダに渡してからピクセルシェーダに渡すので、その部分ではそのジオメトリのピクセルだけにエフェクトを適用します。ピクセルシェーダでシーン全体に効果を持たせたい場合は、シーン全体をテクスチャに渡します。だから、もしあなたがそれについて考えるなら、あなたはこの場合正方形の幾何学を渡します。 – Sam

答えて

1

ピクセルシェーダーの呼び出しは、描画プリミティブ(たとえば、三角形)によってトリガーされます。実際には、ウィンドウ内のピクセルは、例えば2番目の三角形が最初の三角形の上に描画される場合、複数のピクセルシェーダ呼び出しを取得することになります。これはと呼ばれ、と一般的には避けてください。最も一般的な回避方法はz-cullingです。

ウィンドウ内のすべてのピクセルにピクセルシェーダーをトリガーする場合は、「フルスクリーンクワッド」を構成する2つの三角形、つまり(-1,-1)(1,1)を描画します。背後では、これはWPFが本質的に行うことです。

+0

ありがとう、それはまさに私が探していたものです! :) – artisticdude

関連する問題