glMatrixMode(GL_PR0JECTI0N); glLoadIdentity();
glFrustum(xmin, xmax, ymin, ymax, near, far)
Совсем не обязательно, чтобы параметры, задающие левую (xmin), правую (xmax). верхнюю (ymax) и нижнюю (ymin) грани пирамиды были симметричны относительно оси г. Точно также не требуется, чтобы формируемая в результате пирамида была симметричной (правильной) усеченной пирамидой. В разделе 5.8 будет показано, как в этом случае из матрицы простого перспективного проецирования, выведенной в разделе 5.3, выводится матрица проективного преобразования.
Во многих приложениях предпочтительнее задавать не линейные параметры, характеризующие положение углов усеченной пирамиды видимости, а угол или поле зрения. Однако если окно картинной плоскости является прямоугольником, а не квадратом, то нужно задавать пару углов зрения: один - в вертикальной плоскости, а другой - в горизонтальной (рис. 5.27). Угол в вертикальной плоскости fovy измеряется между плоскостями верхней и нижней граней пирамиды, а угол в горизонтальной плоскости - между правой и левой гранями. Эти параметры задаются в OpenGL функцией gluPerspective(fovy, aspect, near, far). Аргументы этой функции имеют следующий геометрический смысл:
fovy - угол зрения в вертикальной плоскости;
aspect - отношение ширины окна картинной плоскости к его высоте; Измерение расстоянии от камеры эквивалентно переходу от правосторонней системы координат мирового фрейма, в котором задаются объекты сцены, к левосторонней системе координат фрейма камеры
Рис. 5.26. Параметры пирамиды видимости
5.4. Проективные преобразования в OpenGL
near и far - расстояния от центра проецирования до передней и задней отсекающих плоскостей.
Параметры near и far задаются исходя из тех же соображений, что и при вызове функции glFrustum(). Сформированная по этим параметрам матрица заменяет текущую, поэтому перед вызовом функции следует выбрать режим работы с матрицами (вызвать glMatrixMode(GL PROJECTION)) и загрузить сначала единичную матрицу, а уже потом вызывать gluPerspective().