SCNNode 使用 a 进行旋转SCNVector4
,它具有角度 (w) 和该角度如何应用于每个轴 (x, y, z) 的大小。例如,要绕 x 轴旋转 45 度,我会创建一个SCNVector4
这样的:
SCNVector4Make(1.0f, 0, 0, DEG2RAD(45))
我想做的是在所有三个轴上旋转它,例如:x 轴上 45 度,y 轴上 15 度和 z 轴上 -135 度。有谁知道计算决赛的数学SCNVector4
吗?
SCNNode 使用 a 进行旋转SCNVector4
,它具有角度 (w) 和该角度如何应用于每个轴 (x, y, z) 的大小。例如,要绕 x 轴旋转 45 度,我会创建一个SCNVector4
这样的:
SCNVector4Make(1.0f, 0, 0, DEG2RAD(45))
我想做的是在所有三个轴上旋转它,例如:x 轴上 45 度,y 轴上 15 度和 z 轴上 -135 度。有谁知道计算决赛的数学SCNVector4
吗?
代替rotation
属性,使用eulerAngles
并指定每个轴的角度
您需要为每个旋转生成一个 SCNVector4,然后将它们相乘。请注意,操作顺序很重要!
http://www.cprogramming.com/tutorial/3d/rotationMatrices.html有一个很好的数学写作。任何处理旋转矩阵的 OpenGL 参考也值得一看。
如果您没有为旋转设置动画,则直接设置变换矩阵可能更简洁,例如:
node.transform = CATransform3DRotate(CATransform3DRotate(CATransform3DRotate(node.transform, xAngle, 1, 0, 0), yAngle, 0, 1, 0), zAngle, 0, 0, 1);
您要求旋转矩阵还是一般如何简单地旋转?如果第二个是正确的,那么例如:
[node runAction:[SCNAction rotateByX:0 y:M_PI z:0 duration:0]];