2013-07-17 1 views
0

Я работаю над действительно простой версией, похожей на игру, но по какой-то причине OpenGL не проверяет глубину.Не удалось правильно проверить глубину теста

Вот соответствующий код:

//Render function: 
void display() { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 

    glTranslatef(2.5, 2.5, -5.0); 
    glColor3f(1.0, 0.5, 0.2); 

    glBegin(GL_QUADS); 
    int i, j, k; 
    for (i=0; i<4; i++) { 
     for (j=0; j<4; j++) { 
      for (k=0; k<4; k++) { 
       glPushMatrix(); 
       glTranslatef(-(float)i, -(float)j, -(float)k); 
       glutSolidSphere(0.2, 32, 32); 
       glPopMatrix(); 
      } 
     } 
    } 
    glEnd(); 

    glutSwapBuffers(); 
} 

//Set the initial state of OpenGL: 
void initGL() { 
    glEnable(GL_DEPTH); 
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 
    glEnable(GL_COLOR_MATERIAL); 
    glEnable(GL_CULL_FACE); 

    glClearColor(0.0, 0.0, 0.0, 1.0); 
} 

Убедился, чтобы включить это окно initilization:

glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); 

Вот ScreenCap:

The result of rendering this code.

Я попытался отключить функции освещения, но тогда трудно сказать, что в любом случае. Я попытался отключить отбраковку, ничего, кроме того, что сферы выдаются наизнанку, что заставляет меня думать, что, возможно, проблема в функции glutSolidSphere, а не в моем коде. Я использую OpenGL 2.3.

+0

Ваш 'GL_VERSION' является' 2.3'? В самом деле? – genpfault

ответ

4

Это называется

glEnable(GL_DEPTH_TEST); 

Не только GL_DEPTH