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