从CMMotionManager获取SCNCamera的正确值

时间:2018-01-08 15:27:31

标签: ios swift core-motion

我想使用核心动作来控制使用欧拉角度的cameraNode视图。它工作在初始位置,但是当我将视图更改为右侧或左侧时。滚动值似乎是错误的。

这是迄今为止的代码......

{{#each model.data.details as |data index| }}
    <li>{{get this (concat "model.data.group." index ".group")}} {{data.name}} -- {{data.age}} </li>
{{/each}}

感谢任何建议!

1 个答案:

答案 0 :(得分:1)

不要试图使用eulerAngles那些会导致你的问题,例如gimbal lock

正确的方法是留在quaternions

的范围内

我假设您正在使用横​​向模式 - 否则您需要更改SCNVector4

中的参数
let attitude = data.attitude.quaternion
let aq = GLKQuaternionMake(Float(attitude.x), Float(attitude.y), Float(attitude.z), Float(attitude.w))
let cq = GLKQuaternionMakeWithAngleAndAxis(Float(Float.pi/2), 0, 1, 0)
let q = GLKQuaternionMultiply(cq, aq)
self?.cameraNode.orientation = SCNVector4(x: -q.y, y: q.x, z: q.z, w: q.w)