簡體   English   中英

為什么 ARFaceAnchor 有負 Z 位置?

[英]Why does ARFaceAnchor have negative Z position?

我正在使用 ARKit 的ARFaceTrackingConfigurationARConfiguration.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 axispositive part of Z axis

在此處輸入圖片說明

因此, ARFaceAnchor也將被放置在 Z 軸正方向。

在此處輸入圖片說明

當您使用ARFaceTrackingConfigurationARWorldTrackingConfiguration ,需要考慮兩件事:

  • 后置攝像頭沿負 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM