Seitenverhältnis Dehnung in OpenGL
Ich habe einige Probleme mit full-screen-Modus. Ich kann meine Fenster 800x600, aber wenn ich Vollbild, Auflösung, es reicht. Ich nehme an, dies ist aufgrund einer änderung im Seitenverhältnis. Wie kann ich dieses Problem beheben?
Edit #1
Hier ist ein Screenshot von dem, was ich sehe passiert.
Links: 800x600
Rechts: 1.366 x 768
Edit #2
Meine initGraphics Funktion aufgerufen wird, jedes mal, wenn ich die Größe der Fenster (WM_SIZE).
void initGraphics(int width, int height) {
float aspect = (float)width /(float)height;
glViewport(0, 0, width, height);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND); //Enable alpha blending
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.0, 0.0, 0.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, width, height * aspect, 0.0);
glMatrixMode(GL_MODELVIEW);
}
Was macht Ihr Projektions-matrix Aussehen?
InformationsquelleAutor MintGrowth | 2012-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
LÖSUNG:
Das eigentliche problem war, dass Sie missbrauchen die Funktion gluOrtho2D. Anstelle der Verwendung dieses:
Mussten Sie schalten Sie es auf die richtige form:
Letztere erstellt eine 2D orthographische Projektion, füllt die gesamte Breite und Höhe des Viewports, also keine Dehnung Auftritt.
ORIGINAL ANTWORT:
Müssen Sie zum ändern der Projektion, um Konto für das neue Seitenverhältnis.
Stellen Sie sicher, dass Sie zuerst festlegen
glViewport
auf die neue Fenstergröße. Nach der viewport festgelegt wurde, müssen Sie schalten Sie den matrix-Modus für Projektion mit einem AufrufglMatrixMode
und dann schließlich berechnen Sie Ihre neue Seitenverhältnis mitwidth /height
und übergeben Sie die neue Aspekt-Verhältnis zugluPerspective
. Sie können auch direktglFrustum
stattgluPerspective
finden Sie Quelle, umgluPerspective
zu erreichen, die gleiche Wirkung mitglFrustum
.Etwas wie dieses:
glLoadIdentity()
oder die projection-matrix angewendet werden könnte, die Perspektiven der jeweils anderenguter Punkt, schlecht hinzufügen, dass
Ich bin mit Ortho, aber es ist der gleiche Prozess.
Kiernan so mit glOrtho ich dachte, Sie sagen einfach glOrtho(0, width, 0, height, near, far) und kümmert sich um alle Seitenverhältnis
aber warum bin ich immer ich dehnen? Ist das normal? Ich bin neu hier, also weiß ich nicht genau, nach was ich suchen sollte, für hier, aber es scheint, dass dehnen schlecht wäre.
InformationsquelleAutor Justin Meiners
Nachdem die Größe des Fensters, die Sie benötigen, um Ihre Projektions-matrix entsprechend der neuen Seitenverhältnis. Wenn Sie mit den klassischen OpenGL, schalten Sie den matrix-Modus zu GL_PROJECTION, laden Sie die identity-matrix, dann Aufruf von glOrtho oder gluPerspective mit der vertikalen dimension skaliert werden, indem das Seitenverhältnis (vorausgesetzt, Sie wollen, dass die horizontale Ausdehnung des Bildes werden die gleichen wie es war, mit dem original-Fenster).
Nur eine Vermutung--sind in der Höhe & Breite ganze zahlen? Sie wollen wahrscheinlich cast eine oder beide verdoppelt, bevor computing, Bruch, oder Sie werden wahrscheinlich am Ende mutiplying durch 1.
Kein Unterschied. Die Bilder, gerade Strecke, egal in welche Richtung ich die Größe der Fenster.
Ich aktualisierte mein original-Beitrag zu zeigen, einen Screenshot von dem, was ich sehe, passiert.
InformationsquelleAutor Drew Hall