2009-03-15 11 views
4

Pour une raison quelconque, lorsque je redimensionne mes fenêtres OpenGL, tout se désintègre. L'image est déformée, les coordonnées ne fonctionnent pas et tout s'effondre. Je chante Glut pour le mettre en place.Le redimensionnement d'une fenêtre OpenGL provoque son effondrement

//Code to setup glut 
glutInitWindowSize(appWidth, appHeight); 
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); 
glutCreateWindow("Test Window"); 

//In drawing function 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glClear(GL_COLOR_BUFFER_BIT); 

//Resize function 
void resize(int w, int h) 
{ 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0, w, h, 0); 
} 

L'application OpenGL est strictement 2D.

Voici comment il ressemble d'abord: http://www.picgarage.net/images/Corre_53880_651.jpeg

c'est la façon dont il ressemble après le redimensionnement: http://www.picgarage.net/images/wrong_53885_268.jpeg

+0

Les images ne sont plus disponibles. –

Répondre

17

Vous ne devriez pas oublier de brancher la GLUT « remodeler » événement:

glutReshapeFunc(resize); 

Et réinitialiser votre fenêtre d'affichage:

void resize(int w, int h) 
{ 
    glViewport(0, 0, width, height); //NEW 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluOrtho2D(0, w, h, 0); 
} 

Une projection en perspective devrait tenir compte du nouveau format:

void resizeWindow(int width, int height) 
{ 
    double asratio; 

    if (height == 0) height = 1; //to avoid divide-by-zero 

    asratio = width/(double) height; 

    glViewport(0, 0, width, height); //adjust GL viewport 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    gluPerspective(FOV, asratio, ZMIN, ZMAX); //adjust perspective 
    glMatrixMode(GL_MODELVIEW); 
} 
+0

Et remplacez la distribution de style C avec static_cast <> puisque vous travaillez avec C++ :) – aib