Perspektivische Projektion: bestimmen Sie die 2D-Bildschirm-Koordinaten (x,y) der Punkte im 3D-Raum (x,y,z)
Ich wünschte, um zu bestimmen, die 2D-Bildschirm-Koordinaten (x,y) der Punkte im 3D-Raum (x,y,z).
Die Punkte, die ich wünschte, zu Projekt sind die realen Punkte, vertreten durch GPS Koordinaten und die Höhe über dem Meeresspiegel.
Zum Beispiel:
Punkt (Lat:49.291882, Lange:-123.131676, Höhe: 14m)
Position der Kamera und die Höhe kann auch bestimmt werden, als eine x -, y -, z-Punkt. Ich habe auch die Position der Kamera (Kompass Grad), Grad der Neigung (oben/unter dem Horizont) und der Rolle (um die z-Achse).
Ich habe keine Erfahrung mit 3D-Programmierung, also die, die ich gelesen habe, rund um das Thema der perspektivischen Projektion und gelernt, dass es erfordert die Kenntnis der Matrizen, Transformationen etc. - die alle völlig verwirren mich derzeit.
Habe ich gesagt, dass OpenGL von nutzen sein können, um zu konstruieren, ein 3D-Modell der realen Welt Punkte, legen Sie die Ausrichtung der Kamera, und rufen Sie die 2D-Koordinaten der 3D-Punkte.
Allerdings bin ich mir nicht sicher, ob Sie mit OpenGL ist die beste Lösung für dieses problem, und selbst wenn es ist, ich habe keine Ahnung, wie, um Modelle zu erstellen, Kameras etc
Könnte jemand empfehlen, die beste Methode um mein problem zu lösen? Wenn OpenGL ist eine praktikable Lösung, die ich hätte verwenden OpenGL ES-wenn das macht keinen Unterschied. Oh, und was auch immer Lösung, die ich wählen Sie es ausführen muss, schnell.
- Möchten Sie zeichnen, Sachen oder willst du nur rechnen einige Punkte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist hier eine sehr Allgemeine Antwort. Sagen die Kamera ist in (Xc, Yc, Zc) und den Punkt, den Sie möchten, to project P = (X, Y, Z). Die Entfernung von der Kamera auf die 2D-Ebene, auf die Sie projiziert, ist F (so dass die Gleichung der Fläche Z-Zc=F). Die 2D-Koordinaten von P projiziert auf die Ebene (X', Y').
Dann sehr einfach:
X' = ((X - Xc) * (F/Z)) + Xc
Y' = ((Y - Yc) * (F/Z)) + Yc
Wenn Ihre Kamera ist der Ursprung, dann diese vereinfacht zu:
X' = X * (F/Z)
Y' = Y * (F/Z)
X' = ((X - Xc) * (F/(Z-Zc))) + Xc
undY' = ((Y - Yc) * (F/(Z-Zc))) + Yc
?Sie wirklich brauchen eine perspektivische Projektion und matrix-Operationen erheblich vereinfachen, dies zu tun. Ich nehme an, Sie sind bereits bewusst, dass Ihre sphärische Koordinaten muss transformiert werden, um Kartesische Koordinaten für diese Berechnungen.
Mit OpenGL würde wahrscheinlich sparen Sie eine Menge Arbeit über Ihre eigenen Rollen software-rasterizer. Also, ich würde raten, versuchen Sie es ersten. Sie können den Prototyp Ihres Systems auf einem PC, da OpenGL ES ist nicht viel anders wie lange halten Sie es einfach.
Wenn Sie nur brauchen, um zu berechnen, Koordinaten einiger Punkte, die Sie sollten müssen nur einige algebra-Fähigkeiten, nicht die 3D-Programmierung mit openGL.
Außerdem openGL befasst sich nicht mit den Geographischen Koordinaten
Zuerst einige doc über WGS84 und geodätische Koordinaten, müssen Sie zuerst konvertieren Sie Ihre GPS-Daten in einem kartesischen Rahmen ( zum Beispiel die Erde zentrierten kartesischen Rahmen, in dem definiert ist, die WGS84-ellipsoid ).
Dann die Berechnungen mit der matrix stattfinden kann.
Die Kette der Transformationen ist in etwa so :
Für die erste Konvertierung sehen diese
Das Letzte betrifft eine Projektions-matrix
Die anderen sind nur Koordinaten, die Rotation und translation.
Die "einige lokale frame" ist die lokale kartesische Rahmen mit Ursprung wie Ihre Kamera Speicherort
Tangente an die Ellipse.
Ich würde empfehlen, "Mathematics for 3D Game Programming and Computer Graphics" von Eric Lengyel. Es umfasst Matrizen, Transformationen, die Ansicht pyramidenstumpfs, perspektivische Projektion und vieles mehr.
Es ist auch ein gutes Kapitel in Der OpenGL Programming Guide (red book) bei der Betrachtung von Transformationen und einrichten einer Kamera (einschließlich der Verwendung gluLookAt).
Wenn Sie nicht daran interessiert sind, die Anzeige der 3D-Szene und sind beschränkt auf die Verwendung von OpenGL ES-dann kann es besser sein, nur eigenen code schreiben, um das mapping von 3D-zu 2D-Fenster coords. Als Ausgangspunkt könnten Sie zum download Mesa 3D, eine open-source-Implementierung von OpenGL, um zu sehen, wie Sie setzen gluPerspective (um eine Projektions-matrix), gluLookAt (um eine Kamera-transformation) und gluProject (zur Projektion von 3D-Punkt-zu-2D-Fenster coords).