我正在尝试通过将块的枢轴点设置为任意角来旋转它,但似乎设置枢轴点实际上是在重新定位节点,从而使该点精确地位于其位置...
例如
SCNBox *box = [SCNBox boxWithWidth:1 height:2 length:1 chamferRadius:0];
SCNNode *node = [SCNNode nodeWithGeometry:box];
node.position = SCNVector3Make(0, 0, 0);
[self.scene.rootNode addChildNode:node];
node.pivot = SCNMatrix4MakeTranslation(0.5, -1, 0.5);
[node runAction:[SCNAction rotateByAngle:GLKMathDegreesToRadians(90)
aroundAxis:SCNVector3Make(0, 0, 1)
duration:2]];
在node.position为0,0,0且盒子几何为1,2,1,1的情况下,我会想到此块位于地板上方1个单位...如果不设置枢轴,它将这样做。
真正的问题是,如何在不影响该节点位置的情况下设置该节点的枢轴位置,因此,例如,如果我按了右键,它将绕着最右下角的点在z轴上枢轴旋转,如果我按下左键,它将绕最左下方的点旋转,上下方向相同,但在x轴上。
最佳答案
pivot
的SCNNode
属性类似于anchorPoint
的CALayer
(请参见Anchor Points Affect Geometric Manipulations)。如果要更改pivot
属性不具有任何视觉效果,则还必须更改其transform
(或position
)属性。