我有一个SCNNode - sceneNode
- 它是rootNode
的子节点,包含我的所有子节点。当用户点击按钮时,我想围绕y轴上的某个点旋转场景。例如,相机的视角是已知的,我想在相机周围旋转90度。相机不再是0,0,0。
我尝试过使用SCNMatrix4MakeTranslation
函数,然后更改欧拉角度的y值,但是我无法让它在预期的情况下运行。
答案 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));