Я читал пиксели из текстуры 2D OpenGL в массив байтов (unsigned char), как это обычно делается. Но теперь мне нужно преобразовать его в массив изображений (из целых чисел, я полагаю), чтобы иметь макет и диапазон пикселей изображений, загруженных из CPU для обратного процесса. Мой вопрос - это достаточно просто сделать:OpenGL конвертировать пиксели пикселов RGBA в массив целых чисел изображения
glGetTexImage(GL_TEXTURE_2D,0,GL_RGBA,GL_UNSIGNED_INT,bytes);
вместо:
glGetTexImage(GL_TEXTURE_2D,0,GL_RGBA,GL_UNSIGNED_BYTE,bytes);
, а затем перебрать каждое целое число и преобразовать его из 0-1 диапазона 0-255? Я действительно не нашел примеров такого преобразования без использования 3-сторонних изображений.
Если я это сделать:
size_t lenght=_viewWidth * _viewHeight ;
GLubyte *bytes=(GLubyte*)malloc(lenght);
/////////////// read pixels from tex /////////////////////
glBindTexture(GL_TEXTURE_2D,tex);
glGetTexImage(GL_TEXTURE_2D,0,GL_BGR,GL_UNSIGNED_BYTE,bytes);
uint8_t Rc, Gc, Bc;
for(x = 0; x < lenght; x+=3)
{
Bc = *bytes + x;
Gc = *bytes + x + 1;
Rc = *bytes + x + 2;
}
ли Rc, Gc и Bc будет в 0-255 диапазоне?
Если у моей текстуры есть RGBA и RGBA8 в качестве внутреннего формата, и я прочитал его как беззнаковый байт, будут ли данные tee в диапазоне 0 -255? –
Да. В этом случае не должно быть никакого преобразования, поскольку RGBA8 скорее всего использует неподписанные байты для хранения компонентов. – radical7