2017-06-17 3 views
0

Ich mache eine AR-Anwendung mit Unity.ScreenToWorldPoint in Unity mit der realen Kamera

Mit einer "echten Kamera" wird das spezifische Objekt, von dem sich das Bild bereits in der Datenbank befindet, mit dem Feature-Matching abgeglichen.

Nach Feature Matching, ich einer der Werte der wichtigsten Punkte im Beispiel unten gespeichert:

KeyPoint key_point; 

Dann habe ich die Position der realen Welt haben will, dass key_point verwenden.

//let's assume that 
    //'x' is x-coordinate of key_point 
    //'y' is y-coordinate of key_point 

    Vector3 p = camera.ScreenToWorldPoint (Vector3 (x, y, camera.nearClipPlane)); 

Ich bin mir nicht sicher, ob es möglich ist, da auch andere Leute, die „camer.nearClipPlane“ wurden unter Verwendung es auf der virtuellen 3D-Welt verwenden.

Wenn nicht möglich, gibt es eine andere Möglichkeit, dass ich 2D-Position in 3D-Position in der realen Welt (ich meine, die echte Kamera Welt) ändern kann?

Antwort

1

Ich würde denken, Ihre Lösung hat das Problem, das FOV der Kamera nicht zu berücksichtigen. Ihr Projektionspunkt projiziert also auf die nahegelegene Clip-Ebene. Aber das ist nur für die Mitte des Bildschirms richtig.

Eine einfache Lösung ist ray-Objekt zu verwenden:

Ray ray = Camera.main.ScreenPointToRay(x,y); 

https://docs.unity3d.com/ScriptReference/Camera.ScreenPointToRay.html

Nach der Dokumentation:

"resultierender Strahl ist im Welt-Raum, auf der nahen Ebene ausgehend von die Kamera und geht durch die Pixelkoordinaten der Position (x, y) auf dem Bildschirm (position.z wird ignoriert). "

Vector3 point = ray.origin; 
:

So würde Ihr Punkt

Verwandte Themen