2013-03-04 118 views
1

,我已经上传我的形象到纹理:OpenGL的分离RGB通道

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

现在,我想看看我是否可以使用OpenGL的帮助分开我的渠道? 例如,为了能够将我的红色/绿色/蓝色通道分别存储在单独的缓冲区中? 这与OpenGL容易吗?

+2

可以分别接入信道,并也将其绘制到单通道缓冲区中。然而,从你提出问题的方式来看,我认为你错误地将OpenGL视为一些通用的图像操作库。 OpenGL的主要目标是在屏幕上绘制漂亮的图片。图像处理是一个很好的副产品。 – datenwolf 2013-03-04 19:37:21

+0

@datenwolf:我打算做一些图像处理,但总体思路是用GPU进行图像处理要比CPU快很多。如果你不相信会这样,那么我不会花太多时间试图这样做?请指教! – user2112840 2013-03-04 19:42:34

+0

这取决于你实际打算做什么。 GPU是用于图像处理的,因此使用GPU本身并不是一个坏主意。但是使用像OpenCL这样的专用GPGPU API(注意'C')可能更适合您的目的。 – datenwolf 2013-03-04 19:47:31

回答

1

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

要从这种类型的数据绘制,你就必须要么把数据备份到一个缓冲区,或使用着色器,将来自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);