Interface builder 更改SceneKit Interface Builder中节点的原点

Interface builder 更改SceneKit Interface Builder中节点的原点,interface-builder,scenekit,Interface Builder,Scenekit,有人知道如何在SceneKit Interface Builder中更改节点的原点吗?原点是不正确的,但移动它只是移动模型,我想移动原点,所以它在对象的中间:-/< /P> 也许我需要用不同的来源重新导出我的模型 重新定位节点的轴。比如说, truckNode.pivot = SCNMatrix4MakeTranslation(13.4, 12.9, 28.9) 您也可以更改轴的旋转,但似乎您只对上面的示例所满足的平移方面感兴趣 另一种选择是使您的节点成为其他空“容器节点”的子节点。在

有人知道如何在SceneKit Interface Builder中更改节点的原点吗?原点是不正确的,但移动它只是移动模型,我想移动原点,所以它在对象的中间:-/< /P> 也许我需要用不同的来源重新导出我的模型


重新定位节点的
轴。比如说,

    truckNode.pivot = SCNMatrix4MakeTranslation(13.4, 12.9, 28.9)
您也可以更改轴的旋转,但似乎您只对上面的示例所满足的平移方面感兴趣

另一种选择是使您的节点成为其他空“容器节点”的子节点。在容器中重新定位节点,然后在容器节点上执行所有后续平移和旋转

使用界面生成器的另一个选项。选择dae文件。在编辑器窗口的底部,左侧是一个方形按钮,其左侧有一个条。单击它以打开场景图。这将显示文件中节点的分层列表。在Xcode窗口右侧的实用程序面板中,选择“框”图标。可以在此处以数字方式调整节点位置。也可以在编辑器中直接拖动其轴。但这不会改变你想要做的事情。您可能需要创建一个新节点来充当上述容器。这可以通过右键单击场景图中的节点来打开菜单来完成。在我看来,在代码中设置
更容易。详情如下

顺便说一句,您可以从该编辑器中的场景图中获取dae场景中节点的名称。以下是如何在代码中访问dae节点:

    guard let theTruck = SCNScene(named: "myTruck") else {
        print("Couldn't find molecule in dictionary  (myTruck)")
        return  }

    let truck = theTruck.rootNode.childNodeWithName("truckBase", recursively: true)!
    truck.pivot = SCNMatrix4MakeTranslation(12.0, 0, 8.0)

在本例中,“myTruck”是不带dae后缀的dae文件的名称。“truckBase”是dae文件中根节点的名称(如果需要,可以在编辑器场景图中更改名称)。“truck”是一个新节点,您已将文件的根节点分配给它。像操作dae一样操作它,而不是操作dae的根节点。“theTruck”是dae
SCNScene
的临时持有者,仅用于访问其中的节点。您可以以相同的方式访问dae中的任何其他节点,从而允许您在代码中对它们进行操作。

在Interface Builder中是否有这样做的方法?是的,但问题更大。我在上面已经阐述过。在IB中使用节点检查器,如中间建议的那样,工作得很好,将X Euler变为90,在期望的方向上旋转90度。谢谢