Come posso disegnare una trama a piena risoluzione su una finestra della stessa risoluzione?


8

La mia immagine è 1280x800 e la dimensione dello schermo è 1280x800. Dovrebbe disegnare perfettamente. Sto creando un quad delle dimensioni dello schermo e sto impostando la trama per adattarla al quad. Ma in questo momento disegna una trama quadrata nell'angolo in alto a sinistra dello schermo che è fuori scala e non abbastanza grande.

Non so perché non funziona, ho provato a scrivere la dimensione della trama più grande durante il disegno e sembra funzionare in qualche modo, ma non so perché non ha funzionato quando si disegna su un Quad 1280x800.

Come faccio a creare un quad a schermo intero?

Ecco come lo sto attualmente facendo:

Questo è il mio OPENGL e il codice di configurazione del display:

    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);

Questo è il mio codice per disegnare il quad testurizzato:

    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();

Sembra che Slick2D crei una trama che ha una potenza di due dimensioni. Vedi slick.ninjacave.com/forum/viewtopic.php?p=26076
msell

@msell Quindi come posso coprire il mio schermo 1280x800?
Louis Hong,

2
Mentre questo potrebbe essere un vero problema per te, questo sembra essere più simile al tipo di domanda "debug my code", che non si adatta allo scambio di stile Q / A.
Katu,

In realtà non lo è, questo è un vero problema LWJGL. Ho la risposta alla domanda. Ma non mi piace il modo in cui le persone di alto rango vanno in giro dando voti senza guardare veramente al contenuto @Katu
Louis Hong

1
Il dimensionamento della potenza di due non dovrebbe importare poiché i texcoords utilizzati allungheranno o comprimeranno la trama per riempire lo schermo. Più probabile è che la matrice modelview non sia identità - vedi la mia risposta di seguito.
Maximus Minimus,

Risposte:


5

Una probabile causa è che potresti non avere l'identità nella tua matrice modelview quando arrivi a disegnare il quad a schermo intero. Questo potrebbe accadere se stai disegnando qualcos'altro prima del quad.

Prendo atto dal codice di installazione che si passa correttamente la modalità matrice a GL_MODELVIEW, ma dopo non si effettua una chiamata glLoadIdentity dopo averlo fatto (va bene come dovrebbe essere inizialmente l'identità, ma è una buona abitudine entrare).

Quando disegni il tuo quad, lo hai circondato da una chiamata glPushMatrix / glPopMatrix. Questo da solo non è sufficiente per creare un'identità matrice; a partire dal specifiche :

glPushMatrix abbassa l'attuale stack di matrici di uno, duplicando la matrice corrente . Cioè, dopo una chiamata glPushMatrix, la matrice in cima allo stack è identica a quella sottostante .

(La mia enfasi.)

In altre parole, se la tua precedente matrice modelview non era identità, quindi seguendo la chiamata glPushMatrix anche la nuova matrice modelview non sarà identità.

La soluzione più semplice è aggiungere un glLoadIdentity dopo la tua chiamata glPushMatrix.


Caspita, è molto complicato. Come funzionano le matrici?
Louis Hong,

1
Dovresti cercare del materiale tutorial per questo - è molto fuori tema per questo sito.
Maximus Minimus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.