SCNNode旋转多轴
SCNNode Rotation Multiple Axes
此 Question 已发布,但从未回复。
类似于This Question,我试图将SCNNode.rotation
理解为4D向量。前面的问题使用了一个仅操纵 1 个轴的示例,即
SCNNode.rotation = (0, 0, 1, degToRad(45)) //Rotate about z-axis by 45 degrees
这是有道理的;但是,如果我想将 X 轴旋转 20 度,Y 轴旋转 45 度,然后 Z 轴旋转 78 度怎么办?
SCNNode.rotation = ??
我会提供我试过的代码,但我在概念上不理解 4D 旋转矢量的概念。
每个节点都有一个 4x4 矩阵的变换。所以所有的旋转操作都反映在改变变换中。
在这种情况下,如果您更改旋转、eulerAngles 和方向中的任何一个,您应该会得到相同的值。
如果围绕三个轴旋转,我建议使用 eulerAngles。
node.eulerAnges = SCNVector3(x:degToRad(20),y:degToRad(45), z:degToRad(78))
设置后,返回并检查旋转值:
SCNVector4(x: -0.16975601, y: 0.5943193, z: 0.786109, w: 1.448788)
这意味着有一个轴穿过点(-0.16975601, 0.5943193, 0.786109)和原点(0,0,0),节点绕着它旋转1.448788(82度)。
此 Question 已发布,但从未回复。
类似于This Question,我试图将SCNNode.rotation
理解为4D向量。前面的问题使用了一个仅操纵 1 个轴的示例,即
SCNNode.rotation = (0, 0, 1, degToRad(45)) //Rotate about z-axis by 45 degrees
这是有道理的;但是,如果我想将 X 轴旋转 20 度,Y 轴旋转 45 度,然后 Z 轴旋转 78 度怎么办?
SCNNode.rotation = ??
我会提供我试过的代码,但我在概念上不理解 4D 旋转矢量的概念。
每个节点都有一个 4x4 矩阵的变换。所以所有的旋转操作都反映在改变变换中。
在这种情况下,如果您更改旋转、eulerAngles 和方向中的任何一个,您应该会得到相同的值。
如果围绕三个轴旋转,我建议使用 eulerAngles。
node.eulerAnges = SCNVector3(x:degToRad(20),y:degToRad(45), z:degToRad(78))
设置后,返回并检查旋转值:
SCNVector4(x: -0.16975601, y: 0.5943193, z: 0.786109, w: 1.448788)
这意味着有一个轴穿过点(-0.16975601, 0.5943193, 0.786109)和原点(0,0,0),节点绕着它旋转1.448788(82度)。