Mon image est 1280x800 et ma taille d'écran est 1280x800. Il devrait dessiner parfaitement. Je crée un quadruple de la taille de l'écran et je règle la texture pour l'adapter au quadruple. Mais en ce moment, il dessine une texture carrée dans mon coin supérieur gauche de mon écran qui est hors échelle et pas assez grande.
Je ne sais pas pourquoi cela ne fonctionne pas, j'ai essayé d'écrire la taille de la texture plus grande lors du dessin et cela semble fonctionner en quelque sorte, mais je ne sais pas pourquoi cela n'a pas fonctionné lors du dessin sur un 1280x800 quad.
Comment créer un quad en plein écran?
Voici comment je le fais actuellement:
Voici mon OPENGL et mon code de configuration d'affichage:
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);
Voici mon code pour dessiner le quad texturé:
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();
Réponses:
Une cause probable est que vous ne pouvez pas avoir d'identité dans votre matrice de visualisation de modèle lorsque vous venez de dessiner le quadruple plein écran. Cela peut arriver si vous dessinez autre chose avant le quad.
Je note à partir de votre code de configuration que vous basculez correctement le mode matriciel sur GL_MODELVIEW, mais ensuite vous ne faites pas d'appel glLoadIdentity après l'avoir fait (c'est OK car cela devrait être initialement l'identité, mais c'est une bonne habitude à prendre).
Lorsque vous dessinez votre quad, vous l'avez entouré d'un appel glPushMatrix / glPopMatrix. Cela ne suffit pas à lui seul pour créer une identité matricielle; de la spécification :
(C'est moi qui souligne.)
En d'autres termes, si votre matrice modelview précédente n'était pas une identité, alors après l'appel de glPushMatrix, la nouvelle matrice modelview ne sera pas non plus une identité.
La solution la plus simple consiste à ajouter un glLoadIdentity après votre appel glPushMatrix.
la source