標籤:
OpenGL顯示列表
把對象描述成一個命名的語句序列(或任何其他的命令集)並儲存起來既方便又高效。在OpenGL中使用稱為顯示表(display list)的結構可以做到這一點。一旦建立了顯示表,就可以用不同的顯示操作來多次引用該表。在網格中,描述圖形的顯示表存放在伺服器中,以避免每次顯示情境時都要傳送表中的命令。我們可以為以後的執行來建立並儲存顯示表,或指定表中的命令立即執行。顯示表對層次式建模特別有用,因為一個複雜的對象可以用一組簡單的對象來描述。
建立和命名OpenGL顯示表
使用glNewList/glEndList函數對包圍一組OpenGL命令就可形成顯示表。例如:
glNewList (listID, listMode);...glEndList ();
該結構用賦予參數
listID的正整數作為表名來形成一個顯示表。參數listMode可賦以OpenGL符號常量
GL_COMPILE或
GL_COMPILE_AND_EXECUTE之一。如果希望為以後執行而儲存該表,則使用
GL_COMPILE。否則,放人表中的命令立即執行,但仍然可以在以後再執行它。
顯示表建立後,立即對包含如座標位置和顏色分量等參數的表示進行賦值計算,從而使表中僅儲存參數的值。對這些參數的任何後繼修改都不起作用。因為不能修改顯示表的值,所以在顯示表中不能包含如頂點表指標等OpenGL命令。
我們可以建立任意多的顯示表並通過調用一個標識來執行特定的顯示表。一個顯示表還可以嵌套在另一個顯示表內。但如果一個顯示表被賦予一個已經使用的標識,則它取代原來的顯示表內容。因此,為了避免因故重用標識而造成顯示表的丟失,可以讓OpenGL產生一個標識:
listID = glGenLists (1);
該語句將一個未使用的正整數標識賦給變數listID。如果將g1GenLists中的變數由1改成另外一個正整數,則得到一個未使用的顯示表標識段。例如,假如引用g1GenLists (6),則保留6個連續正整數並將其中第一個賦給變數
listID。如果有錯或系統不能產生所要數量的連續整數,則返回0。因此,在使用從g1GenLists子程式獲得的標識之前要先檢查它是否為0。
儘管使用g1GenList可產生未使用的標識,我們還是可以單獨向系統查詢指定整數值是否已用做表名。實現該功能的函數是
glIsList (listID);
如果返回值GL_TRUE,則listID中的值已經用做某顯示表的名字。如果該整數尚未被使用,gtIsList函數則返回值
GL_FALSE。
電腦圖形學(二)輸出圖元_18_顯示列表_1_建立和命名OpenGL顯示表