4 Stimmen

Die Größenänderung eines OpenGL-Fensters führt dazu, dass es auseinanderfällt

Aus irgendeinem Grund fällt alles auseinander, wenn ich die Größe meiner OpenGL-Fenster verändere. Das Bild ist verzerrt, die Koordinaten funktionieren nicht, und alles fällt einfach auseinander. Ich bin sing Glut, es einzurichten.

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

Die OpenGL-Anwendung ist eine reine 2D-Anwendung.

So sieht es anfangs aus: http://www.picgarage.net/images/Corre_53880_651.jpeg

So sieht es nach der Größenänderung aus: http://www.picgarage.net/images/wrong_53885_268.jpeg

17voto

aib Punkte 42913

Vergessen Sie nicht, das GLUT-Ereignis "reshape" einzuhängen:

glutReshapeFunc(resize);

Und setzen Sie Ihr Ansichtsfenster zurück:

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

Bei einer perspektivischen Projektion müsste das neue Seitenverhältnis berücksichtigt werden:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X