Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Панасенко Н.Д. ЭИ3-1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
9.81 Mб
Скачать

Разработка объектов сцены

На сцене расположено 6 одинаковых домов. У каждого дома имеется дверь, которая может осуществлять движение тремя способами. Помимо этого на сцене расположен куб, представляющий собой визуализацию пространства.

Дом представляет собой фигуру, представленную на рис. 2. Габариты дома – 6*2*3 м.

Для упрощения создания объекта, была описана только половина дома. Вторая половина дома была получена путем поворота на 180 градусов первой половины.

Поверхность половины дома представлена 14 треугольниками. Для двери в одной из стен имеется прямоугольной отверстие размером 0,8*1 м. В связи с этим стену с дверью пришлось представить в виде не 2 треугольников, как остальные стены, а 6 треугольников. Для того, чтобы на второй половине дома не было отверстия для двери – используется заплатка из 2 треугольников.

На дом наложена текстура, представленная на рис. 3. Ее размер – 512*512 пикселов. Имя файла – 7.bmp.

Рисование дома осуществляется в методе Draw.

Р ис.2. Дом

Рис.3. Текстура дома и двери

Для визуализации пространства используется куб размером стороны 30 м. Каждая сторона куба предствлена 2 треугольниками. На стороны куба наложены текстуры земли (bottom.bmp, размером - 634*640 пикселов ), неба (top.bmp, размером - 239*230 пикселов ) и панорамы. Причем на 4 вертикальные стороны наложена 1 и та же текстура (panorama.bmp, размером - 640*179 пикселов).

Текстура земли представлена на рис. 4.

Текстура неба представлена на рис. 5.

Текстура панорамы представлена на рис. 6.

Рис.4. Текстура земли Рис.5. Текстура неба

Рис.6. Текстура панорамы

Алгоритм движения

  • движение наблюдателя

Для описания положения наблюдателя используется матрица 4*4 viewMatrix.

В Update происходит изменение матрицы в соответствии с действиями пользователя. При нажатии на клавишу E происходит поворот наблюдателя вокруг оси Y. Для этого происходит умножение текущей матрицы viewMatrix на матрицу поворота Ryα = ,

где α=0.1рад.

П ри нажатии на клавишу Up происходит перемещение вперед, то есть вдоль оси Z. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dz=0.1рад.

П ри нажатии на клавишу Down происходит перемещение назад, то есть вдоль оси Z. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dz=-0.1рад.

При нажатии на клавишу W происходит перемещение вверх, то есть вдоль оси Y. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T = , где dy=-0.1рад.

При нажатии на клавишу Q происходит перемещение вниз, то есть вдоль оси Y. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T = , где dy=0.1рад.

При нажатии на клавишу Right происходит перемещение вправо, то есть вдоль оси X. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T= , где dx=-0.1рад.

При нажатии на клавишу Left происходит перемещение влево, то есть вдоль оси X. Для этого происходит умножение текущей матрицы viewMatrix на матрицу перемещения

T = , где dx=0.1рад.

  • движение двери

Для описания положения двери используется матрица 4*4 dverMatrix.

Сначала в Update мы задаем сферу вокруг двери и делаем проверку,подошол ли наблюдатель к двери на заданное расстояние (2,5м). Если подошел, то происходят изменения матрицы в соответствии с действиями пользователя.

При нажатии на клавишу Z происходит поворот двери вокруг оси Y на величину

- 0.009рад. Для этого происходит умножение текущей матрицы dverMatrix на матрицу поворота Ryα = , где α=-0.009рад.

При повороте матрицы происходит проверка: если угол поворота матрицы больше 0, то дверь движется на наблюдателя. Если угол поворота матрицы меньше 90 градусов, то дверь двигается в обратном направлении.

При нажатии на клавишу X происходит движение двери по оси X на величину

- 0.009рад. Для этого происходит умножение текущей матрицы dverMatrix на матрицу перемещения T= , где dx=-0.009рад. При перемещении матрицы происходит

проверка: если угол поворота матрицы больше или равен 0, то дверь движется по оси X вправо. Если угол поворота матрицы меньше или равен 0,8 рад., то дверь двигается в обратном направлении.

При нажатии на клавишу C происходит поворот двери вокруг оси Y на величину

- 0.009рад. Для этого происходит умножение текущей матрицы dverMatrix на матрицу поворота Ryα = , где α=-0.009рад. При повороте матрицы происходит проверка: если угол

поворота матрицы больше 0, то дверь движется от наблюдателя. Если угол поворота матрицы меньше 90 градусов, то дверь двигается в обратном направлении.