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

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

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



?исании геометрического объекта. Для каждой вершины можно указывать от 2 (x,y) до 4 координат (x,y,z,w), выбирая соответствующую версию функции. Если используется версия, где в явном виде не задаются z или w, то z принимается равным 0, а w - равным 1. Вызовы glVertex*() имеют силу только между вызовами ко-

манд glBegin() и glEnd().

3)voidglPointSize (GLfloatsize);

Устанавливает длину и высоту (в пикселях) для визуализируемой точки, size должен быть больше 0.0 и, по умолчанию, равен 1.0.

4)voidglLineWidth (GLfloatwidth);

Устанавливает толщину линии в пикселях, width должно быть больше 0.0 и по умолчанию равно 1.0.

5)void glLineStipple (Glint factor, GLushort pattern);

Устанавливает текущий шаблон для отрезка. Аргумент pattern - это 16-битная серия из нулей и единиц, определяющая, как будет рисоваться отрезок. Она повторяется по необходимости для шаблонирования всего отрезка. Единица означает, что соответствующая точка отрезка будет нарисована на экране, ноль означает, что точка нарисована не будет (на попиксельной основе). Шаблон применяется, начиная с младшего бита аргумента pattern. Шаблон может быть растянут с учетом значения фактора повторения factor. Каждый бит шаблона при наложении на отрезок расценивается как factor битов того же значения, идущих друг за другом. Например, если в шаблоне встречаются подряд три единицы, а затем два нуля и factor равен 3, то шаблон будет трактоваться как содержащий 9 единиц и 6 нулей. Допустимые значения аргумента factor ограничены диапазоном от 1 до 256. Шаблонирование должно быть включено передачей аргумента GL_LINE_STIPPLE в функцию glEnable(). Оно блокируется передачей того же аргумента в glDisable(). На рисунке 4.1 изображены примеры шаблонированных отрезков.

Рисунок 4.1 - Шаблонированные отрезки

6)void glPolygonMode (GLenum face, GLenum mode);

Управляет режимом отображения для лицевых и обратных граней полигонов. Параметр face указывает, для каких граней изменяется режим отображения и может принимать значения GL_FRONT_AND_BACK (режим меняется и для лицевых и для обратных граней), GL_FRONT (только для лицевых), GL_BACK (только для обратных). Параметр mode может быть равен GL_POINT, GL_LINE или GL_FILL в зависимости от желаемого режима отображения: точки, линии или заливка. По умолчанию оба типа граней рисуются в виде заполненных областей пикселей.

7)void glPolygonStipple (const GLubyte *mask);

Определяет текущий рисунок шаблона заливки полигона. Параметр mask - это указатель на битовую карту размером 32 x 32 бита, интерпретируемую в качестве маски, накладываемой на полигон при рисовании (и при необходимости повторяемой). Там, где стоит 1 - соответствующий пиксель полигона будет нарисован, а там, где появляется 0 - пиксель нарисован не будет. Рисунок 2-12 показывает, как рисунок шаблона конструируется из символов в параметре mask. Шаблонирование полигонов включается и выключается с помощью аргумента GL_POLYGON_STIPPLE функций glEnable() и glDisable(). Интерпретация mask зависит от GL_UNPACK* параметров команды glPixelStore*().

5РАЗРАБОТКА ПРОГРАММНО-МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ

.1Разработка алгоритмов создания виртуальной модели местности

.1.1Представление 3D модели местности в виде карты высот

Для представления ландшафта чаще всего используют карту высот. Карта высот - это двумерный массив значений высот ландшафта (рисунок 5.1), взятых с определенным интервалом, т.е. каждому дискретному значению Х и Y в горизонтальной плоскости сопоставляется значение высоты.

а) б)

Рисунок 5.1 -Карта высот и ее трехмерное отображение

В данном дипломном проекте я использовал карту высот, представленную в формате MTW, в котором каждой паре координат Xи Yсопоставляется координата H.

Для построения 3D изображения ландшафта были использованы примитивыGL_TRIANGLES, т.к. при описании ландшафта с помощью треугольников достигается оптимальный уровень детализации и решается одна из основных проблем при построении 3Dсцен - каждый отдельный полигон должен лежать в одной плоскости.

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

Размерность карты высот (MxN) определяется входным файлом в формате MTW, а отображение ландшафта осуществляется с заданным шагом STEP, так что координаты и (рисунок 5.2).

Рисунок 5.2 - Сетка ландшафта

Алгоритм отображения 3Dмодели местности можно представить в следующем виде (рисунок 5.3).

Рисунок 5.3 - Схема алгоритма отображения ландшафта

5.1.2Раiет векторов нормали

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

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