像在SCNARView中一样计算worldFront

时间:2018-06-18 19:40:46

标签: swift arkit core-motion

SCNARView中,我可以访问名为camera node的{​​{1}}属性,该属性代表相机旋转。我想计算不使用worldFront的{​​{1}}值的类似向量,只计算来自CoreMotion的数据。因此,如果相机朝向相同的方向,我可以在SCNARView中得到一个等于CoreMotion的向量。有人可以解释我如何计算这样的值吗?

2 个答案:

答案 0 :(得分:0)

态度属性可能会有所帮助

func rollCam(motion: CMDeviceMotion) {
    let attitude = motion.attitude
    let roll     = Float(attitude.roll-M_PI/2)
    let yaw      = Float(attitude.yaw)
    let pitch    = Float(attitude.pitch)
    camNode.eulerAngles = SCNVector3Make(roll, -yaw, pitch)
}

使用这段代码,很久以前,我用CoreMotion进行了一些实验。我试图首先检测人类行走,然后(使用startDeviceMotionUpdates数据)移动并将相机靠近一个"锚定" SCNBox。后来ARKit用ARAnchor类解决了我的需求

你在追求什么功能?

答案 1 :(得分:0)

我找到了答案:

override var cameraFrontVector: double3 {
    guard let quaternion = motionService.deviceMotion?.attitude.quaternion else { return .zero }

    let x = 2 * -(quaternion.x * quaternion.z + quaternion.w * quaternion.y)
    let z = 2 *  (quaternion.y * quaternion.z - quaternion.w * quaternion.x)
    let y = 2 *  (quaternion.x * quaternion.x + quaternion.y * quaternion.y) - 1

    return double3(x: x, y: y, z: z)
}

这给了我worldFront中的SCNNode之类的值。