【问题标题】:How to use setWorldOrigin with ARView?如何在 ARView 中使用 setWorldOrigin?
【发布时间】:2023-02-09 14:03:01
【问题描述】:

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

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)

【问题讨论】:

    标签: swift arkit realitykit


    【解决方案1】:

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

    仅VR解决方案

    尽管如此,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)
        }
    }
    

    【讨论】:

    • 谢谢,安迪。在 .nonAR 模式下是否有等效的方法来设置世界变换?
    • 在 VR 中工作时,没有需要移动坐标网格的场景。做什么的? setWorldOrigin 仅在 AR 模式下是必需的,因为默认情况下,AR 世界原点构建在 ARCamera 所在的同一位置。
    • 我将模型放置在一个空白空间内并重新定义原点向下几个刻度意味着我不必继续向坐标添加偏移量。我知道这是一件小事,但如果有一种简单的方法可以移动原点,为什么不这样做呢?
    • 移动相机、移动锚点、移动模型。 VR中移动坐标网格有什么意义?在 AR 中,这是必要的,在 VR 中则没有必要。
    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多