2013-03-02 3 views
0

У меня есть простой проект studyng, представляющий собой систему космических звезд. У меня есть звезда и несколько планет с лунами, вращающимися вокруг звезды. Я использую буфер глубины, но планеты всегда впереди звезды, даже если планета должна быть затенена звездой. Что может быть причиной проблемы?Буфер глубины цвета OpenGL

void drawPlanet(float orbitRadius, float planetRadius, float daysInYear, float hoursInDay){ 
    static float year = 0; 
    static float days = 0; 
    static float hours = 0; 
    glPushMatrix(); 
    glRotatef(year, 0, 1, 0); 
    glTranslatef(orbitRadius, 0 ,0); 
    glRotatef(days, 1, 2, 0); 
    glutWireSphere(planetRadius, 20, 16); 
    drawLuna(0.3, 0.1, 30, 15); 
    glPopMatrix(); 
    hours++; 
    days = hours/hoursInDay; 
    year=days/daysInYear; 
} 

void display(void){ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glLoadIdentity(); 
    gluLookAt(0,0,5, 0, 0, 0, 0 ,1, 0); 

    glColor3f(1.0, 0.647059, 0.00); 
    glutSolidSphere(0.5, 20, 16); 

    glColor3b(197, 96, 63); 
    drawPlanet(2, 0.2, 50, 12); 
    drawPlanet(1, 0.15, 30, 15); 

    glFlush(); 
} 

int main(int argc, char** argv) 
{ 
    .... 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); 
    glEnable(GL_DEPTH_TEST); 
    .... 

} 

ответ

3

Ваш вызов glEnable(GL_DEPTH_TEST) не имеет никакого эффекта, если нет контекста OpenGL. GLUT создает контекст OpenGL только после вызова glutCreateWindow.

Как правило, вы не должны звонить glEnable вне отображения. Вам также необходимо очистить буфер глубины, поэтому сделайте это

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
Смежные вопросы