Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用GLUT创建两个主窗口?_C++_Opengl_Window_Glut - Fatal编程技术网

C++ 如何使用GLUT创建两个主窗口?

C++ 如何使用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

我正在做一个练习,我用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);

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循环已经包含在内。是的,这正是我告诉你需要做的:为你创建的每个窗口注册一个显示函数。也许你误解了我的意思。我从一开始就已经注册了每个显示功能。问题在于他们登记的确切顺序。