Mi imagen es 1280x800 y el tamaño de mi pantalla es 1280x800. Debería dibujar perfectamente. Estoy creando un quad del tamaño de la pantalla y estableciendo la textura para que se ajuste al quad. Pero ahora dibuja una textura cuadrada en la esquina superior izquierda de mi pantalla que está fuera de escala y no es lo suficientemente grande.
No sé por qué no funciona, he intentado escribir el tamaño de la textura más grande al dibujar y parece funcionar más o menos, pero no sé por qué no funcionó al dibujar en un 1280x800 quad.
¿Cómo creo un quad de pantalla completa?
Así es como lo estoy haciendo actualmente:
Este es mi OPENGL y el código de configuración de pantalla:
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);
Este es mi código para dibujar el quad con textura:
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();
Respuestas:
Una causa probable es que es posible que no tenga identidad en su matriz de vista de modelo cuando venga a dibujar el quad de pantalla completa. Esto podría suceder si estás dibujando algo más antes del quad.
Observo en su código de configuración que cambia correctamente el modo de matriz a GL_MODELVIEW, pero luego no hace una llamada glLoadIdentity después de hacerlo (esto está bien, ya que inicialmente debería ser identidad, pero es un buen hábito entrar).
Al dibujar su quad, lo tiene rodeado por una llamada glPushMatrix / glPopMatrix. Esto por sí solo no es suficiente para crear una identidad matricial; de la especificación :
(Mi énfasis)
En otras palabras, si su matriz anterior de modelview no era identidad, luego de la llamada glPushMatrix, la nueva matriz de modelview tampoco será identidad.
La solución más simple es agregar una glLoadIdentity después de su llamada a glPushMatrix.
fuente