Построение синтезированных 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 предоставляет следующие геометрические примитивы, строящиеся на основе опорных точек:
- GL_POINTS - каждая вершина рисуется, как отдельная точка (рисунок 3.1);
Рисунок 3.1 -Геометрический примитив GL_POINT
- GL_LINES - между парой вершин рисуется отрезок прямой (рисунок 3.2);
Рисунок 3.2 - Геометрический примитив GL_LINES
- GL_LINE_STRIP - рисует связную группу отрезков от первой вершины до последней (рисунок 3.3);
Рисунок 3.3 - Геометрический примитив GL_LINE_STRIP
- GL_LINE_LOOP - как и предыдущий графический примитив, но последняя и первая вершина соединяются между собой (рисунок 3.4);
Рисунок 3.4 - Геометрический примитив GL_LINE_LOOP
- GL_TRIANGLES - каждая тройка вершин обрабатывается как треугольник (рисунок 3.5);
Рисунок 3.5 - Геометрический примитив GL_TRIANGLES
- GL_TRIANGLE_STRIP - рисуется связная группа треугольников, каждая вершина, начиная с третьей, объединяется с последней и предпоследней (рисунок 3.6);
Рисунок 3.6 - Геометрический примитив GL_TRIANGLE_STRIP
- GL_TRIANGLE_FAN - рисуется связная группа треугольников, каждая вершина, начиная с третьей, образует треугольник с первой и последней (рисунок 3.7);
Рисунок 3.7 - Геометрический примитив GL_TRIANGLE_FAN
- GL_QUADS - каждая группа из четырёх вершин образует четырёхугольник (рисунок 3.8);
Рисунок 3.8 - Геометрический примитив GL_QUADS
- GL_QUAD_STRIP - рисуется связная группа четырёхугольников, причём каждая нечётная вершина связывается с предпоследней, а чётная с предпоследней и последней (рисунок 3.9);
Рисунок 3.9 - Геометрический примитив GL_QUADS_STRIP
- 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(). Верхняя матрица при этом