作者:Sadness_小妖_619 | 来源:互联网 | 2023-09-15 16:55
I've been playing with the SCNNode object for a while now and I'm lost with the Pivot. How can I change the pivot of a SCNNode (SCNBox as a bar) and place the pivot on one of the edge of the bar?
我一直在玩SCNNode对象一段时间了,我迷失了Pivot。如何更改SCNNode的枢轴(SCNBox作为条形图)并将枢轴放在条形边缘之一上?
2 个解决方案
13
A node's pivot
is a transformation matrix, the inverse of which is applied to the node before its transform
property takes effect. For example, take a look at this bit from the default SceneKit Game template in Xcode:
节点的枢轴是变换矩阵,其变换在其变换属性生效之前应用于节点。例如,从Xcode中的默认SceneKit游戏模板看一下这个位:
let boxNode = SCNNode()
boxNode.geometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0.02)
If you set the boxNode
's position
, that point corresponds to the center of the cube, and if you rotate it (as the template does in an animation), it spins around its center.
如果设置boxNode的位置,则该点对应于立方体的中心,如果旋转它(如模板在动画中所做的那样),它将围绕其中心旋转。
To change the anchor point, set the pivot
to a translation transform:
要更改定位点,请将数据透视表设置为平移变换:
boxNode.pivot = SCNMatrix4MakeTranslation(0.5, 0.5, 0.5)
Now, when you set the position
that point corresponds to the top-right-front corner of the cube, and when you rotate the cube it spins around that corner.
现在,当您设置该点的位置对应于立方体的右上角时,并且当您旋转立方体时,它会围绕该角旋转。
More generally, a pivot transforms the contents of a node relative to the node's own transform. Suppose you wanted to model the precession of the Earth's axis of rotation. You could do this by creating two animations: one that animates pivot
to spin the node around its own Y axis, and another that animates rotation
to move that axis relative to the space containing the node.
更一般地,枢轴相对于节点自己的变换变换节点的内容。假设你想模拟地球旋转轴的进动。您可以通过创建两个动画来完成此操作:一个动画旋转以围绕其自己的Y轴旋转节点,另一个动画旋转以相对于包含节点的空间移动该轴。