SCNNode 枢轴位置
Posted
技术标签:
【中文标题】SCNNode 枢轴位置【英文标题】:SCNNode Pivot Location 【发布时间】:2019-05-02 05:22:34 【问题描述】:假设我有 2 个SCNNodes
node1 和 node2。
我希望 node1 的位置为node1.position = SCNVector3(0, 0, 0)
我希望 node2 的位置为node2.position = SCNVector3(0, 0, 1)
现在,我希望 node2 围绕 node1 旋转。因此,我尝试这样做,node2.pivot = self.phone.pivot = SCNMatrix4MakeTranslation(0, 0, -1)
。
这提供了它围绕 node1 旋转的位置,这样如果我将 node2 旋转 Pi/2,那么它就在节点的顶部,即,如果我旋转 node1.rotate(Double.pi/2, 0, 0)
,它实际上是在 node1 的顶部。
如何在 ndoe2 围绕 node1 旋转的位置获得它?
编辑1:
self.container = SCNNode()
self.container.position = SCNVector3(0, 0, 0)
self.node2 = SCNNode(geometry: geom2)
self.node2.position = SCNVector3(0, 0, 1)
self.container.addChildNode(self.node2)
let constraint = SCNLookAtConstraint(target: self.node2)
constraint.isGimbalLockEnabled = false
self.node1 = SCNNode(geometry: geom)
self.node1.position = SCNVector(0, 0, 0)
self.node1.constraints = [constraint]
Node1 从不移动,因为 node2 从不移动。即,node2 将始终位于位置(0, 0, 1)
,因为容器是唯一旋转的东西。
【问题讨论】:
我刚刚在操场上进行了测试,正如预期的那样,node1 确实与 node2 一起旋转 见鬼,我会再试一次,哈哈。 你的工作是不可能的...node2
永远不会移动,因为它总是在位置上。我在操场上,正如预期的那样,当我旋转时,node2
会旋转,但是,node1
不会移动。 node2
卡在位置 (0, 0, 1)
并且从未真正移动过。因此,node1
永远不会旋转。
【参考方案1】:
如果您根本不想处理 pivot
元素,请使用节点层次结构。
这样的东西应该可以工作
- node1
|
| - rotation center
| - node 2
然后旋转旋转中心,而不是直接旋转节点2。由于一个节点总是围绕它的坐标中心旋转,并且一个节点的坐标空间总是相对于它的父节点,这很好。
【讨论】:
虽然我通常同意,但我正在尝试拥有第三个节点,look(at:)
另一个节点。如果我只是在你的情况下旋转一个中心节点node1
,node2
永远不会真正移动,因此,我如何将它转移到look(at:)
?
node2
确实移动了,SCNLookAtConstraint
应该可以正常工作。
我不能使用 SCNLookAtConstraint,因为我需要在轴以特定方式旋转时更改它们。即,现在最好的选择是创建一个枢轴以上是关于SCNNode 枢轴位置的主要内容,如果未能解决你的问题,请参考以下文章