Я написал процедуру для чтения всех значений пикселей из BMP-файла в массив, который я хочу передать glTexImage2D из openGL, чтобы превратить его в текстуру. Делая это, я понял, что фактический формат пикселей в файле BMP — BGR, а не RGB, поэтому мой массив содержит синий, зеленый, красный. В результате моя окончательная текстура поменяла синий и красный каналы по сравнению с исходным растровым изображением.
Вот как я это называю:
glTexImage2D(GL_TEXTURE_2D, 0, 3, imgdata->width, imgdata->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgdata->pixdata);
Любой обходной путь для этой ситуации / неправильный аргумент, который я передаю? Единственное решение, которое я могу найти прямо сейчас, — это вручную поменять значения RB внутри моего массива с помощью цикла.
Почему бы не изменить формат glTexImage2D до GL_BGR.
Я установил GR_BGR, и он помечен как необъявленный идентификатор
Тогда вы не используете правильная библиотека для получения на OpenGL. Заголовки, предоставляемые системой OpenGL, могут содержать или не содержать современные функции и перечислители. Поэтому вместо этого вам нужно использовать одну из этих библиотек, чтобы попасть в OpenGL. Вы должны использовать эти вместо из GL/gl.h
,
Как только вы получаете доступ к OpenGL, все остальное просто. использование GL_RGB
как твой формат передачи пикселей.