有没有办法在 RealityKit 中将视图呈现为实体?

Posted

技术标签:

【中文标题】有没有办法在 RealityKit 中将视图呈现为实体?【英文标题】:Is there a way to render Views as Entities in RealityKit? 【发布时间】:2020-01-20 20:55:27 【问题描述】:

我一直在尝试找到一种将 UIView 显示为我的 ARView 中的 3d 对象的方法。我一直在尝试创建一种可以用作显示以包含 UIView 但没有运气的盒子。

This answer 为 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)

【问题讨论】:

【参考方案1】:

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

arView.snapshotView(afterScreenUpdates: false)

或:

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

向您展示如何在 RealityKit 的 box 原语上应用纹理的方法:

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

【讨论】:

以上是关于有没有办法在 RealityKit 中将视图呈现为实体?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中将多个上下文呈现为相同的 HTML

如何在视图中将列指示为 NOT NULL?

有没有办法检测正在呈现多少个模态视图控制器?

有没有办法在 Android Studio 编辑器中将 RecyclerView 的内容预览显示为网格?

有没有办法在不使用图像选择器的情况下从照片应用程序呈现默认的 iOS 编辑视图?

如何在linearLayout中将视图置于最前面