如何使用ARKit用手指拖动SCNode而不管轴?

时间:2018-05-25 06:16:14

标签: ios swift4 scenekit arkit

我正在使用ARKit开发基于AR的应用程序。我使用https://developer.apple.com/documentation/arkit/handling_3d_interaction_and_ui_controls_in_augmented_reality作为基础。使用此功能,我可以移动或旋转整个虚拟对象。

现在虚拟对象中有很多子节点。我想用用户的手指拖动/移动任何子节点,而不管轴是什么。子SCNode可能处于地面或浮动状态。我想移动用户手指所在的任何地方,无论轴是什么,或者与子节点的欧拉角无关。这甚至可能吗?

我按照下面的链接,但它只是沿着一个特定的轴移动。

ARKit - Drag a node along a specific axis (not on a plane)

Dragging SCNNode in ARKit Using 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)
    }

0 个答案:

没有答案