2011-09-18 5 views
3

저는 오늘 OpenGL을 배우기 시작했습니다. 그러나 나는 삶의 질서에 따라 드로잉 대신에 오브젝트를 드로잉 할 수 없다. 그래서 누군가 내가 잘못하고있는 것을 말해 줄 수 있기를 바란다.OpenGL Depth 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

,451,515,

...

그리고 내가 할 경우Dratted Cube

그렇게 할을 생각 나는에게 무엇 나는 그것을 사용하지? 내가 빠뜨린 게 틀림 없어 ... 뭔가? 심도 문제를 어떻게 수정합니까?

+1

OpenGL을 배우기 시작하면 직접 모드를 배워야합니다. OpenGL-ES의 최신 버전에서는 느리고, 성가 시며 비추천입니다. OpenGL-ES에서는 사용할 수 없었습니다. 나는 Nicol Bolas의 튜토리얼을 추천합니다. 그들은 현재 최선을 다하고 있습니다. http://arcsynthesis.org/gltut/ – datenwolf

+0

와우, 고맙습니다. 매우 유용합니다. 물론 프로그래밍 대신에 책을 읽으므로 저주 해 오리너구리를 저주하십시오. 저주. – ultifinitus

답변

3

답변을 찾았습니다!

http://www.opengl.org/resources/faq/technical/depthbuffer.htm

가 여기에 내가 답을 찾을 경우, 내 주변의 프레임이 정확히 0에 있었다, 그것은을 적용하려면 깊이 버퍼의 정밀도를 위해서는 약간 떨어진 0에서 할 필요가있다. (정확하게 읽으면) 모두 좋다.

+1

그냥 1.0으로 설정하십시오. 0.000001로 설정해야한다는 세계 주장을 듣지 마십시오. – TheBuzzSaw