如何使用 GLUT 创建两个主要 windows?

How do I create two main windows with GLUT?

我正在做一个练习,我使用 GLUT 在三个 windows 上绘制三个框。他们分别绘制,但在同一个项目中,三个windows显示正确,但立即关闭代码1.

的程序
glutInitWindowPosition(x,y);
windowOne = glutCreateWindow("windowOne");

glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-400, 400, -400, 400, -500, 500);

glutInitWindowPosition(x,y);
windowTwo = glutCreateWindow("windowTwo");

glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glFrustum(-60, 60, -60, 60, 60, 200);
gluLookAt(0, 0, 120, 0, 0, 0, 0, 1, 0);

每个 window 都在一个单独的文件中自行加载,它们都完全按照预期显示。我有一种感觉,我应该在每个初始化之间的某个时间点设置 window,但我不知道为什么。我目前没有绘图功能,因为我想在没有绘图代码的情况下确认这种情况。

我还应该注意,我必须完全按照我所做的那样创建单独的 windows,因此其他 window 绘图函数没有用。

切勿在创建 GLUT 的同一函数中执行 OpenGL 绘图操作 windows。它不起作用。您需要为每个 window 注册一个显示回调函数并在那里进行所有绘制。如果您想使用 GLUT 看到一些合理的东西,则必须调用 glutMainLoop。

我通过示例找到了答案,所以我会 post 以防其他人遇到类似问题。

需要在每个window后面添加draw函数,样式为

// window one

glutInitWindowPosition(50, 50);
WindowOne = glutCreateWindow("orthogonal projection");
glutDisplayFunc(drawWindowOne); 

// window two
glutInitWindowPosition(650, 50);
WindowThree = glutCreateWindow("3D viewing system with glFrustum()");
glutDisplayFunc(drawWindowTwo); 

我正在使用一个绘制函数,它随机播放每个 window 并在使用 glutSetWindow 后生成其特定的绘制。每次绘制都在每个 window 初始化之后进行,并且可以在彼此之后调用多个 glutDisplayFunc() 。

我本来以为我是用glutDisplayFunc设置了一个指针,这样当显示例程为帧走完时,它只会生成最后调用的显示函数,而不是所有的显示函数。