第七講 顯示例表
利用顯示列表,我們們可以減少重複的勞動。我們可以從例5中得到體會。
例5:繪製六個彩色的三角形,如圖六。
·void glNewList(GLuint list,GLenum mode)和glEndList(void)建立或替換一個顯示列表。list為列表名稱。mode指定編譯模式,本例為GL_COMPILE。 GL_COMPILE表示僅僅編譯。GL_COMPILE_AND_EXECUTE表示當命令被編譯到顯示列表時執行。顯示列表時一個預先儲存起來已被將 來執行的一組OpenGL命令,使用glNewList函式建立顯示列表,並將所有需要執行的命令按照命令發出的順序放置在顯示列表中,直到呼叫 glEndList函式時結束顯示列表。本例中所需要執行的命令為畫一個多邊形。
·void glCallList(GLuint list)執行一個顯示列表。引數list為所要執行的顯示列表的名字,型別為整形。本例中在不同的位置繪製了六個完全一樣的三角形。
例5:繪製六個彩色的三角形,如圖六。
#include <windows.h> #include <GL/glut.h> GLuint listName = 1; void myInit(void) { glClearColor(0.0,0.0,0.0,0.0);//設定背景為黑色 glNewList(listName,GL_COMPILE);//建立顯示列表 /*畫一個彩色的多邊形*/ glBegin(GL_POLYGON); glColor3f(1.0,0.0,0.0); glVertex2f(1.0,1.0); glColor3f(0.0,1.0,0.0); glVertex2f(2.0,2.0); glColor3f(0.0,0.0,1.0); glVertex2f(1.5,2.5); glTranslatef(0.5,-0.5,0.0);//座標轉換 glEnd(); glEndList();//結束顯示列表 glShadeModel(GL_SMOOTH); } void myDisplay(void) { GLuint i; glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); for(i = 0;i<6;i++) glCallList(listName); glFlush(); } void myReshape(GLsizei w,GLsizei h) { glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(-4.0,4.0,-4.0*(GLfloat)h/(GLfloat)w,4.0*(GLfloat)h/(GLfloat)w,-8.0,8.0); else glOrtho(-4.0,4.0*(GLfloat)w/(GLfloat)h,-4.0,4.0,-8.0,8.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(-4.0,0.0,-3.0); } int main(int argc,char ** argv) { /*初始化*/ glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(500,500); glutInitWindowPosition(100,200); /*建立視窗*/ glutCreateWindow("display list"); /*繪製與顯示*/ myInit(); glutReshapeFunc(myReshape); glutDisplayFunc(myDisplay); /*進入GLUT事件處理迴圈*/ glutMainLoop(); return(0); } |
·void glNewList(GLuint list,GLenum mode)和glEndList(void)建立或替換一個顯示列表。list為列表名稱。mode指定編譯模式,本例為GL_COMPILE。 GL_COMPILE表示僅僅編譯。GL_COMPILE_AND_EXECUTE表示當命令被編譯到顯示列表時執行。顯示列表時一個預先儲存起來已被將 來執行的一組OpenGL命令,使用glNewList函式建立顯示列表,並將所有需要執行的命令按照命令發出的順序放置在顯示列表中,直到呼叫 glEndList函式時結束顯示列表。本例中所需要執行的命令為畫一個多邊形。
·void glCallList(GLuint list)執行一個顯示列表。引數list為所要執行的顯示列表的名字,型別為整形。本例中在不同的位置繪製了六個完全一樣的三角形。
相關文章
- 設計模式第七講-責任鏈模式設計模式
- 水晶報表官方示例
- Halcon斑點分析官方示例講解
- React 教程第七篇 —— 表單React
- AntDesignBlazor示例——Modal表單Blazor
- 第七篇:兩個經典的檔案IO程式示例
- arraylist陣列元素插入及顯示示例陣列
- MySQL join連表查詢示例MySql
- Go優雅重啟Web server示例-講解版GoWebServer
- MySQL資料分析儲存引擎示例講解HKEAMySql儲存引擎
- ETL工具-nifi乾貨系列 第七講 處理器JoltTransformJSON(續)NifiORMJSON
- 表為多列為null的表之索引示例Null索引
- 微信小程式WXML頁面常用語法(講解+示例)微信小程式XML
- Spring @Conditional註解 詳細講解及示例Spring
- Java JDK Proxy和CGLib動態代理示例講解JavaJDKCGLib
- 氣泡排序法原理講解及PHP程式碼示例排序PHP
- 用wxPython開發GUI第一個示例講解PythonGUI
- WaitForSingleObject -- setevent 講解與程式設計示例AIObject程式設計
- Mysql系列第七講 玩轉select條件查詢,避免採坑MySql
- HanLP-停用詞表的使用示例HanLP
- 視覺SLAM十四講 第七講 視覺里程計1 3D-3D位姿求解 程式碼解析視覺SLAM3D
- Git應用詳解第七講:Git refspec與遠端分支的重要操作Git
- Spring系列第七講 自動注入(autowire)詳解,高手在於堅持!Spring
- 深入講解Flutter應用模板原始碼:計數器示例Flutter原始碼
- GBase XDM 資料庫ldapdelete命令講解和示例分析資料庫LDAdelete
- 【原創】面試官:講講mysql表設計要注意啥面試MySql
- mysql 跨表查詢、更新、刪除示例MySql
- 移動端報表JS開發示例JS
- 分割槽表及分割槽索引建立示例索引
- 第七講、Vue3.x 實現一個完整的toDoList(待辦事項)Vue
- 【計算講談社】第七講|AI 的價值探索:如何擴充商業邊界?AI
- Linux精講——分割槽表fstabLinux
- oracle的表空間quota詳講Oracle
- Devexpress 報表 顯示devExpress
- 將搜尋關鍵詞高亮顯示例項程式碼
- DataGridView顯示主從表示例及注意事項View
- Oracle 操作表結構基本語法及示例Oracle
- 建立ODBC連結表連SQL原始碼示例SQL原始碼