Текстуры openGL, размер которых не равен 2^x

Я пытаюсь отобразить картинку в среде openGL. Оригинальные размеры изображения 3648x2432, и я хочу отобразить его с изображением 256x384. Проблема в том, что 384 не является степенью 2, и когда я пытаюсь отобразить его, он выглядит растянутым. Как я могу это исправить?

4 ответа

Решение

Есть три способа сделать это, о которых я знаю -

  • Тот, который предложил Альберт (измените размер, пока он не подойдет).
  • Разделите текстуру на 2**n-размерных прямоугольника и соедините их вместе.
  • Посмотрите, можете ли вы использовать GL_ARB_texture_non_power_of_two, Хотя, вероятно, лучше этого избегать, так как похоже, что это расширение для Xorg.

Вы можете изменить размер вашей текстуры так, чтобы она была степенью двойки (наклоните текстуру так, чтобы при наложении на объект она выглядела правильно).

Если GL_EXT_texture_rectangle имеет значение true, тогда используйте GL_TEXTURE_RECTANGLE_EXT для первого параметра в вызовах glEnable() и GLBindTexture().

ARB_texture_rectangle это, вероятно, то, что вы ищете. Это позволяет вам связать с GL_TEXTURE_RECTANGLE_ARB вместо GL_TEXTURE_2Dи вы можете загрузить изображение с размерами не степенью 2. Помните, что ваши координаты текстуры будут варьироваться от [0..w]x[0..h] вместо [0..1]x[0..1].

Другие вопросы по тегам