ARKit –获取场景中ARCamera的当前位置
我正在同时学习ARKit和Scenekit,这是一个挑战。
创建了ARWorldTrackingSessionConfiguration会话后,我想知道是否有人知道一种在场景会话中获取用户“相机”位置的方法。我的想法是要向用户的当前位置设置对象的动画。
let reaperScene = SCNScene(named: "reaper.dae")!let reaperNode = reaperScene.rootNode.childNode(withName: "reaper", recursively: true)!
reaperNode.position = SCNVector3Make(0, 0, -1)
let scene = SCNScene()
scene.rootNode.addChildNode(reaperNode)
// some unknown amount of time later
let currentCameraPosition = sceneView.pointOfView?.position
let moveAction = SCNAction.move(to: currentCameraPosition!, duration: 1.0)
reaperNode.runAction(moveAction)
但是,即使我四处移动相机,currentCameraPosition似乎始终为[0,0,0]。知道我在做什么错吗?最终的想法是,我将围绕不可见的球体旋转对象,直到它位于相机前面,然后对其进行动画处理,这类似于以下操作:旋转SCNCamera节点,围绕虚构的球体查看对象(用户可以通过这种方式看到物体朝着它们动画)
谢谢你的帮助。
回答:
将自己设置为ARSession.delegate
。比您可以实现的session(_:didUpdate:)
,它将为您ARFrame
在会话中处理的每个帧提供一个。框架具有一个camera
属性,可保存有关相机变换,旋转和位置的信息。
func session(_ session: ARSession, didUpdate frame: ARFrame) { // Do something with the new transform
let currentTransform = frame.camera.transform
doSomething(with: currentTransform)
}
正如rickster指出的,您总是可以ARFrame
通过调用通过它获得当前位置和摄像机位置session.currentFrame
。如果您只需要一次位置,例如将一个节点移动到摄像机所在的位置,但是delegate
如果要获取摄像机位置的更新,则应该使用该方法,这很有用。
以上是 ARKit –获取场景中ARCamera的当前位置 的全部内容, 来源链接: utcz.com/qa/429632.html