SceneKit中的相机旋转

问题描述 投票:4回答:1

我已经向这个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代码中的一个错误/错字。谢谢你清理它。

ios iphone camera rotation scenekit
1个回答
3
投票

[评论不适合评论]

请注意,documentation说明了这一点

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

  • 间距(x分量)是围绕节点x轴的旋转。
  • 偏航(y分量)是绕节点y轴的旋转。
  • Roll(z分量)是绕节点z轴的旋转。
© www.soinside.com 2019 - 2024. All rights reserved.