在 SceneKit Interface Builder 中更改节点的原点
Change origin of node in SceneKit Interface Builder
有谁知道如何在 SceneKit Interface Builder 中更改节点的原点?原点不正确,但移动它只会移动模型,我想移动原点使其位于对象的中间 :-/
也许我需要重新导出不同来源的模型?
重新定位节点的 pivot
。例如,
truckNode.pivot = SCNMatrix4MakeTranslation(13.4, 12.9, 28.9)
您也可以更改枢轴的旋转,但您似乎只对上述示例满足的平移方面感兴趣。
另一种选择是让您的节点成为空节点 "container node" 的子节点。在容器中重新定位您的节点,然后在容器节点上进行所有后续平移和旋转。
使用 Interface Builder 的另一个选项。 Select 你的 dae 文件。在编辑器 window 的底部左侧,是一个方形按钮,左侧有一个栏。单击它以打开场景图。这将显示文件中节点的分层列表。在 Xcode window、select 右侧的 "box" 图标的实用程序面板中。您可以在那里以数字方式调整节点位置。您也可以直接在编辑器中拖动它的轴。但这不会改变我认为你想要做的事情。如上所述,您可能必须创建一个新节点来充当容器。这可以通过右键单击场景图中的节点以调出菜单来完成。在我看来,在代码中设置 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 文件中根节点的名称(如果需要,您可以在编辑器场景图形中更改名称)。 "truck" 是一个新节点,您已将文件的根节点分配给该节点。像您一样操作它,而不是您的 dae 的根节点。 "theTruck" 是 dae SCNScene
的临时持有者,仅用于访问其中的节点。您可以以相同的方式访问 dae 中的任何其他节点,从而允许您在代码中操作它们。
有谁知道如何在 SceneKit Interface Builder 中更改节点的原点?原点不正确,但移动它只会移动模型,我想移动原点使其位于对象的中间 :-/
也许我需要重新导出不同来源的模型?
重新定位节点的 pivot
。例如,
truckNode.pivot = SCNMatrix4MakeTranslation(13.4, 12.9, 28.9)
您也可以更改枢轴的旋转,但您似乎只对上述示例满足的平移方面感兴趣。
另一种选择是让您的节点成为空节点 "container node" 的子节点。在容器中重新定位您的节点,然后在容器节点上进行所有后续平移和旋转。
使用 Interface Builder 的另一个选项。 Select 你的 dae 文件。在编辑器 window 的底部左侧,是一个方形按钮,左侧有一个栏。单击它以打开场景图。这将显示文件中节点的分层列表。在 Xcode window、select 右侧的 "box" 图标的实用程序面板中。您可以在那里以数字方式调整节点位置。您也可以直接在编辑器中拖动它的轴。但这不会改变我认为你想要做的事情。如上所述,您可能必须创建一个新节点来充当容器。这可以通过右键单击场景图中的节点以调出菜单来完成。在我看来,在代码中设置 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 文件中根节点的名称(如果需要,您可以在编辑器场景图形中更改名称)。 "truck" 是一个新节点,您已将文件的根节点分配给该节点。像您一样操作它,而不是您的 dae 的根节点。 "theTruck" 是 dae SCNScene
的临时持有者,仅用于访问其中的节点。您可以以相同的方式访问 dae 中的任何其他节点,从而允许您在代码中操作它们。