...

понедельник, 2 декабря 2013 г.

[Из песочницы] Извлечение 3D моделей в формате O2С из dat файла

Пару лет назад столкнулся с одной интересной задачей. Она заключалась в том, чтобы вытащить из программы-каталога все 3D модели (порядка 2000 штук) в виде списка файлов с названием-номером в соответствие с номерами моделей в каталоге. Програма использовала сторонний компонент для визуализации моделей — O2CPlayer. Все модели были зашиты в один большой файл с расширением dat. Описание и примеры использования O2Cplayer можно посмотреть на официальном сайте: сайт и пример Ferrari.






Попытка разбора архива

Опыт работы с 3ds и другими графическими форматами моделей уже был, я принялся искать документацию формата O2C. Предполагалось, что файл будет состоять из частей с определенными заголовками (chunks), по которым можно попытаться вытащить из dat файла модели. Документацию мне найти не удалось, удалось найти несколько готовых моделей в нужном формате и официальный сайт разработчика компонентов визуальзации. Бинарники действительно содержали похожие заголовки. Проанализировал dat файл на их повторение, оказалось порядка 600. Этого было явно мало, к тому же повторялись заголовки хаотично. Попытка изъять модели напрямую из файла неудалась.


Исследование фреймворка


Решил отложить эту задачу тем более, что конкретных идей реализации не было. Но спустя некоторое время пришла мысль — не посмотреть ли этот фреймворк визуализации. Создал WinForms проект в MSVS, подключил необходимые COM O2CPlayer сборки. После установки официального приложение они доступны из Com Reference. O2CPleer достпуен на официальном сайте разработчика.



Этот движок из коробки обладает всеми базовыми функциями визуализации, при этом не требует специальных знаний в области 3D графики. O2СPlayer имеет интуитивно понятный интернфейс настроек. Представлены функции вращения, перемещения, детализации, анимаций объектов и прочие. Для таких задач, как просмотр каталога моделей, является вполне удачным решением.



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



  1. Выделяет нужную модель из архива

  2. Создает файл на диске

  3. Передает имя файла для рендеринга


Решение


Набросав простую утилиту с использованием объекта FileSystemWatcher из пространства имен System.IO, промотрел все изменения файлов на диске C. Действительно, перед показом следующей модели в программе, в папке @«C:\Users\D395~1\AppData\Local\Temp\..” создается новый файл с происвольным именем. Задача сводилась к копированию этого файла с нужным названием в нужную папку. В течение часа все модели были выбраны.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий