版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、摘要2abstract.2引言4第一章 開發(fā)平臺(tái)的選擇和opengl61.1 開發(fā)平臺(tái)介紹61.2 在開發(fā)平臺(tái)下選擇的開發(fā)工具61.2.1 visual c+ 6.0的簡(jiǎn)介61.3 opengl基礎(chǔ)的介紹71.4 vc+與opengl關(guān)系8第二章 opengl 3d游戲開發(fā)技術(shù)92.1 opengl 工作流程92.2 opengl 圖形操作步驟102.3 opengl 游戲開發(fā)需要的技術(shù)112.3.1圖形變換112.3.2 光照112.3.3 材質(zhì)122.3.4 光照與材質(zhì)的關(guān)系132.3.5 紋理映射13第三章 臺(tái)球游戲具體實(shí)現(xiàn)153.1 在mfc中設(shè)計(jì)游戲顯示的框架153.2 在mfc中使
2、用opengl設(shè)計(jì)臺(tái)球游戲153.2.1 使用opengl具體實(shí)現(xiàn)臺(tái)球桌面163.2.2 使用opengl具體實(shí)現(xiàn)臺(tái)球球體213.2.3 使用opengl具體實(shí)現(xiàn)繪制方向箭頭253.2.4 利用opengl實(shí)現(xiàn)變換273.2.5 數(shù)學(xué)模型實(shí)現(xiàn)293.2.6 運(yùn)動(dòng)模型實(shí)現(xiàn)31第四章 總結(jié)與展望394.1 研究?jī)?nèi)容總結(jié)394.2 存在的不足和未來(lái)的工作39參考文獻(xiàn)39致 謝40基于opengl的臺(tái)球游戲設(shè)計(jì)摘要:opengl被認(rèn)為是高性能圖形和交互式視景處理的標(biāo)準(zhǔn),可以制作出更順暢的3d效果。由大量功能強(qiáng)大的圖形函數(shù)組成,集成了所有曲面造型、圖形變換、光照、材質(zhì)、紋理、像素操作、融合、反選擇、霧化
3、等復(fù)雜的計(jì)算機(jī)圖形學(xué)算法。vc+是一種語(yǔ)法比較靈活和編譯后的可執(zhí)行程序的運(yùn)行速度快,面向?qū)ο蟮母呒?jí)語(yǔ)言,特別適合利用opengl的圖形引擎開發(fā)圖形處理軟件。該游戲主要完成了游戲的界面的設(shè)計(jì),以及游戲中球體運(yùn)動(dòng),碰撞的實(shí)現(xiàn)。該游戲的一個(gè)重要特點(diǎn)是利用了opengl和vc+制作,通過(guò)模型建立、光源設(shè)置、材質(zhì)設(shè)置、紋理處理、碰撞檢測(cè)、運(yùn)動(dòng)模擬等將真實(shí)世界中的臺(tái)球游戲在計(jì)算機(jī)中再現(xiàn)。本游戲在vc+6.0平臺(tái)下開發(fā),主要利用opengl三維圖形處理的功能,以及編程思路和實(shí)現(xiàn)過(guò)程。關(guān)鍵詞:opengl;三維圖形;3d游戲;碰撞檢測(cè);opengl-based billiards game designabs
4、tract: opengl is the high performance graphics and interactive view disposal standard, composed of lots of graphics functions with strong function, integrating many computer graphics algorithms such as graphics transformation, lighting, texture mapping, pixel operation, blending, anti-aliasing, fog,
5、 etc. vc+ is an object-oriented language with flexible grammar and fast execution speed after compiling, so it adapts to opengl engine graphics processing software.therefore, this game design major to complete user interface digsn,as well as the ball movement and implementation of collision in the g
6、ame,the game design is an important characteristic of the use of opengl and vc + +.through model establishment , scene disposal, collision detection,lighting and metarial setup,texture mapping motion simulation, etc, the billiard in the real world reappears in the computer. the software development
7、platform is vc + +6.0.this paper discusses the functions and features of opengl as well as the procedure and implementation of 3d billiards. key words: opengl;three-dimension graphics;3d games;collision detection引言最近幾年,隨著計(jì)算機(jī)信息技術(shù)的高速發(fā)展,以及計(jì)算機(jī)圖形學(xué)的發(fā)展使得三維表現(xiàn)技術(shù)得以形成,這些三維表現(xiàn)技術(shù)能夠再現(xiàn)三維世界中的物體,能夠用三維物體來(lái)表示復(fù)雜的信息,從而便于和
8、計(jì)算機(jī)直接交流。這種技術(shù)已經(jīng)把人和計(jì)算機(jī)的力量以一種直覺(jué)而自然的方式加以統(tǒng)一,這種革命性的變化無(wú)疑將極大地提高人們的工作效率。計(jì)算機(jī)三維動(dòng)畫技術(shù)被廣泛的應(yīng)用于許多方面。利用計(jì)算機(jī)和三維動(dòng)畫軟件的強(qiáng)大功能,通過(guò)三維建模、材質(zhì)及動(dòng)畫的設(shè)定可以將真實(shí)世界中的各種對(duì)象在計(jì)算機(jī)中真實(shí)再現(xiàn)。不僅僅是機(jī)械工程師可以從二維平面圖中得以解放直接進(jìn)入了三維世界,從而很快得到自己設(shè)計(jì)的三維機(jī)械零件模型。醫(yī)生可以從病人的三維掃描圖像分析病人的病狀。軍事指揮員可以面對(duì)用三維圖形技術(shù)生成的戰(zhàn)場(chǎng)地形,指揮具有真實(shí)感的三維飛機(jī)、軍艦、坦克向目標(biāo)開進(jìn)并分析戰(zhàn)斗方案的效果。而三維游戲也是其中應(yīng)用之一。電腦游戲,一個(gè)對(duì)廣大的計(jì)算機(jī)
9、應(yīng)用者毫不陌生的名詞,相信每一個(gè)電腦愛(ài)好者對(duì)其都有不同程度的喜愛(ài),尤其是面對(duì)一些圖形處理非常精美的三維游戲來(lái)說(shuō),多少會(huì)有一些愛(ài)不釋手吧!記得以前我對(duì)網(wǎng)絡(luò)游戲非常的陌生,直到有一次,在仔細(xì)觀察同學(xué)正起勁的玩著當(dāng)時(shí)最流行的三維網(wǎng)絡(luò)游戲時(shí),我看傻了眼!那精美的畫面,細(xì)致的表情,流暢的動(dòng)作,以及眩目的人物造型等等都讓我目瞪口呆,再看到同學(xué)那副癡迷的神態(tài),我不能不感嘆這電腦游戲的魅力!所以后來(lái)在選畢業(yè)設(shè)計(jì)的課題時(shí),我選擇了這個(gè)三維臺(tái)球游戲的軟件開發(fā)的課題!本論文的主要研究的內(nèi)容是如何利用opengl開發(fā)出一個(gè)微型游戲。因此,所要解決的主要問(wèn)題有四個(gè):一是如何用數(shù)學(xué)方法建立所需三維場(chǎng)景的幾何描述,并將它們
10、輸入到計(jì)算機(jī)中,這部分工作由三維實(shí)體造型系統(tǒng)完成。場(chǎng)景的幾何描述直接影響了圖形的復(fù)雜性和圖形繪制的計(jì)算耗費(fèi),選擇合理的有效的數(shù)據(jù)表示和輸入手段是極其重要。二是將三維幾何描述轉(zhuǎn)換為二維透視,通過(guò)場(chǎng)景透視換來(lái)完成。三是確定場(chǎng)景中的所有可視面,這需要使用隱藏面消除算法將視域之外或其他物體的遮擋不可見面消去。四是計(jì)算機(jī)場(chǎng)景中所有可見面的顏色,這就需要根據(jù)基于光學(xué)物理的光照明模型計(jì)算機(jī)可見面投射到觀察者眼中的光亮度的大小和色彩組成,并將它換成適合圖形設(shè)備的顏色值,從而確定投影畫面上每一象素的顏色,最終生成圖形。鑒于時(shí)間、技術(shù)、設(shè)備、資源等各方面的原因,我現(xiàn)在還無(wú)法開發(fā)出一個(gè)完整的網(wǎng)絡(luò)游戲,只能研究其最基
11、礎(chǔ)的部分,在這里我們將開發(fā)出一個(gè)小型的三維臺(tái)球游戲。借此掌握三維游戲制作的基礎(chǔ)部分。在這基礎(chǔ)部分實(shí)現(xiàn)的過(guò)程中主要完成的是對(duì)三維圖形技術(shù)的應(yīng)用,比如對(duì)臺(tái)球的光照球體的渲染和紋理映射的實(shí)現(xiàn)。以及如何利用跟蹤算法來(lái)跟蹤臺(tái)球,利用跟蹤算法求得球運(yùn)動(dòng)速度和方向,最終確定球是落袋還是靜止在桌面上某一個(gè)位置。所以該課題的應(yīng)用前景十分廣闊,不但鍛煉了三維圖形技術(shù)的實(shí)現(xiàn)能力,還提高了編程的總體思路,大大提高編程水平。更何況中國(guó)市場(chǎng)的匱乏,這無(wú)疑是一塊很大的蛋糕!最后,從這個(gè)臺(tái)球游戲中,我可以學(xué)到如何設(shè)計(jì)三維圖形,利用opengl的三維圖形技術(shù)和vc+的面向?qū)ο蟮某绦蛟O(shè)計(jì)的優(yōu)勢(shì),來(lái)實(shí)現(xiàn)臺(tái)球游戲的桌面和球體的繪制。
12、第一章 開發(fā)平臺(tái)的選擇和opengl1.1 開發(fā)平臺(tái)介紹 考慮到本系統(tǒng)性能要求和現(xiàn)有的條件,我們選擇了windows xp 中文版本作為開發(fā)、測(cè)試和運(yùn)行的平臺(tái)。我們?yōu)槭裁匆x擇windows xp中文版作為開發(fā)平臺(tái),主要是由于xp操作系統(tǒng)是以圖形用戶界面的主要優(yōu)勢(shì)的操作系統(tǒng)。那圖形用戶界面是由窗口(windows)、圖標(biāo)(icons)、菜單(menus)、指示器(pointingdevice)四位一體,形成桌面(desktop)。這種方式能同時(shí)顯示不同種類的信息,使用戶可在幾個(gè)工作環(huán)境中切換而不丟失幾個(gè)工作之間的聯(lián)系,用戶可通過(guò)下拉式菜單方便執(zhí)行控制型和對(duì)話型任務(wù),引入圖標(biāo)、按鈕和滾動(dòng)桿技術(shù),
13、大大減少鍵盤輸入,對(duì)不精于打字的用戶無(wú)疑提高了交互效率。圖形用戶界面與命令語(yǔ)言界面相比的優(yōu)點(diǎn):與以符號(hào)為主的字符命令語(yǔ)言界面相比,以視覺(jué)感知為主的圖形界面具有一定的文化和語(yǔ)言獨(dú)立性,并可提高視覺(jué)目標(biāo)搜索的效率。在符號(hào)階段,用戶面對(duì)的只有單一文本符號(hào),雖然離不開視覺(jué)的參與,但視覺(jué)信息是非本質(zhì)的,本質(zhì)的東西只有符號(hào)和概念。在視覺(jué)階段,借助計(jì)算機(jī)圖形學(xué)技術(shù)使人機(jī)交互能夠大量利用顏色、形狀等視覺(jué)信息,發(fā)揮人的形象感知和形象思維的潛能,提高了信息傳遞的效率。1.2 在開發(fā)平臺(tái)下選擇的開發(fā)工具 在windows開發(fā)開發(fā)平臺(tái)下,圖形用戶界面使得用戶與程序的交流變的更加密切。不再是一種從鍵盤到程序,再到顯示器
14、的單向信息流動(dòng),使得用戶可以和顯示器對(duì)象直接交互。圖形用戶界面使得用戶不再需要花費(fèi)長(zhǎng)的時(shí)間學(xué)習(xí)如何使用極速那就或掌握新程序。windows讓這這一切成真,因?yàn)橐粋€(gè)應(yīng)用程序占據(jù)一個(gè)窗口,所有窗口都有相同的基本外觀和感覺(jué)。開發(fā)游戲系統(tǒng)的工具有一些。目前世界上流行的主流開發(fā)工具有:visual c+ 、java。經(jīng)過(guò)認(rèn)真分析其優(yōu)缺點(diǎn),結(jié)合我們選擇的opengl硬件接口,我們選擇了microsoft 公司推出的visual c+ 作為3d游戲的開發(fā)工具。1.2.1 visual c+ 6.0的簡(jiǎn)介visual c+ 提供了一個(gè)可視化編程的集成開發(fā)環(huán)境:visual studio(又名developer
15、 studio)。developer studio是一個(gè)通用的應(yīng)用程序集成開發(fā)環(huán)境,它不僅支持visual c+,還支持visual basic,visual j+,visual interdev等microsoft系列開發(fā)工具。developer studio包含了一個(gè)文本編輯器、資源編輯器、工程編譯工具、一個(gè)增量連接器、源代碼瀏覽器、集成調(diào)試工具,以及一套聯(lián)機(jī)文檔。使用developer studio,可以完成創(chuàng)建、調(diào)試、修改應(yīng)用程序等的各種操作。mircrosoft visual c+現(xiàn)在的版本比較多,比如有mircrosoft visual c+ 6.0,mircrosoft visu
16、al c+ 2005,mircrosoft visual c+2008等等。visual c+ 6.0是mircosoft 公司推出的micosoft visual studio 6.0系列中的拳頭產(chǎn)品,同時(shí)也是一種c/c+編譯程序,內(nèi)含一個(gè)集成開發(fā)環(huán)境,簡(jiǎn)稱ide(intergrated development environment)。ide包括的內(nèi)容相當(dāng)多,如程序編譯器、資源編譯器、編程向?qū)А㈩愊驅(qū)Ш瓦B接器。齊全的功能使visual c+ 6.0成為十分優(yōu)秀的軟件開發(fā)工具。1.3 opengl基礎(chǔ)的介紹(1)采用opengl 的原因如下:?jiǎn)渭冇胿c+很難設(shè)計(jì)出高性能的三維圖形工具,目前圖
17、形開發(fā)包directx適于游戲開發(fā)以及加強(qiáng)多媒體性能等方面,而opengl則可以制作出更順暢的3d效果,且opengl性能優(yōu)于directx;由于microsoft公司在win95以后推出的windows操作系統(tǒng)中提供opengl圖形標(biāo)準(zhǔn),尤其是opengl三維圖形加速卡和微機(jī)圖形工作站的推出,人們可以在微機(jī)上實(shí)現(xiàn)三維圖形應(yīng)用,如cad設(shè)計(jì)。仿真模擬、三維游戲等,從而更有機(jī)會(huì)、更方便地使用opengl來(lái)建立自己的三維圖形世界;opengl可以與vc+緊密接口,便于實(shí)現(xiàn)有關(guān)計(jì)算和圖形算法,可保證算法的正確性和可靠性。(2)采用opengl 的介紹:opengl實(shí)際上是一種圖形與硬件的接口。它包括
18、一百多個(gè)圖形函數(shù),開發(fā)者可以用這些函數(shù)來(lái)簡(jiǎn)歷三維模型和進(jìn)行三維實(shí)時(shí)交互。與其他圖形程序程序接口不同,opengl提供了十分清晰明了的圖形函數(shù),因此初級(jí)的程序設(shè)計(jì)員也能利用opengl的圖形處理能力很快的設(shè)計(jì)出三維圖形以及三維交互軟件。opengl強(qiáng)有力的圖形函數(shù)不要求開發(fā)者把三維物體模型的數(shù)據(jù)寫成固定的數(shù)據(jù)格式。這樣開發(fā)者不但可以直接使用自己的數(shù)據(jù),而且可以利用其他不同格式的數(shù)據(jù)源,這種靈活性極大的節(jié)約了開發(fā)者的時(shí)間,提高軟件開發(fā)效益。長(zhǎng)期以來(lái)從事三維圖形開發(fā)的技術(shù)人員都不得不在自己的程序中編寫矩陣變換、外部設(shè)備訪問(wèn)等函數(shù),為調(diào)用制這些與自己的軟件開發(fā)目標(biāo)關(guān)系不十分密切的函數(shù)費(fèi)腦筋,而open
19、gl正是提供了一種直觀的編程環(huán)境,它提供了一系列函數(shù)大大地簡(jiǎn)化了三維圖形程序。例如:opengl提供一系列的三維圖形單元供開發(fā)者調(diào)用;opengl提供了一系列的圖形變換函數(shù);opengl提供了一系列的外部設(shè)備訪問(wèn)函數(shù),是開發(fā)者可以方便的訪問(wèn)鼠標(biāo)、鍵盤、空間球、數(shù)據(jù)手套等。這種直觀的三維圖形開發(fā)環(huán)境體現(xiàn)了opengl的開發(fā)優(yōu),這也是許多三維圖形開發(fā)者熱衷于opengl的緣由所在。opengl經(jīng)過(guò)了對(duì)gl的進(jìn)一步發(fā)展,實(shí)現(xiàn)二維和三維的高級(jí)圖形技術(shù),在性能上表現(xiàn)得異常優(yōu)越,它包括建模、變換、光線處理、動(dòng)畫以及更先進(jìn)的能力,如條紋映射、物體運(yùn)動(dòng)模糊等。opengl的這些能力為實(shí)現(xiàn)逼真的三維渲染效果、簡(jiǎn)
20、歷交互的三維景觀提供了優(yōu)秀的軟件開發(fā)工具。1.4 vc+與opengl關(guān)系現(xiàn)在流行的主流操作系統(tǒng)是windows 操作系統(tǒng),windows操作系統(tǒng)主流的編譯環(huán)境visual studio,broland c+ builder,dev-c+等,它們都是支持opengl的。但這里我們選擇vc+ 6.0作為opengl的開發(fā)環(huán)境。做opengl游戲開發(fā)需要glut工具包,glut不是opengl所必須的,但是大多數(shù)游戲開發(fā)都是需要這個(gè)工具包。windows程序利用opengl開發(fā)游戲時(shí)候需要glut庫(kù)。在windows環(huán)境下安裝glut,首先要去下載一個(gè)glut庫(kù)的安裝包,然后解壓以后有五個(gè)文件,把
21、解壓得到的glut.h放到這個(gè)gl文件夾里(這個(gè)gl一般是在自己安裝的mircosoft visual c+下面vc98 下面一個(gè)inlcude文件夾里面)。把解壓得到的glut.lib和glut32.lib放到靜態(tài)函數(shù)庫(kù)所在文件夾,即lib文件夾(這個(gè)lib文件夾一般是在自己安裝的mircosoft visual c+下面vc98 下面一個(gè)lib文件夾里面)。把解壓得到的glut.dll和glut32.dll放到操作系統(tǒng)目錄下面的system32文件夾內(nèi)。(典型的位置為:c:windowssystem32)這是非常重要的動(dòng)態(tài)鏈接庫(kù)設(shè)置!opengl在三維圖形技術(shù)方面有很大的優(yōu)勢(shì),相比其他的技
22、術(shù),opengl則可以制作做更加流暢的3d效果,從而更有機(jī)會(huì)、更方便地使用opengl來(lái)建立自己的三維圖形世界。利用了opengl的三維圖形技術(shù)和vc+ 的程序設(shè)計(jì)的優(yōu)點(diǎn),開發(fā)出來(lái)的圖形程序更加流暢和容易實(shí)現(xiàn)。第二章 opengl 3d游戲開發(fā)技術(shù)2.1 opengl 工作流程opengl實(shí)際上是一種圖形與硬件的接口。它包括100多個(gè)圖形函數(shù),開發(fā)者可以用這些函數(shù)來(lái)簡(jiǎn)歷三維模型和進(jìn)行三維實(shí)時(shí)交互。正如我們上一章所述,opengl是一個(gè)高性能的圖形開發(fā)軟件包。opengl作為一個(gè)與硬件獨(dú)立的圖形接口,它不提供與硬件密切相關(guān)的設(shè)備操作函數(shù),同時(shí),它也不提供描述類似飛機(jī)、汽車、分子形狀等復(fù)雜形體的圖
23、形操作函數(shù)。用戶必須從點(diǎn)、線、面等最基本的圖形單元開始構(gòu)造自己的三維模型。因此opengl的圖形操作函數(shù)十分靈活。opengl提供了以下三維物體的繪制方式。(1)網(wǎng)絡(luò)線繪圖方式(wireframe):這種僅繪制三維物體的網(wǎng)絡(luò)輪廓線。(2)深度優(yōu)先網(wǎng)絡(luò)繪制方式(depth_cued):用網(wǎng)格線方式繪圖,模擬人眼看物體的方式,遠(yuǎn)處的物體比近處的物體要暗一些。(3)反走樣網(wǎng)絡(luò)線繪制方式(antialiased):用網(wǎng)格線方式繪圖,繪圖時(shí)采用反走樣技術(shù)減少圖形線的參次不齊。(4)平面消隱繪圖方式(flat_shade):對(duì)模型的隱藏面進(jìn)行消隱,對(duì)模型的平面單元按照程度進(jìn)行著色但不進(jìn)行光滑處理。(5)光
24、滑消隱繪圖方式(smooth_shade):對(duì)模型進(jìn)行消隱,關(guān)照渲染著色的過(guò)程中再進(jìn)行光滑處理,這種方式更接近于現(xiàn)實(shí)。(6)加陰影和紋理的繪圖方式(shadows和textures):在模型表面貼上紋理甚至于加上光照陰影,使得三維景觀像照片一樣。(7)運(yùn)動(dòng)模糊的繪制方式(motion-blured):模擬物體運(yùn)動(dòng)時(shí)人煙觀察所感覺(jué)的動(dòng)感現(xiàn)象。(8)大氣環(huán)境效果(atmospere-effects):在三維景觀中加入大氣環(huán)境效果,使人身臨其境。(9)深度域效果(depth-of-effects):類似于照相機(jī)鏡頭效果,模型在聚焦點(diǎn)處清晰,反之則模糊。整個(gè)opengl的基本工作流程如下圖:圖2.1
25、opengl基本工作流程圖figure 2.1 opengl basic of flaw chart其中幾何頂點(diǎn)數(shù)據(jù)包括模型的頂點(diǎn)集、線集、多邊形集,這些數(shù)據(jù)經(jīng)過(guò)流程圖的上部,包括運(yùn)算器、逐個(gè)頂點(diǎn)操作等;圖像數(shù)據(jù)包括象素集、影像集、位圖集等,圖像象素?cái)?shù)據(jù)的處理方式與幾何頂點(diǎn)數(shù)據(jù)的處理方式是不同的,但它們都經(jīng)過(guò)光柵化、逐個(gè)片元(fragment)處理直至把最后的光柵數(shù)據(jù)寫入幀緩沖器。在opengl中的所有數(shù)據(jù)包括幾何頂點(diǎn)數(shù)據(jù)和象素?cái)?shù)據(jù)都可以被存儲(chǔ)在顯示列表中或者立即可以得到處理。opengl中,顯示列表技術(shù)是一項(xiàng)重要的技術(shù)。opengl要求把所有的幾何圖形單元都用頂點(diǎn)來(lái)描述,這樣運(yùn)算器和逐個(gè)頂點(diǎn)
26、計(jì)算操作都可以針對(duì)每個(gè)頂點(diǎn)進(jìn)行計(jì)算和操作,然后進(jìn)行光柵化形成圖形碎片;對(duì)于象素?cái)?shù)據(jù),象素操作結(jié)果被存儲(chǔ)在紋理組裝用的內(nèi)存中,再象幾何頂點(diǎn)操作一樣光柵化形成圖形片元。整個(gè)流程操作的最后,圖形片元都要進(jìn)行一系列的逐個(gè)片元操作,這樣最后的象素值bz送入幀緩沖器實(shí)現(xiàn)圖形的顯示。2.2 opengl 圖形操作步驟在上面說(shuō)明了opengl 的基本工作流程,根據(jù)這個(gè)流程可以歸納出在opengl中進(jìn)行主要的圖形操作直至在計(jì)算機(jī)屏幕上渲染繪制出三維圖形景觀的基本步驟:(1)建立景物模型根據(jù)基本圖形單元建立景物模型,并且對(duì)所建立的模型進(jìn)行數(shù)學(xué)描述(opengl 中把:點(diǎn)、線、多邊形、圖像和位圖都作為基本圖形單元)
27、。(2)景物位置設(shè)置把景物模型放在三維空間中的合適的位置,并且設(shè)置視點(diǎn)(viewpoint)以觀察所感興趣的景觀。(3)物體顏色,紋理處理計(jì)算模型中所有物體的色彩,其中的色彩根據(jù)應(yīng)用要求來(lái)確定,同時(shí)確定關(guān)照條件、紋理粘貼方式等。(4)景物模型光柵化把景物模型的數(shù)學(xué)描述以及色彩信息轉(zhuǎn)換至計(jì)算機(jī)屏幕上的像素,這個(gè)過(guò)程也就是光柵化(rasterization)。在這些步驟的執(zhí)行過(guò)程中,opengl可能執(zhí)行其他的一些操作,例如自動(dòng)消隱處理等。另外景物光柵化之后被送入幀緩沖器之前可以根據(jù)需要對(duì)象素?cái)?shù)據(jù)進(jìn)行操作。2.3 opengl 游戲開發(fā)需要的技術(shù)2.3.1圖形變換通過(guò)圖形變換,可由簡(jiǎn)單圖形生成復(fù)雜圖
28、形,可用二維圖形表示三維形體,甚至可以對(duì)靜態(tài)圖形經(jīng)過(guò)快速變換而獲得圖形的動(dòng)態(tài)顯示效果。圖形變換一般是指對(duì)圖形的幾何信息經(jīng)過(guò)幾何變換后產(chǎn)生的新圖形主要包括幾何變換、裁減變換、投影變換和視區(qū)變換 。創(chuàng)建好幾何模型后,只有放在三維空間中的適當(dāng)位置。并選擇適當(dāng)?shù)囊朁c(diǎn)及觀察方向才能更有利于用戶的觀看。為了觀察場(chǎng)景中的模型,需要進(jìn)行視景轉(zhuǎn)換,包括視點(diǎn)轉(zhuǎn)換、模型轉(zhuǎn)換、投影轉(zhuǎn)換和視口轉(zhuǎn)換。opengl將物體的各個(gè)頂點(diǎn)通過(guò)各種變換矩陣的作用影射到屏幕上。通過(guò)模型變換可以改變物體的位置和尺寸, 相應(yīng)的函數(shù)有g(shù)ltranlate*(),glrotate*(),glscale*(),這三條命令相當(dāng)于生成平移、旋轉(zhuǎn)和縮
29、放的矩陣,并以此矩陣作為參數(shù),然后調(diào)用glmuhimatrix*()。視點(diǎn)變換是改變視點(diǎn)的位置和方向,應(yīng)用程序庫(kù)函數(shù)glulookat()來(lái)定義視線的方向,這個(gè)函數(shù)封裝了一系列的平移和旋轉(zhuǎn)變換的命令。調(diào)用glulookat()函數(shù)執(zhí)行視點(diǎn)轉(zhuǎn)換,確定觀察物體的視點(diǎn)位置和方向;利用模型轉(zhuǎn)換對(duì)模型進(jìn)行平移、旋轉(zhuǎn)和縮放操作,以確定物體在場(chǎng)景中的位置和方向,其投影方式類似于人眼的視覺(jué)機(jī)制。用于增加圖形的真實(shí)感。函數(shù)gluperspective()和glortho()用來(lái)定義投影方式:透視投影和正視投影;視區(qū)是用來(lái)顯示圖像的窗口中的一個(gè)矩形區(qū)域。glviewport()用來(lái)設(shè)置視區(qū)的大小和位置。在open
30、gl中,為了便于用戶更加嚴(yán)格地限制視圖體,允許定義左、有、上、下、遠(yuǎn)和近6個(gè)裁減面,這樣程序員就可以刪除場(chǎng)景中多余的形體。定義一個(gè)附加裁減平面的函數(shù)是glclipplane()。2.3.2 光照要繪制逼真的三維物體必須進(jìn)行光照處理。沒(méi)有光照的三維物體模型與二維物體沒(méi)有任何差別,沒(méi)有一點(diǎn)立體感。只有具有光照的物體才是真正的三維物體。opengl可以控制光照與物體的關(guān)系,產(chǎn)生多種不同的視覺(jué)效果。光照射到物體表面時(shí),可能被物體吸收、反射或透射。光的反射和透視部分進(jìn)入視覺(jué)系統(tǒng)使我們能看見物體。光的顏色由其波長(zhǎng)決定。一束白光含有所有可見波長(zhǎng)的光。白光照射物體時(shí),只有所有可見光被等量吸收物體才會(huì)呈現(xiàn)灰色。
31、如果被不等量吸收,物體會(huì)呈現(xiàn)其它的顏色。光的亮度由光強(qiáng)決定。從物體表面反射出來(lái)的光的強(qiáng)度取決于光源的位置、光強(qiáng)、物體材質(zhì)、物體表面位置、物體表面法線和視點(diǎn)的位置。(1)光源組成:輻射光輻射光是最簡(jiǎn)單的一種成分,它源自發(fā)光體,并且不受其它光源的影響、例如:太陽(yáng)光和燈光。環(huán)境光有時(shí)又稱為泛光,它經(jīng)過(guò)環(huán)境的多次散射,已經(jīng)不能確定其方向,而是好像來(lái)自各個(gè)方向。環(huán)境光作用于物體表面時(shí),將沿各個(gè)方向均勻反射。漫反射光來(lái)自一個(gè)方向,但作用于物體表面上后將沿各個(gè)方向均勻散射。鏡面反射光來(lái)自特定方向,并沿一個(gè)特定方向離開。(2)光源的創(chuàng)建、定位和啟用前面介紹的光源類c3dlight中己經(jīng)提供了啟用光源的接口函數(shù)
32、。實(shí)際上,該函數(shù)通過(guò)opengl的函數(shù)void gllight (glenum light, type param, glenumpnam)來(lái)指定光源的各種屬性1161。其中l(wèi)ight指定所定義光源的名稱,opengl至多支持8個(gè)光源,分別為gl_lighto,gl_ light1gl_ light7。參數(shù)param指定所需設(shè)定的參數(shù)名稱,參數(shù)pnam為指向param所指定屬性值的指針。它可以指向一個(gè)數(shù)組,也可以指向一個(gè)值。對(duì)于每個(gè)給定的光源,通過(guò)設(shè)定參數(shù)param為gl_ ambient、gl_ diffuse和gl_ specular來(lái)定義環(huán)境光、漫反射光、鏡面反射光的屬性,pname為指
33、向一個(gè)對(duì)應(yīng)的顏色值。opengl中光源分為定向光源和定位光源兩種。光源定位時(shí)設(shè)置pname參數(shù)為gl_ position, param指向光源位置的坐標(biāo)數(shù)組,光源位置的三維齊次坐標(biāo)(x,y,2,w)的第四個(gè)分量,的值決定此光源為定向光源還是定位光源。當(dāng)w為零時(shí),所定義的為定向光源,其方向由(x,y,z)決定。當(dāng)w為非零時(shí),所定義的為定位光源,此時(shí)(x, y, z)代表光源的坐標(biāo)值。定位光源的確定位置決定了場(chǎng)景中物體表面的入射方向。2.3.3 材質(zhì)物體的材質(zhì)是指物體表面對(duì)光的反應(yīng)特性,通常分為三種:反射性能、透射性能、吸收性能。為了模擬這個(gè)物理過(guò)程,計(jì)算機(jī)圖形設(shè)計(jì)需要建立物體的材質(zhì)模型。一種材質(zhì)
34、由環(huán)境色、擴(kuò)散色、鏡面高亮色等組成,分別說(shuō)明了它對(duì)環(huán)境光、漫反射光和鏡面光反射的多少,即反射率。物體材質(zhì)影響物體的顏色、反光度、透明度等。假設(shè)一個(gè)只反射藍(lán)光的物體,在一束白光的照射下就呈藍(lán)色。一般來(lái)說(shuō),物體對(duì)環(huán)境光和漫反射的反射方式是相同的,因而對(duì)環(huán)境光和漫反射光的反射率基本上是相等的。但是,物體對(duì)于鏡面反射光的反射率是由鏡面反射光決定的,且物體的高亮色基本上與鏡面反射光的顏色是相同的。如果一個(gè)物體在青色光的照射下呈現(xiàn)藍(lán)色,只需設(shè)定物體的環(huán)境色和擴(kuò)散色均為藍(lán)色即可。為了讓它看起來(lái)自身能夠發(fā)光,可以用輻射光來(lái)模擬自體發(fā)光的物體。opengl通過(guò)函數(shù)void glmaterialf, i, f v
35、 (glenum face, glenumpname,type* param)來(lái)定義光照計(jì)算中所采用的材質(zhì)del。參數(shù)face的值gl front, gl_ back, gl-front-and-back,分別指定應(yīng)用所定義材質(zhì)參數(shù)的是物體的正面、背面、還是同時(shí)應(yīng)用于正反兩面,函數(shù)中所定義的材質(zhì)參數(shù)由pname來(lái)指定,其值由par二給定。2.3.4 光照與材質(zhì)的關(guān)系創(chuàng)建光源和材質(zhì)后,如果不啟用光照處理,頂點(diǎn)的顏色由當(dāng)前顏色值確定,啟用光照處理后,頂點(diǎn)顏色計(jì)算將在視覺(jué)坐標(biāo)系按光照計(jì)算公式進(jìn)行。如果一束光的rgb值為(lr, lg, lb),被照材質(zhì)的rgb值為(mr, mg, mb) ,則在不考
36、慮其他反射效果的情況下, 眼睛所看到的顏色由(lr*mr, lg*mg, lb*mb)決定。與此類似,如果到達(dá)眼睛的兩束光的rgb值分別為(r1, g1, b1)和(r2, b2, g2),則opengl將對(duì)應(yīng)的值相加,得到(r1+r2,g1+g2,b1+b2)。不管哪一個(gè)相加結(jié)果大于1都視為1。2.3.5 紋理映射在三維圖形繪制中,紋理映射是廣泛使用的,同時(shí)紋理映射也是一個(gè)相當(dāng)復(fù)雜的過(guò)程,采用一般的技術(shù),紋理映射將是一個(gè)很浩大的工程,opengl提供了一種簡(jiǎn)單的紋理映射的方法,它可以將掃描的物體,真實(shí)紋理映射到繪制的三維物體的表面,從而大大減少了紋理映射的工作。比如繪制一面磚墻,就可以用一幅
37、真實(shí)的磚墻圖像或照片作為紋理貼到一個(gè)矩形上,這樣,一面逼真的磚墻就畫好了。如果不用紋理映射的方法,則墻上的每一塊磚都必須作為一個(gè)獨(dú)立的多邊形來(lái)畫。另外,紋理映射能夠保證在變換多邊形時(shí),多邊形上的紋理圖案也隨之變化。例如,以透視投影方式觀察桌面時(shí),離視點(diǎn)遠(yuǎn)的磚塊的尺寸就會(huì)縮小,而離視點(diǎn)較近的就會(huì)大些。此外,紋理映射也常常運(yùn)用在其他一些領(lǐng)域,如飛行仿真中常把一大片植被的圖像映射到一些大多邊形上用以表示地面,或用大理石、木材、布匹等自然物質(zhì)的圖像作為紋理映射到多邊形上表示相應(yīng)的物體。使用紋理映射需要幾個(gè)步驟:指定紋理、指定紋理應(yīng)用方式、激活紋理映射、指定紋理坐標(biāo)和幾何坐標(biāo)。在本次設(shè)計(jì)中,使用的紋理數(shù)
38、據(jù)格式是bmp文件的圖像格式,bmp的結(jié)構(gòu)比較簡(jiǎn)單,屬于一種圖形、圖像數(shù)據(jù)的通用格式。主要使用bmp文件的數(shù)據(jù)格式完成對(duì)桌面繪制。第三章 臺(tái)球游戲具體實(shí)現(xiàn)3.1 在mfc中設(shè)計(jì)游戲顯示的框架臺(tái)球游戲是用opengl和mfc框架共同實(shí)現(xiàn)的3d游戲,設(shè)計(jì)臺(tái)球游戲的時(shí)候第一步首先是設(shè)計(jì)運(yùn)行游戲的時(shí)候所需要的框架,利用了mfc里面視圖類中的基于對(duì)話框的設(shè)計(jì)來(lái)完成對(duì)游戲整體框架的設(shè)計(jì)主要有四個(gè)大部分組成,分別是由菜單欄和工具欄,控制力量框架,游戲類型框架和游戲大廳界面。如圖3.1所示:游戲框架菜單欄和工具欄游戲大廳界面游戲類型框架控制力量框架圖3.1 框架流程圖figure 3.1 frame of f
39、low chart(1)菜單欄和工具欄,菜單欄設(shè)置為了方便用戶的選擇和利用快捷鍵來(lái)操作游戲。而工具欄是為了設(shè)置各種選擇角度,對(duì)于游戲界面的放大和縮小,加入和新建游戲的圖標(biāo)工具,此外還可以根據(jù)這個(gè)工具欄中的選擇工具來(lái)控制操作臺(tái)球游戲的球桿的方向和力度。(2)控制力量框架,在這里可以顯示選擇的力量的大小,根據(jù)顯示線條的長(zhǎng)短來(lái)調(diào)整對(duì)臺(tái)球球桿的力量的控制,利用鼠標(biāo)來(lái)改變箭頭的方向改變對(duì)球桿的方向的改變。利用這這個(gè)顯示窗口可以方便的控制球桿。(3)游戲類型框架,這個(gè)框架類是來(lái)自對(duì)話框的公有繼承,這個(gè)框架的主要功能是為了加入游戲,還是新建游戲。(4)游戲大廳界面,臺(tái)球的顯示和操作的界面都是在這個(gè)框架下面實(shí)
40、現(xiàn)。是臺(tái)球游戲核心框架。主要功能是為了顯示臺(tái)球球體以及在碰撞運(yùn)行過(guò)程。此外還要顯示臺(tái)球桌面。以及臺(tái)球在桌面停放的位置。3.2 在mfc中使用opengl設(shè)計(jì)臺(tái)球游戲根據(jù)上述三維虛擬臺(tái)球游戲的功能要求,將該游戲程序劃分為以下模塊,其結(jié)構(gòu)如圖3.2所示:場(chǎng)景模塊臺(tái)球界面模塊模型控制模塊運(yùn)動(dòng)模擬模塊窗口模塊幾何模型模塊數(shù)學(xué)模型模塊變換模塊桌面箭頭球體圖3.2 界面流程圖figure 3.2 interface flowchart 窗口模塊 創(chuàng)建windows窗口處理消息 場(chǎng)景模塊 管理整個(gè)演示程序中的對(duì)象 臺(tái)球界面模塊 用于游戲界面的顯示 數(shù)學(xué)模型模塊 用于大量的矩陣運(yùn)算 模型控制模塊 鍵盤鼠標(biāo)控制
41、模型位置和方向及運(yùn)動(dòng) 幾何模型模塊 幾何模型的繪制 桌面 用于承載臺(tái)球的桌面的繪制(主桌面、桌角和桌邊) 球體 用于運(yùn)動(dòng)球體的繪制(有一個(gè)母球、7個(gè)藍(lán)球和8個(gè)紅球) 箭頭 用于控制力量的箭頭的繪制 運(yùn)動(dòng)模擬模塊 解決球桿與球、球與球及球與球桌邊界的碰撞和運(yùn)動(dòng) 變換模塊 用于實(shí)現(xiàn)觀察者的變換整個(gè)場(chǎng)景的繪制是程序的核心,主要包括靜態(tài)場(chǎng)景和動(dòng)態(tài)場(chǎng)景兩部分內(nèi)容的繪制;模型控制模塊用于實(shí)現(xiàn)球體的運(yùn)動(dòng),球體的碰撞的具體實(shí)現(xiàn),視角變換;幾何模型模塊是用于完成一些矢量計(jì)算和矩陣的計(jì)算。3.2.1 使用opengl具體實(shí)現(xiàn)臺(tái)球桌面球桌是有三部分組成的,每個(gè)部分都是有一個(gè)填充的四邊形組成,四邊形的顏色需要用紋理處
42、理。然后紋理的初始化需要三種紋理,三種紋理分別是臺(tái)球四周木質(zhì)暗紅色紋理、臺(tái)球主桌面紋理、木質(zhì)紋理和主桌面之間的過(guò)濾紋理(陰影紋理)。臺(tái)球桌根據(jù)紋理的分類,設(shè)計(jì)主桌面,桌角和桌邊。臺(tái)球桌面的設(shè)計(jì)流程,如圖3.3所示:桌面使用圖形的繪制材質(zhì)和光照的設(shè)置紋理初始化和指定紋理桌面繪制圖3.3 桌面流程圖figure 3.3 playground flowchart 根據(jù)opengl紋理映射繪制主桌面,桌角和桌邊。紋理映射的基本步驟如下:定義紋理;綁定紋理;控制濾波;說(shuō)明紋理映射方式;繪制場(chǎng)景,給出頂點(diǎn)的紋理坐標(biāo)和幾何坐標(biāo)。(1)二維紋理定義:void glteximage2d(glenum targe
43、t,glint level,glint components,glsizei width,glsizei height,glint border,glenum format,glenum type,const glvoid *pixels);其中參數(shù)target是常數(shù)gl_texture_2d。參數(shù)level表示多級(jí)分辨率的紋理圖像的級(jí)數(shù),若只有一種分辨率,則level設(shè)為0,參數(shù)components是一個(gè)從14的整數(shù),指出選擇了r、g、b、a中的哪些分量用于調(diào)整和混合,1表示了選擇了r分量,2表示選擇了r和a兩個(gè)分量,3表示了選擇r、g、b三個(gè)分量,4表示選擇了r、g、b、a 4個(gè)分量。參數(shù)
44、width和height給出了紋理圖像的長(zhǎng)度和寬度,參數(shù)border為紋理邊界寬度,它通常為0,width和height必須是2m+2b,這里m是整數(shù),長(zhǎng)和寬可以有不同的值,b是border的值。紋理映射的最大尺寸依賴于opengl,但它至少必須是使用256x256,若width和height設(shè)置為0,則紋理映射關(guān)閉。參數(shù)format和type描述了紋理映射的格式和數(shù)據(jù)類型,format可以是gl_color_index、gl_rgb,gl_red、gl_green、gl_blue、gl_alpha、gl_luminance或者是gl_luminance_alpha。類似地,參數(shù)type是gl
45、_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)綁定紋理的使用:函數(shù)glbindtexture()綁定了一個(gè)紋理對(duì)象名時(shí),將創(chuàng)建一個(gè)新的紋理對(duì)象,并將其紋理圖像數(shù)據(jù)和紋理屬性設(shè)置為默認(rèn)值。接下來(lái)的函數(shù)調(diào)用gltexsubimage2d()將數(shù)據(jù)存儲(chǔ)到紋理對(duì)象中。紋理對(duì)象中可能包含了紋理圖像和相關(guān)的mipmap圖像,其中包括相關(guān)的數(shù)據(jù),如寬度、高度、邊框?qū)挾取?nèi)部格式、分量的精度和紋
46、理屬性。被保存的紋理屬性包括縮小濾波方法和放大濾波方法、環(huán)繞模式、邊框顏色和紋理優(yōu)先級(jí)。再次綁定一個(gè)紋理對(duì)象時(shí),其數(shù)據(jù)將成為當(dāng)前的紋理狀態(tài)(以前綁定的紋理狀態(tài)被替換掉)。void glbindtexture(glenum target,gluint texturename);此函數(shù)完成三項(xiàng)工作。如果參數(shù)texturename為非零的無(wú)符號(hào)整數(shù),且首次被使用,將創(chuàng)建一個(gè)新的紋理對(duì)象,該紋理對(duì)象將進(jìn)入活動(dòng)狀態(tài);如果參數(shù)texturename為0,opengl將停止使用紋理對(duì)象,返回到未命名的默認(rèn)紋理。首次綁定一個(gè)紋理對(duì)象名(創(chuàng)建一個(gè)紋理對(duì)象)時(shí),參數(shù)target指定了維數(shù),其取值為gl_textu
47、re_1d、gl_texture_2d、gl_texture_3d或gl_texture_cube_map。紋理對(duì)象剛被創(chuàng)建時(shí),諸如縮小濾波方法和放大濾波方法、環(huán)繞模式、邊框顏色和紋理優(yōu)先級(jí)等紋理屬性被設(shè)置為默認(rèn)值。(3)opengl中的紋理控制:void gltexparameteri(glenum target,glenum panme,type param);控制紋素映射到片元(fragement)時(shí)怎么對(duì)待紋理。第一個(gè)參數(shù)target是gl_texture_2d,它指出了二維紋理說(shuō)明參數(shù);后兩個(gè)參數(shù)的值如表3.1所示。表3.1 放大和縮小濾波方式table 3.1 magnificat
48、ion and deflation filter mode參數(shù)值gl_texture_wrap_sgl_clamp,gl_repeatgl_texture_wrap_tgl_clamp,gl_repaetgl_texture_mag_filtergl_nearest,gl_lineargl_texture_min_filtergl_nearest, gl_nearest_mipmap_nearestgl_linear,gl_nearest_mipmap_lineargl_linear_mipmap_nearestgl_linear_mipmap_linear一般來(lái)說(shuō),紋理圖像為正方形或長(zhǎng)方形。
49、但當(dāng)它映射到一個(gè)多邊形或曲面上并變換到屏幕坐標(biāo)時(shí),紋理的單個(gè)紋素很少對(duì)應(yīng)于屏幕圖像上的像素。根據(jù)所用變換和所用紋理映射,屏幕上單個(gè)像素可以對(duì)應(yīng)于一個(gè)紋素的一小部分(即放大)或一大批紋素(即縮小)。下面的函數(shù)是說(shuō)明放大和縮小的方法:gltexparameteri(gl_texture_2,gl_texture_mag_filter,gl_nearest);gltexparameteri(gl_texure_2d,gl_texture_min_filter,gl_nearest);實(shí)際上,第一個(gè)參數(shù)可以是gl_texture_1d或gl_texture_2d,即表明所使用的紋理是一維的還是二維;第
50、二參數(shù)指定濾波方法,其中g(shù)l_texture_mag_filter指定為放大濾波方法,gl_texture_min_filter指定為縮小濾波方法;第三個(gè)參數(shù)說(shuō)明濾波方式。若選擇gl_nearest則采用坐標(biāo)最靠近像素中心的紋素,這有可能使圖像走樣;若選擇gl_linear則采用最靠近像素中心的4個(gè)像素的加權(quán)平均值。gl_nearest所需計(jì)算比gl_linear要少,因而執(zhí)行的更快,但gl_linear提供了比較平滑的效果。(4)映射方式:上面的例程中,紋理圖下是直接作為畫到多邊形上的顏色。實(shí)際上,可以用紋理中的值來(lái)調(diào)整多邊形(曲面)原來(lái)的顏色,或用紋理圖像中的顏色與多邊形(曲面)原來(lái)的顏色
51、進(jìn)行混合。因此,opengl提供了3種紋理映射的方式,函數(shù)如下所示:void gltexenvifv(glenum target,glenum pname,type param);參數(shù)target必須是gl_texture_env;若參數(shù)pname是gl_textur e_env _mode,則參數(shù)param可以是gl_decal、gl_modulate或gl_blend,以說(shuō)明紋理值與原來(lái)表面顏色的處理方式;若參數(shù)pname是gl_texture_en v_color,則參數(shù)是包含了4個(gè)浮點(diǎn)數(shù)(分別是r、g、b、a分量)的數(shù)值,這些值只在采用gl_blend紋理函數(shù)時(shí)才有用。(5)紋理坐標(biāo):
52、在繪制紋理映射場(chǎng)景時(shí),不僅要給每個(gè)頂點(diǎn)定義幾何坐標(biāo),而且也要定義紋理坐標(biāo)。經(jīng)過(guò)多種變換后,幾何坐標(biāo)決定頂點(diǎn)在屏幕上繪制的位置,而紋理坐標(biāo)決定紋理圖像中的哪一個(gè)紋素賦予該頂點(diǎn)。并且頂點(diǎn)之間的紋理坐標(biāo)插值與基礎(chǔ)篇中所講的平滑著色插值方法相同。紋理圖像是方形數(shù)組,紋理坐標(biāo)通常可以定義成一、二、三或四維形式,稱為s、t、r和q坐標(biāo),以區(qū)別于物體坐標(biāo)(x,y,z,w)和其他的坐標(biāo)。其中一維常用s坐標(biāo)表示,二維坐標(biāo)常用(s,t)坐標(biāo)表示,在桌面紋理中忽略了r坐標(biāo),q坐標(biāo)像w一樣,一半值為1,主要用于建立齊次坐標(biāo)。opengl坐標(biāo)定義的函數(shù)是:void gltexcoord1234sifdv(type co
53、ords);設(shè)置當(dāng)前紋理坐標(biāo),此后要調(diào)用glvertex*()所產(chǎn)生的頂點(diǎn)都賦予當(dāng)前的紋理坐標(biāo)。對(duì)于gltextcoord2f()可以設(shè)置s和t坐標(biāo)值,r設(shè)置為0,q設(shè)置為1;而type的對(duì)應(yīng)值(glshort、glint、glfloat或gldouble)來(lái)說(shuō)明坐標(biāo)的類型。要完成桌面的紋理,還需要基本圖元繪制,在opengl中,所有的幾何物體最終都由有一定順序的頂點(diǎn)集來(lái)來(lái)描述。函數(shù)glvertex234sifdv(type coords)可以用二維、三維或齊次坐標(biāo)定義頂點(diǎn)。在臺(tái)球游戲中,使用三維glvertex3f()函數(shù)完成定義頂點(diǎn)。函數(shù)glbegin(glenum mode)標(biāo)志描述一個(gè)
54、幾何圖元頂點(diǎn)列表的開始,相應(yīng)標(biāo)志完成的函數(shù)glend()。在glbegin(glenum mode)和glend()之間最重要的信息由函數(shù)glvertex3f()定義的頂點(diǎn),由函數(shù)gltexcoord2f()定義紋理坐標(biāo)。其參數(shù)mode表示幾何圖元的描述類型。相關(guān)類型以及說(shuō)明如表3.2所示。表3.2 幾何圖元的類型table 3.2 style of geometrical primitive 類型說(shuō)明gl_quads多組獨(dú)立填充四邊形gl_quad_strip連續(xù)填充四邊形gl_line_strip不閉合折線gl_points單個(gè)頂點(diǎn)集利用glenable()來(lái)打開紋理、材質(zhì)和關(guān)照等,完成以
55、后用gldisable()關(guān)閉紋理、材質(zhì)和光照等。3.2.2 使用opengl具體實(shí)現(xiàn)臺(tái)球球體完成桌面的繪制,需要對(duì)桌面上的臺(tái)球的繪制,把球體分成了三個(gè)部分一個(gè)是母球的繪制,練習(xí)需要的紅球和藍(lán)球的繪制。相對(duì)于桌面的繪制來(lái)說(shuō),臺(tái)球球體的繪制簡(jiǎn)單一些。球體繪制的基本流程如圖3.4。球體繪制明暗處理光源材質(zhì)母球紅球藍(lán)球 圖3.4 球體流程圖figure 3.4 ball flowchart球體繪制的基本步驟如下:明暗處理;光源;材質(zhì);球體繪制,給出球體的所在位置。(1)明暗處理在計(jì)算就圖形學(xué)中,光滑的曲面表面常用多邊形予以逼近和表示,而每個(gè)小多邊形輪廓(或內(nèi)部)就用單一的顏色或許多不同的顏色來(lái)勾畫(
56、或填充),這種處理方法就稱為明暗處理。在opengl中,用單一顏色處理的稱為平面明暗處理(flat shading),用許多不同顏色處理稱為光滑明暗處理(smooth shading),也稱為gouraud明暗處理(gouraud shading)。設(shè)置明暗處理的函數(shù)為:void glshademodel(glenum mode);函數(shù)的參數(shù)為gl_flat或gl_smooth,分別表示了平面明暗處理和光滑明暗處理。應(yīng)用平面明暗處理模式時(shí),多邊形內(nèi)每個(gè)點(diǎn)的法向一致,且顏色也一致;應(yīng)用光滑明暗處理模式時(shí),多邊形所有點(diǎn)的法向是由內(nèi)插生成的,具有一定的連續(xù)性,因此每個(gè)點(diǎn)的顏色也相應(yīng)內(nèi)插,故呈現(xiàn)不同色。這種模式下,插值方法采用的是雙線性插值法。本例中采用的就是光滑明暗處理。(2)光源光源有許多特性,如顏色、位置和方向等。選擇不同的特性值,則對(duì)應(yīng)的光源作用在物體上的效果也不一樣。下面是定義光源特性的函數(shù)gllight*()函數(shù):void gllightifv(glenum light,glenum pname,type param);創(chuàng)建具有某種特性的光源。其中第一個(gè)參數(shù)light指定所創(chuàng)建光源號(hào),如gl_light0、gl_light1、.gl_l
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025理石安全生產(chǎn)管理合同
- 2024新版生物七年級(jí)上冊(cè)-章節(jié)知識(shí)點(diǎn)總結(jié)(人教版)
- 漳州市個(gè)人租房合同
- 房屋裝修裝飾合同
- 周邊養(yǎng)殖用地出租合同范例
- 店面轉(zhuǎn)讓低價(jià)合同范例
- 企業(yè)購(gòu)置合同范例
- 出售民房小院合同范例
- 委托倉(cāng)庫(kù)出租合同范例
- 關(guān)于醫(yī)院用工合同范例
- 2024-2030年中國(guó)體育培訓(xùn)行業(yè)市場(chǎng)發(fā)展分析及發(fā)展趨勢(shì)與投資風(fēng)險(xiǎn)預(yù)測(cè)研究報(bào)告
- 圓-解決問(wèn)題(教學(xué)設(shè)計(jì))2024-2025學(xué)年六年級(jí)上冊(cè)數(shù)學(xué)人教版
- 2024山東省化工行業(yè)職業(yè)技能大賽(化工總控工)試題庫(kù)-下(判斷、簡(jiǎn)答題)
- 歷史人教部編版八年級(jí)(上冊(cè))22.抗日戰(zhàn)爭(zhēng)的勝利課件(25張)2024版新教材
- 2024年新北師大版七年級(jí)上冊(cè)數(shù)學(xué)課件 第六章 6.2 第2課時(shí) 樣本的選取
- 15《搭船的鳥》(教學(xué)設(shè)計(jì))2024-2025學(xué)年統(tǒng)編版語(yǔ)文三年級(jí)上冊(cè)
- 2024至2030年中國(guó)傳染病醫(yī)院產(chǎn)業(yè)發(fā)展動(dòng)態(tài)及未來(lái)前景展望報(bào)告
- 知識(shí)點(diǎn)填空練習(xí)-2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 學(xué)習(xí)使用顯微鏡 2024-2025學(xué)年七年級(jí)上冊(cè)生物同步課件(人教版2024)
- 中國(guó)近現(xiàn)代史綱要智慧樹知到答案2024年北京師范大學(xué)等跨校共建
- JGJ7-2010 空間網(wǎng)格結(jié)構(gòu)技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論