首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >调整OpenGL窗口的大小会导致其崩溃

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

Stack Overflow用户
提问于 2009-03-15 13:52:37
回答 1查看 8.7K关注 0票数 4

由于某些原因,当我调整我的OpenGL窗口大小时,所有的东西都散开了。图像被扭曲了,坐标不起作用,一切都变得支离破碎。我正在唱Glut来设置它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-15 13:56:49

你不应该忘记挂接GLUT‘重塑’事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
glutReshapeFunc(resize);

并重置视口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void resize(int w, int h)
{
    glViewport(0, 0, width, height); //NEW
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, w, h, 0);
}

透视投影必须考虑新的纵横比:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/648619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文