Невозможно вызвать несколько отображаемых списков glCallList()

когда я создаю список отображения:

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

почему там только одна скамья? (другими словами, просто показывая один из моих отображаемых списков)

должно быть 2 скамейки с переводом точки Z на -5.0f и -7.0f

и когда я меняю свой первый список вызовов glTranslatef(0.0f,0.0f,-8.0f), он ничего не меняет в выводе. Но когда я изменил свой второй список вызовов на glTranslatef(0.0f,0.0f,-8.0f) скамьи, выходная скамья перевела свою позицию на -8.0f (дальше, чем до -5.0f)

все, что я получаю, это то, что этот код показывает только мой второй список отображения (с точкой Z на -5.0f) и игнорирует мой первый список отображения.

Кто-нибудь может помочь мне с этим? что я сделал не так?


person Arvid Theodorus    schedule 21.07.2013    source источник
comment
Почему вы создаете и пропускаете два списка отображения в каждом кадре?   -  person genpfault    schedule 22.07.2013


Ответы (1)


Я не знаю, решит ли это вашу проблему, но вы не должны создавать новый список отображения каждый раз, когда рисуете его. Тем более не дважды одно и то же.

При инициализации вашей программы вы один раз создаете список отображения и сохраняете его имя (id). При рендеринге вы просто вызываете glCallList(id), дважды в вашем случае.

person Andreas Haferburg    schedule 23.07.2013