Как перетащить SCNode пальцем независимо от оси, используя ARKit? - PullRequest
0 голосов
/ 25 мая 2018

Я работаю над приложением на основе AR, используя ARKit.Я использую https://developer.apple.com/documentation/arkit/handling_3d_interaction_and_ui_controls_in_augmented_reality в качестве базы для этого.Используя это, я могу перемещать или вращать весь Виртуальный объект.

Теперь в Виртуальном объекте много дочерних узлов.Я хочу перетащить / переместить любой дочерний узел пальцем пользователя независимо от оси.Дочерний SCNode может быть заземленным или плавающим.Я хочу переместить объект туда, куда направляется палец пользователя, независимо от оси или независимо от углов Эйлера дочернего узла.Это вообще возможно?

Я перешел по ссылкам ниже, но он просто движется вдоль определенной оси.

ARKit - перетащите узел вдоль определенной оси (не на плоскости)

Перетаскивание SCNNode в ARKit с помощью SceneKit

Я попытался использовать приведенный ниже код, и это совсем не помогло,

    let tapPoint: CGPoint = gesture.location(in: sceneView)
    let result = sceneView.hitTest(tapPoint, options: nil)
    if result.count == 0 {
        return
    }
    let scnHitResult: SCNHitTestResult? = result.first
    movedObject = scnHitResult?.node //.parent?.parent

    let hitResults = self.sceneView.hitTest(tapPoint, types: .existingPlane)
    if !hitResults.isEmpty{
        guard let hitResult = hitResults.last else { return }
        movedObject?.position = SCNVector3Make(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z)
    }
...