SceneKit中的相机旋转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SceneKit中的相机旋转相关的知识,希望对你有一定的参考价值。

我已经向这个here发布了一个类似的问题,但这是不同的,它处理的是角度。

鉴于我在另一篇文章中的设置。屏幕上有一块简单的电路板,还有一个看着它的相机,我想旋转相机。为简单起见,我在代码中完成整个相机。对于上下文,根据其他问题和答案,我已经确定电路板在Z轴上运行较长,在X轴上较短,而高度在Y轴上。

将此代码添加到场景中,我们可以看到我的电路板在Z轴上运行。我把相机抬高了Y轴,以获得更好的视野。我的最终目标是让电路板在相机上长时间运行。

SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
cameraNode.camera.zFar = 200;
cameraNode.camera.zNear = 0.1;
[scene.rootNode addChildNode:cameraNode];
cameraNode.position = SCNVector3Make(0, 5, 0);
cameraNode.eulerAngles = SCNVector3Make(0, 0, 0);

好开始。然后我尝试旋转相机,使其从顶部向下看,在板上。我的理解是,我需要围绕X轴旋转才能实现这一目标。我通过尝试以下方法做到了这一点。

SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
cameraNode.camera.zFar = 200;
cameraNode.camera.zNear = 0.1;
[scene.rootNode addChildNode:cameraNode];
cameraNode.position = SCNVector3Make(0, 50, 0);
cameraNode.eulerAngles = SCNVector3Make(0, 0, -M_PI/2);

ios文档声明eulars中的旋转设置为(z,y,x)。然而,这不起作用,只是一个空白的屏幕。然后我开始尝试并发现绕Z轴旋转会让我朝着正确的方向前进。

SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
cameraNode.camera.zFar = 200;
cameraNode.camera.zNear = 0.1;
[scene.rootNode addChildNode:cameraNode];
cameraNode.position = SCNVector3Make(0, 50, 0);
cameraNode.eulerAngles = SCNVector3Make(-M_PI/2, 0, 0);

这渲染了这个屏幕。

这没有任何意义,但我继续前进并最终发现,通过围绕Y轴旋转,我可以得到我想要的屏幕。

SCNNode *cameraNode = [SCNNode node];
cameraNode.camera = [SCNCamera camera];
cameraNode.camera.zFar = 200;
cameraNode.camera.zNear = 0.1;
[scene.rootNode addChildNode:cameraNode];
cameraNode.position = SCNVector3Make(0, 50, 0);
cameraNode.eulerAngles = SCNVector3Make(-M_PI/2, -M_PI/2, 0);

y旋转也有点莫名其妙,因为我原本期望必须围绕Z轴旋转。

虽然这段代码有效但我的其他帖子也有类似的问题。为什么在第一次旋转时我必须围绕Z轴而不是X轴旋转。我想我可能只是不了解它的角度。

提前致谢

编辑:

正如@mnuages所指出的那样,在线文档说明这个向量在(x,y,z)中。这与我通常使用的标题文档相反,如此处所示

看起来这只是Apple代码中的一个错误/错字。谢谢你清理它。

答案

[评论不适合评论]

请注意,documentation说明了这一点

此向量中的组件顺序与旋转轴匹配:

  • 间距(x分量)是围绕节点x轴的旋转。
  • 偏航(y分量)是绕节点y轴的旋转。
  • Roll(z分量)是绕节点z轴的旋转。

以上是关于SceneKit中的相机旋转的主要内容,如果未能解决你的问题,请参考以下文章

SceneKit 球体法线似乎随着相机移动而改变?

SceneKit - 旋转和动画SCNNode

如何在 SceneKit 中移动旋转的 SCNNode?

在 SceneKit 中禁用相机平移

SceneKit + ARKit:无需相机滚动的广告牌

在 viewDidLoad 期间应用的 SceneKit 节点旋转无效