我已向此发布了类似的问题 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代码中的一个错误/错字。谢谢你清理它。
答案 0 :(得分:3)
[评论不适合评论]
请注意,documentation表示
此向量中的组件顺序与旋转轴匹配:
- Pitch(x分量)是围绕节点x轴的旋转。
- 偏航(y分量)是绕节点y轴的旋转。
- 滚动(z分量)是绕节点的z轴旋转。