畢業(yè)論文計(jì)算機(jī)圖形學(xué)——OpenGL_第1頁(yè)
畢業(yè)論文計(jì)算機(jī)圖形學(xué)——OpenGL_第2頁(yè)
畢業(yè)論文計(jì)算機(jī)圖形學(xué)——OpenGL_第3頁(yè)
畢業(yè)論文計(jì)算機(jī)圖形學(xué)——OpenGL_第4頁(yè)
畢業(yè)論文計(jì)算機(jī)圖形學(xué)——OpenGL_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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、 畢業(yè)論文題 目: 基于opengl的工藝品茶壺設(shè)計(jì) 系 別: 計(jì)算機(jī)與信息工程系 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 屆 別: 2012屆 目 錄緒論(2)第1章 開(kāi)發(fā)環(huán)境的構(gòu)建(2)1.1 開(kāi)發(fā)環(huán)境簡(jiǎn)述(2)1.2 visual c+ 6.0軟件簡(jiǎn)介(3)1.3 opengl概述(5)第2章 系統(tǒng)分析與設(shè)計(jì)(2)2.1 opengl材質(zhì)與光照的原理(7)2.1.1 opengl物體材料的選擇(8)2.1.2 opengl光源建立及啟動(dòng)(9)2.2 opengl幾何變換的原理及設(shè)計(jì)(10)2.2.1 幾何變換的原理(10)2.2.2 幾何變換縮放(2)2.2.3 幾何變換旋轉(zhuǎn)(2)2.3 openg

2、l動(dòng)畫(huà)的設(shè)計(jì)(2)2.4 opengl紋理的設(shè)計(jì)(2)2.4.1 紋理映射的原理(2)2.4.2 紋理定義(2)第3章 系統(tǒng)實(shí)現(xiàn)(2)3.1 工藝品茶壺項(xiàng)目建立(2)3.2 windows窗口設(shè)計(jì)以及功能實(shí)現(xiàn)(2)3.3 工藝品程序功能實(shí)現(xiàn)(2)3.3.1 makestripeimage()函數(shù)(2)3.3.2 init()函數(shù)(2)3.3.3 display()函數(shù)(2)3.3.4 reshape ()函數(shù)(2)3.3.5 時(shí)間控件timer()函數(shù)(2)3.3.6 鼠標(biāo)控件mouse()函數(shù)(2)3.3.7 動(dòng)作控件motion()函數(shù)(2)第4章 運(yùn)行結(jié)果與分析(2)4.1 藝術(shù)品茶壺顏

3、色變化分析(2)4.2 藝術(shù)品茶壺造型變化分析(2)4.3 藝術(shù)品茶壺紋理實(shí)現(xiàn)與分析(2)4.4 藝術(shù)品茶壺動(dòng)畫(huà)實(shí)現(xiàn)與分析(2)結(jié)束語(yǔ)(2)致謝(2)參考文獻(xiàn)(2)基于opengl的工藝品茶壺設(shè)計(jì) 摘 要:近年來(lái),圖形圖像制作技術(shù)發(fā)展很快,尤其是計(jì)算機(jī)圖形學(xué),圖像開(kāi)始進(jìn)入設(shè)計(jì)領(lǐng)域,更加促進(jìn)了設(shè)計(jì)領(lǐng)域的快速發(fā)展。電腦與美術(shù)的結(jié)合創(chuàng)造了電腦美術(shù)藝術(shù)。在產(chǎn)品設(shè)計(jì)、動(dòng)畫(huà)、場(chǎng)景漫游等領(lǐng)域都有廣泛的應(yīng)用。本文主要說(shuō)明了在vc+6.0環(huán)境下如何使用opengl生成工藝品茶壺。在吸取了計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)科學(xué)、光學(xué)等多領(lǐng)域先進(jìn)理論成果的基礎(chǔ)上,系統(tǒng)地論述了基于opengl下藝術(shù)品茶壺的研究和實(shí)現(xiàn)及其相關(guān)理論和

4、技術(shù)。本文主要做了以下幾方面的工作:具體包括對(duì)軟件程序各方面需求及可行性的分析、建立visual c+6.0環(huán)境下的opengl程序框架、opengl下藝術(shù)品茶壺的具體實(shí)現(xiàn)與分析。最后,基于上述理論和成果,以windows xp系統(tǒng)和visual c+6.0為平臺(tái),利用基本opengl函數(shù)編程技術(shù)實(shí)現(xiàn)了藝術(shù)品茶壺三維圖形。使最終在視覺(jué)上產(chǎn)生動(dòng)態(tài)效果和藝術(shù)效果,達(dá)到以三維圖像效果出現(xiàn)使觀察者可以在視覺(jué)上得以享受。關(guān)鍵詞:opengl;茶壺(陶瓷);材質(zhì)與光照;旋轉(zhuǎn);紋理實(shí)現(xiàn) opengl-based arts and crafts design-teapotabstract: in recent

5、 years, the graphic image production technology has developed rapidly, especially in computer graphics, images began to enter the field of design, more to promote the rapid development of the design field. the combination of computer and art to create the art of computer art. have wide applications

6、in the field of product design, animation, scene roaming. in this paper illustrates how to use opengl in vc + + 6.0 environment to generate handicraft teapot. draw computer graphics, computer science, optics and other advanced multi-field theoretical basis of the results, the system of art teapot in

7、 opengl-based research and its related theory and technology.in this paper, the following aspects: including analysis of the need for and feasibility of the software program, establish the procedural framework of opengl in visual c + + 6.0 environment, implementation and analysis of the opengl under

8、 art teapot.finally, based on the above theory and results, to the windows xp system and visual c + + 6.0 as a platform for basic opengl functions programming techniques to achieve the three-dimensional graphics of the art teapot. eventually produce dynamic visual effects and artistic effect, to ach

9、ieve three-dimensional effect so that the observer can visually be able to enjoy.keywords: opengl ;teapot (ceramic); bezier surface;materials and light;rotation;texture緒論隨著文化和科技的飛速發(fā)展,計(jì)算機(jī)技術(shù)也得到快速的跟進(jìn)與發(fā)展,計(jì)算機(jī)圖形學(xué)是計(jì)算機(jī)科學(xué)中一個(gè)重要領(lǐng)域,它使用計(jì)算方法產(chǎn)生圖形與圖像,在人機(jī)信息交流、計(jì)算機(jī)輔助設(shè)計(jì)、科學(xué)及統(tǒng)計(jì)數(shù)據(jù)形象化,以及數(shù)字化藝術(shù)創(chuàng)作等多方面有廣泛的應(yīng)用。歸結(jié)起來(lái)計(jì)算機(jī)圖形學(xué)在現(xiàn)代生活中起到

10、不可忽略的作用,在計(jì)算機(jī)圖形學(xué)中應(yīng)用程序設(shè)計(jì)界面opengl是重點(diǎn)理論知識(shí)。opengl作為一種圖形與硬件的接口,與其他圖形程序開(kāi)發(fā)工具相比較,它提供了眾多圖形函數(shù),直觀的編程環(huán)境簡(jiǎn)化了三維圖形程序。隨著3d技術(shù)越來(lái)越多的被開(kāi)發(fā),更多的開(kāi)發(fā)人員選擇opengl作為開(kāi)發(fā)工具,以簡(jiǎn)化操作。目前opengl已成為三維圖形的開(kāi)發(fā)標(biāo)準(zhǔn)。本設(shè)計(jì)就是利用計(jì)算機(jī)的圖形學(xué)和對(duì)圖像的處理來(lái)設(shè)計(jì)茶壺工藝品,利用opengl軟件平臺(tái)下通過(guò)vc+6.0編輯語(yǔ)言來(lái)對(duì)工藝品的光線和顏色的物理性質(zhì)、光的傳播與反射,以及人的視覺(jué)系統(tǒng)做一些處理。本論文是從環(huán)境平臺(tái)的構(gòu)建、系統(tǒng)分析與設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)、結(jié)果運(yùn)行與分析這四章模塊一一論述

11、。在第一章開(kāi)發(fā)環(huán)境的構(gòu)建中本論文是從開(kāi)發(fā)環(huán)境簡(jiǎn)述開(kāi)始對(duì)vc+6.0軟件和opengl做出簡(jiǎn)要概述,了解構(gòu)建環(huán)境的基本要素以及每個(gè)要素的特點(diǎn)和功能,其次在本次論文設(shè)計(jì)中著重對(duì)系統(tǒng)的分析與設(shè)計(jì)、系統(tǒng)的實(shí)現(xiàn)做出具體的理論性分析。在第二章中主要對(duì)opengl的材質(zhì)與光照、幾何變換、動(dòng)畫(huà)以及紋理的實(shí)現(xiàn)做出原理性敘述,通過(guò)第二章基本上對(duì)設(shè)計(jì)藝術(shù)品茶壺的結(jié)構(gòu)做出框架上的分析,在第二章的分支章節(jié)中又分別對(duì)物體材料的選擇、光源的建立與啟動(dòng)、幾何縮放變換、幾何旋轉(zhuǎn)變換等給予詳細(xì)的理論解釋,這樣工藝品茶壺的結(jié)構(gòu)基本上就在理論上形成模式,在這種模式的基礎(chǔ)上再對(duì)藝術(shù)品茶壺做動(dòng)畫(huà)和紋理上的理論處理。在第三章中主要是實(shí)現(xiàn)功

12、能,通過(guò)vc+6.0語(yǔ)言按照第二章的理論分析來(lái)編寫程序,第三章在本論文中是起關(guān)鍵性作用,它決定了工藝品茶壺是否能按照理論要求實(shí)現(xiàn),所以本論文從設(shè)計(jì)的角度看第二章節(jié)是理論分析部分,第三章節(jié)是語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)部分,所以二者缺一不可,這是本次論文設(shè)計(jì)的主要內(nèi)容。在第四章中主要是對(duì)程序的運(yùn)行結(jié)果作一一分析,通過(guò)對(duì)工藝品茶壺的顏色、造型、紋理、動(dòng)畫(huà)等作一一分析,得出最終的運(yùn)行結(jié)果評(píng)估,確定是否和理論分析的相一致,從而確定論文設(shè)計(jì)在理論上具有說(shuō)服力和實(shí)際的研究?jī)r(jià)值??傊?,本論文課題在opengl軟件平臺(tái)下通過(guò)vc+6.0來(lái)對(duì)工藝品茶壺的大小、結(jié)構(gòu)、顏色以及動(dòng)畫(huà)效果都做出了具體的敘述,通過(guò)語(yǔ)言的編寫對(duì)工藝品茶壺

13、的具體參數(shù)進(jìn)行設(shè)置,使最終在視覺(jué)上產(chǎn)生動(dòng)態(tài)效果和藝術(shù)效果,達(dá)到以三維圖像效果出現(xiàn)使觀察者可以在視覺(jué)上得以享受。最終達(dá)到論文的理論要求,也充分體現(xiàn)出此次論文的實(shí)際研究?jī)r(jià)值。第1章 開(kāi)發(fā)環(huán)境的構(gòu)建1.1 開(kāi)發(fā)環(huán)境簡(jiǎn)述visual c+是微軟公司推出的基于windows環(huán)境的一種面向?qū)ο蟮目梢暬幊汰h(huán)境,被公認(rèn)為微軟第一計(jì)算機(jī)語(yǔ)言。盡管visual c+是可視化編程中的佼佼者,但它并不是圖形圖像編程的最好選擇。opengl是一個(gè)與圖形硬件無(wú)關(guān)的應(yīng)用程序開(kāi)發(fā)接口(api),是一個(gè)完全可移植、速度很快的3d圖形和建模庫(kù),具有圖形質(zhì)量高、可靠性高、可移植性好等眾多優(yōu)點(diǎn),可以運(yùn)行在window平臺(tái)和unix

14、平臺(tái)上。為了利用visual c+6.0的強(qiáng)大功能來(lái)實(shí)現(xiàn)對(duì)opengl三維圖形的繪制,微軟將opengl集成到了windows中,windows提供了opengl32dll和glu32dll動(dòng)態(tài)鏈接庫(kù),visual c+6.0包含了gl庫(kù)(opengl32lib)、輔助庫(kù)(glaux1ib)和實(shí)用庫(kù)(glu321ib)。這使opengl成為最優(yōu)秀的可化編程接口之一,可以方便地利用這個(gè)圖形庫(kù),使編程簡(jiǎn)單、快速,opengl中的rgba顏色模式,結(jié)合反走樣和顏色融合,使圖形圖像更加逼真。所以,visual c+6.0結(jié)合opengl編程是一種比較合理的選擇。1.2 visual c+ 6.0軟件簡(jiǎn)

15、介visual c+6.0,簡(jiǎn)稱vc或者vc6.0,是微軟推出的一款c+編譯器,將“高級(jí)語(yǔ)言”翻譯為“機(jī)器語(yǔ)言(低級(jí)語(yǔ)言)”的程序。visual c+是一個(gè)功能強(qiáng)大的可視化軟件開(kāi)發(fā)工具。visual c+6.0由microsoft開(kāi)發(fā), 它不僅是一個(gè)c+ 編譯器,而且是一個(gè)基于windows操作系統(tǒng)的可視化集成開(kāi)發(fā)環(huán)境(integrated development environment,ide)。visual c+6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppwizard、類向?qū)lass wizard等開(kāi)發(fā)工具。 這些組件通過(guò)一個(gè)名為developer studio的組件集成為

16、和諧的開(kāi)發(fā)環(huán)境。microsoft的主力軟件產(chǎn)品。visual c+是一個(gè)功能強(qiáng)大的可視化軟件開(kāi)發(fā)工具。自1993年microsoft公司推出visual c+1.0后,隨著其新版本的不斷問(wèn)世,visual c+已成為專業(yè)程序員進(jìn)行軟件開(kāi)發(fā)的首選工具。雖然微軟公司推出了visual c+.net(visual c+7.0),但它的應(yīng)用的很大的局限性,只適用于windows 2000,windows xp和windows nt4.0。所以實(shí)際中,更多的是以visual c+6.0為平臺(tái)。通常使用visual c+6.0軟件時(shí),可以在正規(guī)軟件下載網(wǎng)站上下載vc+6.0,存放在本地磁盤。運(yùn)行.exe

17、文件,按安裝向?qū)б徊揭徊降牟僮?,直到vc+ 6.0安裝成功。visual c+6.0軟件的特點(diǎn):(1)visual c+6.0是microsoft公司推出的功能最強(qiáng)大、最復(fù)雜的編程語(yǔ)言之一,它基于c/c+語(yǔ)言,因此在學(xué)習(xí)它之前應(yīng)該對(duì)c+程序設(shè)計(jì)語(yǔ)言以及visual c+6.0的特點(diǎn)做一了解;(2)visual c+6.0是運(yùn)行于windows操作系統(tǒng)中的交互式、可視化集成開(kāi)發(fā)軟件,它是在windows環(huán)境下進(jìn)行大型軟件開(kāi)發(fā)的首選編程語(yǔ)言,同其他可視化開(kāi)發(fā)軟件一樣,visual c+6.0集程序的代碼編輯、編譯、連接、調(diào)試等功能于一體,為編程人員提供一個(gè)既完整又方便的開(kāi)發(fā)環(huán)境;(3)除了和其他軟

18、件所共同的優(yōu)點(diǎn)以外,visual c+6.0還具備一些其他可視化集成開(kāi)發(fā)軟件不具備的特點(diǎn);(4)visual c+6.0的語(yǔ)法符合ansic+標(biāo)準(zhǔn),并在此基礎(chǔ)上針對(duì)windows操作系統(tǒng)增加了一些語(yǔ)句;(5)集成了mfc類庫(kù),mfc封裝了windows api函數(shù)和消息,使編程人員可使用它高效率地開(kāi)發(fā)各種應(yīng)用程序;(6)提供了mfc appwizard,可方便地生成程序框架;(7)提供了基于mfc的classwizard,通過(guò)它可輕松完成對(duì)各種mfc類的使用與維護(hù)。1.3 opengl概述微軟每推出一個(gè)重要的windows版本,一般都會(huì)同時(shí)推出一個(gè)sdk(software developmen

19、t kit)。sdk包含了開(kāi)發(fā)該windows版本所需的windows函數(shù)和常數(shù)定義、api函數(shù)說(shuō)明文檔、相關(guān)工具和示例。sdk是software development kit的縮寫,中文意思是“軟件開(kāi)發(fā)工具包”。 開(kāi)發(fā) windows 平臺(tái)下的應(yīng)用程序所使用的 sdk只是廣義 sdk 的一個(gè)子集。首先要接觸的是“api”,也就是 application programming interface,其實(shí)就是操作系統(tǒng)留給應(yīng)用程序的一個(gè)調(diào)用接口,應(yīng)用程序通過(guò)調(diào)用操作系統(tǒng)的 api 而使操作系統(tǒng)去執(zhí)行應(yīng)用程序的命令(動(dòng)作)。在 windows 中,系統(tǒng) api 是以函數(shù)調(diào)用的方式提供的。同樣是取得

20、操作系統(tǒng)的版本號(hào),在 windows 中所要做的就是調(diào)用 getversionex() 函數(shù)。dll即 dynamic link library(動(dòng)態(tài)鏈接庫(kù))。我們經(jīng)常會(huì)看到一些 .dll 格式的文件,這些文件就是動(dòng)態(tài)鏈接庫(kù)文件,其實(shí)也是一種可執(zhí)行文件格式。跟 .exe 文件不同的是,.dll 文件不能直接執(zhí)行,他們通常由 .exe 在執(zhí)行時(shí)裝入,內(nèi)含有一些資源以及可執(zhí)行代碼等。為了使用 dll 中的 api 函數(shù),我們必須要有 api 函數(shù)的聲明(.h)和導(dǎo)入庫(kù)(.lib)1。opengl是一種過(guò)程性而不是描述性的圖形api,它并不描述場(chǎng)景以及外觀。opengl的基礎(chǔ)是以兩百多個(gè)函數(shù)組成。比

21、如四方體、長(zhǎng)方體等。另外,opengl支持rgba顏色模式、光照、縮小放大、旋轉(zhuǎn)以及許多其它特殊效果和功能。這些函數(shù)分放在兩個(gè)函數(shù)庫(kù)內(nèi):一個(gè)是opengl核心函數(shù)庫(kù)(core library),稱為gl或gl,另一個(gè)是opengl實(shí)用函數(shù)庫(kù)(utility library),稱為glu或glu。實(shí)用函數(shù)庫(kù)中的函數(shù)是用核心函數(shù)庫(kù)中的函數(shù)庫(kù)寫成。如圖1所示。圖1 opengl api框圖另外還有一個(gè)為與系統(tǒng)無(wú)關(guān)的視窗及交互操作提供支持的opengl實(shí)用工具庫(kù)(utility toolkit),稱為glut或glut,該工具庫(kù)已在不同的系統(tǒng)平臺(tái)上實(shí)現(xiàn),通過(guò)適當(dāng)?shù)暮瘮?shù)庫(kù)與底層的視窗操作系統(tǒng)接口。例如w

22、gl用于微軟視窗(microsoft windows)。opengl可以被看成是一臺(tái)狀態(tài)機(jī),即一個(gè)由它當(dāng)前的狀態(tài)來(lái)決定其行為的系統(tǒng),而這個(gè)系統(tǒng)當(dāng)前的狀態(tài)則取決于各系統(tǒng)變量與系統(tǒng)設(shè)置此時(shí)此刻的值。大多數(shù)opengl函數(shù)分屬兩個(gè)類型:一類用于改變系統(tǒng)的狀態(tài)(例如向幀緩沖器畫(huà)圖所用的顏色,以及將三維物體投影到二維視平面的方式),另一類則將代表幾何物體的數(shù)據(jù)傳給系統(tǒng)進(jìn)行處理(例如用系統(tǒng)目前設(shè)定的畫(huà)圖顏色在給定的兩點(diǎn)之間畫(huà)一條直線,或者用系統(tǒng)目前設(shè)定的投影方式畫(huà)出一張書(shū)桌的正視圖)。在圖形實(shí)現(xiàn)流程中,opengl及其他圖形api的內(nèi)在工作方式有一個(gè)重要的結(jié)構(gòu)與操作特征,即圖形實(shí)現(xiàn)流程或圖形流水線。對(duì)圖形

23、api而言,代表要描繪的幾何物體的數(shù)據(jù)構(gòu)成圖形流水線的輸入。流水線按系統(tǒng)的默認(rèn)設(shè)置或用戶指定的設(shè)置完成如空間操縱(包括移動(dòng)、縮放、旋轉(zhuǎn))等各種操作,最后產(chǎn)生一幅描繪這些物體的圖像。流水線由兩步組成:幾何變換與掃描轉(zhuǎn)換。幾何變換旨在對(duì)進(jìn)入流水線的數(shù)據(jù)履行空間操縱,掃描轉(zhuǎn)換則將變換后的物體映射到圖像空間,也就是像素坐標(biāo)系所在的離散空間。opengl是專門為三維圖像生成而設(shè)計(jì)的。其中沒(méi)有單獨(dú)的二維繪圖流水線,所有二維都作為對(duì)應(yīng)的在維操作的特例(z=0)來(lái)處理。三維圖形流水線除此之外還需要幾項(xiàng)附加作業(yè)。作業(yè)之一是將三維信息投影到二維視平面上,這項(xiàng)操作等價(jià)于照相時(shí)鏡頭所起的作用。另一項(xiàng)作業(yè)是隱藏面消隱,

24、被處于觀察者視線上的不透明物體部分或全部遮擋的物體表面不應(yīng)出現(xiàn)的圖像里。此外還有必要進(jìn)行光照計(jì)算以模擬物體表面的自然陰影。許多應(yīng)用程序(特別是交互式應(yīng)用程序)利用opengl實(shí)用工具庫(kù)為事件驅(qū)動(dòng)程序設(shè)計(jì)所提供的支持2。此種應(yīng)用程序通常在必要的初始化之后進(jìn)入glut事件處理循環(huán)。在opengl函數(shù)語(yǔ)法以及語(yǔ)法的規(guī)定中通常對(duì)數(shù)據(jù)的類型有一定的要求。由于原始數(shù)據(jù)類型(如整型)的長(zhǎng)短大小可能因系統(tǒng)不同而有差異,opengl采用名為glint,glfloat及gldouble等內(nèi)置數(shù)據(jù)類型。第2章 系統(tǒng)分析與設(shè)計(jì)工藝品茶壺設(shè)計(jì)是一個(gè)集顏色、材質(zhì)與光照、幾何變換等于一體的功能實(shí)現(xiàn)。其中茶壺顏色的變換,體型

25、的改變是整個(gè)設(shè)計(jì)的核心部分,再加上材質(zhì)與光照的渲染,使整個(gè)茶壺的設(shè)計(jì)更加真實(shí)。在這一論文中,采用opengl技術(shù),通過(guò)讀入.cpp文件,在茶壺結(jié)構(gòu)、顏色變換、三維視角下觀察茶壺等方面完成代碼實(shí)現(xiàn)。下面就分別對(duì)這些實(shí)現(xiàn)技術(shù)進(jìn)行詳細(xì)的介紹。2.1 opengl材質(zhì)與光照的原理從視覺(jué)角度講,光有三個(gè)基本特征。第一個(gè)稱為亮度,這對(duì)應(yīng)于光的稱為光度的物理性質(zhì)。光度是對(duì)光所攜帶的總能量的度量。光的光度越高,它對(duì)觀察者來(lái)說(shuō)就越明亮。光的第二個(gè)視覺(jué)上的特征稱為色調(diào),這是用來(lái)將白光與紅光或綠光區(qū)分開(kāi)來(lái)。從理想化的能量分布的光來(lái)講,色調(diào)對(duì)應(yīng)于另一個(gè)稱為該分布的主導(dǎo)波長(zhǎng)的物理性質(zhì)。第三個(gè)視覺(jué)上的特征稱為飽和度,用來(lái)

26、描述光的鮮艷程度。飽和度對(duì)應(yīng)于稱為激勵(lì)純度的物理性質(zhì)。后者被定義為光度中分配給主導(dǎo)或純正顏色部分的百分比3。三基色理論在光學(xué)中屬于最基本的理論知識(shí),假定s代表某一給定光,即引起顏色感覺(jué)的外界刺激。我們可以通過(guò)按適當(dāng)比例將來(lái)自三種顏色(三原色)的光源的光混合在一起來(lái)取得s的效果(也就是看到s的觀察者的顏色感覺(jué)): s=r紅+g綠+b藍(lán)換句話說(shuō),對(duì)于觀察者來(lái)說(shuō),給定光和來(lái)自三原色光源的成比例的混合光看起來(lái)完全一樣。理論上只要三種顏色中沒(méi)有任何一種可以用另外兩種的線性組合來(lái)表示,也就是說(shuō)沒(méi)有任何一種的視覺(jué)效果可以通過(guò)另外兩種的線性混合來(lái)獲得,這三種顏色就構(gòu)成一組三原色3。opengl用材料對(duì)光的紅、

27、綠、藍(lán)三原色的反射率來(lái)近似定義材料的顏色。象光源一樣,材料顏色也分成環(huán)境、漫反射和鏡面反射成分,它們決定了材料對(duì)環(huán)境光、漫反射光和鏡面反射光的反射程度。在進(jìn)行光照計(jì)算時(shí),材料對(duì)環(huán)境光的反射率與每個(gè)進(jìn)入光源的環(huán)境光結(jié)合,對(duì)漫反射光的反射率與每個(gè)進(jìn)入光源的漫反射光結(jié)合,對(duì)鏡面光的反射率與每個(gè)進(jìn)入光源的鏡面反射光結(jié)合。對(duì)環(huán)境光與漫反射光的反射程度決定了材料的顏色,并且它們很相似。對(duì)鏡面反射光的反射率通常是白色或灰色(即對(duì)鏡面反射光中紅、綠、藍(lán)的反射率相同)。鏡面反射高光最亮的地方將變成具有光源鏡面光強(qiáng)度的顏色。例如一個(gè)光亮的紅色塑料球,球的大部分表現(xiàn)為紅色,光亮的高光將是白色的。在材質(zhì)rgb值和光源

28、rgb值的關(guān)系中材質(zhì)的顏色與光源的顏色有些不同。對(duì)于光源,r、g、b值等于r、g、b對(duì)其最大強(qiáng)度的百分比。若光源顏色的r、g、b值都是1.0,則是最強(qiáng)的白光;若值變?yōu)?.5,顏色仍為白色,但強(qiáng)度為原來(lái)的一半,于是表現(xiàn)為灰色;若rg1.0,b0.0,則光源為黃色。對(duì)于材質(zhì),r、g、b值為材質(zhì)對(duì)光的r、g、b成分的反射率。比如,一種材質(zhì)的r1.0、g0.5、b0.0,則材質(zhì)反射全部的紅色成分,一半的綠色成分,不反射藍(lán)色成分。也就是說(shuō),若opengl的光源顏色為(lr、lg、lb),材質(zhì)顏色為(mr、mg、mb),那么,在忽略所有其他反射效果的情況下,最終到達(dá)眼睛的光的顏色為(lr*mr、lg*mg

29、、lb*mb)。同樣,如果有兩束光,相應(yīng)的值分別為(r1、g1、b1)和(r2、g2、b2),則opengl將各個(gè)顏色成分相加,得到(r1+r2、g1+g2、b1+b2),若任一成分的和值大于1(超出了設(shè)備所能顯示的亮度)則約簡(jiǎn)到1.0。在實(shí)際應(yīng)用的許多情況下,不同的物體或同一物體的不同部分都有可能設(shè)置不同的材質(zhì),opengl函數(shù)庫(kù)提供了兩種方式實(shí)現(xiàn)這種要求。2.1.1 opengl物體材料的選擇opengl系統(tǒng)的光照與著色功能主要是基于phong模型與gouraud著色法,制作茶壺過(guò)程中所需要的材質(zhì)與光照就是首先要定義物體表面的材料特性,建立光源,選擇光照與著色參數(shù),然后再啟動(dòng)光照計(jì)算4。物

30、體的前面和后面中的每一個(gè)都有許多個(gè)材料特性,一旦啟動(dòng)光照,系統(tǒng)所保持的當(dāng)前材料特性就被用來(lái)決定表面的著色。每個(gè)特性可以通過(guò)調(diào)用語(yǔ)句:glmaterialfv(glenum face,glenum pname,type pvalue)其默認(rèn)值或當(dāng)前值改為其他值。其中g(shù)lenum face是用來(lái)指明要作的改變應(yīng)該對(duì)哪一面或兩面生效,有g(shù)l_front,gl_back或gl_front_and_back的符號(hào)常數(shù);glenum pname是用來(lái)指定要改變的材料特性的符號(hào)常數(shù)(見(jiàn)表1);type pvalue是指向一個(gè)為該特性提供新值的glfloat數(shù)組的指針。表1 代表材料特性的符號(hào)常數(shù)特性名稱默認(rèn)

31、值備注gl_ambient(0.2,0.2,0.2,1.0)環(huán)境光gl_diffuse(0.8,0.8,0.8,1.0)漫反射gl_ambient_and_diffuse環(huán)境光、漫反射gl_specular(0,0,0,0.1)gl_shininess(0)gl_emission(0,0,0,0.1)論文設(shè)計(jì)中對(duì)工藝品茶壺在材質(zhì)和光照上的選擇是有要求,如果采用不同的角度去觀察,會(huì)發(fā)現(xiàn)茶壺的表面顏色鮮艷程度與光照亮度成正比。如用計(jì)算機(jī)來(lái)實(shí)現(xiàn)的茶壺視覺(jué)與現(xiàn)實(shí)中的茶壺相近,指定一個(gè)物體材料特性比較難完成的。所以為了使設(shè)計(jì)出來(lái)的茶壺呈現(xiàn)出來(lái)的更加逼真,我采用三個(gè)不同的位置不同的材料特性從分別從正面、背

32、面和兩面三種情況進(jìn)行設(shè)置。2.1.2 opengl光源建立及啟動(dòng)在opengl簡(jiǎn)單光照模型中的幾種光分為:輻射光(emitted light)、環(huán)境光(ambient light)、漫射光(diffuse light)、鏡面光(specular light)。輻射光是最簡(jiǎn)單的一種光,它直接從物體發(fā)出并且不受任何光源影響。環(huán)境光是由光源發(fā)出經(jīng)環(huán)境多次散射而無(wú)法確定其方向的光,即似乎來(lái)自所有方向。當(dāng)環(huán)境光照到曲面上時(shí),它在各個(gè)方向上均等地發(fā)散(類似于無(wú)影燈光)。漫射光來(lái)自一個(gè)方向,它垂直于物體時(shí)比傾斜時(shí)更明亮。一旦它照射到物體上,則在各個(gè)方向上均勻地發(fā)散出去。鏡面光來(lái)自特定方向并沿另一方向反射出去

33、,一個(gè)平行激光束在高質(zhì)量的鏡面上產(chǎn)生100%的鏡面反射。因此,從某種意義上講,物體的反射程度等同于其上的光強(qiáng)(或光亮度)5。在opengl中允許應(yīng)用程序使用多達(dá)八個(gè)光源,每個(gè)光源都由一組特性定義,包括它的位置。這g光源定名為gl_light0,gl_light1,gl_light7。應(yīng)用程序可以通過(guò)調(diào)用語(yǔ)句: gllightfv(glenum light,glenum pname,type*p)來(lái)設(shè)置指定光源的指定特性。其中g(shù)lenum light用來(lái)指定光源的符號(hào)常數(shù),如gl_light0;glenum pname指定要改變的特性的符號(hào)常數(shù),如gl_ambient;type*p是指向一個(gè)為該

34、特性提供新值的glfloat數(shù)組的指針。在opengl中調(diào)用gllightfv來(lái)設(shè)置光源的位置或方向時(shí),系統(tǒng)當(dāng)前的建模與觀察矩陣是要對(duì)代表該位置或方向的坐標(biāo)值進(jìn)行變換的,當(dāng)燈源在不同的位置或方向時(shí),就可以獲得不同的視覺(jué)效果。所以在這次設(shè)計(jì)工藝品茶壺的光源設(shè)置中,可以在整個(gè)場(chǎng)景中只設(shè)一個(gè)不動(dòng)的光源,讓物體與觀察者的視角發(fā)生改變。由此來(lái)靜向的觀察動(dòng)態(tài)的物體,如同實(shí)際中拿著茶壺進(jìn)行翻轉(zhuǎn)察看效果一樣。在光源建立的基礎(chǔ)上可以通過(guò)下面兩條語(yǔ)句來(lái)啟動(dòng)光照,通常條件下opengl的默認(rèn)設(shè)置是用當(dāng)前的顏色來(lái)畫(huà)當(dāng)前的頂點(diǎn),所以如果要啟動(dòng)當(dāng)前光照那么就要通過(guò)下列語(yǔ)句來(lái)啟用: glenable(gl_lighting

35、);另外,每個(gè)光源都要在建立之后再經(jīng)過(guò)啟動(dòng)才能用在光照計(jì)算中。下列語(yǔ)句啟動(dòng)gl_light0: glenable(gl_light0);要終止光照或停止使用某一特定光源,則需以相應(yīng)的符號(hào)常數(shù)為參數(shù)調(diào)用gldisable。2.2 opengl幾何變換的原理及設(shè)計(jì)2.2.1 幾何變換的原理計(jì)算機(jī)圖形系統(tǒng)的基本功能之一是模擬在空間對(duì)物體進(jìn)行操縱。這種模擬的空間操縱稱為變換。我們可以從兩種互補(bǔ)的觀點(diǎn)出發(fā)來(lái)描述物體的變換。第一種是物體本身相對(duì)于一個(gè)固定不動(dòng)的坐標(biāo)系或背景作變換。此觀點(diǎn)從數(shù)學(xué)角度講就是對(duì)物體上的每一個(gè)點(diǎn)進(jìn)行幾何變換。第二種觀點(diǎn)將物體看成固定不動(dòng),而坐標(biāo)系則相對(duì)于物體作變換。這一效果可通過(guò)進(jìn)

36、行坐標(biāo)變換來(lái)取得。物體的空間操縱有三種基本形式。第一,它們可以在不改變大小和朝向的前提下移動(dòng)到新的位置。第二,它們可以被放大和縮小。第三,它們可以繞一個(gè)點(diǎn)或一條軸旋轉(zhuǎn)。但本論文設(shè)計(jì)中只應(yīng)用了后兩者幾何變換。在opengl程序設(shè)計(jì)中,在縮放以及旋轉(zhuǎn)幾何變換時(shí)首先必須建立modelview的矩陣。它是和來(lái)進(jìn)行建模變換與觀察變換的合成變換矩陣6。這個(gè)建模與觀察矩陣的初始化可以通過(guò)以下語(yǔ)句完: glmatrixmode(gl_modelview); glloadidentity();其中g(shù)lmatrixmode將建模與觀察矩陣設(shè)為系統(tǒng)當(dāng)前的矩陣,所有隨后指定的變換都對(duì)當(dāng)前的矩陣生效。2.2.2 幾何變

37、換縮放基本的縮放變換是相對(duì)于坐標(biāo)系的原點(diǎn)來(lái)定義的,它用一組縮放因數(shù)乘以物體上的點(diǎn)的坐標(biāo)(每個(gè)因數(shù)乘以與其對(duì)應(yīng)的坐標(biāo))來(lái)取得縮放效果。圖2表示以sx為坐標(biāo)x的縮放因數(shù),sy為y坐標(biāo)的縮放因數(shù)的二維幾何縮放變換s(sx,sy):如果 sx=sy,該變換就稱為均勻縮放,它能保持物體形狀不變。圖2 二維縮放(幾何變換)但由于縮放是相對(duì)于坐標(biāo)系的原點(diǎn)進(jìn)行的,縮放后物體在位置上也有所移動(dòng)。我們可以用定點(diǎn)縮放來(lái)對(duì)物體的位移現(xiàn)象加以控制:相對(duì)于物體上的一個(gè)參考點(diǎn)進(jìn)行縮放,進(jìn)而使得該參考點(diǎn)在縮放變換后仍然留在它的原始位置上。定點(diǎn)縮放可以分三步進(jìn)行:首先對(duì)物體作平移變換以將參考點(diǎn)(xc,yc)移到坐標(biāo)系的原點(diǎn),然

38、后對(duì)平移后的物體作相對(duì)于原點(diǎn)(此時(shí)也就是參考點(diǎn))的縮放變化,最后對(duì)縮放后的物體作平移變換以將參考點(diǎn)移回到它的原始位置(見(jiàn)圖3)。整個(gè)變換序列可以用函數(shù)合成的形式來(lái)表達(dá):t(xc,yc)s(sx,sy)t(-xc,-yc)。 圖3 二維定點(diǎn)縮放在二維縮放的基礎(chǔ)上,增加一個(gè)獨(dú)立的第三維并可以類似方式處理來(lái)定義三維幾何縮放s(sx,sy,sz)以及與其互補(bǔ)的三維坐標(biāo)縮放s(1/ sx,1/ sy,1/ sz)。如果sx = sy = sz,該變換就稱為均勻變換。計(jì)算(x,y,z)的公式為:縮放功能的設(shè)計(jì)可以通過(guò)調(diào)用glscale*語(yǔ)句來(lái)實(shí)現(xiàn):void glscalef d(type sx ,type

39、 sy,type sz)其中函數(shù)三個(gè)參數(shù)sx,sy,sz分別為物體在x,y,z三個(gè)方向上縮放的比例。2.2.3 幾何變換旋轉(zhuǎn)圖4 二維旋轉(zhuǎn)(幾何變換)平面上的旋轉(zhuǎn)是相對(duì)于一個(gè)點(diǎn)(旋轉(zhuǎn)中心)來(lái)進(jìn)行的,而空間中的旋轉(zhuǎn)則是相對(duì)于一條軸來(lái)完成。我們將基本的兩維旋轉(zhuǎn)定義為繞xy坐標(biāo)系的原點(diǎn)進(jìn)行。圖4表示位于(x,y)的點(diǎn)經(jīng)過(guò)大小為角的兩維幾何旋轉(zhuǎn)r()后的新位置(x,y)。首先考慮斜邊連接原點(diǎn)及(x,y)的直角三角形并使用三角恒等式來(lái)得到:然后從斜邊連接原點(diǎn)及(x,y)的另一個(gè)直角三角形得到x=rcos和y=rsin。將此結(jié)果代入上式就有: 在二維旋轉(zhuǎn)的基礎(chǔ)上,來(lái)實(shí)現(xiàn)三維旋轉(zhuǎn)7。三維旋轉(zhuǎn)有三種基本方式:

40、繞z軸旋轉(zhuǎn)(見(jiàn)圖5(a)和6(a),繞x軸旋轉(zhuǎn)(見(jiàn)圖5(b)和6(b),繞y軸旋轉(zhuǎn)(見(jiàn)圖5(c)和6(c)。與正旋轉(zhuǎn)角在二維旋轉(zhuǎn)中意味著反時(shí)針旋轉(zhuǎn)的規(guī)定一致,正旋轉(zhuǎn)角在三維旋轉(zhuǎn)中意味著旋轉(zhuǎn)方向按右手定則確定(拇指與旋轉(zhuǎn)軸指向相同時(shí),其余四指給出旋轉(zhuǎn)方向)。圖5 三維旋轉(zhuǎn)(幾何變換)圖6 三維旋轉(zhuǎn)(幾何變換)繞y軸旋轉(zhuǎn)時(shí)(既包括幾何變換ry()也包括與其互補(bǔ)的坐標(biāo)變換ry(-))物體上的點(diǎn)的y坐標(biāo)保持不變。這就是說(shuō)每個(gè)點(diǎn)可以看成是一個(gè)與xz平面平行的平面上旋轉(zhuǎn)旋轉(zhuǎn)方式與一個(gè)在xz平面上的點(diǎn)完全相同。于是我們可以得出三維旋轉(zhuǎn)公式:旋轉(zhuǎn)變換可以通過(guò)調(diào)用glrotate*語(yǔ)句來(lái)實(shí)現(xiàn):void glro

41、tatef d(type angle, type x, type y, type z)其中該函數(shù)有四個(gè)glfloat或gldouble類型的參數(shù):angle,x,y和z。angle表示要旋轉(zhuǎn)的角度,以度數(shù)方式表示,為0360之間的值;x,y,z構(gòu)成一個(gè)向量,依次代表該向量x,y,z三個(gè)方向上的分量值,旋轉(zhuǎn)是按反時(shí)針?lè)较驀@從原點(diǎn)到(x,y,z)的軸進(jìn)行。在論文設(shè)計(jì)中單方面的對(duì)x軸、y軸、z軸中的某一軸定義旋轉(zhuǎn)這樣會(huì)使工藝品茶壺在實(shí)現(xiàn)旋轉(zhuǎn)時(shí)存在單一性和局限性,所以通過(guò)程序的編寫對(duì)參數(shù)的改變使旋轉(zhuǎn)可以通過(guò)任意軸旋轉(zhuǎn)來(lái)完成,在設(shè)計(jì)中可以圍繞一條經(jīng)過(guò)某一點(diǎn)并與它的方向向量同向的軸線作為任意軸旋轉(zhuǎn)。2.

42、3 opengl動(dòng)畫(huà)的設(shè)計(jì)本論文在設(shè)計(jì)過(guò)程中為了達(dá)到藝術(shù)上的效果和最終在視覺(jué)上產(chǎn)生動(dòng)態(tài)效果,達(dá)到以三維圖像效果出現(xiàn),通過(guò)運(yùn)行程序所設(shè)計(jì)有工藝品茶壺會(huì)自行按照y軸旋轉(zhuǎn)同時(shí)它的外形以及顏色也會(huì)發(fā)生改變,在人為的單擊控制下可以在運(yùn)行和停止之間相互切換,這樣就實(shí)現(xiàn)了opengl的動(dòng)畫(huà)設(shè)計(jì)。在windows編程模型設(shè)計(jì)中,用計(jì)時(shí)器方法來(lái)實(shí)現(xiàn)動(dòng)畫(huà)是非常簡(jiǎn)潔。在編程環(huán)境下創(chuàng)建一個(gè)計(jì)時(shí)器,該計(jì)時(shí)器通知windows想讓wm_timer消息隔多長(zhǎng)時(shí)間給當(dāng)前的窗口發(fā)送信息。windows通過(guò)響應(yīng)這個(gè)消息,就能夠以一定的時(shí)間間隔完成所要完成的任務(wù)和達(dá)到最終想得到的效果。處理計(jì)時(shí)器事件時(shí),設(shè)置一個(gè)情況語(yǔ)句用來(lái)處理wm

43、_timer消息,在該消息處理語(yǔ)句中,可以實(shí)現(xiàn)opengl中所要求的渲染,貼圖等,也可以產(chǎn)生連續(xù)更新的圖像8。下面就是實(shí)現(xiàn)動(dòng)畫(huà)的過(guò)程的語(yǔ)句: glutpostredisplay(); gluttimerfunc(200,timer,0);在語(yǔ)句中g(shù)luttimerfunc(200,timer,0);語(yǔ)句就是初始時(shí)注冊(cè)一個(gè)定時(shí)器的回調(diào)函數(shù)。glutpostredisplay();表示標(biāo)記當(dāng)前窗口需要重新繪制。2.4 opengl紋理的設(shè)計(jì)2.4.1 紋理映射的原理紋理映射是一項(xiàng)有助于獲得比較真實(shí)感和多樣化胡表面著色技術(shù),在二維紋理圖中對(duì)映射函數(shù)的一個(gè)常規(guī)制約是要使紋理圖成比例地伸展和收縮??梢詫?/p>

44、出:u=as+b v=ct+d其中的常數(shù)a,b,c和d由紋理空間和參數(shù)空間中的已知點(diǎn)之間的關(guān)系導(dǎo)出9。 紋理圖通常含有可以用來(lái)以不同方式改變物體表面的原始著色的顏色值。然而其作用還可以擴(kuò)展到提供其他種能夠影響著色過(guò)程的結(jié)果的信息。opengl系統(tǒng)中實(shí)現(xiàn)紋理映射包括5個(gè)基本步驟:(1)建立一個(gè)紋理并指定其紋理類型;(2)指明該紋理的使用方式;(3)為該紋理對(duì)象產(chǎn)生一張紋理圖;(4)啟用紋理映射功能;(5)通過(guò)為各頂點(diǎn)提供幾何坐標(biāo)以及紋理坐標(biāo)來(lái)繪制接受映射的物體。2.4.2 紋理定義(1)一維紋理定義的函數(shù)void glteximage1d(glenum target,glint level,gl

45、int components,glsizei width,glint border,glenum format,glenum type,const glvoid *pixels);定義一個(gè)一維紋理映射。其中參數(shù)target是常數(shù)gl_texture_1d。參數(shù)level表示多級(jí)分辨率的紋理圖像的級(jí)數(shù),若只有一種分辨率,則level設(shè)為010。參數(shù)components是一個(gè)從1到4的整數(shù),指出選擇了r、g、b、a中的哪些分量用于調(diào)整和混合,1表示選擇了r分量,2表示選擇了r和a兩個(gè)分量,3表示選擇了r、g、b三個(gè)分量,4表示選擇了r、g、b、a四個(gè)分量。參數(shù)width和height給出了紋理圖像

46、的長(zhǎng)度和寬度,參數(shù)border為紋理邊界寬度,它通常為0,width和height必須是2m+2b,這里m是整數(shù),長(zhǎng)和寬可以有不同的值,b是border的值。紋理映射的最大尺寸依賴于opengl,但它至少必須是使用64x64(若帶邊界為66x66),若width和height設(shè)置為0,則紋理映射有效地關(guān)閉。參數(shù)format和type描述了紋理映射的格式和數(shù)據(jù)類型,它們?cè)谶@里的意義與在函數(shù)gldrawpixels()中的意義相同,事實(shí)上,紋理數(shù)據(jù)與gldrawpixels()所用的數(shù)據(jù)有同樣的格式。參數(shù)format可以是gl_color_index、gl_rgb、gl_rgba、gl_red、g

47、l_green、gl_blue、gl_alpha、gl_luminance或gl_luminance_alpha(注意:不能用gl_stencil_index和gl_depth_component)。類似地,參數(shù)type是gl_bype、gl_unsigned_byte、gl_short、 gl_unsigned_short、gl_int、gl_unsigned_int、gl_float或gl_bitmap。參數(shù)pixels包含了紋理圖像數(shù)據(jù),這個(gè)數(shù)據(jù)描述了紋理圖像本身和它的邊界。(2)濾波一般來(lái)說(shuō),紋理圖像為正方形或長(zhǎng)方形。但當(dāng)它映射到一個(gè)多邊形或曲面上并變換到屏幕坐標(biāo)時(shí),紋理的單個(gè)紋素很少

48、對(duì)應(yīng)于屏幕圖像上的象素。根據(jù)所用變換和所用紋理映射,屏幕上單個(gè)象素可以對(duì)應(yīng)于一個(gè)紋素的一小部分(即放大)或一大批紋素(即縮?。?。下面用函數(shù)gltexparameter*()說(shuō)明放大和縮小的方法: gltexparameter*(gl_texture_2d,gl_texture_mag_filter,gl_nearest);gltexparameter*(gl_texture_2d,gl_texture_min_filter,gl_nearest);實(shí)際上,第一個(gè)參數(shù)可以是gl_texture_1d或gl_texture_2d,即表明所用的紋理是一維的還是二維的;第二個(gè)參數(shù)指定濾波方法,其中參數(shù)

49、值gl_texture_mag_filter指定為放大濾波方法,gl_texture_min_filter指定為縮小濾波方法;第三個(gè)參數(shù)說(shuō)明濾波方式。若選擇gl_nearest則采用坐標(biāo)最靠近象素中心的紋素,這有可能使圖像走樣;若選擇gl_linear則采用最靠近象素中心的四個(gè)象素的加權(quán)平均值。gl_nearest所需計(jì)算比gl_linear要少,因而執(zhí)行得更快,但gl_linear提供了比較光滑的效果。紋理坐標(biāo)可以超出(0,1)范圍,并且在紋理映射過(guò)程中可以重復(fù)映射或約簡(jiǎn)映射。在重復(fù)映射的情況下,紋理可以在s,t方向上重復(fù),即: gltexparameterfv(gl_texture_2d,

50、gl_texture_wrap_s,gl_repeat);gltexparameterfv(gl_texture_2d,gl_texture_wrap_t,gl_repeat);若將參數(shù)gl_repeat改為gl_clamp,則所有大于1的紋素值都置為1,所有小于0的值都置為0。(3)映射方式紋理圖像是直接作為畫(huà)到多邊形上的顏色。實(shí)際上,可以用紋理中的值來(lái)調(diào)整多邊形(曲面)原來(lái)的顏色,或用紋理圖像中的顏色與多邊形(曲面)原來(lái)的顏色進(jìn)行混合。因此,opengl提供了三種紋理映射的方式,這個(gè)函數(shù)是:void gltexenvifv(glenum target,glenum pname,type p

51、aram);設(shè)置紋理映射方式。參數(shù)target必須是gl_texture_env;若參數(shù)pname是gl_texture_env_mode,則參數(shù)param可以是gl_decal、gl_modulate或gl_blend,以說(shuō)明紋理值怎樣與原來(lái)表面顏色的處理方式;若參數(shù)pname是gl_texture_env_color,則參數(shù)param是包含四個(gè)浮點(diǎn)數(shù)(分別是r、g、b、a分量)的數(shù)組,這些值只在采用gl_blend紋理函數(shù)時(shí)才有用。(4)紋理坐標(biāo)在繪制紋理映射場(chǎng)景時(shí),不僅要給每個(gè)頂點(diǎn)定義幾何坐標(biāo),而且也要定義紋理坐標(biāo)。經(jīng)過(guò)多種變換后,幾何坐標(biāo)決定頂點(diǎn)在屏幕上繪制的位置,而紋理坐標(biāo)決定紋理圖

52、像中的哪一個(gè)紋素賦予該頂點(diǎn)。并且頂點(diǎn)之間的紋理坐標(biāo)插值與基礎(chǔ)篇中所講的平滑著色插值方法相同。紋理圖像是方形數(shù)組,紋理坐標(biāo)通??啥x成一、二、三或四維形式,稱為s,t,r和q坐標(biāo),以區(qū)別于物體坐標(biāo)(x, y, z,,w)和其他坐標(biāo)。一維紋理常用s坐標(biāo)表示,二維紋理常用(s,t)坐標(biāo)表示,目前忽略r坐標(biāo),q坐標(biāo)象w一樣,一半值為1,主要用于建立齊次坐標(biāo)。opengl坐標(biāo)定義的函數(shù)是: void gltexcoord1234sifdv(type coords);設(shè)置當(dāng)前紋理坐標(biāo),此后調(diào)用glvertex*()所產(chǎn)生的頂點(diǎn)都賦予當(dāng)前的紋理坐標(biāo)。對(duì)于gltexcoord1*(),s坐標(biāo)被設(shè)置成給定值,t

53、和r設(shè)置為0,q設(shè)置為1;用gltexcoord2*()可以設(shè)置s和t坐標(biāo)值,r設(shè)置為0,q設(shè)置為1;對(duì)于gltexcoord3*(),q設(shè)置為1,其它坐標(biāo)按給定值設(shè)置;用gltexcoord4*()可以給定所有的坐標(biāo)。使用適當(dāng)?shù)暮缶Y(s,i,f或d)和type的相應(yīng)值(glshort、glint、glfloat或gldouble)來(lái)說(shuō)明坐標(biāo)的類型。注意:整型紋理坐標(biāo)可以直接應(yīng)用,而不是象普通坐標(biāo)那樣被映射到-1, 1之間。在某些場(chǎng)合(環(huán)境映射等)下,為獲得特殊效果需要自動(dòng)產(chǎn)生紋理坐標(biāo),并不要求為用函數(shù)gltexcoord*()為每個(gè)物體頂點(diǎn)賦予紋理坐標(biāo)值。opengl提供了自動(dòng)產(chǎn)生紋理坐標(biāo)的

54、函數(shù),其如下: void gltexgenifv(glenum coord,glenum pname,type param);自動(dòng)產(chǎn)生紋理坐標(biāo)。第一個(gè)參數(shù)必須是gl_s、gl_t、gl_r或gl_q,它指出紋理坐標(biāo)s,t,r,q中的哪一個(gè)要自動(dòng)產(chǎn)生;第二個(gè)參數(shù)值為gl_texture_gen_mode、gl_object_plane或 gl_eye_plane;第三個(gè)參數(shù)param是一個(gè)定義紋理產(chǎn)生參數(shù)的指針,其值取決于第二個(gè)參數(shù)pname的設(shè)置,當(dāng)pname為gl_texture_gen_mode時(shí),param是一個(gè)常量,即gl_object_linear、gl_eye_linear或gl_

55、sphere_map,它們決定用哪一個(gè)函數(shù)來(lái)產(chǎn)生紋理坐標(biāo)。對(duì)于pname的其它可能值,param是一個(gè)指向參數(shù)數(shù)組的指針。第3章 系統(tǒng)實(shí)現(xiàn)3.1 工藝品茶壺項(xiàng)目建立首先在vc+中創(chuàng)建一個(gè)新的項(xiàng)目工程chahu1.dsw,如圖7所示。圖7 項(xiàng)目界面在這個(gè)簡(jiǎn)單的項(xiàng)目工程中,找到chahu1.cpp文件,在該文件中,進(jìn)行編程實(shí)現(xiàn)工藝品茶壺的設(shè)計(jì)。3.2 windows窗口設(shè)計(jì)以及功能實(shí)現(xiàn)opengl實(shí)用工具庫(kù)提供專門用于多重視窗管理的函數(shù),這些視窗在任何時(shí)刻都只有一個(gè)被系統(tǒng)視為處于“當(dāng)前”狀態(tài)。int main(int argc, char* argv) glutinit(&argc, argv);glutinitwindowposition(400, 100);glutinitwindowsize(700, 600);glutcreatewindow(argv0);glutsetwindowtitle(茶壺);其中函數(shù) glutcreatewindow在打開(kāi)一個(gè)新視窗時(shí)會(huì)返回一個(gè)作為該視窗的唯一引用標(biāo)記的取整數(shù)值的窗口標(biāo)識(shí)碼。這個(gè)新視窗立即成為當(dāng)前顯示視窗。 glutinitwindowposition(400, 100);語(yǔ)句表明當(dāng)前窗口顯示在整個(gè)電腦屏幕處于x,y分別為400,100處。 glutinitwindowsize(700, 600);語(yǔ)句表明當(dāng)前窗口的

溫馨提示

  • 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)論