3

画面に以下のグラフをスケッチしたい:

             |----|    sphere
             |----|
             / /
            / /
           / /         cylinder
          / /
         / / angle = 45
         | |
         | |
         | |           cylinder
         | |
         | |
         | |
 -----------           cylinder
 -----------

私の出力:

             / /
            / /
           / /         cylinder
          / /                        |-----|  sphere
         / / angle = 45              |-----|

上部、つまり球体を円柱でスケッチします。私のコードは以下のとおりです。何が間違っているのか見てください。

プリミティブが互いに接近していない理由を見つけようとしました。しかし、私は見つけることができませんでした。翻訳のパラメータを変更しようとしましたが、うまくいきません。助けてください

void object(void) {
    GLUquadraticObj *t = gluNewQuadratic();

    glTranslatef(-2.0f, -1.0f, 0.0f);
    gluCylinder(t, 0.1f, 0.1f, 0.3f, 32,32);
    gluSphere(t, 0.2f, 26, 13);

}

void display(void) {
    glLoadIdentity();
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glPushMatrix();
    object();
    glPopMAtrix();
    glPopMatrix();
    glutSwapBuffers();
    glFlush();        
}

void reshape(int w, int h) {
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0f, w/h, 1.0, 500.0f);
    glLoadIdentity();
}
4

1 に答える 1

0

gluCylinder と gluSphere への呼び出しの間に変換する必要があります。現在のコードでは、それらは両方とも同じ変換を行います。つまり、同じ位置/方向になります。試す:

gluCylinder ( t, 0.1f, 0.1f, 0.3f, 32,32);
glTranslatef ( -2.0f, -1.0f, 0.0f );
gluSphere ( t, 0.2f, 26, 13 ) ;

また、PushMatrix() を呼び出すよりも PopMatrix() を呼び出す方が多いです。

于 2012-11-22T19:10:54.807 に答える