2013-03-04 2 views
1

с использованием OpenGL, я загрузил свой образ в текстуру:OpenGL Разделительный RGB каналов

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

Теперь, я хочу видеть, могу ли я разделить мои каналы с помощью OpenGL? Например, чтобы иметь возможность сохранять мои красные/зеленые/синие каналы в отдельном буфере? Это что-то легко сделать с OpenGL?

+2

Вы можете получить доступ к каналам по отдельности, и также нарисуйте его в одноканальные буферы. Однако из-за того, как вы задаете свой вопрос, у меня создалось впечатление, что вы ошибаетесь в OpenGL для какой-то библиотеки изображений общего назначения. Основная цель OpenGL - рисовать красивые снимки на экране. Обработка изображений является хорошим побочным продуктом этого. – datenwolf

+0

@ datenwolf: Ну, я планирую сделать некоторую обработку изображений, но вся идея заключается в том, что обработка изображений с помощью графического процессора будет намного быстрее, чем процессор. Если вы не верите, что это будет так, то я бы не потратил слишком много времени, пытаясь сделать это таким образом? пожалуйста, порекомендуйте! – user2112840

+0

Это зависит от того, что вы на самом деле планируете делать. Графические процессоры предназначены для обработки изображений, поэтому использование графического процессора - это не плохая идея. Но использование специального GPGPU API, такого как OpenCL (обратите внимание на «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); 
Смежные вопросы