Границы просмотра в любом разрешении с OpenGL ES - PullRequest
5 голосов
/ 21 сентября 2011

Мне трудно понять перспективный вид OpenGL. Я прочитал тонны информации, однако это не помогло мне добиться того, чего я добиваюсь. Это значит, что моя 3D-сцена заполняет весь экран на каждом устройстве Android.

Чтобы проверить это, я буду рисовать квад в трехмерном пространстве, который в конце должен касаться каждого угла, заполняя весь экран устройства. Затем я мог бы использовать этот квад или фактически его координаты, чтобы задать ограничивающий прямоугольник на определенном расстоянии Z, который я мог бы использовать, чтобы поместить свою геометрию и убедиться, что они заполняют мой экран. Когда размер экрана изменяется, или я запускаю его на другом разрешении экрана, я пересчитываю эту ограничивающую рамку и геометрию. Я не говорю о статической геометрии, но, например, скажу, что я хочу заполнить экран шарами, и не имеет значения, насколько они велики или как много, важно только то, что экран заполнен и нет лишних шары вне видимого усеченного конуса.

enter image description here

  • Насколько я понимаю, при указании области просмотра вы фактически привязываете значения пикселей к границам усеченного конуса. Я знаю, что на самом деле вы можете установить орфографический вид так, чтобы пиксели вашего окна соответствовали положению 3d геометрии, но я не уверен, как это работает в перспективном виде.
  • Здесь я предполагаю, что ширина и высота области просмотра должны быть сопоставлены с nearZ. Поэтому, когда шар находится в точке Z = 1f, он имеет свой оригинальный размер
  • При перемещении шарика в экран так, чтобы в направлении farZ, шарик уменьшался, чтобы сработала перспектива. Так, например, шар с Z = 51f будет казаться меньше на моем экране, и мне понадобится больше шариков, чтобы заполнить весь экран.
  • Теперь для этого я ищу фиолетовые границы
  • На самом деле мне нужны эти границы, чтобы заполнить весь экран на разных размерах усеченного (ширина х высота), в то время как угол усечения и расстояние Z для шариков всегда одинаковы
  • Полагаю, я мог бы использовать trig для вычисления этих фиолетовых границ (см. Примечание синего треугольника)
  • Правильно ли я отмечаю угол усеченного конуса, это вертикальный угол усеченного конуса?
  • Может ли кто-нибудь рассказать о значениях зеленого 1f и -1f, как я, кажется, что-то читал об этом? Похоже, какой-то скаляр, который используется для изменения размера геометрии в усеченной области?

Я действительно хочу иметь возможность программно позиционировать геометрию относительно границ области просмотра в трехмерном пространстве с любым разрешением / окном для любого произвольного устройства Android.

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

1 Ответ

2 голосов
/ 26 сентября 2011

Полагаю, этот пост с использованием gluUnproject отвечает на вопрос.

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