2013-03-04 75 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);