gpt4 book ai didi

objective-c - 在 SceneKit 中旋转节点

转载 作者:太空狗 更新时间:2023-10-30 03:56:43 25 4
gpt4 key购买 nike

我很难理解节点的多次旋转。

首先,我创建并定位了一个平面:

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 度。

谁能解释一下为什么会这样?或者,更好的是,建议一种更清晰的方法来旋转节点然后将其返回到其原始位置?

最佳答案

我想我已经通过使用 eulerAngles 解决了这个问题,这似乎以我理解的方式工作。

所以我替换了:

lightNode.rotation = SCNVector4Make(0, 1, 0, M_PI/2);

与:

lightNode.eulerAngles = SCNVector3Make(0, M_PI/2, 0);

其他轮换也是如此。

我不得不承认我对旋转方法的作用仍然很困惑,但很高兴我现在有了可以使用的东西。

关于objective-c - 在 SceneKit 中旋转节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com