Настройка системы координат для просмотра в перспективе?

Я понимаю концепцию системы просмотра пирамиды; он имеет форму пирамиды, и по мере приближения объектов к центру они становятся меньше, пока, наконец, не обрезаются. Однако при использовании проекции просмотра, скажем, в OpenGL (внимание: я не использую устаревшие функции), вы настраиваете свою систему координат следующим образом:

orthoExample (слева, справа, снизу, сверху, рядом, далеко);

Это все нормально, но когда дело доходит до перспективы, все становится немного странно.

перспективаExample (field_of_view_y, аспект, близко, далеко);

Как мне настроить систему координат с помощью такой функции?!? Он не позволяет мне указывать левую, правую, нижнюю, верхнюю и т. Д. Я знаю, что перспектива - это всего лишь разновидность проекции усеченного конуса ...


person Shokwav    schedule 12.10.2012    source источник
comment
В самом деле, это не так просто, как ортогональная проекция. Я не помню математику, но вы можете взглянуть на команду gluPerspective библиотеки GLU. Это значительно упрощает настройку перспективной проекции. Если вы действительно хотите, я могу провести небольшое исследование математики и опубликовать их здесь (это не так уж сложно).   -  person Vinícius Gobbo A. de Oliveira    schedule 12.10.2012
comment
Я бы порекомендовал посмотреть GLM - библиотеку OpenGL Math. В нем есть процедуры для создания всего этого - и он ориентирован на GLSL (например, нерекомендуемые функции;)) glm .g-truc.net   -  person Mark Stevens    schedule 12.10.2012
comment
Хотел бы я, но я использую C. Я использую аналогичную библиотеку, так что не могли бы вы указать мне на аналогичные методы GLM. @ ViníciusGobboA.deOliveira: Я использую эквивалент этой функции из отдельной библиотеки, но я не понимаю, как настроить систему координат с помощью этой команды? Я понимаю, что он внутренне использует усеченную пирамиду.   -  person Shokwav    schedule 12.10.2012
comment
Я сниму пыль со своих книг и покопаюсь, как на самом деле производятся математические вычисления. У меня есть старый проект (кажется, 2009 года) по игре в снукер просто для развлечения. Я пришлю вам фрагмент кода (или весь проект, если хотите), который использует gluPerspective для настройки проекции. Это не совсем то, что вам нужно, но это может помочь нам обоим.   -  person Vinícius Gobbo A. de Oliveira    schedule 13.10.2012


Ответы (1)


Код, найденный здесь, должен прояснить вам ситуацию.

Ось Z принимается за центр проекции. tan (fov_y) * near дает вам верх (а отрицательный - низ). аспект - это отношение ширины к высоте, поэтому умножение верха на аспект дает вам право, а отрицательное значение - левое.

person beaker    schedule 12.10.2012