2011-11-28 195 views
-3

以下是使用SubWindows绘制LorenzAttractor的cpp代码。请让我知道为什么代码没有显示..奇怪为什么连坐标轴不显示任何元..为什么这个openGL代码不能输出任何内容?

  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(); 
           } 
         } 
       } 
+6

将问题简化为可粘贴到问题中的版本。你的代码有很多不相干的东西,比如键盘处理。你甚至可能在这个过程中发现自己的错误。 –

+0

@MarceloCantos完成..我粘贴上面的重要功能..对不起以前的帖子..需要一些适当的睡眠:.. .. – Aditya369

回答

1

好吧,如果你设置平局矩阵() glLoadIdentity()应该在glMatrixMode(GL_MODELVIEW)之后,至少如果你想设置模型视图矩阵,并且我看不到任何投影矩阵。默认情况下,OpenGl在所有三维的[0,1]范围内绘制唯一的东西,并使用投影矩阵进行转换如果你不设置投影矩阵,你将看不到任何东西。

反正我甚至都不知道你的代码是干什么的......

+0

感谢您的输入EvanDark ..代码是框架的一部分,我想出了所以它不会直接向前!其意图是将所有处理程序放在基类中,而具体的派生类具有“虚拟draw()”功能。 – Aditya369

+0

得到了模拟工作..''invokeGlutLookAt()'是罪魁祸首..我分配错误的变量从而行为.. – Aditya369

相关问题