Рисование SDL с помощью камеры Нетрудно встроить камеру в приложение, которое читает SDL-файлы, как описывалось в главе 5. Тогда там фигурируют два глобальных объекта, а именно:

Camera cam: Scene sen:

и в подпрограмме mainO SDL-файл читается и анализируется посредством функции sen.read ("myScene. dat"). И, наконец, в подпрограмме myDisplay(void) следует просто заменить glutWireTeapot(l.O) на sen. drawSceneOpenGK).

Практические упражнения

7.3.1. Реализация pitch() и yaw()

Напишите функции void Camera:: pitchCfloat angle) и void Camera:: yaw(float angle), которые осуществляют соответственно тангаж и рыскание камеры. Сделайте так, чтобы положительное значение рыскания поворачивало камеру «влево», а положительное значение тангажа поворачивало камеру «вверх».

7.3.2. Создание универсальной функции поворота rotate()

Напишите функцию void Camera:: rotate(Vector3 axis, float angle), которая поворачивает камеру на угол angle градусов вокруг оси axis. Эта функция должна осуществлять поворот всех трех осей - u, v, п - вокруг точки наблюдения (eye).

7.4. Перспективные проекции трехмерных объектов Трактуйте их в терминах цилиндра, сферы, конуса, причем всех в перспективе.

Поговорка Ашанти (Ashanti)

Располагая классом Camera, мы можем передвигаться по трехмерным сценам и уже готовы создавать картины. С помощью OpenGL мы создаем каждую картину посредством передачи вершин объектов (вроде сеток, представляющих чайник или шахматную фигуру) в графический конвейер, как это описывалось в главе 5. На рис. 7.11 демонстрируется графический конвейер, но с одним новым элементом.

Снова графический конвейер

Рис. 7.11. Снова графический конвейер Напомним, что каждая вершина v умножается на матрицу моделирования-вида (VM). Моделирующая часть этой матрицы (М) осуществляет все преобразования моделирования объекта; видовая часть матрицы ( V) предназначена для преобразования, задаваемого положением и ориентацией камеры. После выхода из этой матрицы вершина имеет координаты наблюдателя (eye coordinates) - то есть коорди-


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