CMMotionData到SceneKit SCNNode方向

Joe*_*nez 4 quaternions augmented-reality core-motion cmmotionmanager scenekit

尝试使用CoreMotion正确旋转SceneKit相机.我构建的场景做得相当简单......我所做的就是创建一堆盒子,分布在一个区域中,相机只是指向Z轴.

不幸的是,从设备运动返回的数据似乎与设备的物理位置和方向无关.它似乎随意蜿蜒.

正如SO帖子中所建议的那样,我将态度的四元数直接传递给相机节点的方向属性.

我误解了核心动作在这里给我的数据吗?这种态度不应该反映出设备的物理定位吗?还是增量运动,我应该建立在先前的方向?

Nic*_* S. 7

这个片段可能对您有所帮助:

    var motionManager = CMMotionManager()
    motionManager?.deviceMotionUpdateInterval = 1.0 / 60.0
    motionManager?.startDeviceMotionUpdatesToQueue(
        NSOperationQueue.mainQueue(),
        withHandler: { (motion: CMDeviceMotion!, error: NSError!) -> Void in

            let currentAttitude = motion.attitude
            var roll = Float(currentAttitude.roll) + (0.5*Float(M_PI))
            var yaw = Float(currentAttitude.yaw)
            var pitch = Float(currentAttitude.pitch)

            self.cameraNode.eulerAngles = SCNVector3(
                x: -roll,
                y: yaw,
                z: -pitch)
    })
Run Code Online (Sandbox Code Playgroud)

此设置适用于横向设备.您可以通过更改+和 - 来玩不同的方向

导入CoreMotion.