ARKit RealityKit WorldMap Persistence

Итак, у меня есть приложение RealityKit, в которое я добавляю различныеEntities. Я искал вдохновения для настойчивости в примере Apple SceneKit с кодом, который я реализовано только для обнаружения пропавших без вести Entities при загрузке WorldMap


person Dgrz    schedule 27.07.2020    source источник
comment
То же самое! ARKit, похоже, упускает только Entities. WorldMesh, как я понял, сохраняется!   -  person Dgrz    schedule 03.08.2020


Ответы (1)


Я предполагаю, что вы можете сохранить и загрузить карту мира из сеанса ARView, но проблема в том, что при этом сохраняется только старый стиллер ARAnchors, а не классные новые объекты Entity из новых функций RealityKit.

Работа, которую я сделал, заключалась в том, чтобы инициализировать мои AnchorEntities, используя конструктор, который принимает ARAnchor. Итак, из моего hitTest или RayCast я беру преобразование мира и сохраняю его как ARAnchor, а затем использую его для инициализации AnchorEntity. Я дал этому ARAnchor уникальное имя, которое будет использоваться позже для переназначения сущности при загрузке постоянной карты мира, поскольку эта карта по-прежнему имеет только ARAnchors.

let arAnchor = ARAnchor(name: anchorId, transform: rayCast.worldTransform) // ARAnchor with unique name or ID
let anchorEntity = AnchorEntity(anchor: arAnchor)

Вот как это выглядело перед добавлением якорей в сцену в первый раз. После того, как вы сохраните свою карту мира, закроете и перезагрузите, я затем перебираю загруженные или сохраненные ARAnchors и связываю каждую привязку с их соответствующими Entities, которые сопоставляются с именем в ARAnchor.

let anchorEntity = AnchorEntity(anchor: persistedArAnchor) // use the existing ARAnchor that persisted to construct an Entity
var someModelEntity: Entity = myEntityThatMatchesTheAnchorName // remake the entity that maps to the existing named ARAnchor
anchorEntity.addChild(someModelEntity)
arView.scene.addAnchor(anchorEntity)
 

Это косвенно, но использование этой связи между AnchorEntity и ARAnchor было первым решением, которое я смог найти, учитывая ограничение, заключающееся в знании только того, как сохранять ARAnchors, а не Entities в worldMap.

person BCbeau    schedule 19.12.2020