Java OpenGL:具有显示列表的材质?

Java OpenGL:具有显示列表的材质?,java,opengl,graphics,jogl,Java,Opengl,Graphics,Jogl,我正在使用JOGL和OpenGL。我正在通过显示列表绘制所有内容。我想知道如何指定材质 我一直在看这个。以下内容看起来非常简单: 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_SP

我正在使用JOGL和OpenGL。我正在通过显示列表绘制所有内容。我想知道如何指定材质

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

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

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

首先,你应该意识到,根据你的硬件,使用显示列表并不能保证速度会有微小的变化。目前最受欢迎的解决方案是使用顶点缓冲区对象


就使用显示列表而言,它非常简单。基本上,您只需对显示列表进行绘图,然后当您想要显示某个内容时,告诉它使用
glCallList
播放显示列表。有些操作无法放入显示列表中,但至少如果内存可用(尽管可能不可用——我有一段时间没有使用列表),您可以将
glMaterialfv
放入显示列表中。

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