Построение синтезированных 3D изображений местности по цифровой карте

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?ной нормали. Использование истинных нормалей существенно улучшает результат визуализации, как показано на рисунках5.4 и 5.5.

Рисунок 5.4 - Полигональные нормали

Рисунок 5.5 - Истинные нормали

Аналитические поверхности - это плавные поверхности, которые описываются математическим уравнением (или некоторым набором уравнений). Во многих случаях, нормали проще всего находить для аналитических поверхностей, для которых у есть иiерпывающее описание в следующей форме:

V(s, t) = [X(s, t) Y(s, t) Z(s, t)],

где s и t определены в некотором пространстве, а X, Y и Z - дифференцируемые функции двух переменных. Чтобы вычислить нормаль, нужно найти

,

являющиеся векторами касательными к поверхности в направлениях s и t. Их векторное произведение

перпендикулярно им обоим и, как следствие, перпендикулярно поверхности. Следующая формула отражает процесс вычисления векторного произведения двух векторов.

Вероятно, что потребуется нормализовать результирующий вектор. Для нормализации вектора [x y z], необходимо вычислить его длину

и разделить на нее каждый из компонентов вектора.

В случае аналитических поверхностей, заданных в неявной форме F(x, y, z)=0найти решение значительно сложнее. В некоторых случаях можно разрешить это уравнение относительно одной из переменных, скажем z=G(x, y) и записать его в уже рассмотренной форме V(s, t) = [stG(s, t)].

В этом случае можно продолжать работу уже описанным способом.

Если невозможно привести уравнение поверхности к явной форме, то поможет тот факт, что вектор нормали можно получить как градиент

,

вычисленный в конкретной точке (x, y, z). Вычислить градиент довольно просто, однако значительно сложнее найти точку, которая лежит на поверхности.

Как указывалось ранее, вам часто требуется находить нормали к поверхностям, заданным в виде полигональных данных, для того, чтобы они выглядели гладкими, а не сегментированными. В большинстве случаев простейший способ сделать это - вычислить вектор нормали каждого полигонального фрагмента поверхности, а затем усреднить нормали соседних фрагментов, как показано на рисунке 5.6.

Рисунок 5.6 - Усреднение векторов нормали

На рисунке 5.6 вершины, для которых выполняется усреднение векторов нормали, обведены кружком (где ni-вектор нормали полигона, в данном случае треугольника). В зависимости от расположения вершины можно выделить 3 случая усреднения векторов нормали:

Вершина имеет координаты (X=0&Y=0) | (X=0&Y=maxY)| (X=maxX&Y=0) | (X=maxX&Y=maxY), тогда результирующий вектор нормали для этой вершины будет иметь вид: .

Координаты вершины удовлетворяют одному из следующих условий (X=0&Y>= STEP&Y=STEP&X<=maxX-STEP), тогда результирующий вектор нормали для этой вершины будет иметь вид: .

Координаты вершины удовлетворяют следующему условию (X >= STEP& Y >= STEP& X <= maxX - STEP& Y <= maxY - STEP),тогда результирующий вектор нормали для этой вершины будет иметь вид: .

5.1.3Поворот и перемещение камеры в пространстве

Любой хороший 3D движок должен предоставлять пользователю возможность перемещаться в 3Dпространстве . Одна из возможностей сделать это - перемещать камеру и перерисовывать 3D среду относительно её положения. Это медленно выполняется и тяжело запрограммировать. Поэтому следует делать так:

Вращать и проецировать позицию камеры следуя командам пользователя.

Вращать мир вокруг начала координат противоположно вращению камеры (это даёт иллюзию того, что повернулась камера).

Переместить мир способом, противоположным перемещению камеры (опять-таки, это даёт иллюзию того, что переместилась камера).

Алгоритмы процедур поворота камеры влево и вправо (рисунок 5.7 а, б), перемещения камеры вперед и назад (рисунок 5.8 а, б).

Рисунок 5.7 - Схемы алгоритмов поворота камеры

Рисунок 5.8 -Схемы алгоритмов перемещения камеры

В схемах алгоритмов (рисунок 5.7 а, б) переменные yrot и rotateотвечают за угол поворота камеры.

В схемах алгоритмов (рисунок 5.8 а, б) переменные xpos и zpos отвечают за перемещение камеры вдоль направления векторов X и Z.

После выполнения процедур поворота и перемещения камеры вызывается процедура перерисовки сцены.

5.2Разработка программного обеспечения

Жизненный цикл ПО - это период от момента появления идеи создания ПО до момента завершения его поддержки фирмой разработчиком или фирмой, выполнявшей сопровождение.

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

На рисунке 5.6 представлены этапы каскадной(водопадной) модели жизненного цикла процесса разработки ПО:

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

)Анализ требований и определение спецификаций. Спецификация - точное формализованное описание фу