Реферат: Программное обеспечение для генерации псевдотрехмерных объектов Пятаев А. С


Программное обеспечение для генерации псевдотрехмерных объектов

Пятаев А.С.

Институт вычислительного моделирования СО РАН, г. Красноярск

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

Как правило в подобных системах используется 2,5-мерная модель геопространственных данных. Это означает, что координатная информация по объектам карты готовится и хранится в плоской системе координат (2D), а сведения о высоте являются атрибутами плоских объектов. На основе этих данных формируется визуальное представление псевдо-3D объектов городской среды – зданий, сооружений, и проч.

Как показывает практика, эта задача формирования псевдо-3D объектов продолжает оставаться актуальной. В частности, многие популярные сегодня программные продукты не решили всех проблем в этой области – «наползание» объектов друг на друга, и т.п. (см. рис. 1).




(а) (б)

Рис. 1. Фрагмент карты ЯрМап (версия 01.09.2008) и ДубльГИС (сентябрь 2008)


В данной работе предложен алгоритм, позволяющий строить корректные псевдо-3D объекты. В программе используется библиотека GKernel для работы с файлами формата MapInfo.

Для однозначности понимания следует определиться с терминами.

^ Объект – единичная область внутри замкнутого контура.

Составной объект – несколько объектов связанных общим атрибутом. Например, многоэтажный дом с 1-этажной пристройкой-магазином – это составной объект. Он воспринимается как одно здание с определенным адресом, но содержит два обычных объекта – дом и пристройка-магазин.

3D-объект – составной объект, полученный в результате работы алгоритма.

^ Составной 3D-объект – несколько 3D-объектов связанных общим атрибутом (см. рис. 1).

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



Рис. 2. Построение внешней нормали к каждой из сторон объекта


В качестве «наблюдателя» берутся координаты вектора переноса . Направлении вектора показывает направление взгляда наблюдателя. Длина вектора задается атрибутикой текущего объекта (рис. 2).

Произведение векторов и определяет видимость стороны.



Если произведение меньше нуля, то сторона видима.

Далее исходный объект сдвигается на вектор , это будет «крыша» будущего 3D-объекта (рис. 3), а так же формируются новые объекты – видимые «стены» 3D-объекта. Таким образом, на основе исходного объекта формируется 3D-объект, содержащий «крышу» и «стены».



Рис. 3. Сдвиг объекта на вектор

Таким способом обрабатываются все объекты, которые находятся на карте, и в результате создается набор соответствующих 3D-объектов.

Второй этап – удаление пересечений.

Этот этап начинается с проверки на взаимное пересечение всех сформированных «стен» и «крыш» (рис. 4).



Рис. 4. Проверка объектов на пересечение

Для этого мы переходим от двумерной модели к трехмерной.



Рис. 5. Переход к объему

Если объект является «крышей», то z-координата всех вершин объекта – это просто высота здания. Если это «стена», то вершины лежащие в основании будут иметь z-координату равную нулю, а оставшиеся вершины «стены» соответственно будут иметь z-координату равную высоте здания (рис.5).

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



Рис.6. Поиск проекции центра пересечения на каждый из объектов в трехмерном случае


Если объект является «крышей», то к координатам центра добавляется z-координата равная высоте здания. Если это «стена», то z-координата вычисляется подстановкой x,y-координат центра пересечения в уравнение плоскости, построенной по трем точкам , , плоскости «стены» (рис.5):

, где


, , ,

Приоритет получает объект с большей z-координатой.

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



Рис.7. Промежуточный и конечный результат работы алгоритма

На последнем этапе происходит объединение полученных 3D-объектов в составные 3D-объекты по определенному атрибуту, например по адресу.





еще рефераты
Еще работы по разное