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

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

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



локализации, разделенные пробелами.

ПРИЗНАКОМ ЗАВЕРШЕНИЯ НАБОРА цифровых данных об участке местности(листе) является строка с ключевым словом END.

Минимальное корректное содержание текстового файла в формате SXF имеет следующий вид:

.SXF 3.0

.DAT 1

.OBJ 1 LIN

1

0 0

.END

При отсутствии паспортных данных iитается, что метрика объектов задана в прямоугольной местной системе координат в метрах.

Размерность системы координат (двух- или трехмерная) и формат представления координат (целочисленные, с фиксированной точкой и т. д.) могут быть любыми и определяются в процессе обработки данных.

3ФУНКЦИИ БИБЛИОТЕКИ OPENGL, НЕОБХОДИМЫЕ ДЛЯ ПОСТРОЕНИЯ 3D ИЗОБРАЖЕНИЯ МЕСТНОСТИ ПО ЦИФРОВОЙ КАРТЕ

3.1Общие сведения о библиотеке OpenGL

OpenGL (Open Graphics Library - открытая графическая библиотека, графическое API) - спецификация, определяющая независимый от языка программирования платформонезависимый программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.

Включает более 250 функций для рисования сложных трёхмерных сцен из простых примитивов. Используется при создании компьютерных игр, САПР, виртуальной реальности, визуализации в научных исследованиях.

3.2Графические примитивы в OpenGL

Технология OpenGL предоставляет следующие геометрические примитивы, строящиеся на основе опорных точек:

  1. GL_POINTS - каждая вершина рисуется, как отдельная точка (рисунок 3.1);

Рисунок 3.1 -Геометрический примитив GL_POINT

  1. GL_LINES - между парой вершин рисуется отрезок прямой (рисунок 3.2);

Рисунок 3.2 - Геометрический примитив GL_LINES

  1. GL_LINE_STRIP - рисует связную группу отрезков от первой вершины до последней (рисунок 3.3);

Рисунок 3.3 - Геометрический примитив GL_LINE_STRIP

  1. GL_LINE_LOOP - как и предыдущий графический примитив, но последняя и первая вершина соединяются между собой (рисунок 3.4);

Рисунок 3.4 - Геометрический примитив GL_LINE_LOOP

  1. GL_TRIANGLES - каждая тройка вершин обрабатывается как треугольник (рисунок 3.5);

Рисунок 3.5 - Геометрический примитив GL_TRIANGLES

  1. GL_TRIANGLE_STRIP - рисуется связная группа треугольников, каждая вершина, начиная с третьей, объединяется с последней и предпоследней (рисунок 3.6);

Рисунок 3.6 - Геометрический примитив GL_TRIANGLE_STRIP

  1. GL_TRIANGLE_FAN - рисуется связная группа треугольников, каждая вершина, начиная с третьей, образует треугольник с первой и последней (рисунок 3.7);

Рисунок 3.7 - Геометрический примитив GL_TRIANGLE_FAN

  1. GL_QUADS - каждая группа из четырёх вершин образует четырёхугольник (рисунок 3.8);

Рисунок 3.8 - Геометрический примитив GL_QUADS

  1. GL_QUAD_STRIP - рисуется связная группа четырёхугольников, причём каждая нечётная вершина связывается с предпоследней, а чётная с предпоследней и последней (рисунок 3.9);

Рисунок 3.9 - Геометрический примитив GL_QUADS_STRIP

  1. GL_POLYGON - рисует выпуклый многоугольник (рисунок 3.10).

Рисунок 3.10 - Геометрический примитив GL_POLYGON

NURBS-технология представляет собой математическую форму, используемую для генерации поверхностей и кривых.NURBS-поверхность не проходит через опорные точки, так как её математическая модель основана на функциях, которые строят приближённые линии, имеющие первую и вторую производную (рисунок 3.11).

Рисунок 3.11 - Пример NURBS-кривой

Чаще всего рельеф описывается набором треугольников, в зависимости от размера которых достигается детализация и точность построения. В своём решении поставленной задачи я использовал геометрический примитив GL_TRIANGLES, так как при задании таких примитивов достигается наилучший уровень детализации и каждый примитив лежит в одной плоскости, что очень важно при использовании освещения в сцене.

3.3 Наиболее часто используемые функции библиотеки OpenGL

1)Voidgl Begin (GLenummode);

Отмечает начало блока вершинных данных, описывающего геометрические примитивы, используется в паре с glEnd(). Тип примитивов задается аргументом mode, который может принимать значения, описанные выше.

2)void glVertex{234}{sifd}(TYPE coords); glVertex{234}{sifd}v(const TYPE *coords);

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

3)void glNormal3{bsidf}(TYPE nx, TYPE ny, TYPE nz); void glNormal3{bsidf}v(const TYPE *v);

Устанавливает текущий вектор нормали, определяемый аргументами. Невекторная версия функции (без v) принимает три аргумента, определяющие вектор (nx,ny,nz), принимаемый в качестве нормали. В качестве альтернативы можно использовать векторную версию этой функции (с v) и передавать в качестве параметра массив, содержащий три элемента, определяющих желаемую нормаль. При использовании версий функции, работающих с типами b, s и i, параметры линейно масштабируются до диапазона [-1.0, 1.0].

)voidglPushMatrix (void);

Опускает все имеющиеся в текущем стеке матрицы на один уровень. То, какой стек является текущим, задается с помощью вызова glMatrixMode(). Верхняя матрица при этом