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