Задать вопрос
@jscoder

Three.js :: Сохранение / Загрузка кастомных объектов?

Доброго времени суток!

По сабжу
3D-конструктор помещения. Three.js r73. Сохранение и соответственно загрузка проекта.

Объекты на сцене содержат кастомные свойства/методы, которых по умолчанию нет. В итоге объект приводится к подобному виду:
85367e4e13c248beb3ea75c550e39caf.jpgСохранение
Первое что советуют - использовать SceneExporter.js + SceneLoader.js, но в этом случае експортер выбрасывает исключение типа m.ambient.getHEX() is not a function, что странно, поскольку я даже не представляю откуда он должен взяться. И даже если игнорировать этот факт, и вручную прописать предположительное значение, которое должна вернут эта функция, то в итоге получаем JSON, который выглядит так:
e67f226b377a4e788f26ac0d75390754.jpgподобным образом выглядит и scene.toJSON()
что совсем отличается от того представления, с которым идет работа в браузере. Отсюда несколько вопросов:
  • При таковой структуре, каким образом могут быть связаны отдельно геометрия и материалы (да и вообще все что лежит в JSON'е) и как из этого получить вразумительные мэши?
  • Так как большая часть свойств кастомная, то каким образом их сохранять?
  • Я начинаю присматриваться к варианту полного сохранения js-объектов в таком виде, как они есть в памяти, не смотря даже на то что результат может быть весом в 50 мегабайт. Но в таком случае из-за ссылок внутри объектов я получаю TypeError: Converting circular structure to JSON

Соответственно нужно найти способ сохранить объекты как уже созданные меши, чтобы не испытывать проблем с загрузкой, ведь scene.add() и scene.remove() куда проще велосипедов. Кто что может предложить?

Спасибо!

UPD:
46aa0f993d164985a88041792d121a5c.jpg
пока писал это, вернулся к загружаемому объекту и понял, что есть вариант перебирать geometries, но массивы разной длинны и связываться с соответствующими текстурами и материалами просто так не получится.
  • Вопрос задан
  • 316 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы