arrays - Texture2D 数组作为 HLSL 像素着色器中的渲染目标

标签 arrays textures hlsl texture2d pixel-shader

目前,我需要一些来 self 的渲染过程(法线、深度和颜色)的纹理的每像素数据。

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

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

最佳答案

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

您可以使用 GraphicsDevice.SetRenderTargets(MSDNsee 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/

相关文章:

php - 将mysql结果放在一个数组中

arrays - 将 volatile 数组传递给 strncpy

opengl - 如何在 OpenGL 中对 glutSolidTorus 进行纹理处理?

directx - HLSL 将单个 float 传递给 PS?

glsl - 着色器帧缓冲区回读

c# - 将两个浮点值存储在一个浮点变量中

javascript - 在 Javascript 中访问多维数组的第 n 个元素时遇到问题

c - 通过硬编码地址制作指向结构的指针数组时避免 gcc 警告

parsing - 解析 Wavefront .obj 纹理坐标时遇到问题

java - 纹理添加黑色和白线