Изменение размера окна OpenGL приводит к его развалу

StackOverflow https://stackoverflow.com/questions/648619

  •  19-08-2019
  •  | 
  •  

Вопрос

По какой-то причине, когда я изменяю размеры своих окон OpenGL, все рушится. Изображение искажено, координаты не работают, и все просто разваливается. Я пою Glut, чтобы настроить это.

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

Приложение OpenGL строго 2D.

Вот как это выглядит изначально: http://www.picgarage.net/images /Corre_53880_651.jpeg

Вот как это выглядит после изменения размера: http://www.picgarage.net/ изображения / wrong_53885_268.jpeg

Это было полезно?

Решение

Вы не должны забывать перехватывать событие GLUT 'reshape':

glutReshapeFunc(resize);

И восстановите свой видовой экран:

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

Перспективная проекция должна учитывать новое соотношение сторон:

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top