Ob in OpenGL, DirectX, oder sonstigen 3D Lösungen ist die Projektionsverzerrung ein nerviges und unschönesVerhalten bei der Berechnung und Projektion auf den Bildschirm!
1.) ... Das Problem der Verzehrung bei der Projektion der 3D Objekte!
2.) ... Verhalten beim Entfernen der Projektionsverzerrung!
1.) Das Problem der Verzehrung bei der Projektion der 3D Objekte!
Wenn Sie das untere Bild als Referenz verwenden und die Breite zunimmt entsteht eine horizontale Dehnung, es scheint sehr plausibel, dass der Fov-Y-Winkel zunehmen muss, um eine vertikale Dehnung zu verursachen, die die Proportionalität des geränderten Bildes fixiert.Hier ist es gut zu erkennen, wie die Kugeln in der oberen linken Ecke verzerrt werden, auch wenn es mathematisch richtig ist, ist es doch recht unschön und macht das 3D Erlebnis verzerrt!
( ... siehe Bild-1)
GLfloat fFovy = 60.0f; // Field-of-view
GLfloat fZNear = 0.5f; // Near clipping plane
GLfloat fZFar = 10000.0f; // Far clipping plane
// Calculate viewport aspect
RECT rv;
GetClientRect(m_pMainWnd->m_hWnd, &rv);
fAspect = (GLfloat)(rv.right-rv.left) / (GLfloat)(rv.bottom-rv.top);
// Define viewport
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fFovy, fAspect, fZNear, fZFar);
glMatrixMode(GL_MODELVIEW);
(Bild-1) Die Projektionsverzerrung bei der Darstellung! |
2.) Verhalten beim Entfernen der Projektionsverzerrung!
Wie erwähnt, ist der Sichtfeldparameter sehr wichtig!
Wenn Sie sich Ihr Fenster als physisches Fenster zu der Welt vorstellen, die Sie betrachten, und Ihr Auge als Beobachtungspunkt, können Sie sich eine Pyramide vorstellen. Für ein kleines Fenster und wenn Sie weit genug vom Monitor entfernt sind, wird die Pyramide sehr spitz: Das Sichtfeld ist daher klein. Ich würde sagen, Sie haben wahrscheinlich mit einem Sichtfeld von 90-120 Grad oder mehr gezeichnet, wenn Sie es wirklich bei etwa 25-45 Grad betrachtet haben (da Ihr Fenster nicht bildschirmfüllend, sondern eher klein ist).
Dies führt zu einer erheblichen Verzerrung, die erforderlich ist, um korrekt auszusehen, wenn Sie Ihr Fenster wirklich aus der Nähe betrachten.
Ihre Perspektive könnte einfach zu stark sein. Versuchen Sie, den Sichtfeldwinkel zu verringern.
In den meisten Fällen wissen Sie nicht, wo sich Ihr Betrachter in Bezug auf Ihr Bild befindet, also müssen Sie raten. Das macht die Wahl des Sichtfeldes zu einer ästhetischen Frage.
Auch ohne Projektionsverzerrung erscheint die 3D Darstellung falsch, bzw. noch falscher!
( ... siehe Bild-2)
(Bild-2) Ohne Projektionsverzerrung bei der Darstellung! |