如何在 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)
}
}
在下面的 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)
}
}