Что такое перспективная проекция? Это проекция трехмерных объектов на двухмерную плоскость с учетом их расстояния до точки наблюдения. Перспективная проекция представляет собой усеченную пирамиду. Таким образом, финальные размеры, проецируемого примитива зависят от расстояния до дочки наблюдения и уменьшаются с его увеличением. Задаётся перспективная проекция с помощью команд glFrustum и gluPerspective. Команда glFrustum имеет те же параметры, что и glOrtho.
procedure glFrustum(left, right, bottom, top, zNear, zFar: GLdouble); |
Параметр zNear всегда должен быть не меньше единицы и не должен быть больше zFar. Так же параметры zNear и zFar не должны быть равными между собой и не должны принимать отрицательных значений. Чтобы как можно лучше представить себе перспективную проекцию обратимся к рисунку ниже.
Данная команда достаточно гибкая. Здесь мы можем менять значения параметров left, right, bottom, top, zNear, zFar, добиваясь тем самым различных эффектов финального изображения. Но если вам понадобится создать аналог камеры или человеческого зрения, то этот способ будет нуждаться в дополнительных расчетах. Такие параметры, как, left, right, bottom, top, нужно будет рассчитывать из соотношения ширины и высоты порта просмотра, угла обзора камеры, а также параметров zNear и zFar, что не всегда удобно.
Для более удобного задания перспективной проекции в OpenGL существует команда gluPerspective, с помощью которой вы можете задать нужную проекцию без лишнего труда, все расчеты выполнит за вас команда gluPerspective.
procedure gluPerspective(fovy, aspect, zNear, zFar: GLdouble); |
Параметр fovy задает угол обзора, параметр aspect – соотношение ширины и высоты порта просмотра, параметры zNear и zFar идентичны параметрам команды glFrustum. Чтобы представить, как команда gluPerspective влияет на финальную проекцию, рассмотрим следующий рисунок.
На рисунке видно ближнюю zNear и дальнюю zFar плоскости отсечения, которые задаются соответствующими параметрами. Углы a и b вычисляются из параметров fovy и aspect. Параметр aspect так же можно представить, как соотношение углов a и b.
Таким образом, если задать параметр aspect, как соотношение ширины Width и высоты Height порта просмотра, соотношение Width и Height будет равно соотношению углов a и b.
Это дает возможность корректировать проекцию при изменении порта просмотра, тем самым сохраняя пропорции проецируемого изображения.
|