【问题标题】:Texture2D Array as Render Target in HLSL Pixel ShaderTexture2D 数组作为 HLSL 像素着色器中的渲染目标
【发布时间】:2011-07-31 23:59:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: arrays textures hlsl texture2d pixel-shader


    【解决方案1】:

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

    您可以使用GraphicsDevice.SetRenderTargetsMSDNsee also)设置多个渲染目标。

    您可以通过将第一个目标输出到COLOR0semantic),将第二个目标输出到COLOR1,以此类推,在 HLSL 像素着色器中输出到多个渲染目标。

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


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

    【讨论】:

    • 谢谢,这正是我所需要的,但我在实施时遇到了问题。我为此提出了一个新问题,因为我必须粘贴大量数据才能进行详细说明。可以在这里找到:stackoverflow.com/questions/6891194/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多