4.1. Программный комплекс Программный комплекс для визуализации виртуального глобуса и 3D-данных на глобусе в стереоскопическом режиме реализует варианты визуализации виртуального глобуса, описанные во второй главе, алгоритмы рендеринга 3D-данных, описанные в третьей главе, поддерживает различные стерео-режимы, режимы навигации и взаимодействие с 3D-данными.
Аппаратное обеспечение. Программный комплекс может работать на современном аппаратном обеспечении, использовать 3D-мониторы, джойстики с 6ю-степенями свободы, сенсор Kinect. Подробнее это будет рассмотрено в параграфах 4.2 и 4.3. Пример аппаратного обеспечения показан на рис. 4 .46. Спецификация оборудования приведена в приложении Г. Указанные комплектующие доступны на рынке и имеют небольшую цену.
| Рис. 4.46. Пример аппаратной конфигурации
|
| Зависимости. Программный комплекс использует в своей работе различные сторонние библиотеки. Диаграмма зависимостей между используемыми библиотеками показана на рисунке 4 .47.
| Рис. 4.47. Зависимости от сторонних библиотек
|
| В основе комплекса лежит графический инструментарий OpenSceneGraph, который является надстройкой над OpenGL [117]. В OpenSceneGraph реализована структура данных «граф сцены», которая является основой всего программного комплекса, позволяет логически и пространственно организовывать 3D-модели в трехмерной сцене. Также OpenSceneGraph включает множество подключаемых модулей для доступа к различным форматам файлов.
Генерация тайлов рельефа виртуального глобуса осуществляется с помощью инструментария osgEarth [52]. Он также включает множество удобных классов для работы с геоданными и визуализации геоданных.
Графический интерфейс пользователя реализован с помощью инструментария Qt [118]. Вывод OpenGL графики осуществляется с помощью виджета QGLWidget.
Дополнительно используются библиотеки: Awesomium [119] — для показа веб-страничек прямо в графическом окне (например, по клику на иконке), DirectInput [120] — для связи с джойстиком, Kinect SDK — для связи с Кинектом [121].
Архитектура. Программный комплекс использует модульную архитектуру. Имеется ядро, которое отвечает за базовую функциональность: создание каркаса комплекса, инициализацию графического окна и графического интерфейса пользователя, управление режимами визуализации глобуса, навигацию по глобусу. На рисунке 4 .48 показаны основные классы ядра программного комплекса и связи между ними.
Каркас программного комплекса задают классы инструментариев OpenSceneGraph, osgEarth и Qt. Эти классы были модифицированы, дополнены и добавлены новые классы. Комплекс позволяет работать с несколькими независимыми трехмерными сценами параллельно. Класс View (вид) управляет визуализацией одной трехмерной сценой. Это позволяет переключаться между видами во время работы программы. Например, один вид может содержать глобус, а другой вид — только некий набор 3D-данных без глобуса, как на рисунке 4 .65, либо другой глобус с другими данными.
Вид включает одну (в моно-режиме) или две (в стерео-режиме) виртуальных камер (класс Camera), а также экземпляр класса CameraManipulator для навигации по сцене. С каждой камерой связан графический контекст (класс GraphicsContext), в который и происходит отрисовка.
Класс StereoViewer произведен от класса CompositeViewer из фреймворка OpenSceneGraph и играет роль фасада, который отвечает за визуализацию. Он запускает внутри себя цикл отрисовки и содержит коллекцию видов (View), позволяет их создавать и настраивать стерео-режимы. StereoViewer расширяет функциональность базового класса единообразной поддержкой стереовизуализации для разных стереорежимов. Для трекинга головы с помощью сенсора Kinect он обращается к классу KinectAdapter.
| Рис. 4.48. Основные классы ядра программного комплекса
|
| Класс ViewManager занимается настройкой, высокоуровневым управлением трехмерной сценой и содержит ряд инструментов для работы со сценой. Picker – позволяет взаимодействовать с объектами сцены с помощью инструмента «виртуальная лазерная указка», LaserPointer – рисует луч указки, SceneRoot – настраивает графические эффекты, EarthManager – управляет режимами визуализации глобуса (класс MapNode) и атмосферы (класс SkyNode).
Для навигации используются несколько классов, производных от CameraManipulator. Они рассчитывают матрицу вида на основе входных данных от органов управления: мыши, клавиатуры, джойстика. Разные классы реализуют разные режимы навигации. Они могут использовать данные от устройств ввода (класс Device), таких как джойстик SpaceNavigator (класс SpaceNavDevice).
Для управления трехмерной сценой через графический интерфейс используется класс MainWindow, производный от QMainWindow.
Подключаемые модули. На базе ядра программного комплекса можно разрабатывать производные приложения или дополнительные подключаемые модули для решения конкретных практических задач. Каждый подключаемый модуль содержится в своей динамически подключаемой библиотеке dll. Типовая схема подключаемого модуля показана на рис. 4 .49.
В ядре объявлен интерфейсный класс IPluginBase, от которого должны наследоваться классы-загрузчики подключаемых модулей. При загрузке dll с модулем в память создаются экземпляры этих классов и помещаются в PluginRegistry, который реализован с помощью шаблона проектирования «Синглтон».
Загрузчик — компонент, который вызывается из ядра программного комплекса (через PluginRegistry) и настраивает модель и контроллер для дальнейшей работы.
Модель — компонент, который отвечает за загрузку полезных данных, создание 3D-объектов и подключение их к трехмерной сцене, и выполнение над ними операций;
Контроллер — компонент, который создает графический интерфейс на основе фреймворка Qt (класс Widget) и вставляет его в главное окно. При взаимодействии пользователя с виджетами контроллер посылает команды модели. Дополнительно может быть класс EventHandler для обработки событий клавиатуры.
В рамках комплекса может быть подключено любое количество таких модулей. Программный комплекс можно в дальнейшем неограниченно расширять и применять для визуализации различных типов геопространственных данных.
| Рис. 4.49. Основные классы подключаемого модуля
|
| Далее более подробно будут рассмотрены 3 аспекта: поддержка стереоскопической визуализации, режимы навигации и взаимодействие с данными.
|