Проекционное преобразование
В 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().