2017-07-08 4 views
0

Ich habe die Position und Ausrichtung meiner Kamera, die CGPoint Touch-Position auf dem Bildschirm, brauche ich die Linie (vorzugsweise Vektor) in der Richtung, die ich auf dem Bildschirm in meinem 3D berührt SCNNode-Umgebung, wie bekomme ich das?
Ein Code-Snippet wäre sehr hilfreich.Get Vektor in SCNNode-Umgebung von Touch-Standort swift

Antwort

1

Sie können dazu die Methode SCNSceneRenderer.unprojectPoint(_:) verwenden.

Diese Methode, die von SCNView implementiert wird, verwendet die Koordinaten Ihres Punktes als SCNVector3. Legen Sie die ersten beiden Elemente im Koordinatenraum Ihrer Ansicht fest. Apple die Verwendung des dritten Elements beschreibt:

Die z-Koordinate des Punkts Parameter beschreibt die Tiefe, in der der Punkt in Bezug auf die nahen und fernen Abschneideebenen des Renderers des Frustum Culling auf unproject (definiert durch seine PointOfView Knoten). Wenn ein Punkt, dessen Z-Koordinate 0.0 ist, nicht projiziert wird, wird ein Punkt auf der nahen Beschneidungsebene zurückgegeben. Unprojected ein Punkt, dessen z-Koordinate 1,0 ist, gibt einen Punkt auf der fernen Clipping-Ebene.

Sie suchen nicht nach der Position dieser Punkte, sondern nach der Linie, die sie verbindet. Subtrahiere beide, um die Linie zu bekommen.

func getDirection(for point: CGPoint, in view: SCNView) -> SCNVector3 { 
    let farPoint = view.unprojectPoint(SCNVector3Make(point.x, point.y, 1)) 
    let nearPoint = view.unprojectPoint(SCNVector3Make(point.x, point.y, 0)) 

    return SCNVector3Make(farPoint.x - nearPoint.x, farPoint.y - nearPoint.y, farPoint.z - nearPoint.z) 
} 
+0

sehr geschätzt, danke – brw59