SceneKit相机不应该显示额外的空间

Mor*_*lde 5 ios scenekit swift

更新

我已将项目上传到GitHub,以便轻松复制问题.

我有一个测试场景,我想在这里定位一个对象(SCNBox在这种情况下是一个)和屏幕一样宽.这是整个代码.

let scene = SCNScene()
let rootNode = scene.rootNode

// Box
let boxGeometry = SCNBox(width: 1, height: 1, length: 1, chamferRadius: 0)
let boxMaterial = SCNMaterial()
boxMaterial.diffuse.contents = UIColor.redColor()
boxGeometry.firstMaterial = boxMaterial
let boxNode = SCNNode(geometry: boxGeometry)
boxNode.position = SCNVector3(
    x: 0,
    y: 0,
    z: -1)
rootNode.addChildNode(boxNode)

// Camera
let camera = SCNCamera()
camera.zNear = 0
let cameraNode = SCNNode()
cameraNode.position = SCNVector3(
    x: 0,
    y: 0,
    z: 0)
cameraNode.camera = camera
rootNode.addChildNode(cameraNode)
Run Code Online (Sandbox Code Playgroud)

但这并不能产生我所期望的 - 100%宽度覆盖率.如下面的屏幕截图所示,两侧总共有大约2.5%的空白区域.为什么?如何调整相机/盒以实现屏幕宽度的完全覆盖?

问题

Mou*_*ach 8

这里是您的代码所做的快速直观表示(从顶部查看):

1)在(0,0,0)创建一个2x2x2立方体

创建多维数据集

2)将立方体移动到(0,0,-1)

移动立方体

3)在(0,0,0)添加相机

添加相机

如您所见,相机与立方体相交.这是一种不可预测的行为,它可以交叉,在Z上战斗,或者只是向内看.

在您的问题中,您使用了1x1x1盒子.这是它的样子:

1x1x1盒子

如您所见,该框填充视图.但那是因为我使用的是标准相机(36毫米,或大约50°xfov).通过移动你的场景,我意识到你有一个非常大的FOV,这意味着你的场景看起来像这样:

大视野

或者,如果我们放大:

放大

开始了!那么我们如何解决这个问题呢?通过增加FOV.在我们的例子中,角度是90.但你可以用简单的三角法再次找到它.

地狱是的数学!

现在盒子完全填满了视口!