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...

我遗漏了一些部分 b/c 有相当多的代码(我只是想理解一般的想法)。不幸的是,上面的结果是一个空白屏幕。这是我想要发生的事情:

  1. 将场景渲染为纹理 (HDR)
  2. 通过 Brightpass 着色器将该纹理渲染到第二个纹理
  3. 将第二个纹理渲染到可见的 LDR 表面

请注意,如果我将上面的最后一行从

device->SetTexture(0, brightpass_texture);

device->SetTexture(0, scene_texture);

然后一切正常。请注意,我已经尝试跳过 Brightpass 着色器并简单地传递像素,但这也不起作用。

4

3 回答 3

2

问题是多重采样。在D3DPRESENT_PARAMS结构中,我启用了多重采样。启用多重采样时,您无法使用“全屏四边形”技术从一个浮点纹理渲染到另一个浮点纹理。

相反,我在 HDR 场景渲染目标 ( ) 中启用了多重采样,并在结构scene_texture中禁用了它。PRESENT_PARAMS这很好,因为我只需要对场景渲染进行多重采样。

于 2009-10-15T22:42:59.560 回答
1

你确定你创建了带有渲染到纹理标志的brightpass_texture吗?

于 2009-10-15T20:56:39.517 回答
0

调试运行时是否会吐出任何错误?你如何获得 ldr_surface?

如果您将场景直接渲染到 ldr_surface 并绕过所有 HDR 内容,会发生什么?事情可能看起来有点饱和,但它应该给你一个想法......

于 2009-10-16T14:34:55.527 回答