Трехмерное моделирование городской местности в DIGITALS
В качестве основного метода построения 3D-модели города по данным аэрофотосъемки рассмотрено создание текстурированной 3D-модели в среде Digitals. Следует отметить, что это технология направлена на создание модели не для близкого рассмотрения и детализации. Исходными данными являются данные библиотеки пиктометрии городов. На рисунке 18 представлена общая схема построения 3D модели в Digitals по перспективным снимкам
Рисунок 18 – Схема построения 3D модели
Рассмотрим вышеперечисленные этапы создания 3D-модели.
СБОР РЕЛЬЕФА. Выполняется измерение точек земной поверхности и сбор структурных линий рельефа в стереорежиме.
ПОСТРОЕНИЕ ЦМР/ТИН ЦМР. строится по собранным на предыдущем этапе объектам, т.е. по объектам рельефа. Если рельеф сложный, то иногда лучший результат дает построение ЦМР по предварительно созданной ТИН.
СБОР 3D-ОБЪЕКТОВ. Сбор трехмерных объектов выполняется в слое «3D-модель». Особенностью этого слоя является то, что в нем объекты представляются гранями, а не полилиниями.
Сбор объектов выполнялся по имеющимся в Digitals шаблонам зданий, представленным на рисунке 19.
Рисунок 19 – Шаблоны зданий в Digitals
Анимация: объем - 194Кб, размер - 250х250, количество кадров - 16, задержка между кадрами - 60 мс, задержка до повторного воспроизведения - 0 мс, количество циклов повторения - не ограничено.
Функция работает следующим образом: для каждой вершины грани объекта определяется соответственная точка на ЦМР. Плановые координаты у нее остаются прежними, а координата Z получается интерполированием по ЦМР.
Рисунок 20 – Результат переприсваивания высот
При этом для каждой грани стены методом интерполяции определяется высотная отметка основания. Недостаток данного алгоритма состоит в том, что построенная грань может не совпадать с поверхностью, образовывая при этом «зазоры» между объектами.
Текстурирование в Digitals выполняется средствами открытой графической библиотеки OpenGL. Файл с текстурой в Digitals хранится в форматах BMP и JPEG. Так как в OpenGL нет функции чтения/записи графических файлов, система OpenGL обрабатывает массив пикселей [15]. Для того чтобы наложить текстуру на объект, необходимо выполнить следующие действия:
- загрузить графический файл в память;
- создать имя-идентификатор текстуры. Имя-идентификатор служит для того, чтобы избежать дубликатов имен, обеспечить их согласования между собой. В качестве имени текстуры может быть использовано любое целое беззнаковое число;
- сделать его активным, т.е. указать, какой идентификатор будет обрабатываться.
- создать саму текстуру в памяти. Массив байт, который передается в OpenGL после чтения графического файла, не является еще текстурой, потому что у текстуры должно быть много различных параметров. Поэтому, при создании текстуры необходимо наделить ее определенными свойствами, такими как уровень детализации, способом масштабирования, связывания текстуры с объектом.
- установить параметры текстуры. Необходимо установить параметры, управляющие обработкой текстуры, применением к ее фрагментам и сохранением в объекте текстуры.
- установить параметры взаимодействия текстуры с объектом. Указывается, учитывать ли при текстурировании цвет объекта.
Digitals работает с двухмерными текстурами (т.е. текстурные координаты задаются двумя параметрами). Текстуры для 3D-объектов генерируются автоматически, (рисунок 21). [15]
Рисунок 21 – Текстурные координаты
Рисунок 22 – Результат текстурирования
Для текстурирования 3D-объектов в Digitals разработана функция автоматической генерации текстур, (рисунок 22).
Для определения соответствующей грани текстуры восстанавливается пучок лучей от грани к сенсору камеры. Восстановление лучей выполняется по фотограмметрическим формулам для получения координат точек проецируемой грани. Для определения, является ли грань видимой, для нее восстанавливается вектор нормали.
Вышеперечисленные действия выполняются для всех снимков, содержащих изображение грани. Из текущего набора выбирается тот снимок, на котором проекция грани занимает большую площадь с учетом видимости грани на снимке.
Функция работает с одним каталогом, поэтому все снимки, используемые для текстурирования, должны находиться в одной папке. Выбранная текстура вырезается со снимка с окрестностью, не превышающей 50 пикселей, и записывается в отдельный файл. Все файлы текстур заносятся в отдельный каталог «FileName (Textures)» или файл с текстурами PAK, находящийся в папке с картой. При этом для слоя типа «3D модель» создается табличный параметр «Textures», в котором хранится имя текстуры и текстурные координаты, соответствующие вершинам грани (<Имя файла текстуры>, X1, Y1, X2, Y2, X3, Y3, X4, Y4). Имя файла текстуры формируется следующим образом: <Имя снимка, из которого вырезается текстура><~><№ объекта><-><№ грани объекта><.bmp>/<.jpg> № объекта – уникальный номер объекта, который является номером объекта в списке объектов карты (машинный номер). Он является скрытым параметром и используется только внутри программы.
Строки с именем текстуры заносятся в том же порядке, в котором перечислены грани в списке точек объектов.
При отображении текстурированной 3D-модели на каждую грань объекта слоя «3D модель» выполняется наложение текстуры по данным табличного параметра «Textures» средствами библиотеки OpenGL. Трансформирование текстуры происходит при каждой ее загрузке средствами OpenGL по мировым и текстурным координатам.
Для текстурирования ЦМР лучше всего использовать ортофотоплан, так как он максимально приближен к плановому отображению объекта моделирования. Но теоретически в качестве текстуры может быть использован и наклонный снимок. [15]
Проецирование текстуры на ЦМР (рисунок 23), выполняется путем проецирования каждого тайла снимка. Для этого для углов каждого тайла TIF Tiled (блочный ТИФ – 256х256 пикселей) находится его геодезическая координата.
Для того чтобы вычислить геодезические координаты углов тайлов, необходимо решить следующую задачу – по точке на снимке определить геодезическую координату. Координаты углов тайлов вычисляются путем откладывания по 256 пикселей.
Рисунок 23 – Проецирование тайла на ЦМР
Рисунок 24 – Сбор 3D объектов. Наклонный снимок
Рисунок 25 – Текстурирование трехмерной модели
Огромным преимуществом является автоматическое генерирование текстур, благодаря которому создается оптимальная текстура для объекта в считанные секунды, (рисунок 24,25).
Основной объем трудоемкости приходится на сбор информации, а построение по этим данным трехмерное модели и ее визуализация выполняется автоматически, чего нельзя сказать о вышерассмотренных методах. Однако этот метод имеет и ряд недостатков.
Во-первых, он не рассчитан на детальное моделирование объектов. Во-вторых, встроенные шаблоны сбора 3D объектов рассчитаны в основном на построение зданий, а для построения качественной модели города такого классификатора недостаточно.