【发布时间】:2021-12-02 02:55:32
【问题描述】:
附:是的,我在 Computer Graphics Stack Exchange 上发布了这个 question。不过发帖也是希望更多人看到
简介
我正在尝试渲染多通道图像(超过 4 个通道,以便将其馈送到神经网络)。由于 OpenGL 本身不支持它,所以我有多个 4 通道渲染缓冲区,我将相应部分的通道渲染到其中。
例如,我需要大小为512 x 512 x 16 的多通道图像,在OpenGL 中我有4 个大小为512 x 512 x 4 的渲染缓冲区。现在的问题是神经网络期望数据的步幅为512 x 512 x 16,即一个像素的 16 个通道值后跟下一个像素的 16 个通道值。然而,目前我可以通过 4 次调用 glReadPixels 有效地读取我的 4 个渲染缓冲区,基本上使数据具有跨越 4 x 512 x 512 x 4。在客户端手动重新排序数据我不够用,因为它太慢了。
主要问题
我有一个想法是渲染到一个大小为512*4 x 512 x 4 的单个 4 通道渲染缓冲区,因为在跨步方面它相当于 512 x 512 x 16,我们只需将连续 4 个像素的组合视为单个16 通道输出图像的像素。我们称之为“交错渲染”
但这需要我神奇地调整我的片段着色器,以便每组后续的 4 个片段 将具有完全相同的顶点属性插值。有什么办法吗?
这个带有1024 x 512 4 通道图像的 1 个渲染缓冲区的糟糕插图是应该如何渲染的示例。有了它,我可以在 1 次调用 glReadPixels 中大步提取数据 512 x 512 x 8
【问题讨论】:
标签: opengl opengl-es fragment-shader