我一直在尝试找到一种方法来在UIView中将UIViews显示为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)
答案 0 :(得分: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支持视频纹理。