版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第四章虛擬現(xiàn)實(shí)建模工具第四章虛擬現(xiàn)實(shí)建模工具1虛擬現(xiàn)實(shí)系統(tǒng)圖形程序設(shè)計(jì)接口OpenGL虛擬現(xiàn)實(shí)建模語言VRML虛擬現(xiàn)實(shí)建模工具3Dsmax
虛擬現(xiàn)實(shí)系統(tǒng)圖形程序設(shè)計(jì)接口2虛擬環(huán)境構(gòu)建主要是應(yīng)用三維圖形技術(shù),包括圖形的構(gòu)建圖形的顯示4.1虛擬現(xiàn)實(shí)系統(tǒng)圖形程序設(shè)計(jì)接口虛擬環(huán)境構(gòu)建主要是應(yīng)用三維圖形技術(shù),包括4.1虛擬現(xiàn)實(shí)系統(tǒng)圖3在虛擬現(xiàn)實(shí)系統(tǒng)中,模型是十分復(fù)雜的;顯示:軟件:3D圖形應(yīng)用程序硬件:3D圖形加速卡接口:三維圖形應(yīng)用程序接口(3DAPI)溝通3D圖形應(yīng)用程序和3D圖形加速卡在虛擬現(xiàn)實(shí)系統(tǒng)中,模型是十分復(fù)雜的;4三維圖形編程接口(3DAPI)多達(dá)50多種選擇大公司和在圖形應(yīng)用方面獲得廣泛認(rèn)可的公司提供的三維API引擎;OpenGLQuick-Draw3DDirect3D三維圖形編程接口(3DAPI)多達(dá)50多種5OpenGL:SGI優(yōu)點(diǎn):適用于跨平臺(tái)的應(yīng)用開發(fā),可運(yùn)行在Unix、WindowsXP、WindowsNT、及Mac平臺(tái)上缺點(diǎn):不能完成某些高級(jí)功能,如某些文件操作功能OpenGL:SGI6Quick-Draw3D(QD3D):Apple公司優(yōu)點(diǎn):跨平臺(tái)的應(yīng)用開發(fā),具有某些高級(jí)功能;是面向?qū)ο蟮膱D形系統(tǒng);Quick-Draw3D(QD3D):Apple公司7Direct3D:Microsoft1996年發(fā)布的三維API,是交互式媒體技術(shù)家族DirectX中的一員;具有某些高級(jí)功能;Direct3D:8為什么是OpenGL?(1)OpenGL:性能優(yōu)越,計(jì)算環(huán)境廣泛,個(gè)人計(jì)算機(jī)-工作站-超級(jí)計(jì)算機(jī);(2)虛擬環(huán)境平臺(tái)OpenInventor、WorldToolKit、MulitgenCreator\Vega是以O(shè)penGL為基礎(chǔ)開發(fā)的;為什么是OpenGL?(1)OpenGL:性能優(yōu)越,計(jì)算環(huán)境9(3)許多在計(jì)算機(jī)界具有領(lǐng)導(dǎo)地位的計(jì)算機(jī)公司紛紛采用OpenGL作為三維圖形應(yīng)用程序設(shè)計(jì)界面,OpenGL程序具有廣泛的移植性;(3)許多在計(jì)算機(jī)界具有領(lǐng)導(dǎo)地位的計(jì)算機(jī)公司紛紛采用Open104.1OpenGL簡介什么是OpenGLOpenGL的組成OpenGL的工作流程OpenGL的基本操作OpenGL程序的基本結(jié)構(gòu)4.1OpenGL簡介什么是OpenGL11一、什么是OpenGL?功能強(qiáng)大的圖形庫:可開發(fā)多種特殊視覺(如光照,紋理,透明,陰影)的三維圖形;軟硬件平臺(tái)無關(guān)的跨平臺(tái)三維圖形引擎,運(yùn)行于多種窗口系統(tǒng)之上;包含圖元生成、投影、光照、光柵化等圖形顯示過程所需的功能一、什么是OpenGL?功能強(qiáng)大的圖形庫:可開發(fā)多種特殊視覺12OpenGL的發(fā)展歷史:前身是由SGI公司為其圖形工作站開發(fā)的IRISGL,是一個(gè)工業(yè)標(biāo)準(zhǔn)的三維圖形軟件接口。向其他平臺(tái)移植時(shí),開發(fā)了OpenGL有GL的功能,而且是開放的,適用于多種硬件平臺(tái)及操作系統(tǒng),用戶可以創(chuàng)建出接近光線跟蹤的高質(zhì)量靜止或動(dòng)畫的三維彩色圖象,而且是要比光線跟蹤算法快一個(gè)數(shù)量級(jí)。OpenGL的發(fā)展歷史:13二、OpenGL的組成OpenGL庫包括115個(gè)基本函數(shù)函數(shù)以gl開頭例:glColor3f(),glTranslate3f().完成圖元的定義、幾何變換、投影等功能二、OpenGL的組成14OpenGL實(shí)用庫實(shí)用函數(shù)43個(gè)函數(shù)以glu開頭例:gluPerspective();完成更高層的圖形處理如曲線曲面的生成、圖象操作等OpenGL實(shí)用庫15OpenGL輔助庫包括函數(shù)31個(gè)函數(shù)以aux開頭例:auxInitWindow();主要用于窗口管理OpenGL輔助庫16主要特點(diǎn)OpenGL可以在網(wǎng)絡(luò)上工作,即客戶機(jī)/服務(wù)器型客戶機(jī):顯示圖形服務(wù)器:運(yùn)行圖形程序客戶機(jī)與服務(wù)器可以不同類型,但兩者服從相同的協(xié)議。OpenGL的硬件無關(guān)性——好的移植性主要特點(diǎn)OpenGL可以在網(wǎng)絡(luò)上工作,即客戶機(jī)/服務(wù)器型17三、OpenGL基本工作流程(1)根據(jù)基本圖形單元(點(diǎn),線,多邊形)建立景物模型,并對(duì)景物模型進(jìn)行數(shù)學(xué)描述。(2)在三維空間中放置景物模型,并設(shè)置視點(diǎn)。(3)計(jì)算模型中物體的顏色(直接定義或由光照及紋理間接給出)(4)光柵化,把模型數(shù)學(xué)描述和顏色信息轉(zhuǎn)換至屏幕上在上述過程中,可執(zhí)行消隱處理等操作三、OpenGL基本工作流程(1)根據(jù)基本圖形單元(點(diǎn),線,18四、OpenGL的基本操作圖元繪制圖元屬性O(shè)penGL變換(幾何變換、投影變換、裁剪變換、視口變換)OpenGL圖形的描繪四、OpenGL的基本操作圖元繪制191、圖元繪制圖元的表示點(diǎn):三維坐標(biāo)(x,y,z)齊次坐標(biāo)(x,y,z,1)線段:兩個(gè)端點(diǎn)多邊形:頂點(diǎn)序列矩形:左下角點(diǎn)、右上角點(diǎn)繪制圖元定義一個(gè)頂點(diǎn)voidglVertex{234}{sifd}[v](TYPEcoords);例:glVertex3f(1.0,1.0,1.0);1、圖元繪制圖元的表示例:glVertex3f(1.0,1.20繪制函數(shù)要在glBegin與glEnd之間調(diào)用。glBegin標(biāo)志幾何要素定義的開始,glEnd函數(shù)則標(biāo)志結(jié)束一個(gè)幾何要素的定義。函數(shù) voidglBegin(Glenummode);mode的值見下表。繪制函數(shù)要在glBegin與glEnd之間調(diào)用。21Mode的值解釋GL_POINTS一系列獨(dú)立的點(diǎn)GL_LINES每兩點(diǎn)相連成為線段GL_POLYGON簡單,凸多邊形的邊界GL_TRIANGLES三點(diǎn)相連成為一個(gè)三角形GL_QUADS四點(diǎn)相連成為一個(gè)四邊形GL_LINE_STRIP頂點(diǎn)相連成為一系列線段GL_LINE_LOOP頂點(diǎn)相連成為一系列線段,連接最后一點(diǎn)與第一點(diǎn)GL_TRIANGLE_STRIP相連的三角形帶GL_TRIANGLE_FAN相連的三角形扇形GL_QUAD_STRIP相連的四邊形帶Mode的值解釋GL_POINTS一系22允許在glBegin()與glEnd()之間調(diào)用的OpenGL命令
glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCallList(),glCallLists();等允許在glBegin()與glEnd()之間調(diào)用的OpenG232、圖元的屬性(1/5)顏色點(diǎn)大小(缺省值為1)voidglColor*();voidglIndex();voidglPointSize(GLfloatsize);2、圖元的屬性(1/5)顏色voidglColor*();24線段線寬
線型:連續(xù)線(缺省值)、點(diǎn)畫線等voidglLineWidth(GLfloatwidth);
voidglEnable(GL_LINE_STIPPLE);voidglLineStipple(GLintfactor,GLushortpattern);例: pattern factor 結(jié)果 0x00FF 1 0x00FF2 線段voidglLineWidth(GLfloatwid25圖元的屬性(2/5)多邊形繪制方式:頂點(diǎn)、邊界、填充
voidglPolygonMode(GLenumface,GLenummode); face: GL_FRONT_AND_BACK(缺省值) GL_FRONT GL_BACK mode: GL_POINT GL_LINE GL_FILL(缺省值)
圖元的屬性(2/5)voidglPolygonMode(G26圖元的屬性(3/5)前向面與后向面
背面剔除voidglFrontFace(GLenummode);mode: GL_CCW(缺省值) GL_CWvoidglCullFace(GLenummode); mode: GL_FRONT GL_BACK(缺省值) GL_FRONT_AND_BACK
圖元的屬性(3/5)前向面與后向面voidglFrontF27圖元的屬性(4/5)多邊形填充方式均勻填色方式位圖不透明方式位圖透明方式象素圖方式
voidglEnable(GL_POLYGON_STIPPLE);voidglPolygonStipple(constGlubyte*mask); mask: 位圖
圖元的屬性(4/5)多邊形填充方式voidglEnable28圖元的屬性(5/5)標(biāo)記多邊形邊界多邊形法向voidglEdgeFlag(GLbooleanflag);voidglNormal3*(TYPEnx,TYPEny,TYPEnz);voidglNormal3*v(constTYPE*v);圖元的屬性(5/5)標(biāo)記多邊形邊界voidglEdgeFl293、OpenGL的變換OpenGL對(duì)圖象的變換與照相機(jī)拍攝物體過程相似,分為四步:支起三角架,把照相機(jī)放在場景中—OpenGL的取景變換把要拍攝場景固定在拍攝物體上—OpenGL的模型變換選擇照相機(jī)鏡頭或調(diào)節(jié)焦距—OpenGL的投影變換確定照片的大小,可以放大照片的某一部分——OpenGL的視見區(qū)變換
三維空間中的物體就可以表示為二維的平面物體3、OpenGL的變換OpenGL對(duì)圖象的變換與照相機(jī)拍攝物30——幾何變換平移變換放縮變換旋轉(zhuǎn)變換viodglTranslate{fd}(TYPEdeltax,TYPEdeltay,TYPEdeltaz);voidglScale{fd}(TYPEsx,TYPEsy,TYPEsz);voidglRotate{fd}(TYPEangle,TYPEx,TYPEy,TYPEz);——幾何變換平移變換viodglTranslate{fd}31——投影變換確定一個(gè)視景體(ViewingVolume),作用有兩個(gè):確定物體投影到屏幕的方式,即是透視投影還是正交投影。確定從圖象上裁剪掉哪些物體或物體的某些部分。投影變換包括透視投影和正交投影——投影變換確定一個(gè)視景體(ViewingVolume),32—透視投影
—透視投影33—正射投影
—正射投影344、OpenGL圖形的描繪對(duì)整個(gè)三維模型進(jìn)行繪制,得到三維景象,包括:顏色模式的指定OpenGL提供了兩種顏色模式:RGB模式和顏色索引模式;光照處理光照模型明暗處理材質(zhì)材質(zhì)顏色材質(zhì)定義4、OpenGL圖形的描繪對(duì)整個(gè)三維模型進(jìn)行繪制,得到三維景35紋理貼圖定義紋理控制濾波說明映射方式繪制場景,給出頂點(diǎn)的紋理坐標(biāo)和幾何坐標(biāo)特殊效果的實(shí)現(xiàn)融合:將兩種顏色分量依據(jù)一定比例混合在一起反走樣:鋸齒霧化效果紋理貼圖36OpenGL是一個(gè)豐富的三維圖形函數(shù)庫;OpenGL編寫的程序結(jié)構(gòu)類似于用其他語言編寫的程序;比如在C語言中調(diào)用OpenGL的函數(shù);五、OpenGL程序的基本結(jié)構(gòu)OpenGL是一個(gè)豐富的三維圖形函數(shù)庫;五、OpenGL程序37初始化: 設(shè)置OpenGL的狀態(tài)開關(guān),如顏色模式(RGBA或ALPHA)的選擇,是否作光照處理(若有的話,還需設(shè)置光源的特性),深度檢驗(yàn),裁剪等等
這些狀態(tài)一般都用函數(shù)glEnable(???),glDisable(???)來設(shè)置,???表示特定的狀態(tài)。初始化:38設(shè)置觀察坐標(biāo)系下的取景模式和取景框大小,主要用到三個(gè)函數(shù): voidglViewport(left,top,right,bottom);
設(shè)置屏幕上窗口大小,參數(shù)描述屏幕窗口四個(gè)角的坐標(biāo);voidglOrtho(left,right,bottom,top,near,far);
設(shè)置投影方式為正交投影(平行投影),其取景體積是一個(gè)各面均為矩形的六面體;voidgluPerspective(fovy,aspect,zNear,zFar); 設(shè)置投影方式為透視投影,其取景體積是一個(gè)截頭錐體,在這個(gè)體積內(nèi)的物體投影到錐的頂點(diǎn)。
設(shè)置觀察坐標(biāo)系下的取景模式和取景框大小,主要用到三個(gè)函數(shù):39使用OpenGL的庫函數(shù)構(gòu)造幾何物體對(duì)象的數(shù)學(xué)描述,包括點(diǎn)線面的位置和拓?fù)潢P(guān)系,幾何變換,光照處理等等。使用OpenGL的庫函數(shù)構(gòu)造幾何物體對(duì)象的數(shù)學(xué)描述,包括點(diǎn)線40一個(gè)簡單的繪圖程序例程#include<windows.h>#include<gl.h>#include<glu.h>#include<glaux.h>voidmain(void){ OpenAWindow(); //創(chuàng)建一個(gè)窗口 InitOpenGL(); //初始化OpenGL glColor3f(1.0,1.0,1.0); //設(shè)置當(dāng)前顏色 glBegin(GL_POLYGON); //開始繪圖 glVertex2f(-0.5,-0.5); glVertex2f(-0.5,0.5); glVertex2f(0.5,0.5); glVertex2f(0.5,-0.5); glEnd(); glFlush(); //強(qiáng)制輸出 KeepTheWindowOnScreenForAWhile(); //使窗口在屏幕上保留一會(huì)}一個(gè)簡單的繪圖程序例程#include<windows.h41函數(shù)命名規(guī)范voidglVertex3fv(Glfloat*vertex);
前綴 后綴前綴gl,glu,aux----該函數(shù)屬于哪個(gè)函數(shù)庫后綴2,3,4----參數(shù)的維數(shù)b,s,l,f,d,ub,us,ui----參數(shù)的數(shù)據(jù)類型v----以數(shù)組方式傳遞參數(shù)函數(shù)名中的單詞首寫字母大寫函數(shù)命名規(guī)范42創(chuàng)建第一個(gè)應(yīng)用程序(1/8)初始化顯示方式
例:將顯示方式置為單緩存、直接顏色方式
voidauxInitDisplayMode(GL_SINGLE|AUX_RGBA);voidauxInitDisplayMode(Glbitfieldmask);mask:GL_DOUBLE(GL_SINGLE)| AUX_RGBA(AUX_INDEX)| AUX_DEPTH|AUX_STENCIL|AUX_ACCUM創(chuàng)建第一個(gè)應(yīng)用程序(1/8)初始化顯示方式voidauxI43創(chuàng)建第一個(gè)應(yīng)用程序(2/8)創(chuàng)建窗口初始化窗口的位置與大小
創(chuàng)建并顯示窗口
voidauxInitPosition(Glintx,GLinty, GLsizeiwidth,GLsizeiheight); (x,y):窗口的原點(diǎn) width,height:窗口的寬和高
voidauxInitWindow(GLbyte*title); title:窗口標(biāo)題
創(chuàng)建第一個(gè)應(yīng)用程序(2/8)創(chuàng)建窗口voidauxInit44創(chuàng)建第一個(gè)應(yīng)用程序(3/8)初始化幀緩存(顏色緩存)指定初始顏色清幀緩存
voidglClearColor(GLclampfr,GLclampfg, GLclampfb,GLclampfa);
缺省值:(0.0,0.0,0.0,0.0)
voidglClear(GL_COLOR_BUFFER_BIT);
創(chuàng)建第一個(gè)應(yīng)用程序(3/8)初始化幀緩存(顏色緩存)voi45創(chuàng)建第一個(gè)應(yīng)用程序(4/8)初始化深度緩存指定初始深度值
清深度緩存voidglClearDepth(GLclampddepth);缺省值:0.0voidglClear(GL_DEPTH_BUFFER_BIT);創(chuàng)建第一個(gè)應(yīng)用程序(4/8)初始化深度緩存voidglCl46創(chuàng)建第一個(gè)應(yīng)用程序(5/8)設(shè)置投影方式置投影方式為平行投影置投影方式為透視投影
voidglOrtho(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);voidglFrustum(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,Gldoublenear,GLdoublefar);創(chuàng)建第一個(gè)應(yīng)用程序(5/8)設(shè)置投影方式voidglOrt47創(chuàng)建第一個(gè)應(yīng)用程序(6/8)指定圖元的顏色繪圖強(qiáng)制輸出voidglColor*();voidglFlush(void);創(chuàng)建第一個(gè)應(yīng)用程序(6/8)指定圖元的顏色voidglCo48創(chuàng)建第一個(gè)應(yīng)用程序(7/8)例程#include<windows.h>#include<gl\gl.h>#include<gl\glaux.h>#include<gl\glu.h>
voidKeepTheWindowOnScreenForAWhile(){ _sleep(2000);}
voidmain(void){ auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); auxInitPosition(0,0,500,400); auxInitWindow("CreateYourOwnProgram");
glClearColor(0.0,0.0,0.0,0.0); glClearDepth(0.0); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
創(chuàng)建第一個(gè)應(yīng)用程序(7/8)例程49創(chuàng)建第一個(gè)應(yīng)用程序(8/8)
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(-0.5,0.5,0.0);
glVertex3f(0.5,0.5,0.0);
glVertex3f(0.5,-0.5,0.0);
glEnd();
glFlush();
KeepTheWindowOnScreenForAWhile();
}
創(chuàng)建第一個(gè)應(yīng)用程序(8/8) glOrtho(-1.0,50第四章虛擬現(xiàn)實(shí)建模工具第四章虛擬現(xiàn)實(shí)建模工具51虛擬現(xiàn)實(shí)系統(tǒng)圖形程序設(shè)計(jì)接口OpenGL虛擬現(xiàn)實(shí)建模語言VRML虛擬現(xiàn)實(shí)建模工具3Dsmax
虛擬現(xiàn)實(shí)系統(tǒng)圖形程序設(shè)計(jì)接口52虛擬環(huán)境構(gòu)建主要是應(yīng)用三維圖形技術(shù),包括圖形的構(gòu)建圖形的顯示4.1虛擬現(xiàn)實(shí)系統(tǒng)圖形程序設(shè)計(jì)接口虛擬環(huán)境構(gòu)建主要是應(yīng)用三維圖形技術(shù),包括4.1虛擬現(xiàn)實(shí)系統(tǒng)圖53在虛擬現(xiàn)實(shí)系統(tǒng)中,模型是十分復(fù)雜的;顯示:軟件:3D圖形應(yīng)用程序硬件:3D圖形加速卡接口:三維圖形應(yīng)用程序接口(3DAPI)溝通3D圖形應(yīng)用程序和3D圖形加速卡在虛擬現(xiàn)實(shí)系統(tǒng)中,模型是十分復(fù)雜的;54三維圖形編程接口(3DAPI)多達(dá)50多種選擇大公司和在圖形應(yīng)用方面獲得廣泛認(rèn)可的公司提供的三維API引擎;OpenGLQuick-Draw3DDirect3D三維圖形編程接口(3DAPI)多達(dá)50多種55OpenGL:SGI優(yōu)點(diǎn):適用于跨平臺(tái)的應(yīng)用開發(fā),可運(yùn)行在Unix、WindowsXP、WindowsNT、及Mac平臺(tái)上缺點(diǎn):不能完成某些高級(jí)功能,如某些文件操作功能OpenGL:SGI56Quick-Draw3D(QD3D):Apple公司優(yōu)點(diǎn):跨平臺(tái)的應(yīng)用開發(fā),具有某些高級(jí)功能;是面向?qū)ο蟮膱D形系統(tǒng);Quick-Draw3D(QD3D):Apple公司57Direct3D:Microsoft1996年發(fā)布的三維API,是交互式媒體技術(shù)家族DirectX中的一員;具有某些高級(jí)功能;Direct3D:58為什么是OpenGL?(1)OpenGL:性能優(yōu)越,計(jì)算環(huán)境廣泛,個(gè)人計(jì)算機(jī)-工作站-超級(jí)計(jì)算機(jī);(2)虛擬環(huán)境平臺(tái)OpenInventor、WorldToolKit、MulitgenCreator\Vega是以O(shè)penGL為基礎(chǔ)開發(fā)的;為什么是OpenGL?(1)OpenGL:性能優(yōu)越,計(jì)算環(huán)境59(3)許多在計(jì)算機(jī)界具有領(lǐng)導(dǎo)地位的計(jì)算機(jī)公司紛紛采用OpenGL作為三維圖形應(yīng)用程序設(shè)計(jì)界面,OpenGL程序具有廣泛的移植性;(3)許多在計(jì)算機(jī)界具有領(lǐng)導(dǎo)地位的計(jì)算機(jī)公司紛紛采用Open604.1OpenGL簡介什么是OpenGLOpenGL的組成OpenGL的工作流程OpenGL的基本操作OpenGL程序的基本結(jié)構(gòu)4.1OpenGL簡介什么是OpenGL61一、什么是OpenGL?功能強(qiáng)大的圖形庫:可開發(fā)多種特殊視覺(如光照,紋理,透明,陰影)的三維圖形;軟硬件平臺(tái)無關(guān)的跨平臺(tái)三維圖形引擎,運(yùn)行于多種窗口系統(tǒng)之上;包含圖元生成、投影、光照、光柵化等圖形顯示過程所需的功能一、什么是OpenGL?功能強(qiáng)大的圖形庫:可開發(fā)多種特殊視覺62OpenGL的發(fā)展歷史:前身是由SGI公司為其圖形工作站開發(fā)的IRISGL,是一個(gè)工業(yè)標(biāo)準(zhǔn)的三維圖形軟件接口。向其他平臺(tái)移植時(shí),開發(fā)了OpenGL有GL的功能,而且是開放的,適用于多種硬件平臺(tái)及操作系統(tǒng),用戶可以創(chuàng)建出接近光線跟蹤的高質(zhì)量靜止或動(dòng)畫的三維彩色圖象,而且是要比光線跟蹤算法快一個(gè)數(shù)量級(jí)。OpenGL的發(fā)展歷史:63二、OpenGL的組成OpenGL庫包括115個(gè)基本函數(shù)函數(shù)以gl開頭例:glColor3f(),glTranslate3f().完成圖元的定義、幾何變換、投影等功能二、OpenGL的組成64OpenGL實(shí)用庫實(shí)用函數(shù)43個(gè)函數(shù)以glu開頭例:gluPerspective();完成更高層的圖形處理如曲線曲面的生成、圖象操作等OpenGL實(shí)用庫65OpenGL輔助庫包括函數(shù)31個(gè)函數(shù)以aux開頭例:auxInitWindow();主要用于窗口管理OpenGL輔助庫66主要特點(diǎn)OpenGL可以在網(wǎng)絡(luò)上工作,即客戶機(jī)/服務(wù)器型客戶機(jī):顯示圖形服務(wù)器:運(yùn)行圖形程序客戶機(jī)與服務(wù)器可以不同類型,但兩者服從相同的協(xié)議。OpenGL的硬件無關(guān)性——好的移植性主要特點(diǎn)OpenGL可以在網(wǎng)絡(luò)上工作,即客戶機(jī)/服務(wù)器型67三、OpenGL基本工作流程(1)根據(jù)基本圖形單元(點(diǎn),線,多邊形)建立景物模型,并對(duì)景物模型進(jìn)行數(shù)學(xué)描述。(2)在三維空間中放置景物模型,并設(shè)置視點(diǎn)。(3)計(jì)算模型中物體的顏色(直接定義或由光照及紋理間接給出)(4)光柵化,把模型數(shù)學(xué)描述和顏色信息轉(zhuǎn)換至屏幕上在上述過程中,可執(zhí)行消隱處理等操作三、OpenGL基本工作流程(1)根據(jù)基本圖形單元(點(diǎn),線,68四、OpenGL的基本操作圖元繪制圖元屬性O(shè)penGL變換(幾何變換、投影變換、裁剪變換、視口變換)OpenGL圖形的描繪四、OpenGL的基本操作圖元繪制691、圖元繪制圖元的表示點(diǎn):三維坐標(biāo)(x,y,z)齊次坐標(biāo)(x,y,z,1)線段:兩個(gè)端點(diǎn)多邊形:頂點(diǎn)序列矩形:左下角點(diǎn)、右上角點(diǎn)繪制圖元定義一個(gè)頂點(diǎn)voidglVertex{234}{sifd}[v](TYPEcoords);例:glVertex3f(1.0,1.0,1.0);1、圖元繪制圖元的表示例:glVertex3f(1.0,1.70繪制函數(shù)要在glBegin與glEnd之間調(diào)用。glBegin標(biāo)志幾何要素定義的開始,glEnd函數(shù)則標(biāo)志結(jié)束一個(gè)幾何要素的定義。函數(shù) voidglBegin(Glenummode);mode的值見下表。繪制函數(shù)要在glBegin與glEnd之間調(diào)用。71Mode的值解釋GL_POINTS一系列獨(dú)立的點(diǎn)GL_LINES每兩點(diǎn)相連成為線段GL_POLYGON簡單,凸多邊形的邊界GL_TRIANGLES三點(diǎn)相連成為一個(gè)三角形GL_QUADS四點(diǎn)相連成為一個(gè)四邊形GL_LINE_STRIP頂點(diǎn)相連成為一系列線段GL_LINE_LOOP頂點(diǎn)相連成為一系列線段,連接最后一點(diǎn)與第一點(diǎn)GL_TRIANGLE_STRIP相連的三角形帶GL_TRIANGLE_FAN相連的三角形扇形GL_QUAD_STRIP相連的四邊形帶Mode的值解釋GL_POINTS一系72允許在glBegin()與glEnd()之間調(diào)用的OpenGL命令
glVertex*();glColor*();glIndex();glNormal();glEvalCoord*();glCallList(),glCallLists();等允許在glBegin()與glEnd()之間調(diào)用的OpenG732、圖元的屬性(1/5)顏色點(diǎn)大?。ㄈ笔≈禐?)voidglColor*();voidglIndex();voidglPointSize(GLfloatsize);2、圖元的屬性(1/5)顏色voidglColor*();74線段線寬
線型:連續(xù)線(缺省值)、點(diǎn)畫線等voidglLineWidth(GLfloatwidth);
voidglEnable(GL_LINE_STIPPLE);voidglLineStipple(GLintfactor,GLushortpattern);例: pattern factor 結(jié)果 0x00FF 1 0x00FF2 線段voidglLineWidth(GLfloatwid75圖元的屬性(2/5)多邊形繪制方式:頂點(diǎn)、邊界、填充
voidglPolygonMode(GLenumface,GLenummode); face: GL_FRONT_AND_BACK(缺省值) GL_FRONT GL_BACK mode: GL_POINT GL_LINE GL_FILL(缺省值)
圖元的屬性(2/5)voidglPolygonMode(G76圖元的屬性(3/5)前向面與后向面
背面剔除voidglFrontFace(GLenummode);mode: GL_CCW(缺省值) GL_CWvoidglCullFace(GLenummode); mode: GL_FRONT GL_BACK(缺省值) GL_FRONT_AND_BACK
圖元的屬性(3/5)前向面與后向面voidglFrontF77圖元的屬性(4/5)多邊形填充方式均勻填色方式位圖不透明方式位圖透明方式象素圖方式
voidglEnable(GL_POLYGON_STIPPLE);voidglPolygonStipple(constGlubyte*mask); mask: 位圖
圖元的屬性(4/5)多邊形填充方式voidglEnable78圖元的屬性(5/5)標(biāo)記多邊形邊界多邊形法向voidglEdgeFlag(GLbooleanflag);voidglNormal3*(TYPEnx,TYPEny,TYPEnz);voidglNormal3*v(constTYPE*v);圖元的屬性(5/5)標(biāo)記多邊形邊界voidglEdgeFl793、OpenGL的變換OpenGL對(duì)圖象的變換與照相機(jī)拍攝物體過程相似,分為四步:支起三角架,把照相機(jī)放在場景中—OpenGL的取景變換把要拍攝場景固定在拍攝物體上—OpenGL的模型變換選擇照相機(jī)鏡頭或調(diào)節(jié)焦距—OpenGL的投影變換確定照片的大小,可以放大照片的某一部分——OpenGL的視見區(qū)變換
三維空間中的物體就可以表示為二維的平面物體3、OpenGL的變換OpenGL對(duì)圖象的變換與照相機(jī)拍攝物80——幾何變換平移變換放縮變換旋轉(zhuǎn)變換viodglTranslate{fd}(TYPEdeltax,TYPEdeltay,TYPEdeltaz);voidglScale{fd}(TYPEsx,TYPEsy,TYPEsz);voidglRotate{fd}(TYPEangle,TYPEx,TYPEy,TYPEz);——幾何變換平移變換viodglTranslate{fd}81——投影變換確定一個(gè)視景體(ViewingVolume),作用有兩個(gè):確定物體投影到屏幕的方式,即是透視投影還是正交投影。確定從圖象上裁剪掉哪些物體或物體的某些部分。投影變換包括透視投影和正交投影——投影變換確定一個(gè)視景體(ViewingVolume),82—透視投影
—透視投影83—正射投影
—正射投影844、OpenGL圖形的描繪對(duì)整個(gè)三維模型進(jìn)行繪制,得到三維景象,包括:顏色模式的指定OpenGL提供了兩種顏色模式:RGB模式和顏色索引模式;光照處理光照模型明暗處理材質(zhì)材質(zhì)顏色材質(zhì)定義4、OpenGL圖形的描繪對(duì)整個(gè)三維模型進(jìn)行繪制,得到三維景85紋理貼圖定義紋理控制濾波說明映射方式繪制場景,給出頂點(diǎn)的紋理坐標(biāo)和幾何坐標(biāo)特殊效果的實(shí)現(xiàn)融合:將兩種顏色分量依據(jù)一定比例混合在一起反走樣:鋸齒霧化效果紋理貼圖86OpenGL是一個(gè)豐富的三維圖形函數(shù)庫;OpenGL編寫的程序結(jié)構(gòu)類似于用其他語言編寫的程序;比如在C語言中調(diào)用OpenGL的函數(shù);五、OpenGL程序的基本結(jié)構(gòu)OpenGL是一個(gè)豐富的三維圖形函數(shù)庫;五、OpenGL程序87初始化: 設(shè)置OpenGL的狀態(tài)開關(guān),如顏色模式(RGBA或ALPHA)的選擇,是否作光照處理(若有的話,還需設(shè)置光源的特性),深度檢驗(yàn),裁剪等等
這些狀態(tài)一般都用函數(shù)glEnable(???),glDisable(???)來設(shè)置,???表示特定的狀態(tài)。初始化:88設(shè)置觀察坐標(biāo)系下的取景模式和取景框大小,主要用到三個(gè)函數(shù): voidglViewport(left,top,right,bottom);
設(shè)置屏幕上窗口大小,參數(shù)描述屏幕窗口四個(gè)角的坐標(biāo);voidglOrtho(left,right,bottom,top,near,far);
設(shè)置投影方式為正交投影(平行投影),其取景體積是一個(gè)各面均為矩形的六面體;voidgluPerspective(fovy,aspect,zNear,zFar); 設(shè)置投影方式為透視投影,其取景體積是一個(gè)截頭錐體,在這個(gè)體積內(nèi)的物體投影到錐的頂點(diǎn)。
設(shè)置觀察坐標(biāo)系下的取景模式和取景框大小,主要用到三個(gè)函數(shù):89使用OpenGL的庫函數(shù)構(gòu)造幾何物體對(duì)象的數(shù)學(xué)描述,包括點(diǎn)線面的位置和拓?fù)潢P(guān)系,幾何變換,光照處理等等。使用OpenGL的庫函數(shù)構(gòu)造幾何物體對(duì)象的數(shù)學(xué)描述,包括點(diǎn)線90一個(gè)簡單的繪圖程序例程#include<windows.h>#include<gl.h>#include<glu.h>#include<glaux.h>voidmain(void){ OpenAWindow(); //創(chuàng)建一個(gè)窗口 InitOpenGL(); //初始化OpenGL glColor3f(1.0,1.0,1.0); //設(shè)置當(dāng)前顏色 glBegin(GL_POLYGON); //開始繪圖 glVertex2f(-0.5,-0.5); glVertex2f(-0.5,0.5); glVertex2f(0.5,0.5); glVertex2f(0.5,-0.5); glEnd(); glFlush(); //強(qiáng)制輸出 KeepTheWindowOnScreenForAWhile(); //使窗口在屏幕上保留一會(huì)}一個(gè)簡單的繪圖程序例程#include<windows.h91函數(shù)命名規(guī)范voidglVertex3fv(Glfloat*vertex);
前綴 后綴前綴gl,glu,aux----該函數(shù)屬于哪個(gè)函數(shù)庫后綴2,3,4----參數(shù)的維數(shù)b,s,l,f,d,ub,us,ui----參數(shù)的數(shù)據(jù)類型v----以數(shù)組方式傳遞參數(shù)函數(shù)名中的單詞首寫字母大寫函數(shù)命名規(guī)范92創(chuàng)建第一個(gè)應(yīng)用程序(1/8)初始化顯示方式
例:將顯示方式置為單緩存、直接顏色方式
voidauxInitDisplayMode(GL_SINGLE|AUX_RGBA);voidauxInitDisplayMode(Glbitfieldmask);mask:GL_DOUBLE(GL_SINGLE)| AUX_RGBA(AUX_INDEX)| AUX_DEPTH|AUX_STENCIL|AUX_ACCUM創(chuàng)建第一個(gè)應(yīng)用程序(1/8)初始化顯示方式voidauxI93創(chuàng)建第一個(gè)應(yīng)用程序(2/8)創(chuàng)建窗口初始化窗口的位置與大小
創(chuàng)建并顯示窗口
voidauxInitPosition(Glintx,GLinty, GLsizeiwidth,GLsizeiheight
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公益培訓(xùn)考核制度匯編
- 安全培訓(xùn)及會(huì)議制度
- 沙頭中學(xué)校本培訓(xùn)制度
- 在職人員培訓(xùn)進(jìn)修制度
- 培訓(xùn)日程管理制度表
- 公司培訓(xùn)部門管理制度
- 學(xué)校培訓(xùn)部培訓(xùn)制度
- 怎樣給員工培訓(xùn)制度
- 校外培訓(xùn)教師工資制度
- 焊接培訓(xùn)場地管理制度
- 2025年衛(wèi)生人才評(píng)價(jià)考試(臨床醫(yī)學(xué)工程技術(shù)中級(jí))歷年參考題庫含答案
- 呼吸康復(fù)科普脫口秀
- 2025年《思想道德與法治》期末考試題庫及答案
- 2025初一英語閱讀理解100篇
- 2026屆四川省成都市青羊區(qū)樹德實(shí)驗(yàn)中學(xué)物理九年級(jí)第一學(xué)期期末考試試題含解析
- 高溫熔融金屬冶煉安全知識(shí)培訓(xùn)課
- 林業(yè)種苗培育與管理技術(shù)規(guī)范
- 遼寧中考數(shù)學(xué)三年(2023-2025)真題分類匯編:專題06 幾何與二次函數(shù)壓軸題 解析版
- 修復(fù)征信服務(wù)合同范本
- 湖南省5年(2021-2025)高考物理真題分類匯編:專題11 近代物理(原卷版)
- 螺桿泵知識(shí)點(diǎn)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論