1 . Для ARAnchor
и ARCamera
используйте local
transform свойство instance.
transform
- это матрица, кодирующая положение, ориентацию и масштаб якоря относительно мирового координатного пространства сеанса AR, в котором находится якорь.
Например, вы можете легко получить преобразование ARAnchor или ARCamera, представленное матрицей 4x4.
var transform: simd_float4x4 { get }
Вы должны использовать это свойство преобразования следующим образом (для локально расположенных и ориентированных объектов):
var translation = matrix_identity_float4x4
translation.columns.3.z = -0.25
let transform = currentFrame.camera.transform * translation
// OR
let transform = currentFrame.camera.transform
let anchor = ARAnchor(transform: transform)
sceneView.session.add(anchor: anchor)
2 . Для hitTestResults
и ARAnchors
используйте свойство экземпляра global
worldTransform .
worldTransform
- это позиция и ориентация результата теста удара относительно мировой системы координат.
var worldTransform: simd_float4x4 { get }
И вы можете использовать его следующим образом:
if !hitTestResult.isEmpty {
guard let hitResult = hitTestResult.first else {
return
}
addPlane(hitTestResult: hitResult)
print(hitResult.worldTransform.columns.3)
}
// OR
let anchor = ARAnchor(name: "PANTHER", transform: hitTestResult.worldTransform)
sceneView.session.add(anchor: anchor)
Надеюсь, это поможет.