Swift ARKit:获取相对于相机的面部锚点变换

hol*_*jon 3 swift arkit

我的 Swift ARKit 应用程序需要面部相对于前置摄像头的位置和方向。如果我设置ARConfiguration.worldAlignment = .camera我需要做的就是调用faceAnchor.transform,它工作得很好;但我需要在默认情况下运行worldAlignment = .gravity。在这种模式下,我可以获得faceAnchor.transformcamera.transform,它们都是在世界坐标中提供的。如何使用这些变换来获取相机坐标中的面部锚点?我尝试过将它们相乘,以及将一个乘以另一个的倒数,在所有四种顺序组合中,但这些结果都不起作用。我只是不太了解矩阵运算,无法在这里取得成功。有人可以帮我解释一下吗?

hol*_*jon 8

我终于使用 SceneKit 函数解决了这个问题!

\n\n
    let currentFaceTransform = currentFaceAnchor!.transform\n\n    let currentCameraTransform = frame.camera.transform\n\n    let newFaceMatrix = SCNMatrix4.init(currentFaceTransform)\n\n    let newCameraMatrix = SCNMatrix4.init(currentCameraTransform)\n    let cameraNode = SCNNode()\n    cameraNode.transform = newCameraMatrix\n\n    let originNode = SCNNode()\n    originNode.transform = SCNMatrix4Identity\n\n    //Converts a transform from the node\xe2\x80\x99s local coordinate space to that of another node.\n    let transformInCameraSpace = originNode.convertTransform(newFaceMatrix, to: cameraNode)\n\n    let faceTransformFromCamera = simd_float4x4(transformInCameraSpace)\n
Run Code Online (Sandbox Code Playgroud)\n\n

希望这对其他人有帮助!

\n