ARkit - размещение объектов внутри камеры в поле зрения

Я хотел бы разместить 2 строки в границах текущего вида камеры как поток:

Источник - документы SceneKit

Из документации ARKit я понимаю, что мне нужен projectionMatrix, но как я могу рассчитать разницу между "zNear", "zFar" и x\y?

Я начинаю с этого кода:

let cameraProjectionMatrix = session.currentFrame?.camera.projectionMatrix 
let cameraPosition = SCNVector3.positionFromTransform(cameraProjectionMatrix)
let rightBoxNode = SCNNode(geometry: SCNBox(...))
rightBoxNode.position = SCNVector3(???)
sceneView.scene.rootNode.addChildNode(rightBoxNode)

и для левой мне, вероятно, понадобится

var leftPos = rightboxNode.position
leftPos.x = rightboxNode.position.x * -1
leftBoxNode.position = leftPos

Но я потерпел неудачу при попытке расчета rightboxNode.position:

rightBoxNode.position = SCNVector3(x: x1 ,y: y1 z: zNear)

1 ответ

Вы можете использовать SCNSceneRenderer чтобы отодвинуть границы экрана в пространство камеры:

func renderer(_ sender: SCNSceneRenderer,  updateAtTime time: TimeInterval) {
  let position = sender.unprojectPoint(SCNVector3(0, 0, 0))
  // x, y in screen coordinate space, z in [0, 1] corresponds to [zNear, zFar] in a way that I don't think is proportional
  let node = SCNNode()
  node.position = position
  ...
}
Другие вопросы по тегам