2

使用 OpenGL,我已将图像上传到纹理中:

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);

现在,我想看看我是否可以在 OpenGL 的帮助下分离我的通道?例如,能够将我的红/绿/蓝通道分别存储在单独的缓冲区中?这对OpenGL来说很容易吗?

4

1 回答 1

2

RGB纹理可以被视为 3 个单独的缓冲区,但可以跨步保存在内存中。但是,如果您需要使用三个单独的连续缓冲区,则GL_RED可以使用格式,您可以使用 3 次,每次用于一个通道。

要从这种数据中绘制,您必须将数据放回一个缓冲区,或者使用一次从 3 个纹理中采样的着色器:

vec2 tc;
sampler2d red, green, blue;

my_out_color = vec4(texture(red, tc).r, texture(green, tc).r, texture(blue, tc).r, 1.0);
于 2013-03-04T19:52:34.923 回答