2

そのため、Direct3D の後処理を実装しようとしていますが、テクスチャへのレンダリングに問題があります。基本的に、私のプログラムは次のようになります。

// Render scene to "scene_texture" (an HDR texture)...

...

device->SetRenderTarget(0, brightpass_surface);
device->SetTexture(0, scene_texture);
// Render "scene_texture" to "brightpass_texture" using full-screen quad.
// This involves passing the quad geometry through a brightpass shader.

...

device->SetRenderTarget(0, ldr_surface);
device->SetTexture(0, brightpass_texture);
// Render "brightpass_texture" to "ldr_surface" using full-screen quad...

かなりの量のコードがあるため、いくつかの部分を省略しました(一般的なアイデアを理解しようとしているだけです)。残念ながら、上記の結果は空白の画面になります。これが私がしたいことです:

  1. シーンをテクスチャ (HDR) にレンダリングする
  2. ブライトパス シェーダーを介して、そのテクスチャを 2 番目のテクスチャにレンダリングします。
  3. 2 番目のテクスチャを可視 LDR サーフェスにレンダリングする

上記の最後の行を

device->SetTexture(0, brightpass_texture);

device->SetTexture(0, scene_texture);

その後、すべてが機能します。ブライトパス シェーダーをスキップして、単純にピクセルを通過させてみましたが、どちらもうまくいきません。

4

3 に答える 3

2

問題はマルチサンプリングでした。構造上、D3DPRESENT_PARAMSマルチサンプリングを有効にしました。マルチサンプリングが有効な場合、「フルスクリーン クワッド」テクニックを使用して、ある浮動小数点テクスチャから別の浮動小数点テクスチャにレンダリングすることはできません。

代わりに、HDR シーンのレンダー ターゲット ( ) でマルチサンプリングを有効にし、構造scene_textureで無効にしました。PRESENT_PARAMSシーンのレンダリングに必要なのはマルチサンプリングだけだったので、これは良いことです。

于 2009-10-15T22:42:59.560 に答える
1

render-to-texture フラグを使用して brightpass_texture を作成したことを確認しましたか?

于 2009-10-15T20:56:39.517 に答える
0

デバッグ ランタイムはエラーを吐き出しますか? ldr_surface はどのように取得しますか?

シーンを直接 ldr_surface にレンダリングし、すべての HDR 要素をバイパスするとどうなりますか? 物事はおそらく少し飽和しているように見えますが、それはあなたにアイデアを与えるはずです...

于 2009-10-16T14:34:55.527 に答える