C++ 如何使用GLUT创建两个主窗口?
我正在做一个练习,我用GLUT在三个窗口上画三个盒子。它们单独绘制,但在同一项目中,三个窗口显示正确,但立即关闭程序,代码为1C++ 如何使用GLUT创建两个主窗口?,c++,opengl,window,glut,C++,Opengl,Window,Glut,我正在做一个练习,我用GLUT在三个窗口上画三个盒子。它们单独绘制,但在同一项目中,三个窗口显示正确,但立即关闭程序,代码为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); glutIni
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);
由于每个窗口都在一个单独的文件中自行加载,因此每个窗口的显示方式都与预期的完全相同。我觉得我应该在每次初始化之间的某个点设置窗口,但我不知道为什么。我目前没有绘图功能,因为我想确认在没有绘图代码的情况下会发生这种情况
我还应该注意,我必须创建单独的窗口,正如我所做的那样,因此其他窗口绘制功能是无用的。不要在创建GLUT窗口的相同功能中进行OpenGL绘制操作。它不起作用。您需要为每个窗口注册一个显示回调函数,并在那里进行所有绘图。如果您想看到使用GLUT的一些合理的东西,那么调用glutMainLoop是必须的。我通过示例找到了答案,因此我将发布它,以防其他人遇到类似问题 需要在每个窗口后添加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);
我使用了一个draw函数,在使用glutSetWindow之后,它会在每个窗口中随机移动并生成特定的draw。每个窗口初始化后都会进行绘制,可以在每个窗口之后调用多个glutDisplayFunc()
我原本以为我是在使用glutDisplayFunc设置指针,这样当显示例程对帧执行时,它只会生成最后一个调用的显示函数,而不是所有的显示函数。你到底在调用
glutMainLoop()
?如果没有,这将解释为什么你的程序会立即退出。要澄清,如果我有一个窗口,它工作得很好。我让所有的窗口都在单独的文件中工作,这让我遇到了麻烦。我还澄清了“WindowThree=glutCreateWindow(“使用glFrustum()的3D查看系统”)的程序崩溃;为了找到我的解决方案,我还没有任何绘图功能,GLUTmain循环已经包含在内。是的,这正是我告诉你需要做的:为你创建的每个窗口注册一个显示函数。也许你误解了我的意思。我从一开始就已经注册了每个显示功能。问题在于他们登记的确切顺序。