Math 如何计算SCNNode的多轴SCCONVERTOR4旋转?

Math 如何计算SCNNode的多轴SCCONVERTOR4旋转?,math,transformation,scenekit,Math,Transformation,Scenekit,SCNNode使用SCConverctor4进行旋转,该旋转具有角度(w)和该角度应用于每个轴(x、y、z)的大小。例如,要绕x轴旋转45度,我将创建一个SConvector4,如下所示: SCNVector4Make(1.0f, 0, 0, DEG2RAD(45)) 我想做的是在所有三个轴上旋转它,例如:在x轴上旋转45度,在y轴上旋转15度,在z轴上旋转-135度。有人知道计算最终的转换因子4的数学吗?您需要为每个旋转生成一个转换因子4,然后将它们相乘。请注意,操作顺序很重要 他数学写得很

SCNNode使用
SCConverctor4
进行旋转,该旋转具有角度(w)和该角度应用于每个轴(x、y、z)的大小。例如,要绕x轴旋转45度,我将创建一个
SConvector4
,如下所示:

SCNVector4Make(1.0f, 0, 0, DEG2RAD(45))

我想做的是在所有三个轴上旋转它,例如:在x轴上旋转45度,在y轴上旋转15度,在z轴上旋转-135度。有人知道计算最终的转换因子4的数学吗?

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


他数学写得很好。任何处理旋转矩阵的OpenGL参考也值得一看。

如果不设置旋转动画,直接设置变换矩阵可能会更干净,如:

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

使用
eulerAngles
并指定每个轴的角度,而不是
rotation
属性。您是要求旋转矩阵,还是简单地旋转?如果第二个是正确的,例如:

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

没用!将一种类型的结构指定给另一种不同类型的结构是不正确的,即使它可以工作。如果他们会改变其中一个结构呢“公共类型别名SCNMatrix4=CATTransferM3D”。如果更改SCNMatrix4的结构,所有现有的二进制文件都将中断。他们不能也不会这样做。为什么
eulerAngles
而不是
rotation
?@Crashalot From:
rotation
=方向,表示为绕轴旋转的角度,
eulerAngles
=方向,表示为俯仰角、偏航角和侧倾角,每个角度都以弧度表示