【问题标题】:Change origin of node in SceneKit Interface Builder在 SceneKit Interface Builder 中更改节点的原点
【发布时间】:2016-06-12 05:45:45
【问题描述】:

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

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

【问题讨论】:

    标签: interface-builder scenekit


    【解决方案1】:

    重新定位节点的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 中的任何其他节点,从而允许您在代码中操作它们。

    【讨论】:

    • 在 Interface Builder 中有没有办法做到这一点?
    • 是的,但问题更大。我上面已经详细说明了。
    • 按照中间的建议使用了 IB 中的节点检查器,效果很好,将 x Euler 更改为 -90 以在所需方向上旋转 90 度。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2018-10-30
    • 2015-07-10
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    相关资源
    最近更新 更多