2011-09-18 21 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(); 

ここで設定したコードです:I

glEnable(GL_DEPTH_TEST); 

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(); 

まあ、

This

...

そして、私がやる場合Dratted Cube

がそうするを想定し、私にを何だそれを有効にしませんか?私は行方不明でなければならない...何か?深度の問題を解決するにはどうしたらいいですか?

+1

OpenGLを学び始めているなら、即時モードを学ぶべきではありません。最近のOpenGLのバージョンは、遅く、扱いにくく、非難されており、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

関連する問題