2010-09-25 55 views
2

我在OpenGL中使用JOGL。我正在通過顯示列表繪製所有內容。我想弄清楚如何指定材料。OpenGL:帶顯示列表的材質?

我一直在看這個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(); 

我該怎麼做顯示列表?沒有他們,我的應用程序太慢了。

回答

0

首先,您應該意識到,根據您的硬件,不能保證使用顯示列表會使速度的差異更小。目前有利的解決方案是使用頂點緩衝區對象。

就顯示列表而言,它非常簡單。您基本上只是將您的繪圖顯示到顯示列表中,然後當您想要顯示某些內容時,您會告訴它使用glCallList播放顯示列表。有些操作不能放入顯示列表中,但至少在內存服務的時候(儘管它可能不會 - 我現在有一段時間沒有使用列表),您可以將glMaterialfv放入顯示列表中。

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