圖形與多媒體-三維計算機圖形學(xué)(openGL簡介)
《圖形與多媒體-三維計算機圖形學(xué)(openGL簡介)》由會員分享,可在線閱讀,更多相關(guān)《圖形與多媒體-三維計算機圖形學(xué)(openGL簡介)(74頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,,單擊此處編輯母版文本樣式,,第二級,,第三級,,第四級,,第五級,,*,*,*,圖形與多媒體,,第六章 三維計算機圖形學(xué)(四)OpenGL簡介,汪國平,,,2000年秋季學(xué)期研究生課程,1,,一、OpenGL簡介,什么是OpenGL,,OpenGL的組成,,一個簡單的繪圖程序,,OpenGL函數(shù)命名規(guī)范,,NT環(huán)境中OpenGL的命令解釋流程,,2,,什么是OpenGL,是一個功能強大的圖形庫,用戶可以很方便地開發(fā)所需要地有多種特殊視覺(如光照,紋理,透明,陰影)的三維圖形。,,與軟硬件平臺無關(guān)的三維圖形軟件包,可運行于多種窗口系統(tǒng)之上,,包含圖元生成、投影、光
2、照、光柵化等圖形顯示過程所需的功能,3,,發(fā)展歷史,前身是由SGI公司為其圖形工作站開發(fā)的IRIS GL,是一個工業(yè)標(biāo)準(zhǔn)的三維圖形軟件接口。,,向其他平臺移植時,開發(fā)了OpenGL,,,有GL的功能,而且是開放的,使用于多種硬件平臺及操作系統(tǒng),,,用戶可以創(chuàng)建出接近光線跟蹤的高質(zhì)量靜止或動畫的三維彩色圖象,而且是要比光線跟蹤算法快一個數(shù)量級。,4,,OpenGL的組成,,,,,OpenGL庫,,包括115個基本函數(shù),,函數(shù)以gl開頭,,例:glColor3f(), glTranslate3f().,,完成圖元的定義、幾何變換、投影等功能,,5,,OpenGL的組成,OpenGL實用庫,,實用函
3、數(shù)43個,,函數(shù)以glu開頭,,例:gluPerspective();,,完成更高層的圖形處理如曲線曲面的生成、圖象操作等,,OpenGL輔助庫,,包括函數(shù)31個,,函數(shù)以aux開頭,,例:auxInitWindow();,,主要用于窗口管理,6,,主要特點,OpenGL可以在網(wǎng)絡(luò)上工作,即客戶機/服務(wù)器型,顯示圖形的計算機(客戶機)可以不是運行圖形程序的計算機(服務(wù)器),客戶機與服務(wù)器可以是不同類型的計算機,只要兩者服從相同的協(xié)議。,,OpenGL是與硬件無關(guān)的軟件接口,可以在多種硬件平臺上運行,使得OpenGL的應(yīng)用程序有較好的移植性。,7,,OpenGL的工作順序,構(gòu)造幾何要素(點,線,
4、多邊形,圖象,位圖),創(chuàng)建對象的數(shù)學(xué)描述。,,在三維空間上放置對象,選擇有利的場景觀察點。,,計算對象的顏色,這些顏色可能直接定義,或由光照條件及紋理間接給出。,,光柵化,把對象的數(shù)學(xué)描述和顏色信息轉(zhuǎn)換到屏幕的象素。另外,也可能執(zhí)行消隱,以及對象素的操作。,8,,OpenGL程序的基本結(jié)構(gòu),第一部分是初始化部分:,,主要是設(shè)置一些OpenGL的狀態(tài)開關(guān),如顏色模式(RGBA或ALPHA)的選擇,是否作光照處理(若有的話,還需設(shè)置光源的特性),深度檢驗,裁剪等等。,,這些狀態(tài)一般都用函數(shù)glEnable(???), glDisable(???) 來設(shè)置,???表示特定的狀態(tài)。,9,,第二部分設(shè)置
5、觀察坐標(biāo)系下的取景模式和取景框大小。主要用到三個函數(shù):,,void glViewport(left,top,right,bottom);,,設(shè)置在屏幕上的窗口大小,四個參數(shù)描述屏幕窗口四個角上的坐標(biāo)(以象素表示);,,void glOrtho(left,right,bottom,top,near,far);,,設(shè)置投影方式為正交投影(平行投影),其取景體積是一個各面均為矩形的六面體;,,void gluPerspective(fovy,aspect,zNear,zFar);,,設(shè)置投影方式為透視投影,其取景體積是一個截頭錐體,在這個體積內(nèi)的物體投影到錐的頂點。,,10,,第三部分是OpenGL
6、的主要部分,使用OpenGL的庫函數(shù)構(gòu)造幾何物體對象的數(shù)學(xué)描述,包括點線面的位置和拓?fù)潢P(guān)系,幾何變換,光照處理等等。,,,注:移植到使用MFC框架下的Windows程序中,由于Windows自身有一套顯示方式,需要進行一些必要的改動以協(xié)調(diào)這兩種不同顯示方式。,,11,,繪圖前的一些準(zhǔn)備工作,清除當(dāng)前窗口的內(nèi)容,以免影響繪圖的效果,,,void glClearColor ( red , green , blue , alpha );,,給定當(dāng)前屏幕的背景設(shè)置顏色,red , green , blue , alpha 為RGBA顏色值.,12,,,void glClear ( mask );,,
7、命令標(biāo)志要清除的緩沖區(qū)??梢郧宄木彌_區(qū)如下表所示:,,緩沖區(qū),,名稱,,顏色緩沖區(qū),,GL_COLOR_BUFFER_BIT,深度緩沖區(qū),,GL_DEPTH_BUFFER_BIT,,累加緩沖區(qū),,GL_ACCUM_BUFFER_BIT,,模板緩沖區(qū),,GL_STENCIL_BUFFER_BIT,13,,,可以用,glClearColor, glClearDepth, glClearIndex, glClearStencil, glClearAcc,函數(shù)為各自對應(yīng)的緩沖區(qū)賦值。若要同時清除多個緩沖區(qū),使用上表中所列的,mask,位或組合,在速度上要比使用多次調(diào)用,glClear,函數(shù)要快得多,
8、。,,14,,描述幾何要素,按一定的順序給出幾何要素的頂點,,glVertex,命令指定一個頂點,并在生成頂點后,把當(dāng)前顏色,紋理坐標(biāo),法線等值賦給這個頂點。,,函數(shù),,void glVertex{234}{sifd}{v}(coords);,,有時用矢量形式定義頂點,執(zhí)行效率高,但是它只能在glBegin與glEnd之間調(diào)用才有意義。,15,,glBegin,標(biāo)志幾何要素定義的開始,,glEnd,函數(shù)則標(biāo)志結(jié)束一個幾何要素的定義。,,函數(shù),,void glBegin(Glenum mode);,,mode 的值見下表。,16,,Mode 的值,,解釋,,GL_POINTS,,一系列獨立的點,
9、,GL_LINES,,每兩點相連成為線段,,GL_POLYGON,,簡單,凸多邊形的邊界,,GL_TRIANGLES,,三點相連成為一個三角形,,GL_QUADS,,四點相連成為一個四邊形,,GL_LINE_STRIP,,頂點相連成為一系列線段,,GL_LINE_LOOP,,頂點相連成為一系列線段,連接最后一點與第一點,,GL_TRIANGLE_STRIP,,相連的三角形帶,,GL_TRIANGLE_FAN,,相連的三角形扇形,,GL_QUAD_STRIP,,相連的四邊形帶,,17,,一個簡單的繪圖程序,例程,#include ,,#include ,,#include ,,#include
10、,,void main(void),,{,,OpenAWindow(); //創(chuàng)建一個窗口,,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(); //強制輸出,,KeepTheWindowOnScreenForAWhile(); //使窗口
11、在屏幕上保留一會,,},18,,OpenGL函數(shù)命名規(guī)范,,void glVertex3fv(Glfloat *vertex);,,,,前綴 后綴,,前綴,,gl ,glu,aux----該函數(shù)屬于哪個函數(shù)庫,,后綴,,2,3,4----參數(shù)的維數(shù),,b,s,l,f,d,ub,us,ui----參數(shù)的數(shù)據(jù)類型,,v----以數(shù)組方式傳遞參數(shù),,函數(shù)名中的單詞首寫字母大寫,19,,NT環(huán)境中OpenGL的命令解釋流程,OpenGL命令,,OpenGL DLL,客戶,服務(wù)器,,OpenGL ICD,加速卡DDI,Win32 DDI,Server DLL,視頻驅(qū)動,應(yīng)用程序,不帶加速卡
12、 帶加速卡,應(yīng)用程序,OpenGL命令,,OpenGL DLL,客戶,服務(wù)器,,Server DLL,Win32 DDI,視頻驅(qū)動,20,,NT環(huán)境中OpenGL的命令解釋流程,ICD是可安裝的客戶驅(qū)動(Installable Client Driver),,DLL是動態(tài)聯(lián)接庫(Dynamic Link Library),,DDI是設(shè)備驅(qū)動接口(Device Driver Interface),,,21,,二、OpenGL,圖元,,創(chuàng)建第一個應(yīng)用程序,,圖元的繪制,,圖元的屬性,,22,,創(chuàng)建第一個應(yīng)用程序(1/8),初始化顯示方式,,,,,,,例: 將顯示方式置為單緩存、直接顏色方式,,
13、,void auxInitDisplayMode(GL_SINGLE|AUX_RGBA);,void auxInitDisplayMode(Glbitfield mask);,,mask:GL_DOUBLE(GL_SINGLE)|,,AUX_RGBA(AUX_INDEX)|,,AUX_DEPTH |AUX_STENCIL|AUX_ACCUM,23,,創(chuàng)建第一個應(yīng)用程序(2/8),創(chuàng)建窗口,,初始化窗口的位置與大小,,,,,,,創(chuàng)建并顯示窗口,,void auxInitPosition(Glint x,GLint y,,,GLsizei width,GLsizei height);,,(x,y
14、):窗口的原點,,width,,,height,:窗口的寬和高,,void auxInitWindow(GLbyte *title);,,title,:窗口標(biāo)題,,24,,創(chuàng)建第一個應(yīng)用程序(3/8),初始化幀緩存(顏色緩存),,指定初始顏色,,,,,清幀緩存,,,void glClearColor(GLclampf r,GLclampf g,,,GLclampf b,GLclampf a);,,,缺省值:,(0.0,0.0,0.0,0.0),,void glClear(GL_COLOR_BUFFER_BIT);,,25,,創(chuàng)建第一個應(yīng)用程序(4/8),初始化深度緩存,,指定初始深度值,,,,
15、,清深度緩存,void glClearDepth(GLclampd depth);,,缺省值:,0.0,void glClear(GL_DEPTH_BUFFER_BIT);,26,,創(chuàng)建第一個應(yīng)用程序(5/8),設(shè)置投影方式,,置投影方式為平行投影,,,,置投影方式為透視投影,,void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,,,GLdouble top,Gldouble near,GLdouble far);,void glFrustum(GLdouble left,GLdouble right,GLdouble botto
16、m,,,GLdouble top,Gldouble near,GLdouble far);,27,,創(chuàng)建第一個應(yīng)用程序(6/8),指定圖元的顏色,,,繪圖,,強制輸出,void glColor*();,void glFlush(void);,28,,創(chuàng)建第一個應(yīng)用程序(7/8),例程2-1,,#include ,,#include ,,#include ,,#include ,,,,void KeepTheWindowOnScreenForAWhile(),,{ _sleep(2000);,,},,,,void main(void),,{ auxInitDisplayMode(AUX_SING
17、LE|AUX_RGBA);,,auxInitPosition(0,0,500,400);,,auxInitWindow("Create Your Own Program");,,,,glClearColor(0.0,0.0,0.0,0.0);,,glClearDepth(0.0);,,glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);,,29,,創(chuàng)建第一個應(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);
18、 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();?},30,,圖元的繪制(1/2),圖元的種類,,點、線段、多邊形、矩形,,圖元的表示,,點:三維坐標(biāo)(x,y,z),??,齊次坐標(biāo)(x,y,z,1),,線段:兩個端點,,多邊形:頂點序列,,矩形:左下角點、右上角點,,繪制圖元,,定義一個頂點,,void
19、 glVertex{234}{sifd}[v](TYPE coords);,例:,glVertex3f(1.0,1.0,1.0);,31,,圖元的繪制(2/2),glBegin()與glEnd(),,,,,,允許在,glBegin(),與,glEnd(),之間調(diào)用的,OpenGL,命令,,,,void glBegin(GLenum mode);,,mode: GL_POINTS,GLLINES,GL_LINE_STRIP,GL_LINE_LOOP,,,GL_POLYGON,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,,,GL_QUADS,GL_QUAD_STRIP,,v
20、oid glEnd(void);,glVertex*();,,glColor*();,,glIndex();,,glNormal();,,glEvalCoord*();,,glCallList(),glCallLists();,,glTexCoord();,,glEdgeFlag();,,glMaterial();,,32,,圖元的屬性(1/5),顏色,,,,點,,大?。ㄈ笔≈禐?),,,線段,,線寬,,,void glColor*();,,void glIndex();,void glPointSize(GLfloat size);,void glLineWidth(GLfloat widt
21、h);,,33,,圖元的屬性(2/5),線型:連續(xù)線(缺省值)、點畫線等,,,,,,多邊形,,繪制方式:頂點、邊界、填充,,,void glEnable(GL_LINE_STIPPLE);,,void glLineStipple(GLint factor,GLushort pattern);,,例: pattern factor 結(jié)果,,0x00FF 1,,0x00FF 2,void glPolygonMode(GLenum face,GLenum mode);,,face: GL_FRONT_AND_BACK(缺省值),,GL_FRONT,,GL_BACK,
22、,mode: GL_POINT,,GL_LINE,,GL_FILL(,缺省值),,34,,圖元的屬性(3/5),前向面與后向面,,,,,背面剔除,,void glFrontFace(GLenum mode);,,mode: GL_CCW(缺省值),,GL_CW,void glCullFace(GLenum mode);,,mode: GL_FRONT,,GL_BACK(缺省值),,GL_FRONT_AND_BACK,,35,,圖元的屬性(4/5),多邊形填充方式,,均勻填色方式,,位圖不透明方式,,位圖透明方式,,象素圖方式,,void glEnable(GL_POLYGON_STIPPLE)
23、;,,void glPolygonStipple(const Glubyte *mask);,,mask:,位圖,,36,,圖元的屬性(5/5),標(biāo)記多邊形邊界,,,,,多邊形法向,,,void glEdgeFlag(GLboolean flag);,,void glNormal3*(TYPE nx,TYPE ny,TYPE nz);,,void glNormal3*v(const TYPE *v);,,37,,三、輔助庫,初始化一個窗口,,處理輸入事件,,修改查色表,,繪制簡單的三維物體,,管理后臺進程,,運行主程序,,輔助庫中定義的虛鍵值,38,,為什么需要輔助庫,使得OpenGL具有平臺
24、無關(guān)性,,窗口管理,,輸入事件處理,,繪制簡單的三維物體,,后臺與主進程管理,39,,窗口管理(1/2),設(shè)置窗口顯示方式,void APIENTRY auxInitDisplayMode(GLenum mode);,,mode:,,(1)顏色方式: AUX_RGBA(直接顏色),,AUX_INDEX(索引顏色),,(2)緩存方式: AUX_SINGLE(單緩存),,AUX_DOUBLE(雙緩存),,(3)深度緩存位數(shù): AUX_DEPTH(16位),,AUX_DEPTH24(32位),,(4)模板緩存位數(shù): AUX_STENCIL(4位),,(5)Alpha緩存位數(shù):AUX_ALPHA(8位
25、),,同一組中只能選一個,不同組之間用“,|,”相或,,40,,窗口管理(2/2),創(chuàng)建窗口,,,,設(shè)置窗口的位置和大小,,GLenum APIENTRY auxInitWindow(LPCTSTR title);,,title,:,,窗口的標(biāo)題,為一字符串,,void APIENTRY auxInitPosition(int x, int y, int w, int h);,,x,y定義了窗口的起始點。,,w,,,h,定義了窗口的寬和高。,,41,,處理輸入事件,,窗口尺寸改變,,,,鍵盤響應(yīng),,,,,鼠標(biāo)響應(yīng),,void APIENTRY auxReshapeFunc(AUXRESHAPE
26、PROC myReshape);,,myReshape,是處理窗口尺寸改變消息的函數(shù),void APIENTRY auxKeyFunc(int key, AUXKEYPROC mykeyProc);,,key,是鍵的虛鍵值,,,輔助庫中定義了大多數(shù)鍵盤上的虛鍵值。,,mykeyProc,是對應(yīng)于,key,的處理函數(shù),不同的,key,可以有,,不同的函數(shù)。,void APIENTRY auxMouseFunc(int b,int m,,,AUXMOUSEPROC myMouseFunc);,,b,是鼠標(biāo)鍵的虛鍵值。,m,是鍵的狀態(tài)。,,myMouseProc,是對應(yīng)于,b,和,m,的處理函數(shù),4
27、2,,修改查色表,void APIENTRY auxSetOneColor,(,int index,,,float r,,,,,float g,,,float b),;,,設(shè)置,index,所指向的顏色。各個顏色分量由,r,,,g,,,b,給出,43,,繪制簡單的三維物體(1/2),void APIENTRY auxWireSphere(GLdouble); //繪制球(線框圖),,void APIENTRY auxSolidSphere(GLdouble); //繪制球(填充圖),,void APIENTRY auxWireCube(GLdouble);//繪制立方體,,void APIEN
28、TRY auxSolidCube(GLdouble);,,void APIENTRY auxWireBox(GLdouble, GLdouble, GLdouble);,,//繪制長方體,,void APIENTRY auxSolidBox(GLdouble, GLdouble, GLdouble);,,void APIENTRY auxWireTorus(GLdouble, GLdouble);,,//繪制圓環(huán)面,,void APIENTRY auxSolidTorus(GLdouble, GLdouble);,,void APIENTRY auxWireCylinder(GLdouble,
29、 GLdouble);,,//繪制圓柱,,void APIENTRY auxSolidCylinder(GLdouble, GLdouble);,,void APIENTRY auxWireCone(GLdouble, GLdouble); //繪制圓錐,44,,繪制簡單的三維物體(2/2),void APIENTRY auxSolidCone(GLdouble, GLdouble);,,void APIENTRY auxWireTeapot(GLdouble); //繪制茶壺,,void APIENTRY auxSolidTeapot(GLdouble);,,void APIENTRY a
30、uxWireIcosahedron(GLdouble);//繪制二十面體,,void APIENTRY auxSolidIcosahedron(GLdouble);,,void APIENTRY auxWireDodecahedron(GLdouble);//繪制十二面體,,void APIENTRY auxSolidDodecahedron(GLdouble);,,void APIENTRY auxWireOctahedron(GLdouble); //繪制八面體,,void APIENTRY auxSolidOctahedron(GLdouble);,,void APIENTRY auxW
31、ireTetrahedron(GLdouble);//繪制四面體,,void APIENTRY auxSolidTetrahedron(GLdouble);,45,,后臺與主進程管理,后臺程序,,,,,主程序,void APIENTRY auxIdleFunc(AUXIDLEPROC idleProc);,,idleProc,是當(dāng)系統(tǒng)空閑時調(diào)用的函數(shù),void APIENTRY auxMainLoop(AUXMAINPROC displayFunc);,,diplayFunc,是繪制場景的函數(shù),46,,輔助庫中定義的虛鍵值,,鼠標(biāo): AUX_LEFTBUTTON, AUX_RIGHTBUTT
32、ON, AUX_MIDDLEBUTTON,,控制鍵: AUX_SHIFT,AUX_CONTROL,AUX_RETURN,AUX_ESCAPE,,,AUX_SPACE,AUX_LEFT,AUX_UP,AUX_RIGHT, AUX_DOWN等,,一般鍵: AUX_A,AUX_B,AUX_C等(大寫字母),,AUX_a,AUX_b,AUX_c等(小寫字母),,AUX_0,,,AUX_1,,,AUX_2,等(數(shù)字),,,,47,,四、幾何變換與投影,坐標(biāo)系,,基本幾何變換,,變換的分解與合成,,變換的模式,,矩陣棧及其操作,,投影,,視區(qū)參數(shù)的設(shè)置,,三維圖形的變換流程,48,,坐標(biāo)系,右手坐標(biāo)系,窗
33、口,x,,y,,z,,o,,49,,OpenGL的變換過程,OpenGL對圖象進行變換與照相機拍攝物體的過程相似。,,分為以下四步:,,支起三角架,把照相機放在場景中,相當(dāng)于OpenGL的取景變換,,把要拍攝的場景固定在要拍攝的物體上,相當(dāng)于OpenGL的模型變換,,選擇照相機鏡頭或調(diào)節(jié)焦距,相當(dāng)于OpenGL的投影變換。,,確定照片的大小,可以放大照片的某一部分,相當(dāng)于,OpenGL,的視見區(qū)變換,,50,,投影變換,就是要確定一個取景體積,其作用有兩個:,,確定物體投影到屏幕的方式,即是透視投影還是正交投影。,,確定從圖象上裁剪掉哪些物體或物體的某些部分。,,投影變換包括透視投影和正交投影
34、(平行投影),51,,透視投影,其取景體積是一個截頭錐體,再這個體積內(nèi)的物體投影到錐的頂點,有g(shù)lFrustum命令定義這個截頭錐體,這個取景體積可以是不對稱的,,void glFrustum(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top,,,Gldouble near,Gldouble far);,52,,透視投影的示意圖,,,53,,正交投影,其取景體積是一個各面均為矩形的六面體,用glOrtho命令創(chuàng)建正交平行的取景體積,,void glOrtho(Gldouble left,Gldouble right,Gldo
35、uble bottom,Gldouble top,,,Gldouble near,Gldouble far);,54,,正交投影的示意圖,,,55,,基本幾何變換,平移變換,,,放縮變換,,,旋轉(zhuǎn)變換,viod glTranslate{fd}(TYPE deltax,TYPE deltay,TYPE deltaz);,,void glScale{fd}(TYPE sx,TYPE sy,TYPE sz);,,void glRotate{fd}(TYPE angle,TYPE x,TYPE y,TYPE z);,,(x,y,z),,o,,旋轉(zhuǎn)正向,56,,變換的模式,固定坐標(biāo)系模式,,活動坐標(biāo)系模
36、式,57,,矩陣棧及其操作(1/8),三種矩陣棧,,模型觀察變換矩陣棧(至少32個矩陣),,投影變換矩陣棧(至少2個矩陣),,紋理變換矩陣棧,(至少2個矩陣),,矩陣棧的初始狀態(tài),,包含一個單位矩陣,,確定當(dāng)前矩陣棧,void glMatrixMode(GLenum mode);,,mode: GL_MODELVIEW,,GL_PROJECTION,,GL_TEXTURE,,58,,矩陣棧及其操作(2/8),清矩陣棧棧頂,,,,,,void glLoadIdentity(void);,,將棧頂矩陣替換為單位矩陣,,取消之前變換的作用,…,I,…,M,glLoadIdentity(),59,,矩
37、陣棧及其操作(3/8),壓棧,void glPushMatrix(void);,,復(fù)制棧頂矩陣并壓入棧,,記住位置,…,M,M,glPushMatrix(),…,M,坐標(biāo)系1,坐標(biāo)系2,坐標(biāo)系1,坐標(biāo)系2,坐標(biāo)系3,60,,矩陣棧及其操作(4/8),出棧,void glPopMatrix(void);,,彈出棧頂矩陣,,回到記住的位置,…,M1,glPopMatrix(),…,M1,M2,坐標(biāo)系1,坐標(biāo)系2,坐標(biāo)系3,坐標(biāo)系1,坐標(biāo)系2,61,,矩陣棧及其操作(5/8),設(shè)置棧頂矩陣,,,,void glLoadMatrix(const TYPE *matrix);,,將棧頂矩陣替換為,mat
38、rix,,實現(xiàn)任意變換,…,M2,…,M1,glLoadMatrix(M2),62,,矩陣棧及其操作(6/8),矩陣相乘,void glMultiMatrix{fd}(const TYPE *matrix);,,以矩陣,matrix,右乘棧頂矩陣并替換棧頂矩陣,,實現(xiàn)任意變換,…,M1*M2,…,M1,glMultiMatrix(M2),63,,矩陣棧及其操作(7/8),基本幾何變換的作用,,平移變換,,,,,放縮變換,…,M*T,glTranslate{fd}(),…,M,…,M*S,glScale{fd}(),…,M,64,,矩陣棧及其操作(8/8),旋轉(zhuǎn)變換,…,M*R,glRotate
39、{fd}(),…,M,65,,投影(1/5),缺省的觀察坐標(biāo)系,窗口,x,u,,y,v,,z,n,,o,,66,,投影(2/5),改變?nèi)笔〉挠^察坐標(biāo)系,,,,設(shè)置任意觀察坐標(biāo)系,glMatrixMode(GL_PROJECTION);,,glRotatef (75, 1.0, 0.0, 0.0);,void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez,,,Gldouble centerx, GLdouble centery, GLdouble centerz,,,Gldouble upx, GLdouble upy, GLdoub
40、le upz);,,(eyex, eyey, eyez)為視點/投影中心,,(centerx, centery, centerz)為觀察參考點的位置,,(upx, upy, upz)為觀察正向,,例程4-4,67,,投影(3/5),平行投影參數(shù)的設(shè)置,void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,,,GLdouble top, Gldouble near,GLdouble far);,,void glOrtho2D(GLdouble left,GLdouble right,,,GLdouble bottom,GLdouble
41、 top);,,68,,投影(4/5),透視投影參數(shù)的設(shè)置,,void glFrustum(GLdouble left,GLdouble right,GLdouble bottom,,,GLdouble top, Gldouble near,GLdouble far);,,left,,right,,top,,bottom,,near,,far,,坐標(biāo)原點,69,,投影(5/5),,void gluPerspective(GLdouble fory,GLdouble aspect,,,GLdouble near,GLdouble far);,,w,,坐標(biāo)原點,h,,aspect = w/h,,n
42、ear,,far,,fovy,,70,,視區(qū)參數(shù)的設(shè)置,m,void glViewport(GLint x,GLint y,GLint width,GLint height);,,(x,y):,視區(qū)左下角點,,width,,,height,:,視區(qū)的寬和高,,71,,三維圖形的變換流程,,模型變換,觀察變換,投影變換,窗口至視,,區(qū)的變換,72,,本章習(xí)題,構(gòu)造一個三維圖形交互環(huán)境,用真實感三維造型顯示一個三維形體,并可以用鼠標(biāo)驅(qū)動(平移和旋轉(zhuǎn)、放大和縮?。┧@示的物體。,,作業(yè)要求:,,三維形體可以自選,但要在交互環(huán)境中交互輸入,建議顯示“計算機圖形學(xué)”字形;,,真實感繪制可以用OpenGL,建議用光線跟蹤法繪制;,,三維交互環(huán)境必須自己構(gòu)造,并要實現(xiàn)實時交互功能;,,可以由2-3人作為一個小組,共同完成。,73,,END,,,74,,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鍋爐啟動過程中的安全監(jiān)督
- 煤礦安全規(guī)程練習(xí)題含答案
- 3 燃?xì)獍踩a(chǎn)管理人員企業(yè)主要負(fù)責(zé)人模擬考試題庫試卷含答案
- 火力發(fā)電生產(chǎn)典型作業(yè)潛在風(fēng)險與預(yù)控安全措施之腳手架搭設(shè)與使用
- 消防控制室值班人員18條安全應(yīng)知應(yīng)會內(nèi)容
- 電廠調(diào)試危險源辨識、風(fēng)險評價和控制措施清單
- 化工廠班組長現(xiàn)場安全職責(zé)
- 煤礦資料:維修電工安全技術(shù)操作規(guī)程
- 3.危險化學(xué)品安全氯化工藝作業(yè)模擬考試題庫試卷含答案
- 某煤礦掘進鉆眼工安全技術(shù)操作規(guī)程
- 安全培訓(xùn)資料:防火檢查“六查、六結(jié)合”工作法
- 火力發(fā)電生產(chǎn)典型作業(yè)潛在風(fēng)險與安全預(yù)控措施之起重作業(yè)
- 蓄電池機車司機安全操作規(guī)程
- 電廠機械專業(yè)危險源辨識、風(fēng)險評價和風(fēng)險控制措施安全清單
- 某煤礦掘進爆破工安全技術(shù)操作規(guī)程