几天来我一直在努力解决这个问题。
给定一个基于 ARKit 的应用程序,我可以在其中跟踪用户的面部,如何从其锚点获得面部的绝对旋转?
我可以得到 ARAnchor 的变换,它是一个 simd_matrix4x4。有很多关于如何从矩阵中获取位置的信息(它是第 3 列),但没有关于旋转的信息!
我希望能够通过传递 YAW、PITCH 和 ROLL 来控制应用程序外部的 3D 对象。
我尝试的最新一件事实际上有些作用:
let arFrame = session.currentFrame!
guard let faceAnchor = arFrame.anchors[0] as? ARFaceAnchor else { return }
let faceMatrix = SCNMatrix4.init(faceAnchor.transform)
let node = SCNNode()
node.transform = faceMatrix
let rotation = node.worldOrientation
Run Code Online (Sandbox Code Playgroud)
rotation.x .y 和 .z 有我可以使用的值,但是当我移动手机时,这些值会发生变化。例如,如果我年满 180 岁?并继续看手机,数值会根据手机的位置发生剧烈变化。
我尝试在 ARConfiguration 中更改世界对齐方式,但这并没有什么不同。
我读错了参数吗?这应该容易得多!
let position = SCNVector3(x: 0, y: 0, z: -2) 从原点到上述点的测量单位的距离是多少