Wie erstellen Sie perspektivische Projektion-matrix, gegeben, Schwerpunkte und Kamera principal center
Konnte ich erwerben, die Kamera intrinsische und extrinsische Parameter mit Hilfe von OpenCV, also fx, fy, cx und cy. Und ich habe auch den Bildschirm /Bild-Breite und Höhe.
Aber wie erstelle ich ein OpenGL-Perspektive-Projektion-matrix aus diesen Parametern?
glFrustrum zeigt, wie Projektions-matrix, gegeben Z in der Nähe, weit Z und die Bildbreite und-Höhe. Aber wie füge ich die Schwerpunkte und Kamera-Zentren in dieser matrix?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die folgenden links
Kyle Simek Erklärung
Meine Erklärung
Hier ist der code zu erhalten, der OpenGL-Projektions-matrix entspricht einer computer-vision-Kamera mit Kamera-matrix
K=[fx, s, cx; 0, fy, cy; 0, 0, 1]
- und Bild-Größe[W, H]
:NB:
zmin
undzmax
darstellen, die nahen und die Fernen Z-clipping-Ebenen. Bei dieser Formulierung wird davon ausgegangen, dass die OpenGL-Welt coordinate frame ist wie folgt:Den OpenGL-Kamera wird davon ausgegangen, dass sich an der Herkunft, Blick in Richtung positive Z-Achse, mit einem down-Vektor kollinear, und die Richtung der positiven Y-Achse.
In Bezug auf die AldurDisciple Antwort dies ist die Formulierung, die Sie verwenden müssen, wenn die Welt coordinate frame gewählt mit invertierten z-axe
2*(cx/w)-1,2*(cy/h)-1
? ist das ein Fehler???Open GL arbeitet mit einem Pyramidenstumpf die im Zusammenhang mit der perspektiv-Projektion mit einige Grenzen in der Tiefe bezeichnet als near-und far-Werte. Stellen Sie sich eine Pyramide auf der Seite liegend - dies ist pyramidenstumpfs. Eine andere Analogie ist ein Projektor, der Balken, erstreckt sich in Ihrer Breite und Höhe mit der Distanz, das ist pyramidenstumpfs zu. Also rechts, Links, unten und oben sind Ihre Bild-Koordinaten, während in der Nähe und weit sind Ihre Tiefe Grenzen mit der in der Nähe beint Ihr focal-plane. OpenGL setzen wird, Cx und Cy in der Mitte der Bildebene so kann man Sie überspringen. Die alternative und Natürliche Art und Weise angeben, Pyramidenstumpf basiert auf der Blickwinkel-oder field of view (50-60 Grad (typisch); die Funktion, die Sie nennen, ist glPerspective(), wo Sie noch in der Nähe und weit, aber anstelle von Größen angeben, die Winkel und Seitenverhältnis. Viel Glück.
Haben Sie
cx
,cy
,fx
,fy
,width
,height
.Und Sie benötigen
left
,right
,top
,bottom
in Ihre Gleichungen.Berechnen Sie diesen Wert mit diesem Weg.