繁体   English   中英

如何围绕一个点旋转SCNNode?

[英]How do I rotate a SCNNode around a point?

我有一个SCNNode - sceneNode -这是一个孩子rootNode ,并包含所有我的孩子节点。 用户点击按钮后,我想围绕y轴上的某个点旋转场景。 例如,相机的角度是已知的,我想将所有内容围绕相机旋转90º。 相机不再位于0、0、0。

我尝试过使用SCNMatrix4MakeTranslation函数,然后在欧拉角上更改y值,但是我无法使其正常工作。

您的问题相当模糊,如果要将整个场景“围绕摄像头”旋转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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM