2013-03-02 2 views
0

저는 우주 스타의 시스템을 나타내는 간단한 studyng 프로젝트를 가지고 있습니다. 나는 별 주위를 돌고있는 달과 함께 여러 행성을 가지고있다. 나는 깊이 버퍼를 사용하고 있지만 행성이 별에 의해 가려 져야한다고해도 행성은 항상 별 앞에 있습니다. 문제의 이유는 무엇입니까? 더는 OpenGL 컨텍스트 존재하지 않는 경우는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)에 대한 귀하의 호출은 아무런 효과가 없습니다. GLUT는 glutCreateWindow이 호출 된 후에 만 ​​OpenGL 컨텍스트를 생성합니다.

일반적으로 표시 기능 외부에서 glEnable을 호출하면 안됩니다. 깊이 버퍼를 지워야하므로

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);