La camera SceneKit muestra espacio extra cuando no debería

Actualizar

Subí el proyecto a GitHub para una fácil replicación del problema.

Pregunta

Tengo una escena de testing, donde quiero SCNBox un object (un SCNBox en este caso) para que sea tan ancho como la pantalla. Aquí está la totalidad del código.

 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.networkingColor() 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) 

Pero esto no produce exactamente lo que esperaría: cobertura de 100% de ancho. Como indica la siguiente captura de pantalla, hay alnetworkingedor de 2.5% del total de espacios en blanco en los lados. ¿Por qué? ¿Y cómo necesito ajustar mi camera / caja para lograr una cobertura completa del ancho de las pantallas?

Problema

Aquí hay una representación visual rápida de lo que hace su código (visto desde la parte superior):

1) Crea un cubo de 2x2x2 a (0,0,0)

Crear cubo

2) Mueve el cubo a (0,0, -1)

Mueva el cubo

3) Agregar camera en (0,0,0)

Agregar cámara

Como puede ver, la camera se cruza con el cubo. Es un comportamiento impnetworkingecible, y puede cruzarse, luchar en Z o simplemente mirar dentro.

En su pregunta, utilizó una caja de 1x1x1. Esto es lo que parece:

Caja 1x1x1

Como puede ver, el cuadro debe llenar la vista. Pero eso es porque usé una camera estándar (36 mm, o alnetworkingedor de 50 ° xfov). Al mover tu escena, me di count de que tienes un FOV realmente grande, lo que significa que tu escena se ve exactamente así:

Gran FOV

O si hacemos zoom:

Zoomed

¡Aquí vamos! Entonces, ¿cómo solucionamos esto? Al boost el FOV. En nuestro caso, el ángulo es 90. Pero puede encontrarlo nuevamente con trigonometría simple.

¡Infierno, sí, matemáticas!

¡Y ahora la caja llena por completo la window gráfica!

Ok, entonces tienes dos opciones.

  1. Puedes hacer trampa, será fácil pero no muy conveniente.
    • por lo tanto, aumente el tamaño de la caja de forma aleatoria o muévalo más cerca de la camera
  2. que sea la forma en que debería ser lo que lo haría adaptable, será más difícil
    • por lo tanto, eche un vistazo a .projectPoint() y .unprojectPoint() [ya que tengo problemas para averiguar que no puedo darle ningún código, puede probar suerte]

Espero que ayude 🙂

EDITAR
FYI – No creo que su problema se relacione con la camera, si establece el tamaño de la caja en 0.5 lugar de 1 entonces en realidad es más pequeño, lo que muestra que no hay ningún error en la camera.
Además, si ejecuta la aplicación en un dispositivo que no sea el iPhone 6+, verá que el cuadro no llena la pantalla, al less en el lado derecho.