
- •Аннотация
- •Содержание
- •1. Задание кафедры
- •2. Постановка задачи
- •3. Математическая модель
- •4. Описание алгоритмов
- •4.1.Алгоритм разбиения сферической поверхности на примитивы
- •4.2.Алгоритм разбиения цилиндрической поверхности на примитивы
- •4.3.Алгоритм вращения камеры
- •5.1.2. Управление мышью
- •5.2. Структура по
- •5.3. Используемые технологии
- •5.3.1.Используемые функции DirectX 9
- •Vertexprocessing, &d3dpp, &d3dDevice );
- •6. Чертеж сцены
- •7. Текст программы
- •8. Контрольный пример
- •9. Библиографический список
4. Описание алгоритмов
4.1.Алгоритм разбиения сферической поверхности на примитивы
В силу симметричности сферы, разобьем на примитивы часть сферы, лежащую в одном октанте, а потом семь раз отобразим эту часть.
Пусть центр сферы лежит в начале координат, тогда создадим два счетчика, изменяющихся на определенный угол mGridAngle, вращаясь относительно осей X и Y соответственно. Таким образом, при изменении двух счетчиков на один шаг, имеем четыре точки на сферической поверхности, определяющие вершины двух треугольников с одной одинаковой стороной. Пройдя обоими счетчиками угол π/2, получим разбиение части сферической поверхности на примитивы (треугольники).
4.2.Алгоритм разбиения цилиндрической поверхности на примитивы
Аналогично, в силу симметричности цилиндрической поверхности, разобьем на примитивы часть цилиндрической поверхности, лежащую в одном октанте, а потом три раза отобразим эту часть.
Пусть ось вращения цилиндрической поверхности совпадает с осью X, тогда создадим два счетчика. Первый будет изменятся на определенный угол nGridAngle, вращаясь относительно оси X. Второй будет проходить всю длину цилиндра по оси X с шагом nGridX. Таким образом, при изменении двух счетчиков на один шаг, имеем четыре точки на цилиндрической поверхности, определяющие вершины двух треугольников с одной одинаковой стороной. Пройдя обоими счетчиками угол π/2, получим разбиение части цилиндрической поверхности на примитивы (треугольники).
4.3.Алгоритм вращения камеры
Камера в Direct3D задается непосредственным положением камеры в пространстве (eye), т.е. откуда происходит обзор сцены, и точку в пространстве, на которую направлена камера.
При вращении камеры точка eye (положение камеры) остается постоянной, а изменения координаты точки at задают вращение взгляда.
4.4.Алгоритм движения камеры
Имея необходимые приращения координат камеры по основным осям и прибавляя их к имеющимся значениям положения точки наблюдения и направления взгляда мы получаем движение камеры в пространстве.
5. Описание структуры ПО
5.1. Пользовательское управление
Пользовательский интерфейс данной программы предполагает управление визуализируемой сценой с помощью клавиатуры и мыши. Управление сценой включает в себя:
- включение и выключение источников света в визуализируемой сцене.
- вращение объекта сцены относительно трех осей координат этого объекта.
- движение камеры (относительно направления обзора камеры): вперед, назад, вправо, влево, вверх, вниз.
- изменение направления обзора камеры.
5.1.1.Управление с клавиатуры
"1" – клавиша включает (выключает) точечный источник света, если он выключен (включен).
"2" – клавиша включает (выключает) прожекторный источник света, если он выключен (включен).
"3" – клавиша включает (выключает) направленный источник света, если он выключен (включен).
"x" – клавиша увеличивает скорость вращения относительно оси x объекта (доступные скорости: 0,1,2,3), при нажатии на "x" на 3 скорости скорость вращения становиться 0.
"y" – клавиша увеличивает скорость вращения относительно оси y объекта (доступные скорости: 0,1,2,3), при нажатии на "y" на 3 скорости скорость вращения становиться 0.
"z" – клавиша увеличивает скорость вращения относительно оси z объекта (доступные скорости: 0,1,2,3), при нажатии на "z" на 3 скорости скорость вращения становиться 0.
"▲" – клавиша двигает камеру вперед, относительно направления обзора камеры.
"▼" – клавиша двигает камеру назад, относительно направления обзора камеры.
"◄" – клавиша двигает камеру влево, относительно направления обзора камеры.
"►" – клавиша двигает камеру вправо, относительно направления обзора камеры.
"Page Up" – клавиша двигает камеру вверх, относительно направления обзора камеры.
"Page Down" – клавиша двигает камеру вниз, относительно направления обзора камеры.