目前,我需要一些来 self 的渲染过程(法线、深度和颜色)的纹理的每像素数据。
不是使用本质上相同的着色器(WorldViewPos 乘法等)运行三个 channel ,而是每个 channel 将不同类型的数据输出到渲染目标中的纹理(例如,一个颜色 channel ,一个深度 channel ,一个通过为法线);我想使用 Texture3D 对象或理想情况下使用 Texture2D 数组作为我的像素着色器的渲染目标。这样我就可以将这三个渲染过程减少为一个并一次输出所有数据。
不幸的是,我发现的唯一例子是几何着色器。有没有办法指定纹理数组中的哪个纹理将数据发送到像素着色器内部?
最佳答案
您正在寻找的是“多个渲染目标”。
您可以使用 GraphicsDevice.SetRenderTargets
(MSDN、see also)设置多个渲染目标。
您可以输出到 HLSL 像素着色器中的多个渲染目标,方法是第一个目标输出到 COLOR0
(semantic),第二个目标输出到 COLOR1
,并且等等。
最后,您必须使用 HiDef配置文件,它允许一次设置最多 4 个渲染目标。
编辑:我刚刚意识到我给出了 XNA 答案 - 但实际上您根本没有使用 API 标记问题。 HLSL 应该与 DirectX、SlimDX 等相同。要在 DirectX 中设置渲染目标,我想你想要
IDirect3DDevice9::SetRenderTarget
( MSDN )。
关于arrays - Texture2D 数组作为 HLSL 像素着色器中的渲染目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889535/