Границы области просмотра в любом разрешении с OpenGL ES

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

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

введите здесь описание изображения

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

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

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


person Will Kru    schedule 20.09.2011    source источник


Ответы (1)


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

person Will Kru    schedule 26.09.2011