Есть ли способ отображать представления как объекты в RealityKit?

Я пытался найти способ отображать UIViews как трехмерные объекты в моем ARView. Я пытался создать своего рода коробку, которая действовала бы как дисплей, содержащий UIView, но безуспешно.

Этот ответ предоставляет решение для SceneKit, но похоже, что это не работает в RealityKit. До сих пор моя идея заключалась в следующем, но я не мог найти способ подключить UIView.

let box = MeshResource.generateBox(width: 0.6, height: 0.3, depth: 0.02, cornerRadius: 0.03)
let material = SimpleMaterial()
material.baseColor =  --SET UIVIEW AS DIFFUSE OF MATERIAL?--
let entity  = ModelEntity(mesh: box, materials: [material])
anchorEntity.addChild(entity)

person Volt    schedule 20.01.2020    source источник


Ответы (1)


Я вижу следующее решение: вы можете использовать методы экземпляра snapshotView() или snapshot(), чтобы получить снимок содержимого текущего UIView (а затем вы должны преобразовать его в .jpg и использовать его в качестве текстуры для 3D-модели) или для получения снимка как .hdr (а затем преобразовать его в .jpg).

arView.snapshotView(afterScreenUpdates: false)

or:

arView.snapshot(saveToHDR: true, completion: { (image) in ... } )

Подход, показывающий, как применить текстуру к блочному примитиву RealityKit:

@IBOutlet var arView: ARView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    arView.environment.background = .color(.systemGray2)
    let scene = try! Experience.loadBox()
    
    var material = SimpleMaterial()
    material.baseColor = try! .texture(.load(named: "snapshot.jpg"))
    
    let mesh = MeshResource.generateBox(size: 0.3)

    let model = ModelEntity(mesh: mesh, materials: [material])
    model.position.x = 0.3
    model.setParent(scene)

    arView.scene.anchors.append(scene)
}

Также примите во внимание, что RealityKit 2.0 поддерживает видео-текстуры через VideoMaterial.

person Andy Fedoroff    schedule 21.01.2020