Рассмотрим моделирование рельефа и трехмерных объектов раздельно.
ЦМР (Цифровую Модель Рельефа) можно отнести к растровому отображению, так как она представляет собой регулярную сеть равномерно распространенных узлов со значением отметки Z. Разрешением такой сетки является ширина ячейки, определяющая точность представления – шаг сетки. ЦМР является наиболее часто используемой моделью представления рельефа, так как ее хранение и обработка значительно облегчена по сравнению с ТИН-представлением. Однако ЦМР имеет и больше недостатков. К примеру, ЦМР не способна достаточно хорошо передать гребни, вершины, перегибы и другие характерные элементы рельефа. Поэтому ЦМР уместно использовать для мелкомасштабного картографирования, где не требуется точное изображение пространственных объектов поверхности.
ТИН (Триангуляционная нерегулярная сеть) представляет поверхность в виде совокупности смежных, не перекрывающихся треугольных граней. Благодаря своей нерегулярности она является более гибкой моделью представления рельефа, так как на участках резких изменений рельефа можно использовать переменную плотность точек. В результате получаем более точную модель, которая сохраняет местоположение и форму пространственных объектов. Однако обработка ТИН является более проблематичной, чем ЦМР.
Для трехмерного моделирования Digitals использует ЦМР. Это объясняется тем, что на данном этапе моделирования предусмотрено представление наглядной картины с высоты птичьего полета, а не детализация модели.
Если у Вас уже имеются какие-либо пространственные данные, описывающие рельеф, их можно использовать для построения ЦМР (ТИН). Для этого их необходимо выделить и выбрать пункт главного меню ЦМР > Создать ЦМР (ЦМР > Создать TIN соответственно). Однако если таких данных нет, не спешите беспорядочно собирать дороги или набивать пикеты.
Для создания ЦМР Вам понадобится контур, описывающий модель. Выделите его и вызовите команду ЦМР > Создать ЦМР. Не забудьте указать разумный шаг сетки, ориентируясь на Ваши потребности и форму рельефа. Ведь указав слишком маленький шаг Вы только загрузите свою модель не увеличив особо при этом ее точность.
После того, как ЦМР создана, необходимо каждый ее узел «посадить на землю». Для этого нужно выделить ЦМР и в режиме сбора выбрать из контекстного меню пункт Измерение ЦМР.
Если в Вашей сетки оказались лишние узлы, их можно будет обрезать с помощью команды главного меню Сервис > Обрезать по полигону.
Создание ЦМР вокруг контура |
Создание ЦМР по контуру |
Так, при сборе объекта одним и тем же шаблоном Simple Flat Roof в разных слоях с типами «Полигон/полилиния» и «3D Модель» получим разное описание объекта:
При сборе в слое типа «Полигон/полилиния»
При сборе в слое типа «3D Модель»
Разницу в описании объектов можно увидеть и визуально:
Поэтому, нужно всегда помнить два основных требования:
1. Для сбора использовать только 3D шаблоны.
2. Все объекты должны находиться в слое с типом «3D Модель»
Однако, все безнадежно, если Вы вдруг собрали не трехмерный объект. Спасти Вас может команда Сервис > Преобразовать > Полигон в 3D-Модель, вызываемая из главного меню. Но объект все равно должен находиться в 3D слое.
Сбор здания начинается с формирования геометрии крыши и заканчивается регистрацией высоты здания. Для уменьшения трудоемкости в Digitals была реализована технология сбора зданий только по крышам с последующим автоматическим построением стен от основания крыши до ЦМР. Для того чтобы отключить регистрацию высоты здания, в настройках нужно отключить константу 3DBottom (Сервис > Настройки > Главная > Константы), то есть присвоить ей значение «0». Чуть ниже от нее находится константа 3DRectangle, которая отвечает за ортогонализацию крыши при сборе.
В качестве критерия создания слоев лучше выбирать типы крыш. То есть крыши, собранные как Simple Flat Roof и Multi Flat Roof должны находиться в разных слоях. При этом очень важно следить за идентификационным номером слоя.
ID | Проецирование | Предназначение |
1 – 30 | Проецирование на ЦМР | Основные крыши |
31 – 50 | Проецирование на ближайшие к ним основные крыши | Надстройки |
51 – более | Не проецируются | «Парящие» крыши |
Порядок сбора при 3DBottom=1:
- Зарегистрируйте точки 1-4 края крыши.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте точки 1-3 края крыши. Четвертая точка будет построена автоматически.
- Зарегистрируйте точки 1-10 края крыши.
- Установите высоту (точка 5). Для завершения объекта нажмите F5.
Порядок сбора при 3DBottom=0:
- Зарегистрируйте точки 1-10 края крыши.
- Для завершения объекта нажмите F5.
- Зарегистрируйте точки 1-4 края крыши.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте точки 1-3 края крыши.
- Для завершения объекта нажмите F5. Четвертая точка будет построена автоматически.
Порядок сбора при 3DBottom=1:
- Зарегистрируйте точки 1-4 края крыши.
- Для завершения объекта нажмите F5.
Порядок сбора при 3DBottom=0:
- Зарегистрируйте точки 1-3 края крыши. Четвертая точка и гребень крыши будут построены автоматически.
- После построения объекта необходимо откорректировать высоту гребня крыши.
- Зарегистрируйте точки 1-3 края крыши. И точку 4 на гребне. Противоположная точка гребня будет построена автоматически.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте точки 1-3 края крыши. И точку 4 на гребне. Противоположная точка гребня будет построена автоматически.
- Для завершения объекта нажмите F5 или кликните левой кнопкой мыши.
- Зарегистрируйте точки 1-3 края крыши.
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
- Установите высоту (точка 7).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
- Зарегистрируйте точки 1-3 края крыши. Четвертая точка будет построена автоматически.
- Зарегистрируйте точку 4 на гребне.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте точку 4 на гребне.
- Для завершения объекта нажмите F5.
- Зарегистрируйте точки 1-3 края крыши.
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
- Установите высоту (точка 7).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте вальмовые точки 4, 5 и точку 6 на гребне. Противоположная сторона будет построена автоматически.
- Зарегистрируйте точки 1-3 края крыши. И точку 4 на гребне. Противоположная точка гребня будет построена автоматически.
- Установите высоту (точка 5).
Порядок сбора при 3DBottom=0:
- Для завершения объекта нажмите F5 или кликните левой кнопкой мыши.
- Зарегистрируйте точки 1-3 края крыши начиная со стороны, параллельной гребню.
- Зарегистрируйте вальмовые точки 4 и 5 и точку 6 на гребне, противоположная точка будет построена автоматически.
- Установите высоту (7).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте вальмовые точки 4 и 5 и точку 6 на гребне, противоположная точка будет построена автоматически.
- Зарегистрируйте точки 1-3 края крыши начиная со стороны, параллельной гребню.
- Зарегистрируйте вальмовые точки 4 и 5, противоположные точки будут построены автоматически.
- Установите высоту (6).
Порядок сбора при 3DBottom=0:
- Зарегистрируйте вальмовые точки 4 и 5, противоположные точки будут построены автоматически.
Порядок сбора при 3DBottom=1, 3DBottom=0:
Порядок сбора при 3DBottom=1, 3DBottom=0:
- Зарегистрируйте вершину шатра (4). Еще раз кликните левой кнопкой мыши (5).
Будьте внимательны! Иногда шаблоны Tower и Tower Roof могут дать непредсказуемый результат!!! Поэтому экспериментируйте.
Порядок сбора при 3DBottom=1, 3DBottom=0:
- Зарегистрируйте вершину шатра (9). Нажмите F5.
Формирование стен зданий
Для окончательного построения геометрической модели для зданий, созданных шаблоном Multi Flat Roof нужно сформировать горизонтальные грани крыш, так как они изначально отсутствуют. Для этого используем функцию @Map.CoverMultiFlatRoofs.
Результат действия функции @Map.CoverMultiFlatRoofs
Текстурные координаты
Текстурирование грани
Текстурирование модели следует разделить на два этапа: текстурирование 3D объектов и текстурирование ЦМР.
Текстурирование выполняется для каждой грани объекта. Для определения соответствующей грани текстуры восстанавливается пучок лучей от грани к сенсору камеры. Восстановление лучей выполняется по фотограмметрическим формулам для получения координат точек проецируемой грани. Для определения, является ли грань видимой, для нее строится вектор нормали.
Вышеперечисленные действия выполняются для всех снимков, содержащих изображение грани. Из текущего набора выбирается тот снимок, на котором проекция грани занимает большую площадь с учетом видимости грани на снимке.
Восстановление пучка лучей
Функция работает с одним каталогом (включая подкаталоги), поэтому все снимки, используемые для текстурирования, должны находиться в одной папке. Выбранная текстура вырезается со снимка с окрестностью, не превышающей 50 пикселей, и записывается в отдельный файл. Все файлы текстур заносятся в отдельный каталог «FileName (Textures)» или файл с текстурами DTX (Digitals Textures), находящийся в папке с картой. При этом для слоя типа «3D модель» создается табличный параметр «Textures», в котором хранится имя текстуры и текстурные координаты, соответствующие вершинам грани (<Имя файла текстуры>, X1, Y1, X2, Y2, X3, Y3, X4, Y4).
Имя файла текстуры формируется следующим образом:
<Имя исходного снимка текстуры><~><№ объекта><-><№ грани объекта><.bmp>/<.jpg>
№ объекта – уникальный номер объекта, который является номером объекта в карте.
Отсчет текстурных координат начинается с верхнего левого угла, а для того, чтобы операции выполнялись над целыми числами, координаты умножаются на 10. Строки с именем текстуры заносятся в том же порядке, в котором перечислены грани в списке точек объектов.
Экранные координаты
При отображении текстурированной 3D-модели на каждую грань объекта слоя «3D модель» выполняется наложение текстуры по данным табличного параметра «Textures».
Функция @Window.GenerateTextures имеет следующие параметры:
- Bond – эта константа присутствует всегда.
- Pak – при указании данного параметра текстуры будут упаковываться в один файл с именем карты и расширением DTX(Digitals TeXtures), если не указан, то все текстуры будут записаны в каталог с именем карты плюс (Textures).
- Jpg – текстуры создаются в формате JPG а не BMP.
Для текстурирования программе необходимо указать файл, который будет использоваться в качестве текстуры для ЦМР.
Проецирование текстуры на ЦМР выполняется путем проецирования каждого тайла снимка. Для этого для углов каждого тайла TIF Tiled (блочный ТИФ – 256х256 пикселей) находится его геодезическая координата.
Для того чтобы вычислить геодезические координаты углов тайлов, необходимо решить следующую задачу – по точке на снимке определить геодезическую координату. Так как по одному снимку вычислить высоту нельзя, используется итерационный алгоритм. Выполняется пересчет сначала в одну сторону (из снимка в землю с начальной высотой), а потом обратный пересчет с той же высотой. Если изменения большие, то изменяется высота и повторяется итерация, пока прямой и обратный пересчет не дадут одинаковые результаты. При этом ЦМР используется для получения значений начальной высоты в точке X, Y методом интерполяции. Так один объект ЦМР разбивается на N текстурированных объектов из 4-х точек, где N – количество тайлов в растре. Координаты углов тайлов вычисляются путем откладывания по 256 пикселей.
Проецирование тайла на ЦМР
Представление готовой модели
Для того чтобы просмотреть построенную Вами модель необходимо перейти к трехмерному виду (Вид > Трехмерный). Перед вами появится геометрическая модель, для которой теперь нужно включить отображение текстур. Это делается из контекстного меню, пункт Загрузить текстуру для ЦМР и Загрузить все имеющиеся текстуры. Если текстуры не появились, включите Вид > Полный. Для улучшения наглядности нужно так же выполнить команду Вид > Скрыть внутренние поверхности.
Для навигации по модели существуют следующие функции:
- Свободная камера
- Задать позицию камеры
- Задать точку наблюдения
- Задать скорость камеры
- Задать минимальную высоту камеры
Алгоритм построения 3D модели
1. Построение ЦМР.
2. Создание ортофотоплана.
3. Сбор 3D зданий по шаблонам для 3D моделирования.
4. Построение стен с помощью команды ЦМР > Переприсвоить высоты (только при сборе с 3DBottom=0).
5. Формирование крыш @Map.CoverMultiFlatRoofs.
6. Устранение мерцания накладывающихся граней @Map.RemoveFaceBlinking.
7. Генерация текстур @Window.GenerateTextures
Экспорт/импорт модели
Начиная с версии Digitals от 07.08.09 добавлена поддержка формата KMZ – обменного формата представления трехмерных геопространственных данных в Google Earth.
И напоследок…
Полученную модель в Digitals можно не только посмотреть в трехмерном виде! Но еще и в 3D стерео (Вид > Трехмерный > Анаглифическое стерео > Включить).
Вы себе это трудно представляете? Тогда срочно запасайтесь анаглифами!
http://www.geosystema.net/forum/viewtopic.php?p=4827#4827