目前,我需要从渲染通道(法线,深度和颜色)中获得几个纹理的每像素数据。
不是使用基本相同的着色器(WorldViewPos乘法等)运行三次传递,而是每次向渲染目标中的纹理输出不同类型的数据(例如,一次传递颜色,一次传递深度,一次通过正常);我想使用Texture3D对象或理想情况下使用Texture2D数组作为我的像素着色器的渲染目标。这样我就可以将这三个渲染过程减少到一个并一次性输出所有数据。
不幸的是,我发现的唯一例子是几何着色器。有没有办法指定纹理数组中的哪个纹理将数据发送到像素着色器?
答案 0 :(得分:2)
您正在寻找的是“多个渲染目标”。
您可以使用GraphicsDevice.SetRenderTargets
(MSDN,see also)设置多个渲染目标。
您可以输出到HLSL像素着色器中的多个渲染目标,方法是输出第一个目标的COLOR0
(semantic),第二个目标COLOR1
,依此类推。< / p>
最后,您必须使用HiDef个人资料,一次最多可以设置4个渲染目标。
IDirect3DDevice9::SetRenderTarget
(MSDN)。