Работа этой функции рассматривается в главе 7, там же мы разработаем более гибкие средства для установки камеры. Тем, кого интересует, какие конкретно величины функция gluLookAtO помещает в матрицу моделирования-вида, следует обратиться к упражнениям в конце раздела.

11 Ф.Хилл Глава 5. Преобразования объектов Пример 5.6.1. Установка типичной камеры Камеры часто устанавливают так, чтобы они смотрели «вниз» на сцену с какой-либо ближней позиции. На рис. 5.53 показана камера, объектив которой расположен в точке eye - (4, 4, 4) и смотрит в начало координат, причем значение параметра look - (0,1,0). Направление вверх установлено параметром up=(0,1, 0). Предположим, нам нужно, чтобы отображаемый объем имел ширину 6,4 и высоту 4,8 (при этом форматное соотношение равно 640/480), а также чтобы near - 1 и far - 50. В этом случае камеру можно установить посредством следующего кода:

g1 Ma 11xMode(GL_PR0J ЕСТION):

// set the view volume

// устанавливаем отображаемый объем

glLoadldentityO:

gl0rtho(-3.2. 3.2. -2.4. 2.4. 1. 50):

glMatrixMode(6L_M0DELVIEW):

// place and aim the camera

// размещаем и нацеливаем камеру

glLoadldentityO:

gluLookAt(4. 4. 4. 0. 1. 0. 0. 1. 0): В упражнениях показаны конкретные величины, которые при этом помещаются в матрицу моделирования-вида.

Практические упражнения 5.6.1. Что делает функция gluLookAt()?

Нам уже известно, что функция gluLookAtO строит матрицу, которая преобразует мировые координаты в координаты наблюдателя. На рис. 5.54 показана камера в качестве системы координат, подвешенной в пространстве. Ее начало координат находится в точке eye и она ориентирована с помощью своих трех взаимно перпендикулярных ортов u, V и п. Глаз камеры «смотрит» в направлении (-п). Функция gluLookAtO использует параметры eye, look и вектор up для того, чтобы сформировать векторы u, v, п в соответствии со следующими соотношениями:

n = eye - look,

Френсис Хилл

Рис. 5.S3. Установка камеры посредством функции gluLookAtQ

и = up X n,

(5.38)

V - n X u.

5.6. Рисование трехмерных сцен с применением OpenGL


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