Вращая glViewport? - PullRequest
       11

Вращая glViewport?

2 голосов
/ 23 февраля 2009

В среде «мультитач» любое приложение, отображаемое на поверхности, может поворачиваться / масштабироваться в направлении пользователя. Фактическое решение - нарисовать приложение на FBO и нарисовать повернутый / масштабированный прямоугольник с текстурой на нем. Я не думаю, что это хорошо для производительности, и все видеокарты не предоставляют FBO.

Идея состоит в том, чтобы обрезать окно просмотра рендеринга в направлении пользователя. Поскольку glViewport не может быть использован для этого, существует ли другой способ достичь этого?

(использовать glViewport (x, y, ширина, высота), и я хотел бы (x, y, ширина, высота, вращение от центра?))

PS: вращение вида модели или матрицы проекции не поможет, я хотел бы «повернуть план отсечения», сгенерированный glViewport. (только часть всей сцены).

Ответы [ 2 ]

2 голосов
/ 27 февраля 2009

В OpenGL нет повернутого видового экрана, вы должны обрабатывать его вручную. Я вижу следующие возможные решения:

  • Продолжайте использовать текстуры, возможно, используя glCopyTexSubImage вместо FBO, поскольку это базовая функция OpenGL. Если у ваших целевых платформ аппаратное ускорение, производительность должна быть хорошей, в зависимости от количества видов просмотра, которые вам нужны на вашем рабочем столе, так как в настоящее время это очень распространенный вариант использования.

  • Без текстур вы можете настроить свой glViewport на выравнивающий экран ограничивающий прямоугольник (rA) вашего повернутого видового экрана (rB) (задавая также правильную область тестирования ножницами). Затем нарисуйте область маскировки, возможно, только в буфере глубины или трафарета, заполняя область (rA - rB), что предотвратит дальнейшее рисование на этих пикселях. Затем нарисуйте ваше приложение, используя glRotate, чтобы настроить матрицу проекции так, чтобы рендеринг был правильно ориентирован в соответствии с rB.

2 голосов
/ 23 февраля 2009

Если у вас уже установлен код для рендеринга вашей сцены, попробуйте добавить вызов glRotate() в настройку матрицы viewmodel, чтобы «повернуть камеру» перед рендерингом сцены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...