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

时间:2016-06-10 21:32:11

标签: interface-builder scenekit

有谁知道如何在SceneKit Interface Builder中更改节点的来源?原点是不正确的,但移动它只是移动模型,我想移动原点,使它在对象的中间: - /

也许我需要以不同的来源重新导出我的模型?

Object origin

1 个答案:

答案 0 :(得分:6)

重新定位节点pivot。例如,

    truckNode.pivot = SCNMatrix4MakeTranslation(13.4, 12.9, 28.9)

您也可以更改枢轴的旋转,但看起来您只对上述示例所满足的平移方面感兴趣。

另一个选择是让你的节点成为一个空的"容器节点"的子节点。在容器中重新定位节点,然后在容器节点上执行所有后续转换和旋转。

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

顺便说一句,您可以从此编辑器中的“场景图”中获取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文件中根节点的名称(如果需要,可以在编辑器Scene Graph中更改名称)。 "卡车"是您已为其分配文件根节点的新节点。尽可能地操纵它,而不是你的dae的根节点。 " theTruck"是dae SCNScene的临时持有者,仅用于访问其中的节点。您可以以相同的方式访问dae中的任何其他节点,从而允许您在代码中操作它们。