2011-09-18 82 views
3

我今天開始學習OpenGL,而且很簡單。然而,我不能爲了我的生活而按照深度繪製對象,而不是繪製順序,所以我希望有人能告訴我我做錯了什麼。OpenGL深度Spaz攻擊

這裏是非常簡單的代碼,我使用創建多維數據集:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 

//Simple translation 

glBegin(GL_QUADS);  
    glColor3f(0.0f,1.0f,0.0f);  
    glVertex3f(1.0f, 1.0f,-1.0f);  
    glVertex3f(-1.0f, 1.0f,-1.0f);  
    glVertex3f(-1.0f, 1.0f, 1.0f);  
    glVertex3f(1.0f, 1.0f, 1.0f);  
    glColor3f(1.0f,0.5f,0.0f);  
    glVertex3f(1.0f,-1.0f, 1.0f);  
    glVertex3f(-1.0f,-1.0f, 1.0f);  
    glVertex3f(-1.0f,-1.0f,-1.0f);  
    glVertex3f(1.0f,-1.0f,-1.0f);  
    glColor3f(1.0f,0.0f,0.0f);  
    //You get the point, continue with all sides 
glEnd();   // End Drawing The Cube 

SDL_GL_SwapBuffers(); 

下面是設置代碼:

if (SDL_Init(SDL_INIT_EVERYTHING)<0) 
    return -1; 

SDL_GL_SetAttribute(SDL_GL_RED_SIZE,  8); 
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE,  8); 
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE,  8); 
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE,  8); 

SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,  16); 
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE,  32); 

SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, 8); 

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); 
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2); 


SDL_Surface* screen = SDL_SetVideoMode(screen_x,screen_y,32,SDL_HWSURFACE|SDL_GL_DOUBLEBUFFER|SDL_OPENGL); 

if (screen == NULL) 
    return -2; 

//glEnable(GL_DEPTH_TEST); //<-If this is uncommented look at figure 1 
glDepthFunc(GL_LESS); 

glClearColor(0, 0, 0, 0); 
glClearDepth(1.0f); 

glViewport(0, 0, screen_x, screen_y); 

glMatrixMode(GL_PROJECTION); //projection with ortho, model otherwise 
glLoadIdentity(); 

gluPerspective(60.0,1.0,0.0,10.0); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

好吧,當我

glEnable(GL_DEPTH_TEST); 

This

...

如果我使其 Dratted Cube

所以我是什麼應該辦?我肯定錯過了什麼?我如何解決我的深度問題?

+1

如果你開始學習OpenGL,你不應該學習即時模式。從最近的OpenGL版本來看,它很慢,很麻煩並且不推薦使用,從來沒有在OpenGL-ES中可用。我推薦尼古拉布拉斯的教程,他們是目前最好的教程http://arcsynthesis.org/gltut/ – datenwolf

+0

哇,非常感謝你,這是超級有用的。當然,現在我正在閱讀而不是編程,所以詛咒你,詛咒你,讓你變成鴨嘴獸。詛咒你。 – ultifinitus

回答