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().


⇐ Предыдущая| |Следующая ⇒