2013-03-04 4 views
1

, 나는 질감으로 내 이미지를 업로드 :OpenGL을 분리하기 RGB 채널

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

지금, 내가 OpenGL을의 도움으로 내 채널을 분리 할 수 ​​있는지 여부를 확인하려면? 예를 들어, 내 Red/Green/Blue 채널을 각각 별도의 버퍼에 저장할 수 있습니까? OpenGL을 사용하여이 작업을 쉽게 할 수 있습니까?

+2

을하고, 또한 단일 채널 버퍼로 그립니다. 그러나 당신이 질문을하는 방식에서 나는 당신이 OpenGL을 범용 이미지 조작 라이브러리로 착각 한 것 같은 인상을받습니다. OpenGL의 주된 목적은 멋진 그림을 화면에 그려 넣는 것입니다. 이미지 처리는 이것의 좋은 부산물입니다. – datenwolf

+0

@datenwolf : 글쎄요, 일부 이미지 처리를 계획하고 있지만, 전체적인 생각은 GPU로 이미지 처리를하는 것이 CPU보다 훨씬 빠르다는 것입니다. 이것이 사실이라고 생각하지 않는다면, 나는 그렇게하기 위해 너무 많은 시간을 소비하지 않을 것입니다. 조언 해주세요! – user2112840

+0

실제로 계획 한 내용에 따라 다릅니다. GPU는 이미지 처리를 위해 만들어 지므로 GPU를 사용하는 것은 그다지 좋지 않습니다. 그러나 OpenCL과 같은 전용 GPGPU API를 사용하면 ('C'에주의하십시오) 귀하의 목적에 더 적합 할 수 있습니다. – datenwolf

답변

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);