Особенности разработки и реализации модулей двухмерной и трехмерной визуализации. Основные задачи трехмерного модуля управления. Анализ функций модуля управления ParamColorDrawer. Характерные особенности схемы функционирования программного средства.
При низкой оригинальности работы "Разработка блока визуализации для программного комплекса ModelBuilder", Вы можете повысить уникальность этой работы до 80-100%
Геофизики в своей работе по изучению слоев среды, производя специальные измерения, получают некоторые физические параметры, такие как, например, плотность. В результате разработки каждый модуль стал отдельным проектом, реализация которого производилась по следующей системе: Разработка модели представления. Модуль получает данные из модели и конвертирует их в свою внутреннюю модель, после чего передает в модуль управления. · То, что любая точка разреза принадлежит слою или его границе будем называть полнотой системы слоев. Также слой имеет важную характеристику - любая вертикальная прямая, проходящая через слой пересекает его границы ровно 2 раза (горизонтальная выпуклость).В процессе работы над дипломным проектом были достигнуты следующие результаты: · Разработка модуля двухмерной визуализации. · Расширение функций модуля трехмерной визуализации (функции раздвижения, отрисовки геометрии, прозрачности) Приложение готово к расширению, например можно реализовать его работу с использование графической библиотеки OPENGL - если это понадобится. Проект подготовлен для возможного расширеня существующего приложения до полноценного модуля управления 3D сценой.
Введение
Геофизики в своей работе по изучению слоев среды, производя специальные измерения, получают некоторые физические параметры, такие как, например, плотность. Получив эти параметры, геофизики нуждаются в представлении этих данных в наглядном графическом виде, то есть визуализации этих данных. Среда состоит из слоев, которые имеют разные физические параметры. По этим параметрам и делается вывод о том, что за слой перед нами и о его свойствах. Для получения эти физических параметров на выбранной для изучения местности устанавливаются заряды и специальные датчики к ним, эти заряды располагаются через некоторые промежутки друг от друга. После этого производятся взрывы на нужных позициях, взрывная волна отражается от слоев среды и возвращается на датчики. Датчики, в свою очередь, определяют все необходимые параметры. С помощью этих данных можно получить точный срез среды на интересующем нас участке.
Пример расположения датчиков:
Рис.1. Пример расположения датчиков
На представленном рисунке (рис.1) показан один источник взрыва, направленный на среду. А также некоторое количество приемников, принимающих волны.
1. Основная часть
1.1 Постановка задачи
Задача определяется как разработка модуля управления для 3D визуализации модели среза среды, построенного в MODELBUILDER. Было решено решать эту задачу при помощи DIRECTX, но реализовывать таким образом, чтобы при надобности можно было перенести на OPENGL. В процессе разработки и обсуждения общая идея была разделена на следующие подзадачи: Разработка и реализация модуля двухмерной визуализации.
Разработка и реализация модуля трехмерной визуализации.
Двухмерная визуализация, фактически, является частным случаем трехмерной. Она была вынесена как отдельный пункт, поскольку отличается от трехмерного варианта специфическими функциями. Также разделение этих модулей позволяет работать с ними одновременно.
Обе эти задачи существенно различаются, но все же имеют схожие пути решения. В силу этого обобщения было предложено разработать общую логику работы двух этих модулей. Несмотря на общую логику, модули должны быть абсолютно независимы друг от друга. В результате разработки каждый модуль стал отдельным проектом, реализация которого производилась по следующей системе: Разработка модели представления.
Разработка блока, конвертирующего данные из модели MODELBUILDER во внутреннюю модель модуля.
Реализация управляемого модуля, который сможет отрисовать готовую модель.
Данные задачи разрабатывались в качестве модулей управления с идеей будущей расширяемости и максимальной независимости.
Сложность заключалась в том, что нужно было разработать некую связь, адаптер, между моделью MODELBUILDER и вышеописанных модулей управления.
Модуль получает данные из модели и конвертирует их в свою внутреннюю модель, после чего передает в модуль управления. Модуль управления в свою очередь отрисовывает данные и представляет их в различных цветах, в зависимости от различия физических параметров.
Также, в список задач входила доработка уже существующих модулей: улучшение или исправление, а также их локализация.
Рассмотрим Двухмерный и Трехмерный модули отдельно.
1.1.1 Модуль двухмерной визуализации
Главной задачей, для решения которой модуль двухмерной визуализации был разработан, являлась отрисовка готовой модели среза в определенном оттенке цвета. Пример готовой модель среза представлен на рисунке 2.
Рис. 2. Пример модели среза
После того как были заданы границы среза, для каждой точки задается определенное значение физического параметра. В зависимости от этих параметров нужно рассчитать оттенок цвета, и закрасить каждый слой. Целью являлось получить наглядное представление распространения физических параметров по всему срезу.
Для данного модуля были определены функции, позволяющие пользователю настроить визуализацию по собственному желанию, в частности - выбрать основной цвет отрисовки. Также был необходим вывод значения физического параметра в любой точке среза, в которую наведен курсор мыши.
1.1.2 Модуль трехмерной визуализации
Изначально основной задачей трехмерного модуля управления являлась возможность графического представления нескольких срезов, расположенных друг за другом. Пользователь получал трехмерную визуализацию, мог изменить ее место положение на экране, развернуть под необходимым углом, а также увеличить или уменьшить полученный трехмерный объект, но на этом функции модуля заканчивались. В следствии этого факта, уже на начальном этапе разработки, было решено расширить функции модуля, чтобы в итоге получить некий трехмерный редактор.
Полученный редактор должен позволять производить необходимые действия с построенным трехмерным объектом, такие как разделение слоев, а также выбор определенного слоя и работа с ним.
Чтобы понять логику работы следует определить модель данных.
1.2 Описание модели
Чтобы понять структуру программы следует разобрать геометрию модели. Геометрия модели характеризуется следующим набором свойств: · Область модели (разрез) - прямоугольник.
· Вся область разреза разбивается на множество односвязных открытых подобластей называемых слоями.
· Линии, ограничивающие слой могут быть границами разреза, либо кривые называемые границами слоя.
· То, что любая точка разреза принадлежит слою или его границе будем называть полнотой системы слоев.
· Верхняя сторона границы разреза называется профилем. С каждой точкой профиля могут быть связаны его координаты на поверхности земли, задающие геометрию профиля.
Также слой имеет важную характеристику - любая вертикальная прямая, проходящая через слой пересекает его границы ровно 2 раза (горизонтальная выпуклость).
Данное свойство вводится для возможности удобного, с точки зрения эргономики, задания физических параметров внутри каждого слоя. Задание слоев производится через задание его границ. При этом любая концевая точка границы принадлежит либо боковой границе разреза, либо другой границе.
Любой точке на разрезе могут быть заданы определенные физические параметры.
Пример разреза представлен на рисунке 3.
(1)- Горизонтальная граница разреза
(2)- Слой
(3)- Граница слоя
(4) - Вертикальная граница разреза
Рис.3. Пример разреза
1.3 Этапы проделанной работы
Работа над поставленной задачей началась на существующем прототипе проекта. Данная версия находилась в рабочем состоянии, но не имела необходимых функций для расширения. В результате работы над проектом, общий список этапов проделанной работы определялся следующим образом: 1) Изучение существующей версии проекта.
2) Поиск и исправление ошибок.
3) Изучение DIRECTX.
4) Проектирование двухмерной сцены, с оттенком цвета, определенным через физические параметры.
5) Реализация модуля двухмерной визуализации.
6) Проектирование трехмерной сцены.
7) Реализация модуля трехмерной визуализации.
8) Локализация реализованных модулей.
9) Поиск и исправление ошибок, определение перспектив.
Рассмотрим отдельно проделанную работу над задачами двухмерной и трехмерной реализации.
1.3.1 Разработка и реализация модуля двухмерной визуализации
В начале разработки было необходимо определить внутреннюю модель блока управления, а также адаптер для этой модели. За основу внутренней модели была взята основная модель проекта. В результате была получена первая версия модуля.
Модуль находился в рабочем состоянии, но работал корректно только при простейшей модели среза - то есть при условии, что каждая граница начиналась на левом краю среза и заканчивалась на правом. Пример такой модели показан на рисунке 4.
Рис. 4. Частный случай модели среза
Проблема состояла в неизбежном появлении так называемых «пузырьков» - случаев, когда граница могла начинаться или заканчиваться в любой существующей точке, то есть на уже существующей границе. Пример такого случая приведен ниже, на рисунке 5.
Рис. 5. Пример модели с "пузырьком"
Специально для решения этой проблемы был разработан алгоритм. Но сложность состояла в том, что этот алгоритм требовал существование подходящий модели представления (View Model). В начальной версии эта модель была создана максимально простой, она позволяла получать правильную отрисовку только в простейших частных случаях.
Далее рассмотрим измененную и улучшенную модель представления, представленную на рисунке 6.
Рис. 6. Улучшенная модель преставления для 2D.
Все начинается с Точки - в ней хранятся координаты Х и У, значение физического параметра, а также зависящее от него значение цвета.
Граница - это совокупность точек.
Страница - это совокупность границ.
Слой - это совокупность страниц.
Теперь рассмотрим сам алгоритм построения внутренней модели представления данных.
1. Получаем Х-координаты точек начал и концов всех границ, сортируем их по возрастанию и избавляемся от повторений.
2. Берем первые две точки полученного массива - они определяет первую страницу.
3. Проходя по каждой границе, попавшей в страницу, определяем координаты всех ее точек. Из этих точек создаем новую границу и записываем в текущую страницу. Таким образом заполняем страницу границами.
4. Проходя таким образом по всему массиву, полученному на шаге 1, заполняем слой страницами.
Схематичное определение страниц показано на рисунке 7.
Рис. 7. Определение страниц
После того, как модель полностью построена, в работу вступает модуль, управляющий отрисовкой.
Для определения оттенка цвета был реализован отдельный модуль, который по полученным значениям параметров рассчитывает значения цвета, и передает их в основной модуль.
Модуль визуализации работает по системе, подобной постройке модели - то есть страница рисуется по частям, состоящим из пары рядом стоящих границ. Таким образом из страниц отрисовывается весь срез.
Следует отметить, что реализована возможность выбора основного оттенка цвета отрисовки слоя, а также цвета границ.
Также реализовано сохранение полученной сцены в точечный рисунок, форматом которого на данный момент является PNG.
Результат отрисовки выглядел следующим образом(рис. 8).
Рис. 8. Результат линейной отрисовки.
В данном случае распространение значений параметров от границе к границе происходила линейно. Дополнительно задачей стала реализация возможности отрисовки границ, параметры на которых распространяются константно. Для решения этой задачи модуль, конвертирующий данные из общей модели во внутреннею был изменен. Теперь на стадии обработки информации происходит проверка типа интерполяции для каждой границе, и в зависимости от этого происходит отрисовка. Пример отрисовки ситуации, где интерполяция параметров каждой границы является константной, показан на рисунке 9.
Рис. 9. Результат константной отрисовки.
1.3.2 Описание трехмерного модуля управления
Первой подзадачей данного модуля, как и в случае с двухмерной визуализацией, являлась задача разработки модели представления, которую сможет отрисовать полученный модуль. Первая версия модели представления выглядела следующим образом(рис. 10):
Рис. 10. Первоначальная модель представления для 3D.
Полученные через эту модель данные отрисовывались в трехмерный объект, который достоверно представлял основную модель проекта. Данная модель имела существенные ограничения, она не позволяла добавить необходимые функции, а также не имела потенциальной возможности расширения
В следствии этого факта определилась следующая подзадача: необходимо разработать модель представления таким образом, чтобы разработанный на ее основе модуль имел возможность расширения своих функций. В результате была получена модель представления, показанная на рисунке 11.
Рис. 11. Улучшенная модель представления для 3D
Также был использован уже разработанный и реализованный для задачи двухмерной реализации модуль, рассчитывающий цвет. В результате получаемый трехмерный объект окрашивается в цвет, в зависимости от физических параметров.
Point3D - Точка, содержащая в себе X, Y и Z координаты, а также цвет и значение физического параметра. (1)
Model3D - Готовая модель, включающая в себя все гиперслои.
Пример построенной модели представлен на рисунке 12.
Рис. 12. Готовая трехмерная модель
Реализованная таким образом модель позволяет реализовывать разные функции модуля. Преимущество этой модели в том, что каждая часть визуализации является отдельным объектом, что позволяет работать с этой частью. Например, в данный момент реализована возможность раздвинуть прослойки - это может помочь в более точном изучении модели(рис. 13).
Рис. 13. Результат работы функции раздвижения
Также реализована функция, позволяющяа включить или выключить отрисовку геометрии. Эта функция позволяет точно оценить правильно ли расставлены границы в слоях. Пример работы этой функции показан на рисунке 14.
Рис. 14. Результат работы функции отрисовки геометрии
Важной задачей являлась реализация функции прозрачности модели. Прозрачность позволяет исследовать модель изнутри, определить как именно взаимодействуют между собой слои. Пример работы функции прозрачности показан на рисунке 15.
Рис. 15. Результат работы функции прозрачности.
Все перечисленные функции можно использовать одновременно также как и по отдельности, что позволяет хорошо разобраться в готовой отрисованной модели.
Microsoft Visual Studio .NET 2008: Современная среда разработки, имеющая больше возможностей чем, например, Microsoft Visual Studio .NET 2005. Также, эта среда разработки была выбрана потому, что является очень удобной в использовании.
Microsoft DIRECTX 9.0c: Пакет программных интерфейсов приложений (API) для Windows, использующийся прежде всего при разработке игр и других мультимедийных программ. В настоящий момент включает в себя: DIRECTX Graphics (DIRECTDRAW для растровой графики и Direct3D для трехмерной), DIRECTINPUT (работа с различными устройствами ввода: клавиатурами, мышами, джойстиками и т.п.), DIRECTPLAY (жизненно необходим для мультиплеера), DIRECTSOUND (воспроизведение и запись звука), DIRECTMUSIC (для воспроизведения музыки, хранящейся в одноименном формате), DIRECTSHOW (управление потоковым аудио и видео) и DIRECTX Media Objects (поддержка стриминга прочих медиа-объектов).
Subversion(SVN) : свободная централизованная система управления версиями, созданная в 2000 году компанией COLLABNET Inc.
2. Схема функционирования программного средства
1. Получение модели
На этом этапе происходит получение данных построенного среза
2. Перевод полученной модели во внутренний формат
На этом этапе происходит конвертирование данных во внутренний формат приложения.
3. Разделение внутреннего формата на составляющие
Внутренняя модель разделяется на составляющие, которые используются непосредственно при визуализации.
4. Отображение составляющих на элементе управления
При помощи DIRECTX происходит визуализация внутренней модели данных.
Как упоминалось ранее, по данной схеме работают оба модуля - как двухмерный, так и трехмерный.
3. Описание классов и функций
Так как задачей являлась реализация модуля управления - этот модуль является самой важной частью приложения. Он называется PARAMCOLORDRAWER.cs и располагается на форме PARAMCOLORFORM.cs.
Модуль управления PARAMCOLORDRAWER стоит из следующих функций: Методы DIRECTX: public void INITIALIZEGRAPHICS()
Инициализация графики. private void SETUPCAMERA()
Установка положения камеры. private void GETCENTERING()
Отцентровка сцены в зависимости от размеров среза. protected override void ONRESIZE(EVENTARGS e)
Перерисовка сцены при изменении размеров окна. void SETUPLIGHTS(Device device)
Установка параметров света в сцене.
Функции отрисовки: private void DRAWLINE(VIEWPOINT p1, VIEWPOINT p2, Color color)
Отрисовка части границы между двумя точками. private void DRAWBOUND(VIEWBOUND b)
Отрисовка всего слоя. protected override void ONPAINT(System.Windows.Forms.PAINTEVENTARGS e)
Метод, в котором происходит отрисовка всей сцены.
В классе VIEWPOINT находится описание точки, представляющее собой координаты по Х и У, а также значение физического параметра и цвета.
В классе VIEWBOUND находится описание границы.
В классе VIEWPAGE находится описание страницы.
В классе VIEWLAYER находится описание слоя.
В классе LAYERMODELADAPTER происходит конвертирование данных из модели MODELBUILDER во внутреннюю модель приложения.
В классе COLORSETTINGS находятся переменные, содержащие значения цвета, используемые в отрисовке.
В классе COLORPROVIDER происходит расчет цвета с использованием значения физического параметра. Это происходит следующим образом: Пусть значение компоненты цвета (для примера возьмем R) меняется от Rmin до Rmax, а значение физического параметра (назовем его P) меняется от Pmin до Pmax. Тогда исходя из уравнения прямой имеем : значение
Таким же образом считаются оставшиеся компоненты цвета G и B.
Вывод
В процессе работы над дипломным проектом были достигнуты следующие результаты: · Разработка модуля двухмерной визуализации.
· Расширение функций модуля двухмерной визуализации, решение проблемы "пузырьков"
· Разработка и модели представления для модуля трехмерной визуализации
· Расширение функций модуля трехмерной визуализации (функции раздвижения, отрисовки геометрии, прозрачности)
· Тестирование и отладка модулей визуализации.
· Встраивание готовых модулей в программный комплекс MODELBUILDER
Приложение готово к расширению, например можно реализовать его работу с использование графической библиотеки OPENGL - если это понадобится. Проект подготовлен для возможного расширеня существующего приложения до полноценного модуля управления 3D сценой. MODELBUILDER уже сейчас является полноценным приложением с набором функций, обусловленным спецификой предметной области.
Разработанные модули визуализации можно применять отдельно от основного проекта. При необходимой доработке, оба модуля можно встроить в другую систему, для визуализации ее данных.
Не оставляет сомнений тот факт, что работа над проектом будет продолжаться, и в результате будет получен полноценный и оригинальный продукт, под названием MODELBUILDER.
Список литературы
1.Эндрю Троелсен. Язык программирования C# 2005 и платформа .NET framework v2.0. Москва, И.Д. Вильямс, 2007 - 1168с.
2.Шилдт Герберт.Полный справочник по С#. Москва, Издательский дом "Вильямс", 2004. - 752 с.
3.Кристиан Нейгел, Билл Ивьен, Джей Глинн, Морган Скиннер, Карли Уотсон. C# 2005 и платформа .NET 3.0 для профессионалов ( CD-ROM). Москва, Издательский дом "Вильямс", 2008. - 1790 с.
4.Том миллер. Managed DIRECTX*9. Программирование графики и игр. Москва, Издательский дом «КОМБУК», 2005.
5.Н.Н. Пузырев. Методы и объекты сейсмических исследований. Новосибирск, Издательство СО РАН, НИЦ ОИГГМ, 1997
6.Э.Эйнджел. Интерактивная компьютерная графика, Москва, Издательский дом .Вильямс., 2001
Размещено на
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы