gpt4 book ai didi

c++ - 调整 OpenGL 窗口的大小会导致它分崩离析

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:59:09 26 4
gpt4 key购买 nike

由于某种原因,当我调整 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

最佳答案

你不应该忘记 Hook GLUT 'reshape' 事件:

glutReshapeFunc(resize);

并重置您的视口(viewport):

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

关于c++ - 调整 OpenGL 窗口的大小会导致它分崩离析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/648619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com