2011-11-28 159 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

相關問題