如何计算SCNNode的多轴SCNVector4旋转?

时间:2013-04-03 00:02:44

标签: math transformation scenekit

SCNNode使用SCNVector4进行旋转,SCNVector4具有角度(w)和角度如何应用于每个轴(x,y,z)。例如,要围绕x轴旋转45度,我会创建一个SCNVector4Make(1.0f, 0, 0, DEG2RAD(45)) ,如下所示:

SCNVector4

我想做的是在所有三个轴上旋转它,例如:x轴为45度,y轴为15度,z轴为-135度。有谁知道计算最终{{1}}的数学?

4 个答案:

答案 0 :(得分:9)

使用rotation并指定每个轴的角度

,而不是eulerAngles属性

答案 1 :(得分:2)

您需要为每个旋转生成SCNVector4,然后将它们相乘。请注意,操作顺序很重要!

http://www.cprogramming.com/tutorial/3d/rotationMatrices.html有很好的数学写法。任何处理旋转矩阵的OpenGL参考也值得一看。

答案 2 :(得分:2)

如果您没有为旋转设置动画,则直接设置变换矩阵可能更简洁,例如:

node.transform = CATransform3DRotate(CATransform3DRotate(CATransform3DRotate(node.transform, xAngle, 1, 0, 0), yAngle, 0, 1, 0), zAngle, 0, 0, 1);

答案 3 :(得分:2)

您是否要求旋转矩阵或如何简单地旋转?如果第二个是正确的,那么例如:

[node runAction:[SCNAction rotateByX:0 y:M_PI z:0 duration:0]];