我正在尝试通过将块的枢轴点设置为任意角来旋转它,但似乎设置枢轴点实际上是在重新定位节点,从而使该点精确地位于其位置...

例如

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轴上。

最佳答案

pivotSCNNode属性类似于anchorPointCALayer(请参见Anchor Points Affect Geometric Manipulations)。如果要更改pivot属性不具有任何视觉效果,则还必须更改其transform(或position)属性。

10-06 04:35