SceneKit 中的相机旋转

Kiz*_*ios 5 iphone camera rotation ios scenekit

我已经发布了类似的问题,这 在这里,但是这是因为它与EULAR角度涉及不同。

鉴于我在另一篇文章中的设置。屏幕上有一个简单的板子,还有一个正在看着它的相机,我想旋转相机。为简单起见,我用代码制作了整个相机。对于上下文,根据其他问题和答案,我已经确定板在 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);
Run Code Online (Sandbox Code Playgroud)

伊格

很好的开始。然后我尝试旋转相机,使其从顶部看,在板上向下看。我的理解是,我需要绕 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);
Run Code Online (Sandbox Code Playgroud)

iOS 文档指出,eular 中的旋转设置为 (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);
Run Code Online (Sandbox Code Playgroud)

这呈现了这个屏幕。 伊格

这没有意义,但我继续这样做,最终发现通过也围绕 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);
Run Code Online (Sandbox Code Playgroud)

y 旋转也有点令人困惑,因为我原以为必须绕 Z 轴旋转。 伊格

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

提前致谢

编辑:

正如@mnuages 所指出的,在线文档指出这个向量在 (x,y,z) 中。这与我通常使用的标题文档相反,可以在这里看到 伊格

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

mnu*_*ges 3

[评论不适合评论]

\n

请注意文档指出

\n
\n

该向量中分量的顺序与旋转轴匹配:

\n
    \n
  • 节距(x 分量)是绕节点\xe2\x80\x99s x 轴的旋转。
  • \n
  • 偏航(y 分量)是绕节点\xe2\x80\x99s y 轴的旋转。
  • \n
  • 滚动(z 分量)是绕节点\xe2\x80\x99s z 轴的旋转。
  • \n
\n
\n

  • Apple 文档中的下一段说“SceneKit 以组件的相反顺序应用相对于节点枢轴属性的这些旋转:首先滚动,然后偏航,然后俯仰。” 没有不一致,只是旋转是以相反的顺序计算的。 (2认同)