如何在SceneKit编辑器中居中模型的枢轴点

时间:2018-02-25 19:02:53

标签: ios scenekit arkit

是否有中心模型的枢轴?目前(默认情况下)它设置在左下角。我想要设置到中心。我怎样才能做到这一点?

这是图片:

https://github.com/apache/ranger/blob/master/ugsync/src/test/resources/ranger-ugsync-site.xml

更新:我添加了另一个节点,并将主席作为孩子添加。

所以,现在它效果更好,但它不会一直旋转,如果我继续旋转,它会重置位置。以下是平移操作的代码:

  @objc func panned(recognizer :UIPanGestureRecognizer) {

        var newAngleY :Float = 0.0

        if recognizer.state == .changed {

            let sceneView = recognizer.view as! ARSCNView
            let touchPoint = recognizer.location(in: sceneView)
            let translation = recognizer.translation(in: sceneView)

            print(translation.x)

            let scnHitTestResults = self.sceneView.hitTest(touchPoint, options: nil)

            if let hitTestResult = scnHitTestResults.first {

                if let parentNode = hitTestResult.node.parent {

                    newAngleY = (Float)(translation.x)*(Float)(Double.pi)/180
                    newAngleY += currentAngleY
                    parentNode.eulerAngles.y = newAngleY
                }

            }
        }

        else if recognizer.state == .ended {
            currentAngleY = newAngleY
        }

    }

1 个答案:

答案 0 :(得分:2)

您可以使用SCNNode的pivot属性(Apple Documentation

更改主席的轴心

您可以使用SCNMatrix4MakeTranslation例如

来更改此设置
nodeToAdd.pivot = SCNMatrix4MakeTranslation(0,0,0)

这可以解决问题:

    //1. Get The Bounding Box Of The Node
    let minimum = float3(nodeToAdd.boundingBox.min)
    let maximum = float3(nodeToAdd.boundingBox.max)

    //2. Set The Translation To Be Half Way Between The Vector
    let translation = (maximum - minimum) * 0.5

    //3. Set The Pivot
    nodeToAdd.pivot = SCNMatrix4MakeTranslation(translation.x, translation.y, translation.z)

您也可以在BlenderMaya等程序中对其进行更改。

或者,可能更容易,就是在SceneKit Editor本身编辑模型。

如果你无法修复它的支点,那么你可以做的是创建一个Empty Node,然后将主席作为孩子添加,确保它在那里居中。

这样你就可以更准确地转换它的旋转。