如何在SceneKit中更改枢轴点位置

5

我想将旋转中心点移动到物体的中心,以便它围绕其中心旋转。我该怎么做?

enter image description here

在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的枢轴,它是心脏的枢轴吗? - Jean-Baptiste Yunès
我不知道,我怎么验证呢? - Rafał Sroka
1
这取决于场景内容。在Xcode中命名心脏根名称,并使用childNodeWithName找到它并更改其枢轴。 - Jean-Baptiste Yunès
获取你所需基本节点的方法:在编辑器中打开你的 .scn 文件并通过点击编辑器窗口左下角的图标来显示场景视图图形。其根节点将位于生成的显示中图形(树)的顶部。如果需要,您可以在那里重命名它。还要检查一下 Hal 在说什么,你的代码实际上设置旋转是什么? - bpedit
1个回答

8

心脏(可能)不是您场景的根节点。 它是根节点的子级(默认相机和任何灯光也是如此)。 因此,您可以尝试

// (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的帖子表明(但并未证明)在运行时某些在场景编辑器中设置的参数可能会被忽略。


“recursively: true”这部分是什么意思? - SKOOP
1
@SKOOP - “递归”意味着查找名为“HEART”的节点(当然,您需要匹配在节点检查器中使用的名称(如果您在节点编辑器中打开场景图,您也会在那里看到名称),而不仅仅是作为根下的“第一级”节点。在这种情况下,“递归:false”也可能有效,但如果您在节点编辑器中查看场景图,这将是明显的。 - Tom Dibble
假设我有一个模型,其中应用了一些枢轴和变换矩阵。现在我需要确定枢轴并希望模型处于相同的位置(更改枢轴也会更改模型位置)有没有办法进行转换? - Prashant Tukadiya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接