Помощь в написании студенческих работ
Антистрессовый сервис

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

ДипломнаяПомощь в написанииУзнать стоимостьмоей работы

Согласно исследованиям Всемирного фонда безопасности полетов, почти 75% аварий летательных аппаратов при заходе на посадку и посадке, включая столкновение с землей в управляемом полете, происходят в тех аэропортах, где недоступны или отсутствуют приборы точного захода на посадку. Практически все эти аварии происходят в условиях плохой видимости. Только в США зарегистрированы 58 аэропортов… Читать ещё >

Построение синтезированных 3D изображений местности по цифровой карте (реферат, курсовая, диплом, контрольная)

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Рязанский государственный радиотехнический университет

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к квалификационной работе на соискание степени бакалавра

на тему

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

по цифровой карте

Студент Алексин А.А.

Руководитель работы

Елесина С. И)

Реферат

Пояснительная записка 147 с., 37 рис., 5 табл., 16 источников, 2 прил.

КАРТА (МАТРИЦА) ВЫСОТ, ЦИФРОВАЯ КАРТА, СИНТЕЗИРОВАННОЕ 3DИЗОБРАЖЕНИЕ МЕСТНОСТИ, ЛАНДШАФТ, ПРОГРАММНЫЙ СТЕНД В данном дипломном проекте выполнена разработка программного стенда, предназначенного для построения синтезированных 3D изображений местности по цифровой карте. Программный стенд обеспечивает возможность построения 3D ландшафта местности по цифровой карте, загруженной из файла, имитации полета летательного аппарата, наложения текстуры на поверхность ландшафта для придания реалистичности. Проведены исследования для определения оптимальных параметров детализации.

Результаты будут использоваться в НИР проводимой на кафедре ЭВМ ФГБОУ ВПО «РГРТУ».

The abstract

Explanatory note 147pages, 46 figures, 5 tables, 16 sources, 2 encl.

MAP (MATRIX) OF HEIGHTS, DIGTAL MAP, SYNTHESIZED 3D THE DISTRICT IMAGE, LANDSCAPE, PROGRAM STAND

In this project development of the program stand intended for creation of synthesized 3D of images of the district on the digital map is executed. The program stand provides construction possibility 3D a district landscape according to the digital map loaded from the file, imitation of flight of the aircraft, structure imposing on a landscape surface for realness giving. Researches for determination of optimum parameters of specification are carried out.

Results will be used in research and development.

  • 1 ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ
  • 2 ФОРМА ПРЕДСТАВЛЕНИЯ МАТРИЦЫ ВЫСОТ
  • 2.1 Общие сведения
  • 2.2 Структура формата в текстовой (символьной) форме представления
  • 2.3 Общий вид текстового файла формата SXF
  • 3 ФУНКЦИИ БИБЛИОТЕКИ OPENGL, НЕОБХОДИМЫЕ ДЛЯ ПОСТРОЕНИЯ 3D ИЗОБРАЖЕНИЯ МЕСТНОСТИ ПО ЦИФРОВОЙ КАРТЕ
  • 3.1 Общие сведения о библиотеке OpenGL
  • 3.2 Графические примитивы в OpenGL
  • 3.3 Наиболее часто используемые функции библиотеки OpenGL
  • 4 РАЗРАБОТКА ВАРИАНТОВ УЧЕТА И ОТОБРАЖЕНИЯ ОБЪЕКТОВОЙ ИНФОРМАЦИИ ЦИФРОВОЙ КАРТЫ МЕСТНОСТИ
  • 4.1 Структура данных об объектах карты
  • 4.1.1 Структура справочных данных
  • 4.1.2 Структура семантики (атрибутов) объекта
  • 4.1.3 Структура вектора привязки 3D модели объекта
  • 4.1.4 Структура параметров отображения (условного знака)
  • 5 РАЗРАБОТКА ПРОГРАММНО-МАТЕМАТИЧЕСКОГО ОБЕСПЕЧЕНИЯ
  • 5.1 Разработка алгоритмов создания виртуальной модели местности
  • 5.1.1 Представление 3D модели местности в виде карты высот
  • 5.1.2 Расчет векторов нормали
  • 5.2 Разработка программного обеспечения
  • 5.2.1 Tao Framework
  • 6 РАЗРАБОТКА ПРОГРАММНОЙ ДОКУМЕНТАЦИИ
  • 6.1 Руководство оператора
  • 6.1.1 Назначение программы
  • 6.1.2 Условия выполнения программы
  • 6.1.3 Выполнение программы
  • 6.1.4 Сообщения оператору
  • 6.2 Руководство программиста
  • 6.2.1 Назначение и условия применения программы
  • 6.2.2 Характеристики программы
  • 6.2.3 Обращение к программе
  • 6.2.4 Входные и выходные данные
  • 6.2.5 Сообщения
  • 6.3 Описание применения
  • 6.3.1 Назначение программного стенда
  • 6.3.2 Условия применения
  • 6.3.3 Описание задачи
  • 6.3.4 Входные и выходные данные
  • 7 ПРОГРАММА И МЕТОДИКА ИСПЫТАНИЙ
  • 7.1 Объект испытаний
  • 7.2 Цель испытаний
  • 7.3 Требования к программе
  • 7.4 Требования к программной документации
  • 7.5 Средства и порядок испытаний
  • 7.6 Методы испытаний
  • 7.6.1 Проверка процедуры загрузки и запуска программного стенда
  • 7.6.2 Проверка процедуры загрузки карты высот из файла и отображения построенного 3D изображения
  • 7.6.3 Проверка процедуры загрузки текстуры
  • 7.6.4 Проверка процедуры смены типов отображаемых примитивов
  • 7.6.5 Проверка процедуры изменения уровня детализации
  • 7.6.6 Проверка процедуры отображения летательного аппарата
  • 7.6.7 Проверка процедуры записи маршрута летательного аппарата
    • 7.6.8 Проверка процедуры воспроизведения маршрута летательного аппарата 63
  • 7.6.9 Проверка процедуры отображения области визирования бортовой камеры летательного аппарата
  • 7.6.10 Оценка комплектности и качества документации
  • 7.7 Тестирование методом «белого ящика». Способ базового пути
  • 7.8 Тестирование методом «черного ящика»
  • 8 ЭКСПЕРИМЕНТАЛЬНЫЕ ИССЛЕДОВАНИЯ
    • 8.1 Построение синтезированных 3D изображений местности по цифровой карте
      • 8.1.1 Экспорт карты высот в ГИС Панорама
      • 8.1.2 Загрузка карты высот в программном стенде
      • 8.1.3 Загрузка текстуры
    • 8.2 Определение зависимости частоты кадров от уровня детализации и от типа отображаемых примитивов
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Требования к пространственной геоинформации, содержащейся в цифровых картах, географических базах данных и ГИС в целом постоянно повышаются. Одной из наиболее насущных задач является поддержание данных в актуальном состоянии. Кроме того, рост числа потребителей геоинформации с разным уровнем подготовки также делает все более важной задачу представления и интерпретации пространственных данных, лежащих в основе ГИС.

Еще недавно в геоинформационных системах, как правило, применялись двумерные пространственные данные и так 2,5- мерное пространство, когда величина Z атрибутивно привязана к точке (X, Y), часто через цифровые модели рельефа. В интегрированной фотореалистичной информационной среде, становление которой мы сейчас наблюдаем, осуществляется переход к полноценным трехмерным данным и, более того, с учетом временного параметра, — к многомерным операциям.

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

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

Целью данного дипломного проекта является построение 3D изображения местности по карте высот, хранящейся в формате SXF, а так же моделирование полета летательного аппарата над этой местностью.

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

· все данные содержатся в одном файле;

· вся информация об отдельном объекте хранится в отдельной записи; нет адресных ссылок между частями файла или разными файлами, что обеспечивает корректную обработку данных после сбоев программных или аппаратных средств;

· формат SXF позволяет хранить метрику объектов в трехмерной системе координат в целочисленном виде или с плавающей точкой, что позволяет применять его для построения карт повышенной точности и решения других задач;

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

программный стенд изображение местность цифровой

1 ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ

Актуальность выбранной темы выпускной квалификационной работы обуславливается общими тенденциями распространения систем синтезированного обзора (видения). Система синтезированного обзора (Synthetic Vision Systems) — это технология, которая позволяет повысить безопасность полетов и упорядочить действия по управлению летательного аппарата в условиях сниженной видимости. Хотя нет единого, принятого всеми, определения, что понимать под синтезированным обзором, но есть общий для всех определений и моделей элемент — это созданное компьютером на основе навигационных данных изображение той внешней среды, которую пилот может видеть из своей кабины. Почти 50 лет назад, задолго до появления термина «синтезированный обзор», уже существовали предположения о возможности создания такой технологии. Использование моделей Системы синтезированного обзора на борту ЛА началось в начале 1990;х, когда появились значительные достижения в определении точного местоположения летательного аппарата в масштабе реального времени, хранении данных и представлении интегрированных навигационных данных в масштабе реального времени. Система способствует обеспечению управления и контроля, ситуационной осознанности и позволяет осуществлять контроль достоверности данных через интеграцию изображения на основе сенсорных данных.

Согласно исследованиям Всемирного фонда безопасности полетов, почти 75% аварий летательных аппаратов при заходе на посадку и посадке, включая столкновение с землей в управляемом полете, происходят в тех аэропортах, где недоступны или отсутствуют приборы точного захода на посадку. Практически все эти аварии происходят в условиях плохой видимости. Только в США зарегистрированы 58 аэропортов специальной категории, не располагающих приборами для обеспечения точной посадки. Для них было бы ценным получение дополнительных возможностей при посадке. Технология Системы синтезированного обзора увеличивает безопасность, компенсируя недостаток информации в условиях пониженной видимости. Чтобы минимизировать вероятность столкновения с землей в управляемом полете, Система должна обеспечить летчику постоянное осознание следующих условий:

· расстояние между планируемой траекторией полета и землей;

· отклонение летательного аппарата от траектории полета;

· текущее и прогнозируемое расстояние между летательным аппаратом и землей.

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

То есть, такая система должна обеспечивать 2 возможности:

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

· полет в условиях предельно малой видимости.

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

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

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

Основное назначение программного стенда — построение 3D изображения местности, поэтому основным требованием к программе является реалистичность построенного изображения. Это может быть достигнуто путем добавления освещения в сцену и загрузки изображения местности. Для этого необходимо решить задачи расчета векторов нормали для каждого элемента 3Dизображения местности, размещения источника света и задания его параметров, совмещения построенного 3Dландшафта местности с его графическим изображением. Так же необходимо предусмотреть построение модели летательного аппарата и имитацию его полета над построенным ландшафтом местности.

Программа должна быть разработана на языке C#.NET в среде программирования Microsoft Visual Studio 2010 для операционной системы Windows, иметь удобный пользовательский интерфейс.

2 ФОРМА ПРЕДСТАВЛЕНИЯ МАТРИЦЫ ВЫСОТ

2.1 Общие сведения

Открытый формат обладает свойствами, которые позволяют на его основе строить архив электронных карт с применением различных технических средств и выполнять обмен пространственными данными между различными ГИС. К этим свойствам относятся следующие:

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

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

· состав паспортных данных может расширяться для учета развития информационного обеспечения путем применения ключевой формы представления характеристик;

· формат не включает в себя описание визуального представления объектов электронной карты, которое может быть различным даже на одной и той же модели ЭВМ, но имеющей различные средства отображения, но формат позволяет организовать связь данных об объекте и форм его представления через таблицы классификаторов, что может быть использовано на этапе применения электронных карт.

Условный код формата — SXF (Storageande Xchange Format — формат хранения и обмена).

2.2 Структура формата в текстовой (символьной) форме представления

Формат SXF позволяет записывать цифровые векторные данные о местности и ситуации на ней в виде текстового файла. Данная возможность предназначена для обеспечения процесса обмена данными между ГИС различного назначения, работающих на разных аппаратно-программных платформах.

2.3 Общий вид текстового файла формата SXF

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

.SXF редакция_формата или .SIT редакция_формата

Р001 номенклатура

Р101 В L юго-западного угла

Р102 В L северо-западного угла

Р207 знаменатель_масштаба

.DAT число_объектов_карты

.OBJ код_объектахарактер_локализации

.KEY собственный_номер_объекта

.GEN нижняя_граница_видимостиверхняя_граница_видимости

.GRP номер_группы_объектов

.МЕТ число_подобъектов число_точек_объекта

x y H или B L H (в зависимости от системы координат)

число_точек подобъекта (если число_подобъектов>0)

x y H или B L H

.SEM число характеристик код_характеристикизначение_характеристики

.IMG число_примитивов

_название_примитивачисло_параметров название_параметразначение_параметра

.OBJ код_объектахарактер_локализации

.END

Если текстовое представление файла начинается с .SXF, то оно означает, что в файле записаны цифровые векторные данные о местности.

Если текстовое представление файла начинается с .SIT, то это означает, что в файле записаны цифровые векторные данные о ситуации на местности.

Текстовый файл в формате SXF состоит из набора строк переменной длины в кодах ASCII. Строки должны заканчиваться управляющими кодами «х0A0D» .

В начале строки может стоять символ «точка», за которым следует ключевое слово (SXF (SIT), DAT, OBJ, KEY, GEN, MET, SEM, END и т. п.) или значения соответствующих полей данных о листе или объекте.

Допускается наличие пустых строк, содержащих пробелы и символы конца строки, и строк-комментариев, начинающихся с символа «//» .

Обязательными являются строки с ключевыми словами SXF (SIT), DAT, OBJ, END.

ПЕРВАЯ СТРОКА текстового файла должна содержать ключевое слово SXF (SIT) и редакцию формата (например: «3.0»), отделенную пробелом (пробелами).

В начале файла должны содержаться паспортные данные о листе, затем идут данные об объектах.

РАЗДЕЛ ПАСПОРТНЫХ ДАННЫХ является не обязательным и может отсутствовать.

ОПИСАНИЕ ОБЪЕКТОВ КАРТЫ начинается со строки, содержащей ключевое слово DAT и количество объектов, отделенное пробелом (пробелами). Данная строка является обязательной.

ОПИСАНИЕ ОТДЕЛЬНОГО ОБЪЕКТА начинается со строки, содержащей ключевое слово OBJ, классификационный код объекта и характер локализации, разделенные пробелами.

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

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

.SXF 3.0

.DAT 1

.OBJ 1 LIN

0 0

.END

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

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

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);

void 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].

4) voidglPushMatrix (void);

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

5) voidglPopMatrix (void);

Выкидывает верхнюю матрицу из стека, тем самым, уничтожая ее содержимое. Верхней становится матрица, которая занимала второе сверху место в стеке. Текущий стек задается функцией glMatrixMode (). Если стек содержит только одну матрицу, вызов glPopMatrix () сгенерирует ошибку.

6) void glRotate{fd} (TYPE angle, TYPE x, TYPE y, TYPE z);

Умножает текущую матрицу на матрицу, которая поворачивает объект (или локальную координатную систему) в направлении против часовой стрелки вокруг луча из начала координат, проходящего через точку (x, y, z). Параметр angle задает угол поворота в градусах.

7) void glTranslate{fd} (TYPE x, TYPE y, TYPE z);

Умножает текущую матрицу на матрицу, передвигающую (переносящую) объект на расстояния x, y, z, переданные в качестве аргументов функции, по соответствующим осям (или перемещает локальную координатную систему на теже расстояния).

8) void glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);

Устанавливает текущий цвет очистки буфера цвета в RGBA — режиме. Если необходимо, значения red, green, blue и alpha приводятся к диапазону [0, 1]. Цвет очистки по умолчанию черный, то есть (0.0,0.0,0.0,0.0).

9) void gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz);

Задает видовую матрицу и умножает на нее текущую матрицу. Выбранная точка обзора задается аргументами eyex, eyey и eyez. Аргументы centerx, centery и centerzзадают любую точку на линии обзора. Аргументы upz, upyи upz определяют, какое направление считается верхним (то есть направление от дна до вершины объема видимости).

10) voidglEnable (GLenumcap);

voidglDisable (GLenumcap);

glEnable () включает механизм (GL_DEPTH_TEST, GL_LINE_STIPPLE, GL_LIGHTING и др.), glDisable () выключает его.

11) void glLight{if} (GLenum light, GLenum pname, TYPE param);

void glLight{if}v (GLenum light, GLenum pname, TYPE *param);

Создает источник, задаваемый параметром light (который может принимать значения GL_LIGHT0, GL_LIGHT1, …, GL_LIGHT7.В параметре param задается значение или значения, в которые следует установить характеристику pname. Если используется векторная версия функции, param представляет собой вектор величин, а если невекторная, то param — одно единственное значение. Невекторная версия функции может использоваться только для указания параметров, чье значение выражается одним числом.

4 РАЗРАБОТКА ВАРИАНТОВ УЧЕТА И ОТОБРАЖЕНИЯ ОБЪЕКТОВОЙ ИНФОРМАЦИИ ЦИФРОВОЙ КАРТЫ МЕСТНОСТИ

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

4.1 Структура данных об объектах карты

Данные об объектах карты располагаются между записями с ключевыми словами DAT и END.

Количество объектов карты указывается после ключевого слова DAT и отделяется одним или несколькими пробелами.

Данные об отдельном объекте карты состоят из справочных данных, метрики (координат объекта) и семантики (атрибутов объекта). Объекты пользовательских тематических карт дополнительно могут содержать описание условного знака (способа отображения) объекта на карте.

4.1.1 Структура справочных данных

Данные об отдельном объекте начинаются с записи с ключевым словом OBJ. В этой записи указываются классификационный код объекта и характер локализации, разделенные пробелами.

Формат записи имеет вид:

.OBJ классификационный_код_характер_локализации Классификационный код определяет разновидность объектов.

Характер локализации уточняет правила метрического описания (координат)объектов и может принимать следующие значения:

LIN — линейные объекты,

SQR — площадные (первая и последняя точка метрики совпадают),

DOT — точечные,

TIT — подписи,

VEC — векторные объекты (имеют только две точки),

MIX — шаблоны.

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

Собственный номер объекта указывается в записи следующего вида:

.KEY собственный_номер_объекта Собственный номер имеет вид целого положительного числа (до 2 147 483 647). Он может применяться в процедурах обновления данных и для организации логических связей с другими объектами или записями внешней базы данных.

При добавлении на карту новых объектов номер объекта формируется автоматически.

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

Диапазон границ видимости указывается в записи следующего вида:

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

Номер группы объектов указывается, когда несколько объектов должны быть логически связаны. Формат записи имеет вид:

.GRP номер_группы Номер группы — это целое число от 0 до 65 535.

Номер слоя для объекта заданного в виде графических приметивов должен указываться в записи следующего вида:

.SEG условное_имя_слоя Условное имя слоя должно соответствовать условному имени слоя в классификаторе уловных знаков.

Признак масштабируемости для объекта заданного в виде графических примитивов должен указываться в записи следующего вида:

.SCL признак_масштабируемости.

Признак масштабируемости принимает значения ON — если объект масштабируемый или OFF — если объект не масштабируемый.

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

.ALG признаки выравнивания по горизонтали и вертикали номер_подобъекта Признак выравнивания по горизонтали принимает следующие значения:

LEFT — подпись выровнена по первой точке метрического описания объекта;

RIGHT — подпись выровнена по второй точке метрического описания объекта;

CENTER — подпись выровнена по середине метрического описания объекта.

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

TOP — подпись находится под метрикой объекта;

BOTTOM — подпись находится над метрикой объекта;

BASE — подпись находится на базовой линии (метрика объекта проходит по основанию символов подписи);

MIDDLE — подпись выровнена по средней линии (метрика объекта проходит посередине символов подписи).

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

Если у объекта нет записи с признаком выравнивания или отсутствует признак по какому-либо направлению, то применяются следующие значения выравнивания :

— по горизонтали: LEFT;

— по вертикали: BASE.

Номер подобъекта может отсутствовать, если это главный объект.

Если по метрике объектов при визуализации должен динамически строиться сглаживающий сплайн (срезающий углы ломаной), то указывается следующая запись:

.SPL SMOOTH

Если строится огибающий сплайн (проходящий через все точки объекта), то запись имеет вид:

.SPL POINTS

4.1.2 Структура семантики (атрибутов) объекта

Семантические данные об объекте начинаются с записи вида:

.SEM число_характеристик Число характеристик — это целое положительное число.

Далее идет описание каждой характеристики в виде:

Код_характеристики Значение_характеристики Код характеристики — это целое число от 0 до 65 535.

Значение характеристики — это любое символьное выражение, включающее в себя цифры, буквы, пробелы и специальные символы (+ -. / и так далее).

Объект может не иметь семантических характеристик, в этом случае запись с ключевым словом SEM может не указываться.

За описанием семантики объекта может идти описание метрики объекта (.MET), или описание следующего объекта (.OBJ), или данные о привязке 3D-модели (.V3D), или параметры условного знака (.IMG), или конец набора данных (.END).

4.1.3 Структура вектора привязки 3D модели объекта

На основании данных векторной карты местности может строиться трехмерная модель местности. Большинство объектов местности на трехмерной модели изображаются типовыми трехмерными знаками (шаблонами) из библиотеки трехмерных знаков.

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

Описание привязки трехмерной модели объекта имеет следующий вид: .V3D идентификатор_моделиимя_файла_библиотеки смещение_Xсмещение _Yсмещение_Hугол_оси_X

Данные занимают две строки. В первой строке после ключевого поля .V3Dуказывается числовой идентификатор модели в библиотеке и имя файла библиотеки. Во второй строке указывается смещение относительно первой точки метрики объекта в метрах по трем осям и угол поворота оси X модели относительно оси X карты в градусах. Значения смещений могут быть целыми числами или с дробной частью.

4.1.4 Структура параметров отображения (условного знака)

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

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

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

Кроме того, данный тип объектов может применяться для быстрого конвертирования данных из форматов типа DXF без предварительной подготовки таблиц классификации объектов. Классификационный код объекта в этом случае устанавливается равным нулю, а номер слоя содержится в записи с ключевым словом .SEG.

Параметры вида объекта начинаются с записи вида:

.IMG число_примитивов Описание отдельного графического примитива начинается со строки, содержащей ключевое слово с названием примитива и числом параметров описания примитива. Ключевое слово с названием примитива начинается с символа подчеркивания (_).Каждый параметр описывается отдельной строкой. Каждая строка содержит ключевоеслово, описывающее параметр, и значение параметра.

4.2 Функции библиотеки OpenGL необходимые для отображения объектовой информации цифровой карты местности

1) voidglBegin (GLenummode);

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

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

void 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) 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×32 бита, интерпретируемую в качестве маски, накладываемой на полигон при рисовании (и при необходимости повторяемой). Там, где стоит 1 — соответствующий пиксель полигона будет нарисован, а там, где появляется 0 — пиксель нарисован не будет. Рисунок 2−12 показывает, как рисунок шаблона конструируется из символов в параметре mask. Шаблонирование полигонов включается и выключается с помощью аргумента GL_POLYGON_STIPPLE функций glEnable () и glDisable (). Интерпретация mask зависит от GL_UNPACK* параметров команды glPixelStore*().

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

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

5.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 Расчет векторов нормали

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

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

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

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

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

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<= maxY-STEP) | (Y=maxY&X>= STEP&X<=maxX-STEP) | (X=maxX&Y>= STEP&Y<=maxY-STEP) | (Y=0 &X>=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 представлены этапы каскадной (водопадной) модели жизненного цикла процесса разработки ПО:

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

2) Анализ требований и определение спецификаций. Спецификация — точное формализованное описание функций и ограничений разрабатываемого ПО, соответствующих различным функциональным и эксплуатационным спецификациям. Для получения спецификаций производят анализ требований технического задания, определяют структуру входных/выходных данных, выбирают математический аппарат формализации, так же определяют общий алгоритм решения задачи, определяют подзадачи первого уровня и методы их решения.

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

4) Реализация. На данном этапе выполняется кодирование в выбранной системе программирования, тестирование ПО и его отладка.

Рисунок 5.9 — Каскадная (водопадная) модель жизненного цикла процесса разработки ПО

В качестве среды разработки, в данном дипломном проекте, был выбран пакет Microsoft Visual Studio 2010 с подключенной библиотекой Tao Framework. В качестве языка программирования был выбран язык C#.NET.

Преимущества компонентов, выбранных для решения поставленной задачи очевидны: язык C# является на данный момент одним из самых современных и удобных для быстрой разработки языков программирования, а с учетом того, что он вобрал все лучшее от существующих языков программирования, а так же учел все их недостатки.

5.2.1 Microsoft Visual Studio

Microsoft Visual Studio — линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NETF ramework, .NET Compact Framework и Microsoft Silverlight.

Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSense и возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных. VisualStudio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, Subversion и VisualSourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов цикла разработки программного обеспечения (например, клиент Team Explorer для работы с Team Foundation Server).

Visual Studio Professional включает следующие компоненты:

· Visual Basic .NET;

· Visual C++;

· Visual C#;

· Visual F#.

В данной выпускной квалификационной работе использовался компонент VisualC#.

5.2.2 Tao Framework

Tao Framework — это свободно-распространяемая библиотека, с открытым исходным кодом, предназначенная для быстрой и удобной разработки кросс-платформенного мультимедийного программного обеспечения в среде. NETFramewrok и Mono. На сегодняшний день, TaoFramework — это лучший путь для использования библиотеки OpenGL при разработке в среде .NET на языке C#.

В состав библиотеки на данный момент входят все современные средства, которые могут понадобиться в ходе разработки мультимедиа программного обеспечения: реализация библиотеки OpenGL, реализация библиотеки FreeGlut, содержащей все самые новые функции этой библиотеки, библиотека DevIL (легшая в основу стандарта OpenIL — OpenImage Library), и многие другие.

Самые интересные библиотеки, включенные в Tao Framework:

· OpenGL 2.1.0.12 — свободно распространяемый аппаратно-программный интерфейс для визуализации 2D и 3D графики.

· FreeGLUT 2.4.0.2 — библиотека с открытым исходным кодом, являющаяся альтернативой библиотеке GLUT (OpenGLUtilityToolkit).

· DevIL 1.6.8.3 (она же OpenIL) — кроссплатформенная библиотека, реализующая программный интерфейс для работы с изображениями. На данный момент библиотека поддерживает работу с изображениями 43-х форматов для чтения и 17-ти форматов для записи.

· Cg 2.0.0.0 — язык высокого уровня, созданный для программирования текстурных и вершинных шейдеров. OpenAL 1.1.0.1 — свободно распространяемый аппаратно-программный интерфейс для обработки аудиоданных. (В том числе 3D звука и EAX эффектов).

· PhysFS 1.0.1.2 — библиотека для работы с вводом / выводом файловой системы, а так же различного вида архивами, на основе собственного API.

· SDL 1.2.13.0 — кроссплатформенная мультимедийная библиотека, активно использующаяся для написания мультимедийных приложений в операционной системе GNU/LinuxODE 0.9.0.0 — свободно распространяемый физический программный интерфейс, главной особенностью которого является реализация системы динамики абсолютно твёрдого тела и система обнаружения столкновений.

· FreeType 2.3.5.0 — библиотека реализующая растеризацию шрифтов. Данная библиотека используется в X11 (оконной системе, которая обеспечивает все стандартные инструменты и протоколы для построения GUI (графического интерфейса пользователя) в UNIX подобных операционных системах).

· FFmpeg 0.4.9.0 — набор свободно-распространяемых библиотек с открытым исходным кодом. Данные мультимедийные библиотеки позволяют работать аудио и видео данными в различных форматах.

Библиотека TaoFramework является мощным свободно-распространяемым инструментом, для решения любых мультимедийных задач, преимущественно кросс-платформенного характера.

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

Показать весь текст
Заполнить форму текущей работой