2017-06-18 6 views
1

i wird wie 2 Zeilen als Strömung in den Grenzen der aktuellen Kameraansicht platzieren:ARkit - Platzieren Objekte in der Kamera aus gesehen, eingereicht

enter image description here

source - SceneKit docs

aus dem ARKit docs Ich verstehe, dass ich die projectionMatrix brauche, aber wie kann ich das diff von "zNear" zu "zFar" und x \ y berechnen?

i mit diesem Code bin ab:

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

und für die linke werde ich wahrscheinlich

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

brauchen, aber ich nicht bei der Berechnung der rightboxNode.position versucht:

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

enter image description here

Antwort

0

können Sie einen SCNSceneRenderer verwenden, um die Grenzen des Bildschirms in die Kamera Raum unproject:

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