0

表示リストを作成するとき:

GLuint tampilkan()
{
    GLuint id = 0;

id = glGenLists(1);

glNewList(id, GL_COMPILE);

//bench
glPushMatrix();
glScalef(1.5,0.2,1.5);
GambarKu();
drawBox();
glPopMatrix();


//backbench
glPushMatrix();
glTranslatef(0.0f,2.5f,-1.3f);
glScalef(1.5,1.5,0.2);
GambarKu2();
drawBox();
glPopMatrix();

.... another foot using the same pattern push-pop matrix 

glEndList();    //=========================================================
return id;

}`

次に、「表示」関数でその表示リストを呼び出します。

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -7.0f);
glRotatef(yrot, 0.0f, 1.0f, 0.0f);
glCallList(tampilkan());
glPopMatrix();

glPushMatrix();
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(yrot, 0.0f, 1.0f, 0.0f);
glCallList(tampilkan());
glPopMatrix();


glutSwapBuffers();

glFlush();

なぜベンチが1つしか表示されないのですか?(つまり、表示リストの 1 つを表示するだけです)

移動 Z ポイントが -5.0f と -7.0f の 2 台のベンチである必要があります。

そして、最初のコールリスト glTranslatef(0.0f,0.0f,-8.0f) を変更しても、出力は何も変更されません。しかし、2 番目のコールリストをベンチで glTranslatef(0.0f,0.0f,-8.0f) に変更すると、出力ベンチはその位置を -8.0f に変換しました (-5.0f 以前より)。

私が得たのは、このコードは 2 番目のディスプレイ リスト (Z ポイントが -5.0f) のみを表示し、最初のディスプレイ リストを無視することだけです。

誰でもこれで私を助けることができますか?私は何を間違えましたか?

4

1 に答える 1

0

これで問題が解決するかどうかはわかりませんが、描画するたびに新しい表示リストを作成する必要はありません。特に二度同じではありません。

プログラムを初期化するときに、表示リストを一度作成し、その名前を保存します ( id)。レンダリングするときglCallList(id)は、あなたのケースでは , を 2 回呼び出すだけです。

于 2013-07-23T18:16:15.757 に答える