2011-12-20 4 views
0

У меня, похоже, указанная проблема here (поиск «why are my spheres distorted when they get near the edge of the window?», так как есть много нерелевантного обсуждения). Решение в этой ссылке резко уменьшало FOV до 10, что, похоже, делает мою сцену довольно мелкой в ​​направлении z. Кто-то отметил, что соотношение сторон может быть выключен, но я не очень уверен, что:gluSpheres looking oblong

gluPerspective(60, (GLfloat)width/(GLfloat)height, 1, -200); 

В любом случае, при FOV 60, моя сцена выглядит следующим образом:

boo

Изменение его на 45 помогает, но сферы по-прежнему искажаются вблизи краев. Почему это? Неужели это искажение неизбежно?

+0

Ну, с точки зрения перспективы, это непростая задача. Если я не смогу сформулировать хороший ответ (или кто-то другой), позвольте мне просто упомянуть, что параметр zFar для gluPerspective должен быть ** положительным ** значением. –

ответ

2

Почему это?

Это то, как работает аффинная проекция перспективы.

Является ли это искажение неизбежным?

В случае аффинной проекции да.

Однако, используя вершинный шейдер, вы можете реализовать проекции на основе угла. Однако для этого требуется, чтобы геометрия была достаточно тесселированной. Должны быть разбиты длинные краги (например, фона вашего фона). Тесселяционный шейдер может помочь. Другой способ - отобразить в кубическую карту 5 квадратичных представлений 90 ° FOV, а затем извлечь из этой cubemap угловой проекции.