1

特定のオブジェクトが特定の視点から画面上に描画されたときに生成されるピクセルに割り当てられた最小および最大のUV値を計算する必要があります。たとえば、UVマップされた立方体があり、前面のみが表示されている場合、min(UV)とmax(UV)は、表示されている面のピクセルに割り当てられた最小および最大のUV座標に設定する必要があります。

Direct3D 9シェーダー(および可能な限り最低のシェーダーモデル)を使用してこれを実行し、処理を高速化します。頂点シェーダーは、各入力頂点のUV座標を取得し、それらを変更せずにピクセルシェーダーに渡すのと同じくらい簡単です。一方、ピクセルシェーダーは、頂点シェーダーによって生成された値を取得し、これらを使用して最小および最大のUV値を計算する必要があります。

私が知りたいのは:

  1. ピクセルシェーダーの呼び出し間で状態(現在の最小値と最大値)を維持するにはどうすればよいですか?
  2. シェーダーによって生成された最終的な最小値と最大値をプログラムに取り込むにはどうすればよいですか?

HLSLでこれを行う方法はありますか、それとも私は手作業でそれを行うのに行き詰まっていますか?HLSLが機能しない場合、シェーダーを使用せずにこれを行うための最も効率的な方法は何でしょうか。

4

1 に答える 1

1

1)あなたはしません。2)ある時点でリードバックを実行する必要があります。これはかなり遅いプロセスであり、パイプラインストールを引き起こします。

一般的に、私はこれを行うための良い方法を考えることができません。これで何を達成しようとしていますか?あなたが求めている結果を達成するための他の方法があるかもしれません。

複数のレンダーターゲットを使用して、各ピクセルのUVをレンダーターゲットに書き込むことで、何かを実現できる可能性があります。次に、レンダリングターゲットをメインメモリに戻し、最小値と最大値を解析する必要があります。これは本当に遅くて非常に醜い解決策です。

いくつかの別々のパスとしてそれを行うことができる場合は、非常に小さなレンダリングターゲットにレンダリングし、最大で1パス、最小アルファブレンド操作で1パスを使用できる場合があります。繰り返しますが...素晴らしい解決策ではありません。

于 2010-09-05T20:49:02.350 に答える