首页 文章

SceneKit 中的相机旋转

提问于
浏览
4

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

鉴于我在另一篇文章中的设置。屏幕上有一块简单的电路板,还有一个看着它的相机,我想旋转相机。为简单起见,我在代码中完成整个相机。对于上下文,根据其他问题和答案,我已经确定电路板在 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);


Imgur

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

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);

这渲染了这个屏幕。
Imgur

这没有任何意义,但我继续它并最终发现,通过围绕 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 轴旋转。
Imgur

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

提前致谢

编辑:

as @mnuages pointed out,在线文档说明此向量在(x,y,z)中。这与我通常使用的标题文档相反,如此处所示
Imgur

看起来这只是 Apple 代码中的 bug/typo。谢谢你清理它。

1 回答

  • 3

    [评论不适合评论]

    请注意,文件表示

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

    • Pitch(x 分量)是关于节点 x-axis 的旋转。

    • 偏航(y 分量)是绕节点 y-axis 的旋转。

    • Roll(z 组件)是关于节点 z-axis 的旋转。

相关问题