由于某些原因,当我调整我的OpenGL窗口,一切都分崩离析。图像失真,坐标不工作了,一切就散了。我唱的转运蛋白来进行设置。

//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

有帮助吗?

解决方案

您不应该忘记勾过剩“重塑”事件:

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