Когда использовать worldTransform () и когда использовать transform () в ARKit - PullRequest
0 голосов
/ 11 января 2019

Я изучал ARKit, есть две основы для преобразования объекта относительно его относительного положения. Если вы хотите знать, когда следует использовать метод transform() и метод worldTransform(), будет полезна четкая разница с примером.

let transform = result.worldTransform
let isOnPlane = result.anchor is ARPlaneAnchor
object.setTransform(transform, relativeTo: cameraTransform,
                           smoothMovement: !isOnPlane,
                                alignment: planeAlignment,
                           allowAnimation: allowAnimation)

1 Ответ

0 голосов
/ 11 января 2019

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)

enter image description here

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)

Надеюсь, это поможет.

...