計(jì)算機(jī)圖形學(xué)期末考查報(bào)告2015-2016第一學(xué)期_第1頁(yè)
計(jì)算機(jī)圖形學(xué)期末考查報(bào)告2015-2016第一學(xué)期_第2頁(yè)
計(jì)算機(jī)圖形學(xué)期末考查報(bào)告2015-2016第一學(xué)期_第3頁(yè)
計(jì)算機(jī)圖形學(xué)期末考查報(bào)告2015-2016第一學(xué)期_第4頁(yè)
計(jì)算機(jī)圖形學(xué)期末考查報(bào)告2015-2016第一學(xué)期_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、x計(jì)算機(jī)圖形學(xué)期末考查報(bào)告學(xué)年學(xué)期:xxxx專業(yè)班級(jí):xxxx 學(xué)生姓名:xxxx 學(xué) 號(hào):xxxx 成 績(jī): 任課老師:xxxx 提交日期:xxxx 內(nèi)容與要求一、目的本學(xué)期通過(guò)課堂授課、上機(jī)練習(xí)、作業(yè)等諸多教學(xué)環(huán)節(jié),要求學(xué)生了解計(jì)算機(jī)圖形學(xué)理論體系及其在圖形處理系統(tǒng)開發(fā)中的應(yīng)用;掌握二維及三維圖形的幾何變換、投影變換、裁剪、消隱的基本理論和方法;理解基本圖元、曲線、曲面的生成算法;理解圖形的明暗處理、紋理映射、陰影生成、真實(shí)感圖形的生成與處理的原理。掌握OpenGL編程基礎(chǔ)知識(shí)及三維圖形系統(tǒng)開發(fā)的實(shí)用技術(shù)。期末考查將以計(jì)算機(jī)圖形學(xué)OpenGL編程為主要考查內(nèi)容。 二、內(nèi)容及要求(一)、總結(jié)

2、OpenGL編程基礎(chǔ)知識(shí)OpenGL不是一種編程語(yǔ)言,而是一種API(Application Programming Interface,應(yīng)用程序編程接口)。 OpenGL的核心庫(kù)中包含了OpenGL多個(gè)函數(shù),這些函數(shù)都以“g1”為前綴最基本的命令函數(shù)。 OpenGL的實(shí)用函數(shù)庫(kù)是比OpenGL核心庫(kù)更高一層的函數(shù)庫(kù),也可以看作是對(duì)基本核心庫(kù)的擴(kuò)充。它提供了四十多個(gè)函數(shù),這些函數(shù)都以字母“glu”為前綴。GLUT代表OpenGL應(yīng)用工具包(GLUT: OpenGL Utility Toolkit ),是一個(gè)和窗口系統(tǒng)無(wú)關(guān)的工具包。OpenGL包含200多個(gè)函數(shù)。按照功能對(duì)這些函數(shù)進(jìn)行分類是大有

3、幫助的:(1)圖元函數(shù)。這些函數(shù)定義了可在屏幕上生成圖像的元素。有兩種類型的圖元:幾何圖元(例如多邊形),它們可采用2個(gè)、3個(gè)或者4個(gè)維度來(lái)定義;以及圖像圖元,比如位圖。(2)屬性函數(shù)。這些函數(shù)控制圖元的外觀。這些函數(shù)定義了顏色、線條類型、材料性質(zhì)(material property、光源以及材質(zhì)。(3)觀視函數(shù)。這些函數(shù)決定了照相機(jī)的屬性。OpenGL提供了一個(gè)虛擬照相機(jī),可相對(duì)于圖元函數(shù)定義的對(duì)象來(lái)定位它和調(diào)整它的方向。還可對(duì)照相機(jī)的鏡頭進(jìn)行控制,使其產(chǎn)生廣角與遠(yuǎn)距拍攝效果。(4)視窗函數(shù)。這些函數(shù)不是OpenGL核心的一部分。但是,由于它們對(duì)于交互式應(yīng)用程序的重要性,所以使用單獨(dú)的庫(kù)(比

4、如GLUT)來(lái)容納它們。我們可利用這些函數(shù)來(lái)控制屏幕上的窗口顯示,并可通過(guò)它們來(lái)使用鼠標(biāo)及鍵盤。(5)控制函數(shù)。這些函數(shù)允許我們啟用各種OpenGL特性。還可利用它們來(lái)了解一個(gè)特定實(shí)現(xiàn)具有的能力。 按照使用功能,GLUT中的函數(shù)可以分為以下幾類:1.初始化和創(chuàng)建窗口(1)函數(shù)如下:void glutInit(ant argc,char*argv);功能:該函數(shù)用于初始化GLUT庫(kù)。(2)函數(shù)如下: Void glutInitDisplayMode(unsigned int mode);功能:該函數(shù)為即將創(chuàng)建的窗口指定一種顯示模式,如RGBA或顏色索引,單緩存或雙緩存。另外,還可以指定該窗口相關(guān)

5、的深度、模板或累積緩存。(3)函數(shù)如下:Void glutInitWindowSize(int width,int height);功能:該函數(shù)為即將創(chuàng)建的窗口指定一個(gè)初始的大小。(4)函數(shù)如下:Void glutInitWindowPosition(int x,int y);功能:該函數(shù)為即將創(chuàng)建的窗口指定一個(gè)初始的位置。(5)函數(shù)如下:Void glutCreateWindow(char*name);功能:該命令用于創(chuàng)建一個(gè)允許使用的OpenGL窗口,并將其視為當(dāng)前窗口。 2.處理窗口和愉入(1)函數(shù)如下:void glutDisplayFunc(void(*func)(void);功能:

6、該函數(shù)用于繪制當(dāng)前窗口。(2)函數(shù)如下:Void glutReshapeFunc(void(*func)(int width,int height);功能:該函數(shù)指定了當(dāng)窗口的尺寸被縮放或移動(dòng)時(shí)所調(diào)用的函數(shù)。(3)函數(shù)如下:Void glutKeyboardFunc(void(*func)(unsigned int key,int x,int y);功能:該函數(shù)指定了當(dāng)按下一個(gè)生成ASCII字符的鍵時(shí),調(diào)用的函數(shù)。(4)函數(shù)如下:Void glutMouseFunc(void(*fonc)(int button,int state,int x,int y);功能:該函數(shù)指定了當(dāng)按下或釋放一個(gè)鼠

7、標(biāo)鍵時(shí),調(diào)用的函數(shù)。(5)函數(shù)如下:Void glutSpecialFunc(void(*func)(unsigned int key,int x,int y);功能:該函數(shù)指定了當(dāng)按下一個(gè)非ASCII字符的鍵(如Shift鍵)時(shí),調(diào)用的函數(shù)。(6)函數(shù)如下:Void glutMotionFunc(void(*func)(int x,int y);功能:該函數(shù)指定了當(dāng)按下鼠標(biāo)在窗口內(nèi)移動(dòng)時(shí),調(diào)用的函數(shù)。3. 繪制三維物體(1) 函數(shù)如下:Void glutWireCone(GLdouble base,GLdouble height,GLint slices,GLint stacks);Void

8、 glutSolidCone(GLdou6le base,GLdouble height,GLint slices,GLint stacks);功能:繪制一個(gè)線框的或?qū)嵭牡膱A錐體。圓錐的底面位于原點(diǎn)(0,0,0),圓錐的頂點(diǎn)位于Z軸之上。(2)函數(shù)如下:Void glutWireCube(GLdouble size);Void glutSolidCube(GLdouble size);功能:繪制一個(gè)邊長(zhǎng)為size的線框的或?qū)嵭牧⒎襟w,立方體的中心位于原點(diǎn)。(3) 函數(shù)如下:Void glut WireDodecahedron(Void);Void glutSolidDodecahedron(V

9、oid);功能:繪制一個(gè)線框的或?qū)嵭牡恼骟w。(4) 函數(shù)如下:Void glut WireIcosahedron(Void);Void glutSolidIcosahedron(Void);功能:繪制一個(gè)線框的或?qū)嵭牡恼骟w。(5)函數(shù)如下:Void glut WireOctahedran(Void);Void glutSolidOctahedron(Void);功能:繪制一個(gè)線框的或?qū)嵭牡恼嗣骟w。(6)函數(shù)如下:Void glut WireSphere(GLdouble radius,GLint slices,GLint stacks);Void glutSolidSphere(

10、GLdouble radius,GLint slices,GLint stacks);功能:繪制一個(gè)線框的或?qū)嵭牡那蝮w。(7) 函數(shù)如下:Void glut WireTetrahedron(void);Void glutSolidTetrahedron(void);功能:繪制一個(gè)線框的或?qū)嵭牡恼拿骟w。(8)函數(shù)如下:Void glutWireTorus(GLdouble innerRadius,GLdouble outerRadius,GLint slices,GLint stacks);Void glutSolidTorus(GLdnuble innerRadius,GLdouble ou

11、terRadius,GLint slices,GLint stacks);功能:繪制一個(gè)線框的或?qū)嵭牡膱A環(huán)體。(9)函數(shù)如下:Void glut WireTeapot(GLdouble Size);Void glutSolidTeapot(GLdouble Size);功能:繪制一個(gè)以半徑為size的線框的或?qū)嵭牟鑹亍?.管理后臺(tái)處理當(dāng)沒(méi)有其他的待處理的事件時(shí),用戶可以用函數(shù)glutIdleFun。指定執(zhí)行另一個(gè)函數(shù)。函數(shù)如下:void glutIdIeFunc(void(*func)(void);功能:該函數(shù)的參數(shù)中指定了一個(gè)函數(shù)名func,當(dāng)其他的事情處于掛起時(shí),就可以執(zhí)行函數(shù)func。5

12、.運(yùn)行程序在完成了所有的設(shè)置之后,最后要做的事情就是開始執(zhí)行所有的命令了,這時(shí)調(diào)用運(yùn)行程序的函數(shù)。函數(shù)如下:void glutMainLoop(void);功能:這個(gè)函數(shù)開始啟動(dòng)主GLUT處理循環(huán)。OpenGL是圖形硬件的軟件接口,其中包括了大約250個(gè)不同的函數(shù)。作為一種應(yīng)用程序編程接口(API ), OpenGL的庫(kù)函數(shù)遵循C語(yǔ)言的調(diào)用規(guī)定。在以后的示例中,程序都是以C語(yǔ)言編寫的。一個(gè)實(shí)用的OpenGL程序從規(guī)模上說(shuō)比較龐大,但基本結(jié)構(gòu)是非常簡(jiǎn)單的。一般包括以下幾個(gè)部分:(1)定義繪制對(duì)象。通常對(duì)象繪制于指定的窗口之上。首先必須定義窗口在屏幕上的位置及窗口的大小等屬性,然后在窗口上建立坐標(biāo)

13、系,定義圖形在窗口中的生成位置。(2)初始化。即初始化OpenGL中的狀態(tài)變量,為下一步圖形顯示做準(zhǔn)備工作。包括定義投影類型、定義光照模型及紋理映射等。(3)渲染屏幕圖像。按照顯示的方位角度等要求繪制并顯示圖形,將物體的數(shù)學(xué)描述及狀態(tài)變量如顏色紋理等變換為屏幕像素。OpenGL函數(shù)命名與數(shù)據(jù)類型 OpenGL函數(shù)都遵循一個(gè)命名的約定,函數(shù)的頭幾個(gè)字母會(huì)說(shuō)明該函數(shù)來(lái)自哪個(gè)庫(kù),后面部分包含一個(gè)根命令,代表該函數(shù)相應(yīng)的OpenGL命令,后綴中的數(shù)字和字母表示該函數(shù)需要的參數(shù)類型與個(gè)數(shù)。比如對(duì)于glColor3f命令,g1前綴代表該函數(shù)來(lái)自g1庫(kù),其根命令為Color,代表對(duì)顏色的設(shè)定,后綴3f表示該

14、函數(shù)需要3個(gè)浮點(diǎn)型的參數(shù)。同樣地,OpenGL中對(duì)常量的定義,都是以大寫字母GL開頭,并且所有的字母都大寫,在單詞之間以下劃線進(jìn)行分隔,例如GL_ COLOR BUFFER BIT等。有一些OpenGL函數(shù)的后綴中帶有一個(gè)字母V,這表示該命令帶有一個(gè)指向矢量或數(shù)組值的指針作為參數(shù)。許多函數(shù)都有矢量和非矢量?jī)煞N參數(shù)形式。OpenGL中還提供了一些更具描述性的名稱。如GLenum用于枚舉變量,GLbitfield用于包含二進(jìn)制位字段的變量,GLboolean變量用于表示真或假的條件。OpenGL數(shù)據(jù)類型也可同樣用于對(duì)數(shù)組和指針的定義。比如10個(gè)GLint的變量數(shù)組只需定義為:GLint ints1

15、0;對(duì)于指向GLfloat變量的指針可以定義為:GLfloat*floats;庫(kù)和頭文件 所有的OpenGL核心庫(kù)的函數(shù)、類型和宏的原型都包括在頭文件gl.h中,實(shí)用函數(shù)庫(kù)glu函數(shù)的原型則位于另一個(gè)頭文件glu.h中,這些文件通常要放在編程環(huán)境include路徑中某個(gè)特殊目錄下。窗口坐標(biāo)設(shè)置 在所有的窗口操作中,當(dāng)執(zhí)行初始化打開窗口、移動(dòng)窗口或改變窗口的大小尺寸操作時(shí),都會(huì)調(diào)用到GLUT中的一個(gè)子程序:函數(shù)如下:Void glutReshapeFunc(void(*func)(int width,int height);它所包含的兩個(gè)變量width和height,指定了窗口新的寬度和高度。只

16、要窗口的大小發(fā)生改變,glutReshapeFunc()就可以收到新的寬度與高度。我們就可以利用這些信息,定義OpenGL函數(shù)在窗口上坐標(biāo)系及作圖區(qū)域。對(duì)于二維的坐標(biāo)系,最常用的方法是調(diào)用函數(shù)glutReshapeFunc(myreshape),其中reshape()是用戶自己定義的函數(shù)。(2) 、闡述三維表面數(shù)據(jù)結(jié)構(gòu)(以立方體為例) 假設(shè)要表示的形體T可以放在一個(gè)充分大的實(shí)體C內(nèi),C的邊長(zhǎng)為2n,形體TC,它的八叉樹可以用以下遞歸的方法來(lái)定義:八叉樹的每個(gè)節(jié)點(diǎn)與C的一個(gè)子立方體對(duì)應(yīng),樹根與C本身相對(duì)應(yīng),如果T=C,那么T的八叉樹僅有樹根,如果T不等于 C,則C等分為八個(gè)子立方體,每個(gè)子立方體

17、與樹根的一個(gè)子節(jié)點(diǎn)相對(duì)應(yīng)。只要某個(gè)子立方體不是完全空白或完全為T所占據(jù),就要被八等分,從而對(duì)應(yīng)的節(jié)點(diǎn)也就有了八個(gè)子節(jié)點(diǎn)。這樣遞歸判斷、分割一直要進(jìn)行到節(jié)點(diǎn)所對(duì)應(yīng)的立方體或是完全空白,或者是完全為T占據(jù),或是其大小已是預(yù)先定義的體素大小,并且對(duì)它與T之交作一定的“舍入”,使體素或認(rèn)為是空白的,或認(rèn)為是T占據(jù)的。如此所生成的八叉樹上的節(jié)點(diǎn)可以分為三類:一是灰節(jié)點(diǎn),對(duì)應(yīng)的立方體部分地為T所占據(jù);二是白節(jié)點(diǎn),對(duì)應(yīng)的立方體中無(wú)T的內(nèi)容;三是黑節(jié)點(diǎn),對(duì)應(yīng)的立方體全為T所占據(jù)。后兩類又稱為葉節(jié)點(diǎn)。 與四叉樹結(jié)構(gòu)相類似的八叉樹結(jié)構(gòu)可以沿用四叉樹的有關(guān)方法。根據(jù)存儲(chǔ)方式的不同,八叉樹可以分為常規(guī)的、線形的、一對(duì)

18、八的八叉樹等等。 1)規(guī)則的八叉樹 八叉樹的存儲(chǔ)結(jié)構(gòu)是用一個(gè)有九個(gè)字段的記錄來(lái)表示樹中的每個(gè)結(jié)點(diǎn),其中一個(gè)字段用來(lái)秒蘇該結(jié)點(diǎn)的特性,其余的八段用來(lái)作為存放指向其八個(gè)子結(jié)點(diǎn)的指針。但是規(guī)則八叉樹的缺陷較多,最大的問(wèn)題就是指針占用了很大的空間。因此雖然其易于理解掌握,但存儲(chǔ)代價(jià)太大。 2)線形八叉樹 線形八叉樹注重考慮的是如何提高空間利用率,用某一預(yù)先確定的次序遍歷八叉樹,將八叉樹轉(zhuǎn)換成一貫線形表,表的每個(gè)元素與一個(gè)結(jié)點(diǎn)相對(duì)應(yīng)。線形八叉樹不僅節(jié)省存儲(chǔ)空間,對(duì)某些運(yùn)算也比較方便,但是不夠靈活。 3)一對(duì)八式的八叉樹 在一對(duì)八式的八叉樹中,一個(gè)非葉結(jié)點(diǎn)有八個(gè)子結(jié)點(diǎn),如果一個(gè)記錄與一個(gè)結(jié)點(diǎn)對(duì)應(yīng),那么在這

19、個(gè)記錄中描述的是這個(gè)結(jié)點(diǎn)的八個(gè)子結(jié)點(diǎn)的特征值,而指針給出的則是該八個(gè)子結(jié)點(diǎn)所對(duì)應(yīng)記錄的存放處,而且還隱含地假設(shè)了這些子結(jié)點(diǎn)記錄存放的次序。也就是說(shuō),即使某個(gè)記錄是不必要的,那么相應(yīng)的存儲(chǔ)位置也必須空閑在那里,以保證不會(huì)錯(cuò)誤地存取到其它同層結(jié)點(diǎn)的記錄。很顯然,當(dāng)它不是完全八叉樹的時(shí)候,存儲(chǔ)空間會(huì)有一定的浪費(fèi)。為了克服這種缺陷,一是增加計(jì)算量,即在存取相應(yīng)結(jié)點(diǎn)記錄之前,首先檢查它的父結(jié)點(diǎn)記錄,看一下之前有幾個(gè)葉結(jié)點(diǎn),從而可以知道應(yīng)該如何存取所需結(jié)點(diǎn)記錄。這種方法可以減小存儲(chǔ)需求,但會(huì)增加計(jì)算量;另一個(gè)是在記錄中增加一定的信息,使計(jì)算工作適當(dāng)減少或者更方便。例如在原記錄中增加三個(gè)字節(jié),一分為八,每個(gè)

20、字節(jié)點(diǎn)對(duì)應(yīng)三位,代表它的子結(jié)點(diǎn)在指針指向區(qū)域中的偏移。(三)、總結(jié)OpenGL顏色、紋理、光源設(shè)置方法以及鼠標(biāo)和鍵盤響應(yīng)函數(shù)的用法顏色:從視覺的角度看,顏色由其色彩(hue )、飽和度(saturation)和亮度( lightness)決定。顏色模型:RGB顏色模型、CMY顏色模型、HSV顏色模型。在執(zhí)行程序之初,必須先設(shè)置顏色的顯示方式。OpenGL中提供了兩種顏色模式:RGBA模式和顏色索引模式。顏色的顯示方式一旦確定下來(lái),就不能再進(jìn)行更改。對(duì)于創(chuàng)建RGBA模式或顏色索引模式的窗口,使用命令:glutInitDisplayMode(GLU_ RGB);或:glutInitDisplayM

21、ode(GLUT_INDEX);在RGBA模式下,可使用glColor*()函數(shù)指定當(dāng)前顏色。Void glColor3b s i f d ub us ui(TYPE R,TYPE G,TYPE B);Void glColor4b s i f d ub us ui(TYPE R,TYPE G,TYPE B,TYPE A);Void glColor3b s i f d ub us ui(const TYPE*v);Void glColor4b s i f d ub us ui(const TYPE*v);功能: 用RGBA模式指定當(dāng)前顏色。在顏色索引模式中,可使用如下函數(shù)來(lái)設(shè)置當(dāng)前的顏色索引:V

22、oid glIndexs i f d(TYPE C);Void glIndexs i f d(TYPE C);著色模式:OpenGL中的函數(shù)glShadeModel()用于指定不同的著色模式。Void glShadeModel(Glrnum mode);紋理:我們可使用函數(shù)g1TexImage1D()和函數(shù)g1TexImage3D(),建立一維、二維、三維紋理映射。幾何對(duì)象上的點(diǎn)與紋理單元之間的映射是通過(guò)函數(shù)g1TexCoord*()完成的:可通過(guò)設(shè)置矩陣模式和使用處理模型一觀視矩陣與投影矩陣的相同技術(shù)來(lái)更改紋理矩陣:glMatrixMode(GL_ TEXTURE);盡管函數(shù)glTexCoo

23、rd*()和glTexImage*()是紋理映射中的必備例程,但還必須設(shè)置一些額外的所需參數(shù)。這里還有其他可選參數(shù),它們?yōu)槿绾螌⒓y理應(yīng)用到對(duì)象表面提供了更多的控制??梢酝ㄟ^(guò)g1TexParameter*)設(shè)置這些參數(shù)。二維紋理的典型用法可能類似于以下形式:對(duì)表面應(yīng)用紋理:通過(guò)函數(shù)glTexEnv*()設(shè)置。置換(replace)模式是最重要模式,在該模式中,只通過(guò)紋理顏色確定從幀緩存中可看到的顏色。我們可通過(guò)函數(shù)glTexEnv*()設(shè)置這些模式。默認(rèn)的調(diào)諧模式與執(zhí)行以下函數(shù)等價(jià):glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);OpenGL要求紋理大小(小于任何邊界)是2的冪。我們可以使用GLU函數(shù)gluScaleImage()將圖像映射成紋理映射可接受的大小,還可以通過(guò)函數(shù)glCopyTexImage2D()從幀緩存圖像獲取紋理映射。我們使用GLU函數(shù)gluQquadricTexture()來(lái)啟動(dòng)紋理坐標(biāo)的自動(dòng)生成:紋理對(duì)象:光源設(shè)置方法:定義光源:定義材質(zhì):控制陰影計(jì)算:若確實(shí)需要

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論