Messaggi: 1,021
Discussioni: 28
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: May 2010
Reputazione:
9
Premesso che non conosco OpenGL, quindi è possibile che ti stia per dire un sacco di vaccate. Vado più che altro a logica e a robe viste right now su internet, sta a te valutare se quello che ti sto per dire è plausibile o no. La probabilità che ci siano parecchie inesattezze è alta, ma almeno una risposta la ricevi...
Per rappresentare un modello 3D (vale anche per il 2D, ma in questo caso penso che in 3D sia concettualmente più semplice da capire) bisogna associare ad ogni vertice del modello un punto sulla viewport (*), ovvero bisogna proiettare i vertici da uno spazio 3D a un piano 2D. Questa proiezione viene fatta attraverso una matrice.
Quando ridimensioni la finestra quello che vuoi realmente fare è ridimensionare la viewport: puoi anche mettere in fullscreen, ma se non ridimensioni la viewport hai le bande nere da tutti i lati. Per visualizzare meglio il problema supponiamo che nel ridimensionare la finestra cambia anche aspect ratio, la tua finestra di gioco passa da quadrata a rettangolare. Nel momento in cui ridimensioni la viewport, se non modifichi la matrice di proiezione, ottieni il classico effetto che vedi con i film in 4:3 messi su una TV in 16:9 (oppure quando allarghi un'immagine su Word): le immagini si spalmano su una superficie con dimensioni completamente diverse e risultano deformate.
Per risolvere questo problema devi dire a OpenGL che la matrice di proiezione che ha usato fino ad ora non va più bene.
Purtroppo (almeno... a me non piace, magari qualcuno la vede come una cosa positiva) OpenGL si basa su una macchina a stati finiti, quindi per cambiare il valore a una matrice devi prima dire "OpenGL, prendimi questa matrice!" e poi dire "OpenGL, scrivi questi valori nella matrice!". È un po' pacco fare tutto così, però vabbè... quel modo c'è e quel modo devi usare.
glMatrixMode(GL_PROJECTION) dovrebbe essere l'equivalente di "OpenGL, prendimi la matrice di proiezione".
(*) La viewport è un piano (2D) che rappresenta la porzione di schermo che sarà dedicata a farti vedere il gioco a schermo.
Ti ripeto che non sono pratico di sta roba, sta a te verificare se ciò che ti ho detto è giusto. Le probabilità che ci sia qualcosa di sbagliato (tutto?) non sono poi così basse.