Это потому, что формат 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 и добавьте вышеуказанный код перед кодом рендеринга.