我的 Swift ARKit 应用程序需要面部相对于前置摄像头的位置和方向。如果我设置ARConfiguration.worldAlignment = .camera我需要做的就是调用faceAnchor.transform,它工作得很好;但我需要在默认情况下运行worldAlignment = .gravity。在这种模式下,我可以获得faceAnchor.transform和camera.transform,它们都是在世界坐标中提供的。如何使用这些变换来获取相机坐标中的面部锚点?我尝试过将它们相乘,以及将一个乘以另一个的倒数,在所有四种顺序组合中,但这些结果都不起作用。我只是不太了解矩阵运算,无法在这里取得成功。有人可以帮我解释一下吗?
我终于使用 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)\nRun Code Online (Sandbox Code Playgroud)\n\n希望这对其他人有帮助!
\n| 归档时间: |
|
| 查看次数: |
1319 次 |
| 最近记录: |