0

いくつかの宇宙星のシステムを表す簡単な研究プロジェクトがあります。私は星と、星の周りを回転する月を持ついくつかの惑星を持っています。私は深度バッファを使用していますが、惑星が星の影になっている場合でも、惑星は常に星の前にあります。問題の原因は何ですか?

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

}
4

1 に答える 1

3

glEnable(GL_DEPTH_TEST)OpenGL コンテキストがない場合、への呼び出しは効果がありません。GLUT は、glutCreateWindow呼び出された後にのみ OpenGL コンテキストを作成します。

原則としてglEnable、表示関数の外で呼び出すべきではありません。深度バッファもクリアする必要があるため、これを作成します

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
于 2013-03-02T19:35:31.493 に答える