2

我一直在尝试找到一种在我的 ARView 中将 UIViews 显示为 3d 对象的方法。我一直在尝试创建一个盒子,它可以作为一个包含 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)
4

1 回答 1

1

我看到以下解决方案:您可以使用snapshotView()snapshot()实例方法来获取当前 UIView 内容的快照(然后您必须将其转换为.jpg并将其用作 3D 模型的纹理)或获取快照.hdr(和然后将其转换.jpg为)。

arView.snapshotView(afterScreenUpdates: false)

或者:

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支持视频纹理。

于 2020-01-21T17:07:30.000 回答