2013-01-05 44 views
0

繪製簡單的球時,使用GLUT我有一個問題。當我繪製一個球體時,應用程序只繪製一個黑色表單(我的背景顏色是白色的),當我試圖繪製一個線立方體時,我只得到一個黑點。 這裏是我的代碼轉運蛋白glutSolidSphere工作正確

private void init() 
{ 
    Glut.glutInit(); 
    Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB | Glut.GLUT_DOUBLE); 

    Gl.glClearColor(255, 255, 255, 1); 

    Gl.glViewport(0, 0, AnT.Width, AnT.Height); 

    Gl.glMatrixMode(Gl.GL_PROJECTION); 
    Gl.glLoadIdentity(); 

    Glu.gluPerspective(45, (float)AnT.Width/(float)AnT.Height, 0.1, 200); 

    Gl.glMatrixMode(Gl.GL_MODELVIEW); 
    Gl.glLoadIdentity(); 

    Gl.glEnable(Gl.GL_DEPTH_TEST); 
    Gl.glEnable(Gl.GL_LIGHTING); 
    Gl.glEnable(Gl.GL_LIGHT0); 
} 


private void draw() 
{ 
    Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); 

    Gl.glClearColor(255, 255, 255, 1); 
    Gl.glLoadIdentity(); 

    //Glut.glutWireCube(100); 
    Glut.glutSolidSphere(1, 16, 16); 

    Gl.glPopMatrix(); 
    Gl.glFlush(); 
    AnT.Invalidate(); 
} 

我的初始化函數被調用上加載的形式和我的繪製函數 - 上油漆。誰能幫我?

+0

結帳這個計算器發帖,看看評論/回答可以幫助您解決問題 - http://stackoverflow.com/questions/11292733/initializing-opengl -with-depth-buffer-and-depth-testing – MethodMan

+0

@DJKRAZE,不幸的是我不明白那個話題,因爲我剛開始使用openGL。 – Ermintar

回答

0
Glut.GLUT_SINGLE | Glut.GLUT_RGB | Glut.GLUT_DOUBLE 

GLUT_SINGLEGLUT_DOUBLE是互斥的。選一個。

Gl.glPopMatrix(); 

你缺少相應glPushMatrix(),雖然這個特定用例不需要任何。

Gl.glClearColor(255, 255, 255, 1); 

glClearColor()取在0.0和1.0之間float秒。


試試這個序列代替:

private void init() 
{ 
    Glut.glutInit(); 
    Glut.glutInitDisplayMode(Glut.GLUT_SINGLE | Glut.GLUT_RGB); 
    Gl.glViewport(0, 0, AnT.Width, AnT.Height); 
} 

private void draw() 
{ 
    Gl.glClearColor(1, 1, 1, 1); 
    Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); 

    Gl.glMatrixMode(Gl.GL_PROJECTION); 
    Gl.glLoadIdentity(); 
    Glu.gluPerspective(45, (float)AnT.Width/(float)AnT.Height, 0.1, 200); 

    Gl.glMatrixMode(Gl.GL_MODELVIEW); 
    Gl.glLoadIdentity(); 
    Gl.glTranslatef(0, 0, -5); 

    Gl.glEnable(Gl.GL_DEPTH_TEST); 
    Gl.glEnable(Gl.GL_CULL_FACE); 
    Gl.glEnable(Gl.GL_LIGHTING); 
    Gl.glEnable(Gl.GL_LIGHT0); 

    Glut.glutSolidSphere(1, 16, 16); 

    // Gl.glDisable(Gl.GL_LIGHTING); 
    // Glut.glutWireCube(1); 

    Gl.glFinish(); 
    AnT.Invalidate(); 
}