Вращение всего выхода OpenGL - PullRequest
0 голосов
/ 08 февраля 2012

Внешние требования --- ты должен их ненавидеть ...

У меня есть игра OpenGL ES, в которой для рисования на экране используются EGL и OpenGL ES. У меня нет источника для этого; он поставляется в виде двоичного двоичного объекта. Я реализую интерфейсный уровень, который является посредником между вызовами игры в EGL и OpenGL и реализацией платформы.

Работает нормально. Но теперь у меня есть неожиданное внешнее требование, чтобы я мог поворачивать всю игру на 90 градусов.

Кто-нибудь может предложить какие-нибудь хорошие (простые, быстрые) способы сделать это? С головы до головы я могу подумать:

  • вставить соответствующее преобразование в матрицу проекции игры. Мне кажется, это самое быстрое решение; но я не думаю, что у меня достаточно знаний о манипуляциях с матрицей проекций, чтобы сделать это надежно. Кроме того, это может запутать игру, если она использует какие-либо вызовы OpenGL для доступа к экрану, который не проходит через матрицу проекции. (glReadPixels(), например.)

  • дать игре контекст рендеринга за пределы экрана; он рендерит там, а затем, когда игра вызывает eglSwapBuffers(), я копирую результат на экран. Рендеринг в текстуру поможет здесь. Проблемы: это повлияет на производительность, так как я эффективно делаю два прохода рисования вместо одного; и рендеринг в текстуру не стандартизирован в OpenGL ES. (Моя целевая платформа, Android, даже надежно не поддерживает общие контексты.)

  • визуализировать в цветовой буфер, затем использовать glReadPixels(), чтобы скопировать данные и выполнить программный поворот на экране. Проблемы: очень медленный, и я не могу контролировать размер буфера (то есть, если экран 640x480, и мы рисуем с поворотом на 90 °, я действительно хочу дать игре цветной буфер 480x640).

  • другой

Хаки, специфичные для игры, здесь не вариант, потому что мне нужно иметь возможность поменять двоичный файл игры на другой; это должно быть общее исправление. Изменение игры не вариант, потому что мы не можем контролировать исходный код игры.

Есть предложения? Кроме нетехнических попыток убедить уйти?

1 Ответ

0 голосов
/ 08 февраля 2012

В чем проблема, вы должны использовать glRotate вдоль оси Z ?? Подход 1 - это путь.

Пиксельные операции тяжелы, и вполне возможно, что вы можете испортить соотношение сторон и т. Д. И т. Д.

Шаги, которые входят в рисунок
1. Установите матрицу преобразования (модель / проекция)
Если ландшафт, примените glRotate 2. Установите порт просмотра (он может меняться при каждом повороте экрана)
если ландшафт - установите b как высоту / ширину соответственно если ландшафт - установите b a как height / widht соответственно 3. Нарисуйте матрицу

Когда вы поворачиваете экран, объекты отображаются снова. Так что glRotate - лучший путь.

...