如何在 ARView 中使用 setWorldOrigin?

How to use setWorldOrigin with ARView?

在下面的 RealityKit 代码中,考虑到我应用到 y 的世界翻译,我希望盒子的位置更低。我想我误解了 setWorldOrigin 的作用。我想重新定义坐标映射,使零位于不同的位置。我doing/expecting错了什么?谢谢

let arView = ARView(frame: .zero, cameraMode: .nonAR)
arView.environment.background = .color(.white)

var relativeTransform = matrix_identity_float4x4
relativeTransform.columns.3.y = -1
arView.session.setWorldOrigin(relativeTransform: relativeTransform)
        
let material = SimpleMaterial(color: .gray, isMetallic: false)
let entity = ModelEntity(mesh: .generateBox(size: 0.3), materials: [material])
        
let anchor = AnchorEntity(world: .zero)
anchor.addChild(entity)
arView.scene.addAnchor(anchor)

ARSession 是一个增强现实对象,因此所有会话的属性和方法仅在会话为 运行 时才有效。 ARSession 在 .nonAR 模式、VR 模式和 Xcode 模拟器中没有意义。仅在 AR 模式下使用您的代码。


尽管如此,VR 场景的解决方案可能如下所示:

import UIKit
import RealityKit

class Camera: Entity, HasPerspectiveCamera, HasAnchoring {
    required init() {
        super.init()
   
        self.camera = PerspectiveCameraComponent(near: 0.01, far: 200.00, 
                                 fieldOfViewInDegrees: 50.0)
        self.transform.translation.y = 0.5
        self.transform.translation.z = 2.0
    }
}

class ViewController: UIViewController {
        
    @IBOutlet var arView: ARView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        arView.environment.background = .color(.black)
        let camera = Camera()
        arView.scene.addAnchor(camera)

        let entity = ModelEntity(mesh: .generateBox(size: 0.1))      
        let anchor = AnchorEntity(world: .zero)
        anchor.addChild(entity)
        arView.scene.addAnchor(anchor)
    }
}