OpenGL Depth Spaz Attack - PullRequest
       12

OpenGL Depth Spaz Attack

3 голосов
/ 18 сентября 2011

Я начал изучать OpenGL сегодня, и это просто фантастика.Однако я не могу за всю жизнь заставить объекты рисовать в соответствии с глубиной вместо порядка рисования, поэтому я надеюсь, что кто-то может сказать мне, что я делаю неправильно.

Вот чрезвычайно простой код, который я использую длясоздать куб:

 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 Ответ

3 голосов
/ 18 сентября 2011

Я нашел ответ!

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

Вот где я нашел ответ: Мой ближний кадр был точно в 0, он должен быть немного от 0, чтобыточность буфера глубины для вступления в силу.(Если я правильно прочитал) Все хорошо.

...