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中的相机旋转的主要内容,如果未能解决你的问题,请参考以下文章