исправление glCopyTexSubImage2D вверх ногами текстур - PullRequest
0 голосов
/ 27 апреля 2009

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

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

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

Итак, как мне исправить направления текстур, захваченных с помощью glCopyTexSubImage2D?

Ответы [ 3 ]

1 голос
/ 28 апреля 2009

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

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

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

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

0 голосов
/ 28 апреля 2009

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

0 голосов
/ 28 апреля 2009

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

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

...