为什么这个openGL代码没有输出任何东西

Why is this openGL code not outputing anything?

本文关键字:输出 任何东 代码 openGL 为什么      更新时间:2023-10-16

以下是使用SubWindows绘制LorenzAttractor的cpp代码。请让我知道为什么代码没有显示任何原语…很惊讶为什么连坐标轴都没有显示…

  1. Main.cpp http://pastebin.com/bGqcBzfJ
  2. OpenGLFramework.h http://pastebin.com/8L3gk5uD
  3. MyFramework.h http://pastebin.com/CZfskfVF
  4. LorenzAttractor.h http://pastebin.com/t6GN1khg

请原谅我在。h文件中编写函数。

编辑:OpenGLFramework是一个基类,正在被MyFramework类扩展。我设置参数,然后调用startFramework()开始渲染屏幕上的数字。

我检查了我使用的每个OpenGL函数,但无法弄清楚为什么输出是黑屏。请提供一些调试OpenGL程序的工具。调试是一件让人头疼的事情:

代码片段:

void startFramework(int argc, char *argv[]) {
                    setInstance();
                    // Initialize GLUT
                    glutInit(&argc, argv);
                    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
                    glutInitWindowPosition(WINDOW_X_POSITION, WINDOW_Y_POSITION);
                    glutInitWindowSize(width, height);
                    mainWindow = glutCreateWindow(instance->title.c_str());
                    glutSetWindow(mainWindow);
                    // callbacks for main window
                    glutDisplayFunc(renderMainWindow);
                    glutReshapeFunc(changeSizeWrapper);
                    glutIdleFunc(renderSceneAllWrapper);
                    //subwindows
                    int subwindowWidth = (width - numberOfSubWindows * border) / numberOfSubWindows;
                    int subWindowHeight = height - border;
                    for(unsigned int i = 0; i < numberOfSubWindows; i++) {
                            subWindow[i] = glutCreateSubWindow(mainWindow, (i * width / numberOfSubWindows) + (border / 2), border / 2, subwindowWidth, subWindowHeight);
                            glutSetWindow(subWindow[i]);
                            glutDisplayFunc(renderWrapper);
                            glEnable(GL_DEPTH_TEST);
                            glEnable(GL_CULL_FACE);
                            // register callbacks
                            //glutIgnoreKeyRepeat(1);
                            glutKeyboardFunc(processNormalKeysWrapper);
                            glutSpecialFunc(pressKeyWrapper);
                            glutSpecialUpFunc(releaseKeyWrapper);
                            glutMouseFunc(mouseButtonWrapper);
                    }      
                    glutMainLoop();
            }

renderWrapper()将调用draw() ..

void draw() {
                        if( 1 == getNumberOfSubWindows() ) {
                                        setWindowContext(0);
                                        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                        glLoadIdentity();
                                        glMatrixMode(GL_MODELVIEW);
                                        invokeGlutLookAt();
                                        draw3DCoordinateAxis();
                                        for(unsigned int i = 0; i < numLorenzAttractors; i++) {
                                                lorenzAttractor[i].simulate();
                                        }
                                        glutSwapBuffers();
                        } else if( getNumberOfSubWindows() == numLorenzAttractors ) {
                                for(unsigned int i = 0; i < numLorenzAttractors; i++) {
                                        setWindowContext(i);
                                        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                                        glLoadIdentity();
                                        glMatrixMode(GL_MODELVIEW);
                                        invokeGlutLookAt();
                                        draw3DCoordinateAxis();
                                        lorenzAttractor[i].simulate();
                                        glutSwapBuffers();
                                }
                        }
                }

好吧,如果你在draw()中设置矩阵,glLoadIdentity()应该在glMatrixMode(GL_MODELVIEW)之后,至少如果你想设置模型视图矩阵,我看不到投影矩阵。默认情况下,OpenGl只绘制所有3个维度[0,1]范围内的东西,你使用投影矩阵将其转换为你想要的角度和大小,所以如果你不设置投影矩阵,你将看不到任何东西。

无论如何,我甚至不明白你的代码是做什么的…