В OpenGL такой куб видимости устанавливается системой по умолчанию. Для его принудительной установки нужно включить в программу такую последовательность операторов:

glMatrixMode(GL_PR0JECTI0N); glLoadIdentity(7;
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

В дальнейшем этот куб будем называть канонической зоной видимости (canonical view volume). Два последних аргумента в вызове glOrtho() - это расстояния до передней и задней отсекающих плоскостей, измеренные от позиции камеры в направлении отрицательной полу5.7. Матрицы параллельного проецирования оси г. Передняя отсекающая плоскость г = 1.0 находится за камерой, задняя отсекающая плоскость г = -1.0 - перед камерой. Хотя проецирующие лучи параллельны и ортогональная проекция по своим свойствам аналогична использованию телеобъектива с очень большим фокусным расстоянием, задание расстояний до передней и задней отсекающих плоскостей позволяет селектировать отображаемые объекты сцены.

Предположим, что при вызове функции gl0rtho() заданы произвольные значения аргументов:

glOrtho(xmin, xmax, ymax, ymin, lnear, lfar);

Такой набор аргументов задает правильный параллелепипед видимости, правая сторона которого, если смотреть от камеры, - это плоскость х = л-тач, левая сторона - плоскость х - хтт, верхняя грань- плоскость^ =^max, а нижняя грань- плоскость у = ут\п. Передняя и задняя отсекающие плоскости - это : = -/„ и: = -lf. Матрица проецирования, которая устанавливается при этом в OpenGL, преобразует этот параллелепипед в куб, центр которого расположен в начале координат, а ребра имеют длину 2 единицы (рис. 5.32). На этом рисунке -тах - это взятое с обратным знаком значение аргумента lfar, a rmin - взятое с обратным знаком значение аргумента lnear вызова функции gl0rtho( ).

Полученная таким способом матрица преобразует координаты вершин, описывающих объекты, которые были заданы при вызове glVertex( ), в вершины внутри канонической зоны видимости, для чего выполняются преобразования масштабирования и сдвига. В результате те вершины, которые находились внутри заданного параллелепипеда видимости, преобразуются в вершины, находящиеся внутри канонической зоны видимости, а те вершины, которые были снаружи от заданного параллелепипеда видимости, окажутся и снаружи канонической зоны видимости. Итак, мы видим, что матрица проецирования определяется заданным типом проекции и параметрами зоны видимости, переданными в качестве аргументов функции gl0rtho(), причем они специфицируются относительно камеры. Положение и ориентация камеры задаются матрицей вида. Эти две матрицы - вида и проецирования - перемножаются, и координаты объектов умножаются справа на результирующую матрицу.


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