使用ARKit更改几何对象的锚点枢轴

时间:2018-02-19 22:37:59

标签: swift gesture arkit scnnode

我试图将一个物体(实际上是Maya的一个立方体)旋转90度单向旋转,然后再次点击它旋转-90度。

轻敲时的旋转正在工作,但枢轴似乎位于原点(0,0,0),因此它始终围绕原点旋转。

我希望能够操纵锚点,但将几何体保持在同一个位置。

理想情况下,如果可能,锚点将移动到对象的左后角?

这是我到目前为止所尝试的:

  1. 使用:result.node.pivot = SCNMatrix4MakeTranslation(-30.0, 0.0, -20)但似乎只是将枢轴点和几何体移动到一起。

  2. 从Maya再次带入我的几何体中     正确的地方,但Xcode似乎将所有枢轴重置为原点。

  3. 使一个空节点将枢轴移动到所需位置(粗略地)并将我的对象放在空节点中并且不起作用。

  4. 任何帮助都会很棒!提前谢谢你:)

    以下是旋转对象的代码:

       var objectHit = false
            var firstTimePressed : Bool = false
            var hitTestOptions = [SCNHitTestOption: Any]()
            hitTestOptions[SCNHitTestOption.boundingBoxOnly] = true
            let results: [SCNHitTestResult] = sceneView.hitTest(latestTouchLocation, options: hitTestOptions)
    
            // The user has touched the virtual object
            for result in results {
                let object = VirtualObject.isNodePartOfVirtualObject(result.node)
    
                if object != nil {
                    objectHit = true
                }
                if object?.childNode(withName: "door", recursively: true) == result.node{                   
                    if(firstTimePressed == false){
                        print("object should open")
                        result.node.pivot = SCNMatrix4MakeTranslation(-30, 0, -20)
                        result.node.runAction(SCNAction.rotateBy(x: 0, y: -1.5708, z: 0, duration: 1))
                        firstTimePressed = true
                    }
                    else{
                        print("object should close")
                        result.node.pivot = SCNMatrix4MakeTranslation(-30, 0, -20)
                        result.node.runAction(SCNAction.rotateBy(x: 0, y: 1.5708, z: 0, duration: 1))
                        firstTimePressed = false
                    }
    
                }
           }
    

0 个答案:

没有答案