当前位置:  开发笔记 > 编程语言 > 正文

调整OpenGL窗口的大小会导致它崩溃

如何解决《调整OpenGL窗口的大小会导致它崩溃》经验,为你挑选了1个好方法。

出于某种原因,当我调整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/images/wrong_53885_268.jpeg



1> aib..:

你不应该忘记挂钩GLUT'重塑'事件:

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

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有