Mein Bild ist 1280x800 und meine Bildschirmgröße ist 1280x800. Es sollte perfekt zeichnen. Ich erstelle ein Quad von der Größe des Bildschirms und stelle die Textur so ein, dass sie zum Quad passt. Aber im Moment zeichnet es eine quadratische Textur in meiner oberen linken Ecke meines Bildschirms, die nicht maßstabsgetreu und nicht groß genug ist.
Ich weiß nicht, warum es nicht funktioniert. Ich habe versucht, die Textur beim Zeichnen größer zu schreiben, und es scheint irgendwie zu funktionieren, aber ich weiß nicht, warum es beim Zeichnen auf einer nicht funktioniert hat 1280x800 Quad.
Wie erstelle ich ein Vollbild-Quad?
So mache ich es derzeit:
Dies ist mein OPENGL- und Display-Setup-Code:
DisplayMode displayMode = null;
DisplayMode[] modes = Display.getAvailableDisplayModes();
for (int i = 0; i < modes.length; i++) {
if (modes[i].getWidth() == World.SCREEN_WIDTH && modes[i].getHeight() == World.SCREEN_HEIGHT && modes[i].isFullscreenCapable()) {
displayMode = modes[i];
}
}
Display.setDisplayMode(displayMode);
Display.setFullscreen(false);
Display.create();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, World.SCREEN_WIDTH, World.SCREEN_HEIGHT, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
Dies ist mein Code zum Zeichnen des strukturierten Quad:
background = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/background.png")));
glBindTexture(GL_TEXTURE_2D, background.getTextureID());
glPushMatrix();
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(0, 0); // Upper left
glTexCoord2f(1, 0);
glVertex2f(World.SCREEN_WIDTH, 0); // Upper right
glTexCoord2f(1, 1);
glVertex2f(World.SCREEN_WIDTH, World.SCREEN_HEIGHT); // Lower right
glTexCoord2f(0, 1);
glVertex2f(0, World.SCREEN_HEIGHT); // Lower left
glEnd();
glPopMatrix();
Antworten:
Eine wahrscheinliche Ursache ist, dass Sie möglicherweise keine Identität in Ihrer Modellansichtsmatrix haben, wenn Sie das Vollbild-Quad zeichnen. Dies kann passieren, wenn Sie vor dem Quad noch etwas zeichnen.
Ich stelle aus Ihrem Setup-Code fest, dass Sie den Matrixmodus korrekt auf GL_MODELVIEW umschalten, aber danach keinen glLoadIdentity-Aufruf mehr ausführen (dies ist in Ordnung, da es zunächst eine Identität sein sollte, aber es ist eine gute Angewohnheit, sich darauf einzulassen ).
Wenn Sie Ihr Quad zeichnen, wird es von einem glPushMatrix / glPopMatrix-Aufruf umgeben. Dies allein reicht nicht aus, um eine Matrixidentität zu erstellen. aus der Spezifikation :
(Meine Betonung.)
Mit anderen Worten, wenn Ihre vorherige Modellansichtsmatrix keine Identität war, ist die neue Modellansichtsmatrix nach dem Aufruf von glPushMatrix ebenfalls keine Identität.
Die einfachste Lösung besteht darin, nach Ihrem glPushMatrix-Aufruf eine glLoadIdentity hinzuzufügen.
quelle