3

目前,我需要来自渲染通道(法线、深度和颜色)的几个纹理的每像素数据。

而不是使用本质上相同的着色器(WorldViewPos 乘法等)运行三个通道,但每个通道都将不同类型的数据输出到渲染目标中的纹理(例如,一个通道用于颜色,一个通道用于深度,一个通道用于法线); 我想使用 Texture3D 对象或理想情况下的 Texture2D 数组作为我的像素着色器的渲染目标。这样我就可以将这三个渲染通道减少到只有一个,并一次输出所有数据。

不幸的是,我发现的唯一例子是几何着色器。有没有办法指定纹理数组中的哪个纹理将数据发送到像素着色器内部?

4

1 回答 1

3

您正在寻找的是“多个渲染目标”。

GraphicsDevice.SetRenderTargets您可以使用(MSDN另请参阅)设置多个渲染目标。

您可以输出到 HLSL 像素着色器中的多个渲染目标,方法是为第一个目标输出到COLOR0语义),COLOR1为第二个目标输出,依此类推。

最后,您必须使用HiDef配置文件,它允许一次设置多达 4 个渲染目标。


编辑:我刚刚意识到我给出了一个 XNA 答案——但实际上你根本没有用 API 标记这个问题。DirectX、SlimDX 等的 HLSL 应该是相同的。要在 DirectX 中设置渲染目标,我认为你想要 IDirect3DDevice9::SetRenderTarget( MSDN )。

于 2011-07-31T15:59:01.607 回答