我在努力理解节点的多次旋转。在SceneKit中旋转节点
首先,我创建和定位的平面:
SCNPlane *plane = [SCNPlane planeWithWidth:10 height:10];
SCNNode *planeNode = [SCNNode nodeWithGeometry:plane];
planeNode.rotation = SCNVector4Make(1, 0, 0, (M_PI/2 * 3));
[scene.rootNode addChildNode:planeNode];
然后我定位并设置一个聚光灯节点的方向上该平面:
SCNLight *light = [[SCNLight alloc] init];
light.type = SCNLightTypeSpot;
light.spotInnerAngle = 70;
light.spotOuterAngle = 100;
light.castsShadow = YES;
lightNode = [SCNNode node];
lightNode.light = light;
lightNode.position = SCNVector3Make(4, 0, 0.5);
lightNode.rotation = SCNVector4Make(0, 1, 0, M_PI/2);
[planeNode addChildNode:lightNode];
然后我动画的光的旋转围绕x轴顺时针旋转90度:
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:2.0];
lightNode.rotation = SCNVector4Make(1, 0, 0, M_PI/2);
[SCNTransaction commit];
但我很困惑,为什么以下翼旋转光节点回绕同一轴线原来的位置:
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:2.0];
lightNode.rotation = SCNVector4Make(0, 1, 0, M_PI/2);
[SCNTransaction commit];
对我来说这读取,我们旋转节点顺时针y轴90度。
任何人都可以解释为什么这个工程?或者,更好的是,建议一个更清晰的方法来旋转节点,然后将其返回到原来的位置?
感谢您的回复,虽然我觉得我现在比以前更困惑:(我根本不知道什么是绝对旋转与我在此尝试做的比较(只需旋转光节点我想我的问题基本上是这样的:我怎样才能以一种方式旋转一个节点,然后返回到原来的位置,这两个时间都是与同一个轴相关的?如果我做了什么导致了绝对的轮换(我猜测是错误的),是否有另一种方法可以用来实现我的目标? – bcl
我编辑了我的答案。 – mnuages
再次感谢您的回复。不知道这是我所追求的。因为我不希望SceneKit为我的动画选择旋转轴;我需要在给定方向上进行非常具体的运动。它看起来像我eulerAngles给了我这个级别的控制加上它不会混淆m e通过切换我需要使用的旋转轴。 – bcl