2013-07-18 61 views
-6

這裏是代碼,沒有任何錯誤,它有什麼問題?GLUT只是渲染一個空白的白色屏幕?

我編譯它,命令提示符打開,窗口打開,窗口全白,我把它重新着色成灰色,並且它也沒有畫出我的形狀,那麼問題是什麼?

#ifdef __APPLE__ 
    #include <GLUT/glut.h> 
    #else 
    #include <GL/glut.h> 
    #endif 

    #include <stdlib.h> 



    void ProcessSpecialKeys(int key, int x, int y){ 

     switch(key){ 

      case GLUT_KEY_RIGHT: 


    exit(0); 



      case GLUT_KEY_LEFT: 

    exit(0); 

      case GLUT_KEY_UP: 
    exit(0); 

      case GLUT_KEY_DOWN: 

    exit(0); 
      default: 

    exit(0); 

     } 




     } 



    void renderScene(void) { 
    glClearColor(0.3f, 0.3f, 0.3f, 0.3f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 


     glutSwapBuffers(); 
} 

    void renderPrimitive(void){ 
    glBegin(GL_QUADS); 
    glVertex3f(-1.0f,-1.0f,0.0f); 
    glVertex3f(-1.0f,1.0f,0.0f); 
    glVertex3f(1.0f,1.0f,0.0f); 
    glVertex3f(1.0f,-1.0f,0.0f); 
    glEnd(); 
} 

    void display(void){ 
    glTranslatef(0.0f,0.0f,-0.5f); 
    renderPrimitive(); 
    glFlush(); 
    glClearColor(0.3f,0.3f,0.3f,0.3f); 
    glClear(GL_COLOR_BUFFER_BIT); 
} 

int main(int argc, char **argv) { 

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowPosition(100,100); 
    glutInitWindowSize(320,320); 
    glutCreateWindow("Dimension"); 
    glutDisplayFunc(display); 

    glLoadIdentity(); 

glutSpecialFunc(ProcessSpecialKeys); 


    glutMainLoop(); 

    return 1; 
} 
+5

Stack Overflow是*不*衆包調試器。 –

+1

你應該用最小的,*格式良好的*代碼來詢問你所遇到的具體問題。在解決問題時,你還應該陳述*你嘗試了什麼*以及爲什麼它不起作用。簡單地複製你的代碼並詢問「爲我修復」僅僅違背了SO的原則。 –

+0

請查看[問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – Mgetz

回答

1

問題是您在顯示功能中繪製場景後清除顯示。另外,還有一個無用的電話glFlush()。刪除這些行:

glFlush(); 
glClearColor(0.3f,0.3f,0.3f,0.3f); 
glClear(GL_COLOR_BUFFER_BIT); 

添加glutSwapBuffers()而不是他們。

glFlush()用於單緩衝模式。

請記住,您正在使用雙緩衝模式,所以有兩個緩衝區。你的場景被繪製到後臺緩衝區,並顯示它,你必須通過在顯示功能結束時調用glutSwapBuffers()將它複製到前臺緩衝區。

+0

它仍然是一樣的東西。 :/ – Josh

+0

是的,我沒有複製它,但它仍然希望顯示一個白色的屏幕出於某種奇怪的原因。 – Josh

+0

如果我將它添加到我的顯示功能和我的renderPrimative功能的末尾,它會顯示一個黑色屏幕,但仍然沒有形狀,這是怎麼回事? – Josh

-2

試試這個:

#include <GL/glut.h> 
#include <stdlib.h> 

void ProcessSpecialKeys(int key, int x, int y) 
{ 
    switch(key) 
    { 
    case GLUT_KEY_RIGHT: 
    case GLUT_KEY_LEFT: 
    case GLUT_KEY_UP: 
    case GLUT_KEY_DOWN: 
     exit(0); 
     break; 
    default: 
     exit(0); 
     break; 
    } 
} 

void renderPrimitive() 
{ 
    glBegin(GL_QUADS); 
    glVertex3f(-1.0f,-1.0f,0.0f); 
    glVertex3f(-1.0f,1.0f,0.0f); 
    glVertex3f(1.0f,1.0f,0.0f); 
    glVertex3f(1.0f,-1.0f,0.0f); 
    glEnd(); 
} 

void display() 
{ 
    glClearColor(0.3f,0.3f,0.3f,0.3f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-2, 2, -2, 2, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glPushMatrix(); 
    glTranslatef(0.0f,0.0f,-0.5f); 
    renderPrimitive(); 
    glPopMatrix(); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowPosition(100,100); 
    glutInitWindowSize(320,320); 
    glutCreateWindow("Dimension"); 
    glutDisplayFunc(display); 
    glutSpecialFunc(ProcessSpecialKeys); 
    glutMainLoop(); 
    return 1; 
} 
+5

認真嗎?沒有解釋,只是一段代碼? *嘗試這個*?我希望得到20.5k聲望的人更多的東西。 –

+3

@BartekBanachewicz這是相當乾淨的代碼。這看起來很合適,因爲原始問題中的代碼牆伴隨着「這不起作用」。 – JCooper

+1

@JCooper網上有大量的資源和教程。我沒有說它是不好的代碼;我只是覺得這並不能真正幫助OP。 SO應該是鼓勵學習和研究,而不是懶惰的複製粘貼現成的代碼。在這種情況下,恕我直言,它有害無益。這個問題本身很糟糕,但沒有人甚至試圖向OP解釋這一點。 –