logo
1 OpenGL

Проекционное преобразование

В OpenGL поддерживаются ортографическая (параллельная) и перспективная проекция. При ортографической проекции видимый объем пространства имеет форму параллелепипеда, при перспективной – усеченной пирамиды.

Ортографическая проекция задается одной из функций:

void glOrtho( GLdouble left, GLdouble right, GLdouble bottom,

GLdouble top, GLdouble near, GLdouble far )

void gluOrtho2D( GLdouble left, GLdouble right,

GLdouble bottom, GLdouble top)

Параллелепипед видимого объема ограничен плоскостями отсечения, которые параллельны осям левосторонней системы координат и задаются расстояниями left, bottom и т.д. Функция gluOrtho2D() по умолчанию устанавливает расстояния до ближней и дальней плоскостей отсечения: near=-1 и far=1.

Для задания перспективной проекции служит функция:

void gluPerspective( GLdouble fovy, GLdouble aspect,

GLdouble near, GLdouble far )

Эта функция задает видимый объем в форме усеченной пирамиды в левосторонней системе координат (рис. 1.4). Угол поля зрения (по оси у) fovy лежит в диапазоне от 0 до 180 градусов. Угол видимости по оси x задается параметром aspect (обычно он вычисляется как отношение сторон экранного окна вывода). Параметры far и near задают расстояние от наблюдателя до плоскостей отсечения по глубине и должны быть положительными. Чем больше отношение far/near, тем хуже в буфере глубины будут различаться расположенные рядом поверхности, так как по умолчанию в него записываются значения глубины, нормированные в диапазоне от 0 до 1.

Рис. 1.4. Видимый объем, устанавливаемый с помощью функции gluPerspective().

Для задания перспективной проекции есть еще одна функция, с несколько другим набором параметров (рис 5):

void glFrustum( GLdouble left, GLdouble right, GLdouble bottom,

GLdouble top, GLdouble near, GLdouble far)

Рис. 1.5. Видимый объем, устанавливаемый с помощью функции glFrustum().