gpt4 book ai didi

ios - 从 CMMotionManager 获取 SCNCamera 的正确值

转载 作者:行者123 更新时间:2023-11-28 15:08:02 26 4
gpt4 key购买 nike

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

这是到目前为止的代码......

 func cameraTracking() {
motionManager.deviceMotionUpdateInterval = 1.0 / 60.0
motionManager.startDeviceMotionUpdates(to: OperationQueue.main) {
[weak self](data: CMDeviceMotion?, error: Error?) in
guard let data = data else { return }
let attitude: CMAttitude = data.attitude

self?.cameraNode.camera?.fieldOfView = 90

self?.cameraNode.eulerAngles = SCNVector3Make(-Float(attitude.roll + Double.pi/2), Float(attitude.yaw), -Float(attitude.pitch) )

}
}

感谢任何建议!

最佳答案

不要尝试使用 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)

关于ios - 从 CMMotionManager 获取 SCNCamera 的正确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48153278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com