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

Ios 如何在SceneKit编辑器中居中模型的轴心点,ios,scenekit,arkit,Ios,Scenekit,Arkit,模型的轴心是否仍要居中?当前(默认情况下)设置为左下角。我想调到中间。我该怎么做 图为: 更新:我添加了另一个节点,并将椅子作为孩子添加 所以,现在它工作得更好了,但它不会一直旋转,如果我继续旋转,它会重置位置。以下是平移操作的代码: @objc func panned(recognizer :UIPanGestureRecognizer) { var newAngleY :Float = 0.0 if recognizer.state == .chan

模型的轴心是否仍要居中?当前(默认情况下)设置为左下角。我想调到中间。我该怎么做

图为:

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

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

  @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
        }

    }

您可以使用SCNNode()的
pivot
属性更改椅子的枢轴

您可以使用
SCNMATRIX4MAKETRANSACTION
更改此设置,例如:

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)
您还可以在程序中更改它,如
Blender
Maya

或者,
场景编辑器
中编辑模型可能更容易

如果无法修复其轴,则可以创建一个
空节点
,然后将椅子添加为该节点的子节点,确保椅子位于该节点的中心


通过这种方式,您应该能够更准确地变换它的旋转。例如,您可以使用SCNNode()的
pivot
属性更改椅子的枢轴

您可以使用
SCNMATRIX4MAKETRANSACTION
更改此设置,例如:

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)
您还可以在程序中更改它,如
Blender
Maya

或者,
场景编辑器
中编辑模型可能更容易

如果无法修复其轴,则可以创建一个
空节点
,然后将椅子添加为该节点的子节点,确保椅子位于该节点的中心


通过这种方式,您应该能够更准确地变换其旋转方向。

谢谢!我使用了最后一种方法,但由于某种原因,旋转仍然是有问题的。即使我正在旋转parentNode而不是chair节点,它仍然会引起问题。也许这是模型本身的问题。我使用了上面的代码,但它没有按预期工作。椅子会旋转,但仍在使用原始坐标系旋转。我认为这个模型有问题。更新了这个问题,取得了更大的进展。您是否尝试过删除var newAngleY:Float=0.0,并将其设置在这里:var newAngleY=(Float)(translation.x)*(Float)(Double.pi)/180谢谢Josh!就这样:)谢谢!我使用了最后一种方法,但由于某种原因,旋转仍然是有问题的。即使我正在旋转parentNode而不是chair节点,它仍然会引起问题。也许这是模型本身的问题。我使用了上面的代码,但它没有按预期工作。椅子会旋转,但仍在使用原始坐标系旋转。我认为这个模型有问题。更新了这个问题,取得了更大的进展。您是否尝试过删除var newAngleY:Float=0.0,并将其设置在这里:var newAngleY=(Float)(translation.x)*(Float)(Double.pi)/180谢谢Josh!就这样:)