OpenGL. Компьютерная графика. Васильев С.А. - 32 стр.

UptoLike

Составители: 

34
Команда glFrustum () создает матрицу центральной проекции и усеченный пирамидальный объем
видимости (рис. 5). Центр проецирования
Рис. 5 Перспективная проекция и усеченный
пирамидальный объем видимости
(точка наблюдения) находится в начале системы координат. Параметры left и right задают координаты
левой и правой вертикальной плоскости отсечения. Параметры bottom и top определяют координаты
верхней и нижней плоскости отсечения. Параметры zNear и zFar задают расстояние от наблюдателя до
ближней и дальней плоскостей отсечения, причем оба значения должны быть положительными. Пара-
метры left, right, bottom и top задаются для ближней плоскости отсечения.
Внимание! В конечном итоге значение глубины (z) любой выводимой точки сцены нормируется к
возможностям буфера глубины, т.е. к значению в диапазоне от 0 до 1. Чем больше значение отношения
zNea/rzFar, тем менее эффективно будут различаться в буфере глубины, расположенные рядом поверх-
ности. Не следует задавать параметру zNear нулевое значение, так как в этом случае отношение zNear/ zFar
стремиться к бесконечности.
В библиотеке glu32.lib существует команда gluPerspective() аналогичная по функциям, что и glFrus-
tum (), но с различными входными пара-
метрами.
void gluPerspective (GLdouble fovy, GLdouble aspect,
GLdouble zNear, GLdouble zFar)
Данная команда задает усеченный пирамидальный объем видимости в видовой системе координат.
Параметр fovy определяет угол видимости градусах) вдоль оси у. Угол видимости вдоль оси х задает-
ся параметром aspect, который определяется как отношение ширины и высоты области вывода. Пара-
метры zNear и zFar задают расстояние от наблюдателя до ближней и дальней плоскостей отсечения,
причем оба значения должны быть положительными. Эквивалентность работы данной команды с ко-
мандой glFrustum (), наступает при
lef t = –right, bottom = –top, tg(fovy/zNear) = top/zNear, aspect = right/top.
Для того чтобы включить проекцию необходимо включить режим проецирования и загрузить еди-
ничную текущую матрицу преобразования. Например:
// Установка настроек области вывода
glViewport(0,0,width,height); // Выбираем матрицу проекции
glMatrixMode(GL_PROJECTION); // Делаем ее единичной
glLoadIdentity();
gluPerspective(45.0f,width/height,0.1f,100.0f);
Задняя секущая плоскость
Передняя
секущая
плоскость
zNea
r
Центр
проекции
z
botton
top
Направление
проецирования
zFa
r
y
x
Картинная
плоскость
right
left