2017-06-18 3 views
1

j'aimerai placer 2 lignes dans les limites de la vue de la caméra actuelle comme flux:Arkit - placer des objets à l'intérieur de la caméra déposée de vue

enter image description here

source - SceneKit docs

de la ARKit docs je comprends que j'ai besoin du projectionMatrix, mais comment puis-je calculer le diff de "zNear" à "zFar" et x \ y?

je commence avec ce code:

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

et pour la gauche, je vais probablement besoin

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

mais j'échoué en essayant le calcul rightboxNode.position:

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

enter image description here

Répondre

0

Vous pouvez utiliser un SCNSceneRenderer pour unproject les limites de votre écran dans l'espace de la caméra:

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 
    ... 
}