OpenGL:具有显示列表的材料?

时间:2010-09-25 15:35:22

标签: java opengl graphics jogl

我在OpenGL中使用JOGL。我正在通过显示列表绘制所有内容。我正在试图找出如何指定材料。

我一直在看这个documentation。以下内容非常简单:

glPushMatrix();
    glTranslatef (-1.25, 3.0, 0.0);
    glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
    glMaterialfv(GL_FRONT, GL_SHININESS, low_shininess);
    glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
    auxSolidSphere();
glPopMatrix();

如何使用显示列表执行此操作?没有它们,我的应用程序太慢了。

2 个答案:

答案 0 :(得分:1)

glMaterial来电置于您的显示列表中。

int displayList = glGenLists(1);
glNewList(displayList, GL_COMPILE);
FloatBuffer ambient = BufferUtils.createFloatBuffer(4);
ambient.put(1.0f); // red
ambient.put(0.0f); // green
ambient.put(0.5f); // blue
ambient.put(1.0f); // alpha
ambient.flip(); // now OpenGL can read the buffer
glMaterial(GL_FRONT, GL_AMBIENT, ambient);
// put other material properties here
// put glVertex/glColor calls here
glEndList();

答案 1 :(得分:0)

首先,您应该意识到,根据您的硬件,无法保证使用显示列表会在速度上产生轻微的差异。目前最受欢迎的解决方案是使用顶点缓冲对象。

就显示列表而言,它非常简单。您基本上只是将绘图显示在显示列表中,然后当您想要显示某些内容时,告诉它使用glCallList播放显示列表。有一些操作你不能放入显示列表,但至少如果内存服务(虽然它可能没有 - 我暂时没有使用列表)你可以将glMaterialfv放入显示列表很好。