版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2021-12-912.6 OpenGL圖形(txng)軟件包OpenGL的主要功能OpenGL的繪制(huzh)流程OpenGL的基本語法OpenGL的程序?qū)嵗?頁/共51頁第一頁,共52頁。2021-12-92OpenGL圖形(txng)軟件包p OpenGL是SGI(Silicon Graphics Inc.)公司對IRIS GL進行(jnxng)改進,擴展可移植性,形成的一個跨平臺開放式圖形編程接口。p 目前,OpenGL標準由1992年成立的獨立財團OpenGL Architecture Review Board(ARB)以投票方式產(chǎn)生,并制成規(guī)范文檔公布。第2頁/共51頁第二頁,
2、共52頁。2021-12-93OpenGL的主要(zhyo)功能模型繪制模型觀察顏色模式光照應(yīng)用圖像效果增強位圖和圖像處理紋理映射(yngsh)實時動畫交互技術(shù)第3頁/共51頁第三頁,共52頁。2021-12-94OpenGL的繪制(huzh)流程工作方式一個完整的窗口(chungku)系統(tǒng)的OpenGL圖形處理系統(tǒng)的結(jié)構(gòu)為:最底層為圖形硬件,第二層為操作系統(tǒng),第三層為窗口(chungku)系統(tǒng),第四層為OpenGL,最上面的層為應(yīng)用軟件。圖2.34 OpenGL圖形處理系統(tǒng)在計算機系統(tǒng)中的層次結(jié)構(gòu)第4頁/共51頁第四頁,共52頁。2021-12-95OpenGL的繪制(huzh)流程流水線圖
3、2.35 一條簡化的OpenGL繪制流水線包括命令、頂點數(shù)據(jù)(shj)和紋理等數(shù)據(jù)(shj)的OpenGL命令將放在命令緩沖區(qū)中,對幾何頂點數(shù)據(jù)(shj)進行必要的變換、光照計算并進行投影后進入光柵化流程,根據(jù)幾何形狀、顏色及紋理數(shù)據(jù)(shj)生成圖像的幀緩存地址和像素點值,結(jié)果置入幀緩沖存儲器中。注意:只有當緩沖區(qū)被清空時,緩沖區(qū)中的命令和數(shù)據(jù)才會傳遞給流水線的下一個階段,OpenGL命令才會得到(d do)執(zhí)行。第5頁/共51頁第五頁,共52頁。2021-12-96OpenGL的基本(jbn)語法相關(guān)庫OpenGL核心庫:gl 115個函數(shù)(hnsh)OpenGL實用程序庫: glu 43
4、個函數(shù)(hnsh)OpenGL編程輔助庫:aux 31個函數(shù)(hnsh)OpenGL實用程序工具包(OpenGL utility toolkit,GLUT):glut 30多個函數(shù)(hnsh)Windows專用庫:wgl 6個函數(shù)(hnsh)第6頁/共51頁第六頁,共52頁。2021-12-97OpenGL的基本語法命名(mng mng)規(guī)則 OpenGL函數(shù)都遵循一個命名約定,即采用以下格式: 例如函數(shù)glColor3f(),gl表示(biosh)這個函數(shù)來自庫gl.h,根命令Color表示(biosh)該函數(shù)用于顏色設(shè)定,3f表示(biosh)這個函數(shù)采用了三個浮點數(shù)參數(shù)。 符號常量的表示
5、(biosh):GL開頭,下劃線(_)分開,大寫。 例如:GL_RGB,GL_POLYGON等第7頁/共51頁第七頁,共52頁。2021-12-98OpenGL的基本(jbn)語法數(shù)據(jù)類型OpenGL數(shù)據(jù)類型數(shù)據(jù)類型內(nèi)部表示法內(nèi)部表示法定義為定義為C類型類型C字面值后綴字面值后綴GLbyte8位整數(shù)signed charBGLshort16位整數(shù)shortSGLint,GLsizei32位整數(shù)longLGLfloat,GLclampf32位浮點數(shù)floatFGLdouble,GLclampd64位浮點數(shù)doubleDGLubyte,GLboolean8位無符號整數(shù)unsigned charUb
6、GLshort16位無符號整數(shù)unsigned shortUsGLuint,GLenum,GLbitfield32位無符號整數(shù)unsigned longUi表2.2 OpenGL的數(shù)據(jù)類型第8頁/共51頁第八頁,共52頁。2021-12-99OpenGL程序(chngx)實例頭文件包含利用OpenGL實現(xiàn)圖形繪制,首先要引入OpenGL核心(hxn)庫以及其他需要使用的庫的頭文件。glut保證了gl.h和glu.h被正確包含。 #include #include 第9頁/共51頁第九頁,共52頁。2021-12-910OpenGL程序?qū)嵗?shl)窗口管理初始化(glutInit )創(chuàng)建窗口(
7、glutCreateWindow)設(shè)定窗口的顯示模式(glutInitDisplayMode)指定窗口的位置和大?。╣lutInitWindowPosition和glutInitWindowSize )指定窗口的顯示內(nèi)容(nirng)函數(shù)(glutDisplayFunc)運行框架(glutMainLoop)第10頁/共51頁第十頁,共52頁。2021-12-911OpenGL程序(chngx)實例繪制圖形指定窗口背景色( glClearColor)顏色管理(gunl),使用RGB顏色模型。一種顏色用紅、綠、藍三種顏色成分混合而成,每種顏色成分使用0.0到1.0之間的任意有效浮點數(shù)來表示顏色值(
8、見下頁)。第11頁/共51頁第十一頁,共52頁。2021-12-912OpenGL程序?qū)嵗L制(huzh)圖形混合色紅色成分(R)綠色成分(G)藍色成分(B)黑0.00.00.0紅1.00.00.0綠0.01.00.0黃1.01.00.0藍0.00.01.0紫1.00.01.0青0.01.01.0深灰0.250.250.25淺灰0.750.750.75棕0.600.400.12南瓜橙0.980.6250.12粉紅0.980.040.70紫紅0.600.400.70白1.01.01.0表2.2 OpenGL的一些(yxi)常用混合色第12頁/共51頁第十二頁,共52頁。2021-12-913Op
9、enGL程序?qū)嵗L制(huzh)圖形刷新窗口的緩沖區(qū) glClear(GL_COLOR_BUFFER_BIT);設(shè)定投影參數(shù)(將三維圖形投影到顯示(xinsh)窗口) glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0,200.0,0.0,150.0);繪制圖形 glRectf(50.0f, 100.0f, 150.0f, 50.0f);第13頁/共51頁第十三頁,共52頁。2021-12-914第三章第14頁/共51頁第十四頁,共52頁。2021-12-9153.4 OpenGL3.4 OpenGL實現(xiàn)實現(xiàn)(shxin)(shxin)橡皮筋橡皮筋技術(shù)技術(shù)橡
10、皮筋技術(shù)的實現(xiàn)方法利用顏色(yns)的異或操作,對原有圖形并不是擦除,而是再繪制一條同樣的直線段并與原圖形進行異或操作,此時原圖形會從屏幕上消失;利用雙緩存技術(shù),繪制圖形時分別繪制到兩個緩存,交替顯示。第15頁/共51頁第十五頁,共52頁。2021-12-916OpenGLOpenGL實現(xiàn)實現(xiàn)(shxin)(shxin)橡皮筋技術(shù)橡皮筋技術(shù)鼠標實現(xiàn)鼠標響應(yīng)函數(shù) glutMouseFunc鼠標移動相應(yīng)(xingyng)函數(shù) glutMotionFunc glutPassiveMotionFunc第16頁/共51頁第十六頁,共52頁。2021-12-917鍵盤實現(xiàn)(shxin)鍵盤相應(yīng)函數(shù) glu
11、tKeyboardFuncOpenGL實現(xiàn)(shxin)橡皮筋技術(shù)第17頁/共51頁第十七頁,共52頁。2021-12-9183.5 OpenGL3.5 OpenGL實現(xiàn)實現(xiàn)(shxin)(shxin)拾取操拾取操作作 設(shè)置拾取緩沖區(qū) void glSelectBuffer(GLsizei n,GLunint *buff); 進入(jnr)選擇模式 GLint glRenderMode(GLenum mode);第18頁/共51頁第十八頁,共52頁。2021-12-91919OpenGLOpenGL實現(xiàn)實現(xiàn)(shxin)(shxin)拾取操作拾取操作名字堆棧(duzhn)操作初始化名字堆棧(d
12、uzhn)(glInitNames)將一個名字壓入堆棧(duzhn)(glPushName)替換名字堆棧(duzhn)的棧頂元素(glLoadName)將棧頂元素彈出(glPopName)第19頁/共51頁第十九頁,共52頁。2021-12-92020設(shè)置合適的變換過程 gluPickMatrix(xPick,yPick,widthPick, heightPick,*vp);為每個圖元分配名字并繪制切換(qi hun)回渲染模式分析選擇緩沖區(qū)中的數(shù)據(jù)OpenGL實現(xiàn)拾取(shq)操作第20頁/共51頁第二十頁,共52頁。2021-12-9213.6 OpenGL3.6 OpenGL中的菜單中的
13、菜單(ci dn)(ci dn)功能功能菜單注冊函數(shù) glutCreateMenu(ProcessMenu);在菜單中加入菜單項 void glutAddMenuEntry(char *name, GLint value);將菜單與某個鼠標按鍵(n jin)關(guān)聯(lián) void glutAttachMenu(button);第21頁/共51頁第二十一頁,共52頁。2021-12-922第四章第22頁/共51頁第二十二頁,共52頁。2021-12-923OpenGLOpenGL中層次模型的實現(xiàn)中層次模型的實現(xiàn)(shxin)(shxin)o 顯示列表的創(chuàng)建(chungjin)o glNewList( l
14、istID, listMode );o glutSolidCube(2.0);oo glEndList();o 顯示列表的執(zhí)行o void glListBase(GLuint offsetValue);第23頁/共51頁第二十三頁,共52頁。2021-12-924o 多級顯示列表o OpenGL支持(zhch)創(chuàng)建多級顯示列表,即在glNewList和glEndLsit函數(shù)對之間允許調(diào)用glCallList函數(shù)來執(zhí)行其他顯示列表。o 顯示列表的刪除o void glDeleteLists(GLuint listID, GLsizei range);OpenGL中層次模型的實現(xiàn)(shxin)第2
15、4頁/共51頁第二十四頁,共52頁。2021-12-92525GLUT庫中的多面體函數(shù)(hnsh)OpenGL中的實體模型函數(shù)(hnsh)函數(shù)函數(shù)說明說明glutSolidTetrahedron( )glutWireTetrahedron( )繪制中心位于世界坐標系原點的實心四面體和線框四面體,四面繪制中心位于世界坐標系原點的實心四面體和線框四面體,四面體的半徑為體的半徑為 。glutSolidCube(size)glutWireCube(size)繪制中心位于世界坐標系原點的實心立方體和線框立方體,立方繪制中心位于世界坐標系原點的實心立方體和線框立方體,立方體的半徑為體的半徑為size,si
16、ze是一個雙精度浮點值。是一個雙精度浮點值。glutSolidOctahedron ( )glutWireOctahedron ( )繪制中心位于世界坐標系原點的實心八面體和線框八面體,八面繪制中心位于世界坐標系原點的實心八面體和線框八面體,八面體的半徑為體的半徑為1.0。glutSolidDodecahedron( )glutWireDodecahedron( )繪制中心位于世界坐標系原點的實心繪制中心位于世界坐標系原點的實心12面體和線框面體和線框12面體,面體,12面面體的半徑為體的半徑為 。glutSolidIcosahedron( )glutWireIcosahedron( )繪制中
17、心位于世界坐標系原點的實心繪制中心位于世界坐標系原點的實心20面體和線框面體和線框20面體,面體,20面面體的半徑為體的半徑為1.0。表4.1 GLUT生成規(guī)則(guz)多面體的函數(shù)第25頁/共51頁第二十五頁,共52頁。2021-12-92626GLUT庫中的二、三次曲面繪制實體(sht)或線框球面 void glutSolidSphere/glutWireSphere (GLdouble radius, GLint slices, GLint stacks);繪制實體(sht)或線框圓錐面 void glutSolidCone/glutWireCone (GLdouble radius,
18、GLdouble height, GLint slices, GLint stacks);OpenGL中的實體模型函數(shù)(hnsh)第26頁/共51頁第二十六頁,共52頁。2021-12-92727繪制(huzh)實體或線框圓環(huán) void glutSolidTorus/ glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint slices,GLint stacks);繪制(huzh)實體或線框茶壺 void glutSolidTeapot/glutWireTeapot (GLdouble size);OpenGL中的實體模型
19、函數(shù)(hnsh)第27頁/共51頁第二十七頁,共52頁。2021-12-92828GLU二次曲面函數(shù)定義(dngy)一個二次曲面 GLUquadricObj *sphere;激活二次曲面繪制器 sphere = gluNewQuadric( );指定二次曲面的繪制方式 gluQuadricDrawStyle(sphere, GLU_LINE); OpenGL中的實體模型函數(shù)(hnsh)第28頁/共51頁第二十八頁,共52頁。2021-12-92929 繪制(huzh)二次曲面gluSphere(sphere, radius, slices, stacks);gluCylinder(sphere
20、,baseRadius,topRadius, height, slices, stacks);gluDisk(sphere,innerRadius,outerRadius, slices, stacks); OpenGL中的實體模型函數(shù)(hnsh)第29頁/共51頁第二十九頁,共52頁。2021-12-9304.3 非規(guī)則非規(guī)則(guz)對象的表示對象的表示 分形幾何分形幾何 形狀語法形狀語法 基于分數(shù)基于分數(shù)(fnsh)維理論的隨機模型維理論的隨機模型 基于物理的模型基于物理的模型 粒子系統(tǒng)模型粒子系統(tǒng)模型 數(shù)據(jù)場可視化數(shù)據(jù)場可視化第30頁/共51頁第三十頁,共52頁。2021-12-931
21、OpenGLOpenGL中層次模型的實現(xiàn)中層次模型的實現(xiàn)(shxin)(shxin)o 顯示(xinsh)列表的創(chuàng)建o glNewList( listID, listMode );o glutSolidCube(2.0);oo glEndList();o 顯示(xinsh)列表的執(zhí)行o void glListBase(GLuint offsetValue);第31頁/共51頁第三十一頁,共52頁。2021-12-932o 多級顯示(xinsh)列表o OpenGL支持創(chuàng)建多級顯示(xinsh)列表,即在glNewList和glEndLsit函數(shù)對之間允許調(diào)用glCallList函數(shù)來執(zhí)行其他顯
22、示(xinsh)列表。o 顯示(xinsh)列表的刪除o void glDeleteLists(GLuint listID, GLsizei range);OpenGL中層次模型的實現(xiàn)(shxin)第32頁/共51頁第三十二頁,共52頁。2021-12-933第五章第33頁/共51頁第三十三頁,共52頁。2021-12-9345.8 在OpenGL中繪圖(hu t)p點的繪制p直線(zhxin)的繪制p多邊形面的繪制pOpenGL中的字符函數(shù)pOpenGL中的反走樣第34頁/共51頁第三十四頁,共52頁。2021-12-935點的繪制(huzh)p點的繪制p glBegin(GL_POINTS
23、);p glVertex3f(0.0f, 0.0f, 0.0f);p glVertex3f(10.0f, 0.0f, 0.0f);p glEnd();p點的屬性(shxng)(大?。﹑ void glPointSize(GLfloat size);第35頁/共51頁第三十五頁,共52頁。2021-12-936(a)GL_LINES畫線模式(msh) (b)GL_LINE_STRIP畫線模式(msh) (c)GL_LINE_LOOP畫線模式(msh)圖5-57 OpenGL畫線模式(msh)直線(zhxin)的繪制p直線的繪制(huzh)模式pGL_LINESpGL_LINE_STRIPpGL_
24、LINE_LOOP第36頁/共51頁第三十六頁,共52頁。2021-12-937直線(zhxin)的繪制p直線(zhxin)的屬性p線寬p void glLineWidth(GLfloat width)p線型p glEnable(GL_LINE_STIPPLE);p glLineStipple(GLint factor,GLushort pattern);第37頁/共51頁第三十七頁,共52頁。2021-12-938直線(zhxin)的繪制圖5-58 畫線模式用于構(gòu)造(guzo)線段第38頁/共51頁第三十八頁,共52頁。2021-12-939多邊形面的繪制(huzh)p三角形面的繪制(huz
25、h)pGL_TRIANGLESpGL_TRIANGLE_STRIPpGL_TRIANGLE_FANp四邊形面的繪制(huzh)pGL_QUADSpGL_QUADS_STRIPp多邊形面的繪制(huzh)(GL_POLYGON)第39頁/共51頁第三十九頁,共52頁。2021-12-940多邊形面的繪制(huzh)p多邊形面的繪制規(guī)則p所有多邊形都必須是平面的。p多邊形的邊緣決不能相交,而且(r qi)多邊形必須是凸的。p解決:對于非凸多邊形,可以把它分割成幾個凸多邊形(通常是三角形),再將它繪制出來。第40頁/共51頁第四十頁,共52頁。2021-12-941多邊形面的繪制(huzh)p問題:
26、輪廓圖形狀態(tài)會看到組成大表面的所有小三角形。處理OpenGL提供了一個(y )特殊標記來處理這些邊緣,稱為邊緣標記。p glEdgeFlag(True)p glEdgeFlag(False)41第41頁/共51頁第四十一頁,共52頁。2021-12-942多邊形面的屬性(shxng)p多邊形面的正反屬性(shxng)(繞法)p 指定頂點時順序和方向的組合稱為“繞法”。繞法是任何多邊形圖元的一個重要特性。一般默認情況下,OpenGL認為逆時針繞法的多邊形是正對著的。 p glFrontFace(GL_CW);第42頁/共51頁第四十二頁,共52頁。2021-12-943多邊形面的屬性(shxng
27、)p多邊形面的顏色pglShadeModel(GL_FLAT) 用指定多邊形最后一個頂點時的當前顏色作為填充多邊形的純色,唯一例外是GL_POLYGON圖元,它采用的是第一個頂點的顏色。p glShadeModel(GL_SMOOTH) 從各個頂點給三角形投上光滑(gung hu)的陰影,為各個頂點指定的顏色之間進行插值。第43頁/共51頁第四十三頁,共52頁。2021-12-944多邊形面的屬性(shxng)p多邊形面的顯示模式p glPolygonMode(GLenum face,GLenum mode);p參數(shù)face用于指定多邊形的哪一個(y )面受到模式改變的影響。p參數(shù)mode用于
28、指定新的繪圖模式。44第44頁/共51頁第四十四頁,共52頁。2021-12-945多邊形面的屬性(shxng)p多邊形面的填充p 多邊形面既可以(ky)用純色填充,也可以(ky)用3232的模板位圖來填充。p void glPolygonStipple(const GLubyte *mask); glEnable(GL_POLYGON_STIPPLE);45第45頁/共51頁第四十五頁,共52頁。2021-12-946多邊形面的屬性(shxng)p多邊形面的法向量p法向量是垂直于面的方向上點的向量,它確定了幾何(j h)對象在空間中的方向。p在OpenGL中,可以為每個頂點指定法向量。p v
29、oid glNormal3bsidf (TYPE nx, TYPE ny, TYPE nz);p void glNormal3bsidfv (const TYPE* v);46第46頁/共51頁第四十六頁,共52頁。2021-12-947OpenGL中的字符(z f)函數(shù)pGLUT位圖字符(z f)p void glutBitmapCharacter(void *font, int character);pGLUT矢量字符(z f)p void glutStrokeCharacter(void *font, int character);47第47頁/共51頁第四十七頁,共52頁。2021-12-948OpenGL中的反走樣(zu yng)p啟用反走樣(zu yng)p glEnable(primitiveType);p啟用OpenGL顏色混和并指定顏色混合函數(shù)p glEnable(GL_BLEND);p glBlendFunc(GL_SCR_ALPHA,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版八年級物理上冊《第五章透鏡及其應(yīng)用》章末測試卷含答案
- 高一化學達標訓練:第二單元食品中的有機化合物
- 2024屆隨州市重點中學高考臨考沖刺化學試卷含解析
- 吉林省吉林市普通中學2024-2025學年高三上學期二模試題 數(shù)學
- 2024高中地理第三章自然地理環(huán)境的整體性與差異性章末知識整合學案湘教版必修1
- 2024高中物理第四章電磁感應(yīng)6互感和自感達標作業(yè)含解析新人教版選修3-2
- 2024高考地理一輪復習專練95旅游地理含解析新人教版
- 2024高考地理一輪復習專練61森林濕地的開發(fā)和保護含解析新人教版
- 2025高考數(shù)學考二輪專題過關(guān)檢測六 解析幾何-專項訓練【含答案】
- 鄉(xiāng)村建設(shè)工程施工組織設(shè)計
- 兒童常見呼吸系統(tǒng)疾病免疫調(diào)節(jié)劑合理使用專家共識2024(全文)
- 《華潤集團全面預算管理案例研究》
- 2024-2025高考英語全國卷分類匯編之完型填空(含答案及解析)
- 2024年露天煤礦地質(zhì)勘查服務(wù)協(xié)議版
- 2024年資格考試-WSET二級認證考試近5年真題附答案
- 2024屆新高考數(shù)學大題訓練:數(shù)列(30題)(解析版)
- 四年級數(shù)學下冊計算題(每日一練13份)
- 虛擬現(xiàn)實技術(shù)應(yīng)用
- 項目風險記錄及跟蹤表
- 50以內(nèi)加減法口算題卡(1000道打印版)每日100道
- 《生物發(fā)酵行業(yè)智能制造第2部分:生物反應(yīng)器》
評論
0/150
提交評論