Перспектива.
При выполнении предыдущей лабораторной работы использовались параллельная (glOrtho) и центральная (glFrustum) проекции для задания перспективы. В библиотеке GLU для этой цели служит функция gluPerspective, имеющая следующие 4 параметра: fovy – вертикальный угол конуса обзора; aspect – отношение размера области графического вывода по горизонтали к размеру по вертикали; near – расстояние до передней плоскости отсечения; far – расстояние до задней плоскости отсечения: gluPerspective(fovy, aspect, near, far) Для задания области отсечения графического вывода используется функция glViewPort. Моделирование камеры. В OpenGL точка обзора по умолчанию располагается в центре координат. Направление зрения – вдоль оси Z противоположно ее направлению (т.е. все, что рисуется, мы видим из центра координат). Для моделирования камеры можно использовать видовые преобразования (матрица MODELVIEW): glMatrixMode(GL_MODELVIEW); //видовая матрица glLoadIdentity(); //установим единичную матрицу glTranslatef(0, 0, -10); //сдвиг по оси Z вглубь экрана glRotatef(27, 1, 0, 0); //поворот вокруг оси X glRotatef(-19, 0, 1, 0); //поворот вокруг оси Y Теперь наблюдатель (камера) как бы находится на расстоянии 10 единиц от центра координат (и значит от плоскости изображения), причем повернута относительно вертикали на 27 градусов, и развернута в горизонтальной плоскости на 19 градусов. При этом камера всегда смотрит в центр координат. Для моделирования камеры, которая направлена в произвольную точку пространства и расположена в заданном месте, удобно использовать функцию библиотеки GLU – gluLookAt, например: glMatrixMode(GL_MODELVIEW); //видовая матрица glLoadIdentity(); //установим единичную матрицу gluLookAt (x, y, z, //местоположение камеры xp, yp, zp, //камера смотрит в эту точку 0, 1, 0); //направление вектора «вверх» Функция имеет 9 параметров: первые три параметра определяют координаты местоположения камеры; вторая тройка параметров задает координаты точки, в которую нацелена камера; последние три параметра – направление вектора «вверх» – используются для поворотов изображения в плоскости проецирования. Например: gluLookAt (x, y, z, xp, yp, zp, 1, 0, 0); определяет поворот изображения на 90 градусов (обычно Вы фотографируете, держа фотоаппарат горизонтально, но иногда бывает удобнее развернуть его вертикально, чтобы сфотографировать, например, высокое дерево – такой поворот и имеется в виду в примере). Направление вектора «вверх» может быть любым, но не должно быть параллельно вектору нормали к плоскости наблюдения. Удобным является выбор вектора «вверх» параллельным оси Y, т.е. (0, 1, 0).
Задания к лабораторной работе. Задание 1. Установите перспективу в соответствии с вариантом. Задание 2. Пользуясь командами библиотеки glu изобразите рисунок в соответствии с вариантом. Задание 3. Установите камеру таким образом, чтобы она была направлена в центр Вашего изображения. Задание 4. Реализуйте перемещение камеры относительно объекта: · Объезд камеры вокруг объекта; · Приближение/удаление камеры относительно объекта; Задание 5. Реализуйте движение объекта относительно камеры: · Движение объекта влево/вправо относительно камеры; · Вращение объекта вокруг своей оси. Варианты к заданиям лабораторной работы. 1 вариант. Угол вертикального обзора 45 градусов. Расстояние до передней плоскости отсечения: 3 Расстояние до задней плоскости отсечения: 10 Объект «Космический корабль» 2 вариант. Угол вертикального обзора 40 градусов. Расстояние до передней плоскости отсечения: 5 Расстояние до задней плоскости отсечения: 10 Объект «Солнечная система» 3 вариант. Угол вертикального обзора 30 градусов. Расстояние до передней плоскости отсечения: 6 Расстояние до задней плоскости отсечения: 12 Объект «Тележка» 4 вариант. Угол вертикального обзора 25 градусов. Расстояние до передней плоскости отсечения: 3 Расстояние до задней плоскости отсечения: 8 Объект «Настольная лампа» 5 вариант. Угол вертикального обзора 35 градусов. Расстояние до передней плоскости отсечения: 2 Расстояние до задней плоскости отсечения: 9 Объект «Ваза»
|