Дипломная (вкр): Реализация генерации и отображения ландшафта в трехмерной плоскости

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

2)      поддержка новых функций видеокарты появляется только при выходе новой версии новой версии DirectX;

)        для выполнения действия надо написать больше кода.

Для моей программы был выбран DirectX, так как он позволяет эффективнее работать с 3D графикой на платформе Windows. Он цельную структуру библиотеки и позволяет мне использовать как для вывода на экран, так и взаимодействия с клавиатурой. Имеет строенную поддержку языка HLSL для написания шейдеров <https://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D0%B9%D0%B4%D0%B5%D1%80>.

1.4.1 Обоснование выбора языка программирования

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

.NET представляет единую для всех поддерживаемых языков библиотеку классов.

И какое бы приложение мы не собирались писать на C# - текстовый редактор, чат или сложный веб-сайт - так или иначе мы задействуем библиотеку классов .NET.

2. Анализ данных


К входным данным относятся кнопки «w, s, d, a». Они служат для перемещения по ландшафту. Движением мыши управляется вращение камерой.

Пользователь в генераторе может вести размер карты, они должны быть положительные целыми числами. Минимальная и максимальная высоты карты, вещественные числа.

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

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

Матрицы rotation, translation хранят информацию о повороте и перемещении.

За свет отвечает структура Light, она содержит поля направление, диаметр луча, размытость.

Массив normalMap хранит нормализованные значения. С объявление описанных структур можно ознакомиться в приложении В.

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


3. Программная реализация


Программный комплекс подразделяется на две части: библиотека для генерации ландшафта и программа для визуализации.

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

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

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

Далее применяется нормализация значений. Так как при генерации не предполагается ограничения высоты, необходимо привести к необходимому диапазону высот. Сначала приводится значения высот приводиться в соответствии к диапазону от 0 до 1, затем приводится к указанному пользователю диапазону. Данный алгоритм представлен в приложении Г на рисунке Г.1.

Преобразование ландшафта происходит в форматы obj и bmp. Выгрузка в формат bmp происходит следующим образом, создается картинка размера карты, каждый пиксель соответствует ячейки матрицы. Цвет пикселя определяется, как нормирование значение высоты в соответствующей ячейки, умноженное на 255, так как 255 это предельное значение одной составляющей цвета. Это число присваивается всем составляющим цвета в модели RGBA: красный, зеленый, синий. Алфа-канал ставится в значении полностью не прозрачный то есть 255.

Выгрузка в формат obj происходит следующим образом. Вставляется строчка с информации о местоположении файла mtl. В этом файле содержится информация о 3D-модели, такая как цвет, текстуры, материалы, отражение и т.д. Объявляются списки вершин, точка определяется тройкой значений: номер строки, значение высоты, номер столбца. Следующей строкой записывается имя группы и имя материала. Далее указываются точки по три точки для поверхности, на этом заканчивается формирование файла.

Визуализатор содержит классы для визуализации ландшафта. При запуске визуализатора происходит создание классов Render, InputListener Framework. Далее происходит создание окна и передача дескриптора приложение в Render. Создается устройство DirectX. Создается Input Layout для управления навигацией. Создаются необходимые структуры для отображения на экране, такие как свет, skybox и т.д.

4. Модульная структура программы


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

усиление внутренних связей модулей;

ослабление взаимосвязи между модулями.

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

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

Модульная структура библиотеки представлена в приложении Д на рисунке Д.1, визуализатора на рисунке Д.2.

5. Тестирование


Из всех этапов отладки программного обеспечения тестирование является самым трудоемким и дорогим. При создании типичного программного обеспечения на тестирование приходится около 40% общего времени и более 40% общей стоимости программного обеспечения.

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

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

6. Документирование

.1 Техническое задание


Для многих проектов требуется использовать ландшафты. Данный программный комплекс позволяет генерировать трехмерный ландшафт и показывает его на экране монитора.

6.1.1 Назначение разработки

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

6.1.2 Требования к программе или программному изделию

Для пользователя приложение должно предоставлять следующие возможности:

)   возможность введения входных данных, таких как минимальная и максимальная высота, размеры карты, крутизны гор;

2)      генерация ландшафтов;

)        сохранение ландшафта для использования его в сторонних программах;

)        демонстрация получившегося результата, путем вывода картинки на экран.

6.1.3 Требования к надежности

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

6.1.4 Требования к составу и параметрам технических средств

Для минимального функционирования программы требуется: персональный компьютер, 2 ГБ оперативной памяти, 50 Мб свободного места на жестком диске; клавиатура, мышь.

Для оптимальной работы приложения необходимо оперативной памяти не менее 3ГБ оперативной памяти.

6.1.5 Требования к информационной и программной совместимости

Программа должна функционировать под управлением ОС семейства Windows 7 и выше; DirectX 11; Visual c++2015; .Net Framework 4.5 и выше.

6.1.6 Требования к программной документации

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

6.2 Руководство пользователя


Запуск программы производится запуском файла shell.exe, после запуска вы увидите окно, представленное на рисунке 6.1.

Вызвать меню «файл», можно с помощью кнопки «очистить» сбросить данные до стандартных значений. С помощью кнопки «Сохранить как bmp» сохранить карту высот в формате bmp. С помощью кнопки «Сохранить как obj» можно сохранить ландшафт в формате obj. Нажав на кнопку «Просмотр» запуститься визуализатор, в котором можно будет увидеть в трехмерном виде, представлен на рисунке 6.2.

Рисунок 6.1 - Окно программы

Рисунок 6.2 - Окно программы

Вызвать меню «настройки», можно с помощью кнопки «настройки программы» настроить программу для визуализации. С помощью кнопки «настройки визуализации» можно настроить визуализатор.

Движение в визуализаторе осуществляется кнопками на клавиатуре w, a, s, d, которые соответствуют направлениям вперед, влево, вправо, назад.

Управление камерой осуществляется мышкой.

6.3 Документация по работе с библиотекой


Для работой с библиотекой необходимо подключить файл LandscapeGenerator.dll к вашему проекту. В проекте необходимо объявить экземпляр класса LandscapeGenerator. Класс содержит следующие методы для изменения параметров ландшафта, такие как ширина, длина, минимальная и максимальная высота, гористость, генерации ландшафта, возврат ландшафта как bitmap, сохранение ландшафта в формате obj и bmp.

7. Экономическая часть

.1 Обоснование целесообразности разработки проекта


Программный комплекс предназначен для генерации ландшафта. Его можно использовать в нескольких вариантах:

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

как отдельное приложением, в котором сгенерировать ландшафт и экспортировать его как 3D-модель.

Использование данного программного продукта позволит сократить время на создание реалистических ландшафтов.

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

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

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

Составляющие трехуровневого анализа продукта.

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

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

Трехуровневый анализ разработанного программного продукта представлен в соответствии с таблицей 7.1.

Таблица 7.1 - Трехуровневый анализ программного продукта

Уровень

Описание

Сущность продукта

Генерация ландшафта

Фактический продукт

Программный комплекс для генерации ландшафта

Добавление к продукту

Визуализатор ландшафта и исходный код для генерации ландшафта


Схема трехуровневого анализа программного продукта представлена в соответствии с рисунком 7.1.

Рисунок 7.1 - Схема трехуровневого анализа программного продукта

7.2 Основы технико-экономических расчетов


Стоимость программного обеспечения может рассматриваться с двух точек зрения:

-   с точки зрения формирования объектов нематериальных активов как исключительное право;

-        с точки зрения формирования затрат на создание программного продукта (ПП).

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

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

Задачи экономической части:

-    расчет затрат на разработку программного продукта и формирования его стоимости;

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

7.3 Определение трудоемкости разработки программного продукта


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

Источник: https://www.bibliofond.ru/detail.aspx?id=877950