Нужно ли переворачивать текстуры OpenGL? - PullRequest
5 голосов
/ 18 октября 2011

Предположим, я загружаю массив байтов в виде RGB из данного файла.

Я читал, что OpenGL любит хранить свои текстуры "в обратном порядке", и я видел, как демонстрационные программы хранят свои изображения перевернутымивниз.

Итак, в моей программе я должен инвертировать загруженный массив RGB побайтно или построчно?

1 Ответ

6 голосов
/ 18 октября 2011

Это потому, что формат Bitmap ( .bmp ) хранит свои строки в обратном порядке. Я не уверен, кто придумал это, но это вопрос формата файла. Так что да, вы должны сделать это, если используете собственный загрузчик .bmp. Вы можете, однако, использовать тот, который уже написан, который "вверх ногами" изображение для вас. Опять же, это всего лишь .bmp. OpenGL работает по умолчанию на не перевернутых изображениях.

Вот небольшая хитрость: если вы не хотите менять загрузчик .bmp, вы можете указать OpenGL перевернуть ваше изображение:

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(1.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);

Вот что я имел в виду под "по умолчанию". Вы можете перевернуть OpenGL вверх дном, если хотите. Однако это работает только в том случае, если вы только загружаете файлы .bmp. Другие форматы файлов хранят свои строки правильно. Поэтому я предпочитаю первый подход - использовать настоящий загрузчик .bmp.

Просто чтобы прояснить: ЕСЛИ вы загружаете файлы .bmp, вы ДОЛЖНЫ перевернуть изображение вручную, прежде чем отправить его в OpenGL (что делает большинство загрузчиков .bmp), ИЛИ отправьте незафиксированное изображение в OpenGL и добавьте вышеуказанный код перед кодом рендеринга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...