九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

圖形與多媒體-三維計(jì)算機(jī)圖形學(xué)(openGL簡介)

上傳人:wuli****0220 文檔編號(hào):244877589 上傳時(shí)間:2024-10-06 格式:PPT 頁數(shù):74 大?。?37.13KB
收藏 版權(quán)申訴 舉報(bào) 下載
圖形與多媒體-三維計(jì)算機(jī)圖形學(xué)(openGL簡介)_第1頁
第1頁 / 共74頁
圖形與多媒體-三維計(jì)算機(jī)圖形學(xué)(openGL簡介)_第2頁
第2頁 / 共74頁
圖形與多媒體-三維計(jì)算機(jī)圖形學(xué)(openGL簡介)_第3頁
第3頁 / 共74頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《圖形與多媒體-三維計(jì)算機(jī)圖形學(xué)(openGL簡介)》由會(huì)員分享,可在線閱讀,更多相關(guān)《圖形與多媒體-三維計(jì)算機(jī)圖形學(xué)(openGL簡介)(74頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、單擊此處編輯母版標(biāo)題樣式,,單擊此處編輯母版文本樣式,,第二級(jí),,第三級(jí),,第四級(jí),,第五級(jí),,*,*,*,圖形與多媒體,,第六章 三維計(jì)算機(jī)圖形學(xué)(四) OpenGL簡介,汪國平,,,2000年秋季學(xué)期研究生課程,1,,一、OpenGL簡介,什么是OpenGL,,OpenGL的組成,,一個(gè)簡單的繪圖程序,,OpenGL函數(shù)命名規(guī)范,,NT環(huán)境中OpenGL的命令解釋流程,,2,,什么是OpenGL,是一個(gè)功能強(qiáng)大的圖形庫,用戶可以很方便地開發(fā)所需要地有多種特殊視覺(如光照,紋理,透明,陰影)的三維圖形。,,與軟硬件平臺(tái)無關(guān)的三維圖形軟件包,可運(yùn)行于多種窗口系統(tǒng)之上,,包含圖元生成、投影、光

2、照、光柵化等圖形顯示過程所需的功能,3,,發(fā)展歷史,前身是由SGI公司為其圖形工作站開發(fā)的IRIS GL,是一個(gè)工業(yè)標(biāo)準(zhǔn)的三維圖形軟件接口。,,向其他平臺(tái)移植時(shí),開發(fā)了OpenGL,,,有GL的功能,而且是開放的,使用于多種硬件平臺(tái)及操作系統(tǒng),,,用戶可以創(chuàng)建出接近光線跟蹤的高質(zhì)量靜止或動(dòng)畫的三維彩色圖象,而且是要比光線跟蹤算法快一個(gè)數(shù)量級(jí)。,4,,OpenGL的組成,,,,,OpenGL庫,,包括115個(gè)基本函數(shù),,函數(shù)以gl開頭,,例:glColor3f(), glTranslate3f().,,完成圖元的定義、幾何變換、投影等功能,,5,,OpenGL的組成,OpenGL實(shí)用庫,,實(shí)用函

3、數(shù)43個(gè),,函數(shù)以glu開頭,,例:gluPerspective();,,完成更高層的圖形處理如曲線曲面的生成、圖象操作等,,OpenGL輔助庫,,包括函數(shù)31個(gè),,函數(shù)以aux開頭,,例:auxInitWindow();,,主要用于窗口管理,6,,主要特點(diǎn),OpenGL可以在網(wǎng)絡(luò)上工作,即客戶機(jī)/服務(wù)器型,顯示圖形的計(jì)算機(jī)(客戶機(jī))可以不是運(yùn)行圖形程序的計(jì)算機(jī)(服務(wù)器),客戶機(jī)與服務(wù)器可以是不同類型的計(jì)算機(jī),只要兩者服從相同的協(xié)議。,,OpenGL是與硬件無關(guān)的軟件接口,可以在多種硬件平臺(tái)上運(yùn)行,使得OpenGL的應(yīng)用程序有較好的移植性。,7,,OpenGL的工作順序,構(gòu)造幾何要素(點(diǎn),線,

4、多邊形,圖象,位圖),創(chuàng)建對(duì)象的數(shù)學(xué)描述。,,在三維空間上放置對(duì)象,選擇有利的場景觀察點(diǎn)。,,計(jì)算對(duì)象的顏色,這些顏色可能直接定義,或由光照條件及紋理間接給出。,,光柵化,把對(duì)象的數(shù)學(xué)描述和顏色信息轉(zhuǎn)換到屏幕的象素。另外,也可能執(zhí)行消隱,以及對(duì)象素的操作。,8,,OpenGL程序的基本結(jié)構(gòu),第一部分是初始化部分:,,主要是設(shè)置一些OpenGL的狀態(tài)開關(guān),如顏色模式(RGBA或ALPHA)的選擇,是否作光照處理(若有的話,還需設(shè)置光源的特性),深度檢驗(yàn),裁剪等等。,,這些狀態(tài)一般都用函數(shù)glEnable(???), glDisable(???) 來設(shè)置,???表示特定的狀態(tài)。,9,,第二部分設(shè)置

5、觀察坐標(biāo)系下的取景模式和取景框大小。主要用到三個(gè)函數(shù):,,void glViewport(left,top,right,bottom);,,設(shè)置在屏幕上的窗口大小,四個(gè)參數(shù)描述屏幕窗口四個(gè)角上的坐標(biāo)(以象素表示);,,void glOrtho(left,right,bottom,top,near,far);,,設(shè)置投影方式為正交投影(平行投影),其取景體積是一個(gè)各面均為矩形的六面體;,,void gluPerspective(fovy,aspect,zNear,zFar);,,設(shè)置投影方式為透視投影,其取景體積是一個(gè)截頭錐體,在這個(gè)體積內(nèi)的物體投影到錐的頂點(diǎn)。,,10,,第三部分是OpenGL

6、的主要部分,使用OpenGL的庫函數(shù)構(gòu)造幾何物體對(duì)象的數(shù)學(xué)描述,包括點(diǎn)線面的位置和拓?fù)潢P(guān)系,幾何變換,光照處理等等。,,,注:移植到使用MFC框架下的Windows程序中,由于Windows自身有一套顯示方式,需要進(jìn)行一些必要的改動(dòng)以協(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ù)為各自對(duì)應(yīng)的緩沖區(qū)賦值。若要同時(shí)清除多個(gè)緩沖區(qū),使用上表中所列的,mask,位或組合,在速度上要比使用多次調(diào)用,glClear,函數(shù)要快得多,

8、。,,14,,描述幾何要素,按一定的順序給出幾何要素的頂點(diǎn),,glVertex,命令指定一個(gè)頂點(diǎn),并在生成頂點(diǎn)后,把當(dāng)前顏色,紋理坐標(biāo),法線等值賦給這個(gè)頂點(diǎn)。,,函數(shù),,void glVertex{234}{sifd}{v}(coords);,,有時(shí)用矢量形式定義頂點(diǎn),執(zhí)行效率高,但是它只能在glBegin與glEnd之間調(diào)用才有意義。,15,,glBegin,標(biāo)志幾何要素定義的開始,,glEnd,函數(shù)則標(biāo)志結(jié)束一個(gè)幾何要素的定義。,,函數(shù),,void glBegin(Glenum mode);,,mode 的值見下表。,16,,Mode 的值,,解釋,,GL_POINTS,,一系列獨(dú)立的點(diǎn),

9、,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,,相連的四邊形帶,,17,,一個(gè)簡單的繪圖程序,例程,#include ,,#include ,,#include ,,#include

10、,,void main(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(); //使窗口

11、在屏幕上保留一會(huì),,},18,,OpenGL函數(shù)命名規(guī)范,,void glVertex3fv(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ù)名中的單詞首寫字母大寫,19,,NT環(huán)境中OpenGL的命令解釋流程,OpenGL命令,,OpenGL DLL,客戶,服務(wù)器,,OpenGL ICD,加速卡DDI,Win32 DDI,Server DLL,視頻驅(qū)動(dòng),應(yīng)用程序,不帶加速卡

12、 帶加速卡,應(yīng)用程序,OpenGL命令,,OpenGL DLL,客戶,服務(wù)器,,Server DLL,Win32 DDI,視頻驅(qū)動(dòng),20,,NT環(huán)境中OpenGL的命令解釋流程,ICD是可安裝的客戶驅(qū)動(dòng)(Installable Client Driver),,DLL是動(dòng)態(tài)聯(lián)接庫(Dynamic Link Library),,DDI是設(shè)備驅(qū)動(dòng)接口(Device Driver Interface),,,21,,二、OpenGL,圖元,,創(chuàng)建第一個(gè)應(yīng)用程序,,圖元的繪制,,圖元的屬性,,22,,創(chuàng)建第一個(gè)應(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)建第一個(gè)應(yīng)用程序(2/8),創(chuàng)建窗口,,初始化窗口的位置與大小,,,,,,,創(chuàng)建并顯示窗口,,void auxInitPosition(Glint x,GLint y,,,GLsizei width,GLsizei height);,,(x,y

14、):窗口的原點(diǎn),,width,,,height,:窗口的寬和高,,void auxInitWindow(GLbyte *title);,,title,:窗口標(biāo)題,,24,,創(chuàng)建第一個(gè)應(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)建第一個(gè)應(yīng)用程序(4/8),初始化深度緩存,,指定初始深度值,,,,

15、,清深度緩存,void glClearDepth(GLclampd depth);,,缺省值:,0.0,void glClear(GL_DEPTH_BUFFER_BIT);,26,,創(chuàng)建第一個(gè)應(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)建第一個(gè)應(yīng)用程序(6/8),指定圖元的顏色,,,繪圖,,強(qiáng)制輸出,void glColor*();,void glFlush(void);,28,,創(chuàng)建第一個(gè)應(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)建第一個(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);

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),圖元的種類,,點(diǎn)、線段、多邊形、矩形,,圖元的表示,,點(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),,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),顏色,,,,點(diǎn),,大?。ㄈ笔≈禐?),,,線段,,線寬,,,void glColor*();,,void glIndex();,void glPointSize(GLfloat size);,void glLineWidth(GLfloat widt

21、h);,,33,,圖元的屬性(2/5),線型:連續(xù)線(缺省值)、點(diǎn)畫線等,,,,,,多邊形,,繪制方式:頂點(diǎn)、邊界、填充,,,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,,三、輔助庫,初始化一個(gè)窗口,,處理輸入事件,,修改查色表,,繪制簡單的三維物體,,管理后臺(tái)進(jìn)程,,運(yùn)行主程序,,輔助庫中定義的虛鍵值,38,,為什么需要輔助庫,使得OpenGL具有平臺(tái)

24、無關(guān)性,,窗口管理,,輸入事件處理,,繪制簡單的三維物體,,后臺(tái)與主進(jì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、),,同一組中只能選一個(gè),不同組之間用“,|,”相或,,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定義了窗口的起始點(diǎn)。,,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,是對(duì)應(yīng)于,key,的處理函數(shù),不同的,key,可以有,,不同的函數(shù)。,void APIENTRY auxMouseFunc(int b,int m,,,AUXMOUSEPROC myMouseFunc);,,b,是鼠標(biāo)鍵的虛鍵值。,m,是鍵的狀態(tài)。,,myMouseProc,是對(duì)應(yīng)于,b,和,m,的處理函數(shù),4

27、2,,修改查色表,void APIENTRY auxSetOneColor,(,int index,,,float r,,,,,float g,,,float b),;,,設(shè)置,index,所指向的顏色。各個(gè)顏色分量由,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,,后臺(tái)與主進(jìn)程管理,后臺(tái)程序,,,,,主程序,void APIENTRY auxIdleFunc(AUXIDLEPROC idleProc);,,idleProc,是當(dāng)系統(tǒng)空閑時(shí)調(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對(duì)圖象進(jìn)行變換與照相機(jī)拍攝物體的過程相似。,,分為以下四步:,,支起三角架,把照相機(jī)放在場景中,相當(dāng)于OpenGL的取景變換,,把要拍攝的場景固定在要拍攝的物體上,相當(dāng)于OpenGL的模型變換,,選擇照相機(jī)鏡頭或調(diào)節(jié)焦距,相當(dāng)于OpenGL的投影變換。,,確定照片的大小,可以放大照片的某一部分,相當(dāng)于,OpenGL,的視見區(qū)變換,,50,,投影變換,就是要確定一個(gè)取景體積,其作用有兩個(gè):,,確定物體投影到屏幕的方式,即是透視投影還是正交投影。,,確定從圖象上裁剪掉哪些物體或物體的某些部分。,,投影變換包括透視投影和正交投影

34、(平行投影),51,,透視投影,其取景體積是一個(gè)截頭錐體,再這個(gè)體積內(nèi)的物體投影到錐的頂點(diǎn),有g(shù)lFrustum命令定義這個(gè)截頭錐體,這個(gè)取景體積可以是不對(duì)稱的,,void glFrustum(Gldouble left,Gldouble right,Gldouble bottom,Gldouble top,,,Gldouble near,Gldouble far);,52,,透視投影的示意圖,,,53,,正交投影,其取景體積是一個(gè)各面均為矩形的六面體,用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)系模式,,活動(dòng)坐標(biāo)系模

36、式,57,,矩陣棧及其操作(1/8),三種矩陣棧,,模型觀察變換矩陣棧(至少32個(gè)矩陣),,投影變換矩陣棧(至少2個(gè)矩陣),,紋理變換矩陣棧,(至少2個(gè)矩陣),,矩陣棧的初始狀態(tài),,包含一個(gè)單位矩陣,,確定當(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,,實(shí)現(xiàn)任意變換,…,M2,…,M1,glLoadMatrix(M2),62,,矩陣棧及其操作(6/8),矩陣相乘,void glMultiMatrix{fd}(const TYPE *matrix);,,以矩陣,matrix,右乘棧頂矩陣并替換棧頂矩陣,,實(shí)現(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)為視點(diǎn)/投影中心,,(centerx, centery, centerz)為觀察參考點(diǎn)的位置,,(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)原點(diǎn),69,,投影(5/5),,void gluPerspective(GLdouble fory,GLdouble aspect,,,GLdouble near,GLdouble far);,,w,,坐標(biāo)原點(diǎn),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ū)左下角點(diǎn),,width,,,height,:,視區(qū)的寬和高,,71,,三維圖形的變換流程,,模型變換,觀察變換,投影變換,窗口至視,,區(qū)的變換,72,,本章習(xí)題,構(gòu)造一個(gè)三維圖形交互環(huán)境,用真實(shí)感三維造型顯示一個(gè)三維形體,并可以用鼠標(biāo)驅(qū)動(dòng)(平移和旋轉(zhuǎn)、放大和縮?。┧@示的物體。,,作業(yè)要求:,,三維形體可以自選,但要在交互環(huán)境中交互輸入,建議顯示“計(jì)算機(jī)圖形學(xué)”字形;,,真實(shí)感繪制可以用OpenGL,建議用光線跟蹤法繪制;,,三維交互環(huán)境必須自己構(gòu)造,并要實(shí)現(xiàn)實(shí)時(shí)交互功能;,,可以由2-3人作為一個(gè)小組,共同完成。,73,,END,,,74,,

展開閱讀全文
溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!