![](/img/trans.png)
[英]Why are ARFaceAnchor and ARImageAnchor the only anchor types which are conforming to protocol ARTrackable?
[英]Why does ARFaceAnchor have negative Z position?
我正在使用 ARKit 的ARFaceTrackingConfiguration
和ARConfiguration.WorldAlignment.camera
對齊,但我發現文檔(表面上)並沒有反映現實;
根據下面的文檔摘錄,我希望面錨的transform
以右手坐標系表示。 但是,當我嘗試移動頭部時,我注意到面錨的 Z 坐標始終為負(即faceAnchor.transform.columns.3.z < 0
)。 請注意,在 X 和 Y 方向上移動頭部對應於預期結果(與 Z 坐標不同)。
相機對齊定義基於設備相機的本機傳感器方向的坐標系。 相對於
AVCaptureVideoOrientation.landscapeRight
的相機圖像,x 軸指向右側,y 軸指向上方, z 軸指向設備正面(朝向用戶) 。
我希望transform
按照文檔進行,即面錨的 Z 坐標應該是正的,因為文檔說“ z 軸指向設備的正面(朝向用戶) ”。 到目前為止,Z 軸似乎指向了設備的背面……
我錯過了一些明顯的東西嗎?
我嘗試通過以下代碼修復旋轉,但我不確定它是否是解決此問題的正確方法:
// Repair rotation
let oldFaceRotation = simd_quatf(face.transform) // get quaternion from
let repairedFaceRotation = simd_quatf(ix: oldFaceRotation.axis.y, iy: oldFaceRotation.axis.x, iz: -oldFaceRotation.axis.z, r: oldFaceRotation.real)
// Repair translation
var repairedPosition = face.transform.columns.3
repairedPosition.z *= -1
// Combine
var correctedFaceTransform = float4x4(repairedFaceRotation)
correctedFaceTransform.columns.3 = repairedPosition
這似乎很明顯:
當 ARSession 運行並且 ARCamera 開始跟蹤環境時,它會將WorldOriginAxis
放在您面前的(x: 0, y: 0, z: 0)
。 只需使用以下方法檢查它:
sceneView.debugOptions = [.showWorldOrigin]
所以你的臉的位置必須在 World Coordinates positive part of Z axis
的positive part of Z axis
。
因此,
ARFaceAnchor
也將被放置在 Z 軸正方向。
當您使用ARFaceTrackingConfiguration
與ARWorldTrackingConfiguration
,需要考慮兩件事:
后置攝像頭沿負 Z 軸(正 X 軸在右側)向對象移動。
前置攝像頭沿正 Z 軸(正 X 軸在左側)朝向人臉移動。
因此,當您通過TrueDepth 相機“查看”時,會鏡像
4x4 Matrix
。
雖然我仍然不知道為什么面錨的行為不像文檔中描述的那樣,但我至少可以回答如何將其左手系統校正為適合 Metal 和 SceneKit 的右手系統(X 軸到右,Y 軸向上,Z 軸從屏幕朝向用戶):
func faceAnchorPoseToRHS(_ mat: float4x4) -> float4x4 {
let correctedPos = float4(x: mat.columns.3.x, y: mat.columns.3.y, z: -mat.columns.3.z, w: 1)
let quat = simd_quatf(mat)
let newQuat = simd_quatf(angle: -quat.angle, axis: float3(quat.axis.x, quat.axis.y, -quat.axis.z))
var newPose = float4x4(newQuat)
newPose.columns.3 = correctedPos
return newPose
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.