【问题标题】:How do I change location of pivot point in SceneKit如何更改 SceneKit 中枢轴点的位置
【发布时间】:2016-02-28 05:47:08
【问题描述】:

我正在尝试将轴心点移动到对象的中心,以便它围绕其中心旋转。我该怎么做?

我在 Xcode 编辑器中看不到执行此操作的选项。我尝试以编程方式更改枢轴点:

    // create a new scene
    let scene = SCNScene(named: "art.scnassets/Heart.scn")!

    // change pivot point
    scene.rootNode.pivot = SCNMatrix4MakeTranslation(0.5, 0.5, 0.5)

但它也不起作用,对象仍然围绕其旧的枢轴点旋转。

【问题讨论】:

  • 你改变了rootNode的pivot,是heart的pivot吗?
  • 不知道,我该如何验证?
  • 视场景内容而定。在 xcode 中命名心脏根名称,并使用 childNodeWithName 找到它并更改它的枢轴。
  • 获取心脏基础节点的方法:在编辑器中打开 .scn 并通过单击编辑器窗口左下方的图标来显示场景视图图。它的根节点将位于结果显示中的图形(树)的顶部。如果需要,您可以在那里重命名它。另请查看 Hal 所说的内容,您的代码实际设置为旋转什么?

标签: ios swift scenekit


【解决方案1】:

心脏(可能)不是场景的根节点。它是根节点的子节点(与默认相机和任何灯光一样)。所以你可以试试

// (use the Scene Editor to figure out what the node name really is)
if let heart = scene.rootNode.childNodeWithName("HEART", recursively: true) {
    heart.pivot = SCNMatrix4MakeTranslation(0.5, 0.5, 0.5)
}

至于场景编辑器......你确定你是在操纵心脏,而不是整个场景吗?我还看到一些 SO 和 Devforum 流量表明(但不能证明)场景编辑器中设置的某些参数在运行时未得到遵守。

【讨论】:

  • “递归:真实”部分是什么?
  • @SKOOP - "recursively" 表示查找名为 "HEART" 的节点(当然你需要匹配你在 Node Inspector 中使用的名称(如果你在节点中打开场景图编辑器,您还将在那里看到名称),无论它在层次结构中有多深,而不仅仅是根下方的“第一级”节点。在这种情况下,“递归:false”可能也可以工作,但是如果您在节点编辑器中查看场景图,这一点会很明显。
  • 假设我有模型应用了一些枢轴+变换矩阵现在我需要枢轴来识别并希望模型处于相同位置(更改枢轴更改模型位置)有什么办法可以转换这个?
猜你喜欢
  • 2016-06-14
  • 2015-04-17
  • 2020-06-11
  • 2018-03-01
  • 2021-12-04
  • 2018-08-05
  • 2019-06-10
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多