opengl的顯示列表
(一)簡介所謂顯示列表就是一組預選儲存起來的留待以後呼叫的函式語句。呼叫此顯示列表時就按次序執行其中函式。以前所有的函式呼叫可以稱之為立即方式(immediate
mode),現在我們將介紹顯示列表方式(display list)。
顯示列表可以優化程式執行效能。它被設計成命令的快取記憶體,而不是動態的資料庫快取。一旦建立列表,刪除前,則不能被修改,否則會帶來系統效率的降低。
顯示列表主要目的就是提高執行效率。例如任何乙個幾何變換的函式處於顯示列表中時,系統只保留最後的變換矩陣,這樣呼叫時,工作量比現由函式引數生成數學
模型,再矩陣變換效率顯然提高。一般來講顯示列表食用於:
一 矩陣操作 將最終變換矩陣儲存以提高效率
二 光柵點陣圖和圖象 編譯後的列表與高階的程式資料不同,將是匹配硬體實現的資料
三 光、材質和光照模型 省卻複雜的模型計算
四 紋理
五 多邊形的圖案填充模式
注意以下函式一般不用於顯示列表,作為用於傳遞引數或者返回數值的函式,則列表有可能在引數作用域外被呼叫,因此即使列表中有這些函式,實際系統也往往按
照立即方式完成,有時甚至會出錯。
gldeletelists() glisenable() glfeedbackbuffer() glislist()
glfinish() glpixelstore() glgenlists() glrendermode() glget*()
glselectbuffer()
(二)實現
建立列表(格式很類似glbegin()...glend())
void glnewlist(gluint list,glenum mode);
說明列表的開始,其後的函式存入列表直至結束標誌(見後)。
mode:
gl_compile 只編譯儲存gl_comile_and_execute 編譯儲存後,再立即執行一次
void glendlist(void)
列表結束
要呼叫時,只需使用
void glcalllist(gluint list);
就象呼叫子過程一樣簡單
/ 例如,你在某處定義:
再繪製函式中呼叫:
即可。
(三)管理顯示列表
上面的例子中我們指定樂使用1顯示列表,萬一這個索引已經被占用樂呢?
因此需要一套管理列表的工具。
void gluint glgenlist(glsize range);
系統生成range個相臨的未被占用的可用列表空間,返回其索引
若不能正常分配空間,返回0
void glboolean glislist(gluint list);
判斷列表是否已經被占用
void gldeletelists(gluint list,glsizei range);
刪除一組連續的顯示列表,從list開始,連續刪除range個。
說明:當以乙個已經存在的索引建立列表時,以前的舊列表被刪除。
乙個安全的建立可以如下:
listindex=glgenlists(1);
if(listindex!=0)
(四)多級顯示列表
顯示列表中可以呼叫另乙個顯示列表
例如:
已經建立顯示列表1 2 3
現在建立顯示列表4
glnewlist(4,gl_compile);
glbegin(gl_olygon);
glcalllist(1);
glcalllist(2);
glcalllist(3);
glend();
glendlist();
由於這部分內容沒有任何視覺上的新享受,所以就不給出新例子樂。
大家可以試試自己修改前面的程式,至少我沒看出太大差別,xixi。
OpenGL 顯示列表
原 文 lesson 12 display lists 譯 者 marhoo 這次我將教你如何使用顯示列表,顯示列表將加快程式的速度,而且可以減少 的長度。當你在製作遊戲裡的小行星場景時,每一層上至少需要兩個行星,你可以用opengl中的多邊形來構造每乙個行星。聰明點的做法是做乙個迴圈,每個迴圈畫出...
OpenGL 顯示列表
相關主題 頂點緩衝區物件 vbo 顯示列表是一組被儲存或編譯的用來以後執行的opengl命令的集合。當乙個顯示列表被建立以後,所有的頂點資料和畫素資料被複製到位於伺服器端的顯示列表記憶體中。這個過程只進行一次。當顯示列表準備好 被編譯完成 後,你可以重複使用它而不需要在每幀中重複地傳輸這些資料。顯示...
OpenGL採用顯示列表顯示文字完整範例
2011 05 23 16 01 07 分類 預設分類 標籤 opengl 舉報 字型大小大中小訂閱 一 顯示英文 opengl並沒有直接提供顯示文字的功能,並且,opengl也沒有自帶專門的字型檔。因此,要顯示文字,就必須依賴作業系統所提供的功能了。各種流行的圖形作業系統,例如 windows系統...