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

Chr*_*ris 3 interface-builder scenekit

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

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

对象起源

bpe*_*dit 6

重新定位节点pivot.例如,

    truckNode.pivot = SCNMatrix4MakeTranslation(13.4, 12.9, 28.9)
Run Code Online (Sandbox Code Playgroud)

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

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

使用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)
Run Code Online (Sandbox Code Playgroud)

在此示例中:"myTruck"是没有dae后缀的dae文件的名称."truckBase"是dae文件中根节点的名称(如果需要,可以在编辑器Scene Graph中更改名称)."truck"是您为其分配了文件根节点的新节点.尽可能地操纵它,而不是你的dae的根节点."theTruck"是dae的临时持有者SCNScene,仅用于访问其中的节点.您可以以相同的方式访问dae中的任何其他节点,从而允许您在代码中操作它们.