2009-04-27 2 views
0

Поскольку я начал изучать рендеринг текстуры, я понял, что glCopyTexSubImage2D() скопирует обозначенную часть экрана вверх ногами. Я попробовал пару простых вещей, которые приходили на ум, чтобы предотвратить/обойти это, но не смогли найти элегантное решение.фиксация glCopyTexSubImage2D перевернутые текстуры

  • есть две проблемы делают :: glScalef (1.0f, -1.0f, 1.0f) до рендеринга текстуры на экран: 1, я должен делать это каждый раз, когда я использую текстуры. 2, я в основном работаю с 2D-графикой и отключил обратную обработку для GL_BACKsides. Насколько это возможно, мне бы хотелось сохранить это включение и выключение.

  • преобразовал матричный режим в GL_TEXTURE и выполнил преобразование :: glScalef (1.0f, -1.0f, 1.0f) при захвате, но результаты были одинаковыми. (Я предполагаю, что матрица текстуры только имеет эффект на glTexCoord вызывает?)

Итак, как я могу исправить направления вверх-вниз текстур захватили с glCopyTexSubImage2D?

ответ

1

Для чего вы собираетесь использовать изображения с текстурой? На самом деле попытка перевернуть их вверх дном обычно требует больше работы, чем перемещение этого кода где-то в другом месте.

Если вы пытаетесь использовать изображение без его экспорта, простое отображение координат текстуры везде, где вы используете результат, было бы самым эффективным способом.

Если вы пытаетесь экспортировать его, вы либо хотите перевернуть их самостоятельно, после рендеринга.

Относительно примечания, если вы делаете 2D-игру, почему включена функция отбрасывания задней поверхности?

+0

Хорошая точка. Это был случай оптимизации догадок, я боюсь. =) Кроме того, мне не нужно было переворачивать текстуры для этой игры - пока, во всяком случае. Мне еще предстоит увидеть, насколько это будет медленнее, но тем временем, отбрасывание назад и отбрасывание, похоже, является самым простым и изящным решением. Спасибо! – zyndor

0

Если мое понимание верное, это зависит от того, где ваше происхождение. Эта функция, по-видимому, предполагает, что ваше происхождение находится в левом нижнем углу, тогда как большинство 2D-материалов предполагает начало левого верхнего угла, поэтому оно кажется перевернутым.

Предположим, вы могли бы изменить начало координат в левом нижнем углу, сделать захват, а затем изменить начало координат влево и влево, а затем выполнить разворот. Но это ужасное решение, так как вы дважды показываете рендеринг, но это может быть хорошо, если вы не планируете делать это в каждом кадре.

-1

Используйте glReadPixels() для копирования в буфер, переверните изображение, затем используйте glTexImage2D(), чтобы записать его обратно.

Смежные вопросы