无法调用多个显示列表glCallList()

时间:2013-07-21 18:08:05

标签: opengl displaylist

当我创建一个显示列表时:

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

当我改变我的第一个calllist glTranslatef(0.0f,0.0f,-8.0f)时,它不会改变输出中的任何内容。 但是,当我将我的第二个calllist改为glTranslatef(0.0f,0.0f,-8.0f)替补时,输出工作台确实将其位置转换为-8.0f(比-5.0f之前更远)

我得到的是,此代码仅显示我的第二个显示列表(Z点为-5.0f)并忽略我的第一个显示列表。

任何人都可以帮我这个吗?我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不知道这是否能解决您的问题,但每次绘制时都不应该创建新的显示列表。特别是两倍不一样。

初始化程序时,您只需创建一次显示列表,并存储其名称(id)。渲染时,您只需拨打glCallList(id),两次就可以了。