2016-06-10 42 views
1

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

也许我需要用不同的原点重新导出模型?

Object origin

回答

4

重新定位节点的pivot。例如,

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

您也可以更改数据透视表的旋转角度,但它似乎只对上述示例满足的平移方面感兴趣。

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

另一个使用Interface Builder的选项。选择你的dae文件。在编辑器窗口的底部,左侧是一个方形按钮,左侧有一个栏。点击它打开场景图。这将显示文件中节点的分层列表。在Xcode窗口右侧的“实用程序”面板中,选择“框”图标。您可以在那里以数字方式调整节点位置。您也可以直接在编辑器中拖动它的轴。但这不会改变我认为是你想做的关键。您可能必须创建一个新节点,以充当上述容器。这可以通过右键单击场景图中的节点来调出菜单来完成。在我看来,在代码中设置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文件中根节点的名称(如果需要,可以在编辑器场景图中更改名称)。 “卡车”是一个新的节点,您已经为其分配了文件的根节点。像操作一样操作它,而不是你的dae的根节点。 “theTruck”是dae SCNScene的临时持有者,仅用于访问其中的节点。您可以用同样的方式访问dae中的任何其他节点,从而允许您在代码中操作它们。

+0

无论如何要在Interface Builder中做到这一点? – Chris

+0

是的,但更多的问题。我已经详细阐述过了。 – bpedit