如何围绕某个点旋转SCNNode?

时间:2017-09-18 21:33:08

标签: ios rotation scenekit euler-angles

我有一个SCNNode - sceneNode - 它是rootNode的子节点,包含我的所有子节点。当用户点击按钮时,我想围绕y轴上的某个点旋转场景。例如,相机的视角是已知的,我想在相机周围旋转90度。相机不再是0,0,0。

我尝试过使用SCNMatrix4MakeTranslation函数,然后更改欧拉角度的y值,但是我无法让它在预期的情况下运行。

1 个答案:

答案 0 :(得分:0)

你的问题相当模糊,如果你要将整个场景旋转90度“在相机周围”,那么场景最终会在相机旁边,而你却看不到它。

要围绕其自身枢轴以外的点旋转SCNNode,作为标题中的问题,创建一个将其移动到该点的平移矩阵,将旋转矩阵乘以SCNNode,然后乘以翻译矩阵。

但是,你可能想做的事情是使用相机节点而不是sceneNode进行基本相同的处理。这将使相机在sceneNode周围移动,使场景旋转到位。

例如:

//get the current camera's transform and store it in cammat
GLKMatrix4 cammat = SCNMatrix4ToGLKMatrix4(self.myView.pointOfView.transform);

//create a rotation matrix of 90 degrees over axis Y
GLKQuaternion quaty = GLKQuaternionMakeWithAngleAndAxis(M_PI/2, 0, 1, 0);
GLKMatrix4 rotMat = GLKMatrix4MakeWithQuaternion(quaty);

//set the camera transform to rotMat * cammat, which basically rotates the camera first, and then moves it back to the same offset it was. 
self.myView.pointOfView.transform = SCNMatrix4FromGLKMatrix4(GLKMatrix4Multiply(rotMat, cammat));