OpenGL編程指引_第1頁(yè)
OpenGL編程指引_第2頁(yè)
OpenGL編程指引_第3頁(yè)
OpenGL編程指引_第4頁(yè)
OpenGL編程指引_第5頁(yè)
已閱讀5頁(yè),還剩40頁(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、OpenGL基礎(chǔ)圖形編程 -總目錄 出 處: 中國(guó)游戲開(kāi)發(fā)者 2001-09-20 作 者:總目錄第一章 OpenGL 與三維圖形世界1.1 OpenGL使人們進(jìn)入三維圖形世界1.2 OpenGL提供直觀的三維圖形開(kāi)發(fā)環(huán)境1.3 OpenGL稱為目前三維圖形開(kāi)發(fā)標(biāo)準(zhǔn)第二章 OpenGL 概念建立2.1 OpenGL基本理解2.2 OpenGL工作流程2.3 OpenGL圖形操作步驟第三章 Windows NT 環(huán)境下的OpenGL3.1 Windows NT 下的 OpenGL 函數(shù)3.2 OpenGL基本功能3.3 Windows NT 下 OpenGL結(jié)構(gòu)第四章OpenGL 基本程序結(jié)構(gòu)第

2、五章OpenGL 數(shù)據(jù)類型和函數(shù)名第六章OpenGL 輔助庫(kù)的基本使用6.1 輔助庫(kù)函數(shù)分類6.2 輔助庫(kù)應(yīng)用示例第七章OpenGL 建模7.1 描述圖元7.1.1 齊次坐標(biāo)7.1.2 點(diǎn)7.1.3 線7.1.4 多邊形7.2 繪制圖元7.2.1 定義頂點(diǎn)7.2.2 構(gòu)造幾何圖元第八章 OpenGL 變換8.1 從三維空間到二維平面8.1.1 相機(jī)模擬8.1.2 三維圖形顯示流程8.1.3 基本變換簡(jiǎn)單分析8.2 幾何變換8.2.1 兩個(gè)矩陣函數(shù)解釋8.2.2 平移8.2.3 旋轉(zhuǎn)8.2.4 縮放和反射8.2.5 幾何變換舉例8.3 投影變換8.3.1 正射投影8.3.2 透視投影8.4 裁剪

3、變換8.5 視口變換8.6 堆棧操作第九章 OpenGL 顏色9.1 計(jì)算機(jī)顏色9.1.1 顏色生成原理9.1.2 RGB色立體9.2 顏色模式9.2.1 RGBA 模式9.2.2 顏色表模式9.2.3 兩種模式應(yīng)用場(chǎng)合9.3 顏色應(yīng)用舉例第十章 OpenGL 光照10.1 真實(shí)感圖形基本概念10.2 光照模型10.2.1 簡(jiǎn)單光照模型10.2.2 OpenGL 光組成10.2.3 創(chuàng)建光源10.2.4 啟動(dòng)光照10.3 明暗處理10.4 材質(zhì)10.4.1 材質(zhì)顏色10.4.2 材質(zhì)定義10.4.3 材質(zhì)RGB值和光源RGB值的關(guān)系10.4.4 材質(zhì)改變第H一章 OpenGL位圖和圖像11.1

4、 位圖11.1.1 位圖和字符11.1.2 當(dāng)前光柵位置11.1.3 位圖顯示11.2 圖像11.2.1 象素讀寫(xiě)11.2.2 象素拷貝11.2.3 圖像縮放11.2.4 圖像例程 第十二章OpenGL紋理12.1 基本步驟12.2 紋理定義12.3 紋理控制12.3.1 濾波12.3.2 重復(fù)與約簡(jiǎn)12.4 映射方式12.5 紋理坐標(biāo)12.5.1 坐標(biāo)定義12.5.2 坐標(biāo)自動(dòng)產(chǎn)生第十三章OpenGL復(fù)雜物體建模13.1 圖元擴(kuò)展13.1.1 點(diǎn)和線13.1.2 多邊形13.2 法向計(jì)算13.2.1 法向基本計(jì)算方法13.2.2 法向定義13.3 曲線生成13.3.1 曲線繪制舉例13.3.

5、2 曲線定義和啟動(dòng)13.3.3 曲線坐標(biāo)計(jì)算13.3.4 定義均勻間隔曲線坐標(biāo)值13.4 曲面構(gòu)造13.4.1 曲面定義和坐標(biāo)計(jì)算13.4.2 定義均勻間隔的曲面坐標(biāo)值13.4.3 紋理曲面13.4.4 NURBS 曲面第十四章OpenGL特殊光處理14.1 光照模型14.1.1 全局環(huán)境光14.1.2 近視點(diǎn)與無(wú)窮遠(yuǎn)視點(diǎn)14.1.3 雙面光照14.2 光源位置與衰減14.3 聚光與多光源14.3.1 聚光14.3.2 多光源與例程14.4 光源位置與方向的控制14.5 輻射光第十五章OpenGL效果處理15.1 融合15.1.1 Alpha 值與融合15.1.2 融合因子15.1.3 融合實(shí)

6、例15.2 反走樣15.2.1 行為控制函數(shù)15.2.2 點(diǎn)和線的反走樣15.2.3 多邊形的反走樣15.3 霧15.3.1 霧的概論和例程15.3.2 霧化步驟第十六章OpenGL顯示列表16.1 顯示列表概論16.1.1 顯示列表的優(yōu)勢(shì)16.1.2 顯示列表的適用場(chǎng)合16.2 創(chuàng)建和執(zhí)行顯示列表16.2.1 創(chuàng)建顯示列表16.2.2 執(zhí)行顯示列表16.3 管理顯示列表16.4 多級(jí)顯示列表第十七章OpenGL幀緩存和動(dòng)畫(huà)17.1 幀緩存17.1.1 幀緩存組成17.1.2 緩存清除17.2 動(dòng)畫(huà)下頁(yè)】打印】 【 關(guān)閉 】字號(hào):大中小 OpenGL基礎(chǔ)圖形編程 -OpenGL與3D圖形世界

7、出 處: 中國(guó)游戲開(kāi)發(fā)者 2001-09-20 作 者:目錄1.1 OpenGL使人們進(jìn)入三維圖形世界1.2 OpenGL提供直觀的三維圖形開(kāi)發(fā)環(huán)境1.3 OpenGL成為目前三維圖形開(kāi)發(fā)標(biāo)準(zhǔn)1.1 、OpenGL使人們進(jìn)入三維圖形世界我們生活在一個(gè)充滿三維物體的三維世界中,為了使計(jì)算機(jī)能精確地再現(xiàn)這些物體,我們必須能在三維空間描繪這些物體。我們又生活在一個(gè)充滿信息的世界中,能否盡快地理解并運(yùn)用這些信息將直接影響事業(yè)的成敗,所以我們需要用一種最直接的形式來(lái)表示這些信息。最近幾年計(jì)算機(jī)圖形學(xué)的發(fā)展使得三維表現(xiàn)技術(shù)得以形成,這些三維表現(xiàn)技術(shù)使我們能夠再現(xiàn)三維世界中的物體,能夠用三維形體來(lái)表示復(fù)雜的

8、信息,這種技術(shù)就是可視化(Visualization)技術(shù)??梢暬夹g(shù)使人能夠在三維圖形世界中直接對(duì)具有形體的信息進(jìn)行操作, 和計(jì)算機(jī)直接交流。這種技術(shù)已經(jīng)把人和機(jī)器的力量以一種直覺(jué)而自然的方式加以統(tǒng)一, 這種革命性的變化無(wú)疑將極大地提高人們的工作效率??梢暬夹g(shù)賦予人們一種仿真的、三維的并且具有實(shí)時(shí)交互的能力,這樣人們可以在三維圖形世界中用以前不可想象的手段來(lái)獲取信息或發(fā)揮自己創(chuàng)造性的思維。機(jī)械工程師可以從二維平面圖中得以解放直接進(jìn)入三維世界, 從而很快得到自己設(shè)計(jì)的三維機(jī)械零件模型。醫(yī)生可以從病人的三維掃描圖象分析病人的病灶。軍事指揮員可以面對(duì)用三維圖形技術(shù)生成的戰(zhàn)場(chǎng)地形,指揮具有真實(shí)感的

9、三維飛機(jī)、軍艦、坦克向目標(biāo)開(kāi)進(jìn)并分析戰(zhàn)斗方案的效果。更令人驚奇的是目前正在發(fā)展的虛擬現(xiàn)實(shí)技術(shù),它能使人們進(jìn)入一個(gè)三維的、多媒體的虛擬世界,人們可以游歷遠(yuǎn)古時(shí)代的城堡,也可以遨游浩翰的太空。所有這些都依賴于計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)可視化技術(shù)的發(fā)展。人們對(duì)計(jì)算機(jī)可視化技術(shù)的研究已經(jīng)歷了一個(gè)很長(zhǎng)的歷程,而且形成了許多可視化工具,其中SGI 公司推出的GL 三維圖形庫(kù)表現(xiàn)突出,易于使用而且功能強(qiáng)大。利用GL 開(kāi)發(fā)出來(lái)的三維應(yīng)用軟件頗受許多專業(yè)技術(shù)人員的喜愛(ài),這些三維應(yīng)用軟件已涉及建筑、產(chǎn)品設(shè)計(jì)、醫(yī)學(xué)、地球科學(xué)、流體力學(xué)等領(lǐng)域。隨著計(jì)算機(jī)技術(shù)的繼續(xù)發(fā)展,GL 已經(jīng)進(jìn)一步發(fā)展成為OpenGL, OpenGL

10、已被認(rèn)為是高性能圖形和交互式視景處理的標(biāo)準(zhǔn),目前包括 ATT公司UNIX軟件實(shí)3室、 舊M公司、DEC公司、SUN公司、HP公 司、Microsoft公司和SGI公司在內(nèi)的幾家在計(jì)算機(jī)市場(chǎng)占領(lǐng)導(dǎo)地位的大公司都采用了OpenGL圖形標(biāo)準(zhǔn)。值得一提的是,由于 Microsoft公司在 Windows NT中提供 OpenGL圖形標(biāo)準(zhǔn),OpenGL 將在微機(jī)中廣泛應(yīng)用,尤其是OpenGL三維圖形加速卡和微機(jī)圖形工作站的推出,人們可以在微機(jī)上實(shí)現(xiàn)三維圖形應(yīng)用,如CAD 設(shè)計(jì)、仿真模擬、三維游戲等,從而更有機(jī)會(huì)、更方便地使用OpenGL及其應(yīng)用軟件來(lái)建立自己的三維圖形世界。1.2 、 OpenGL 提供

11、直觀的三維圖形開(kāi)發(fā)環(huán)境OpenGL實(shí)際上是一種圖形與硬件的接口。它包括了120個(gè)圖形函數(shù),開(kāi)發(fā)者可以用這些函數(shù)來(lái)建立三維模型和進(jìn)行三維實(shí)時(shí)交互。與其他圖形程序設(shè)計(jì)接口不同,OpenGL 提供了十分清晰明了的圖形函數(shù),因此初學(xué)的程序設(shè)計(jì)員也能利用OpenGL 的圖形處理能力和1670 萬(wàn)種色彩的調(diào)色板很快地設(shè)計(jì)出三維圖形以及三維交互軟件。OpenGL 強(qiáng)有力的圖形函數(shù)不要求開(kāi)發(fā)者把三維物體模型的數(shù)據(jù)寫(xiě)成固定的數(shù)據(jù)格式,這樣開(kāi)發(fā)者不但可以直接使用自己的數(shù)據(jù),而且可以利用其他不同格式的數(shù)據(jù)源。這種靈活性極大地節(jié)省了開(kāi)發(fā)者的時(shí)間,提高了軟件開(kāi)發(fā)效益。長(zhǎng)期以來(lái),從事三維圖形開(kāi)發(fā)的技術(shù)人員都不得不在自己的

12、程序中編寫(xiě)矩陣變換、外部設(shè)備訪問(wèn)等函數(shù),這樣為調(diào)制這些與自己的軟件開(kāi)發(fā)目標(biāo)關(guān)系并不十分密切的函數(shù)費(fèi)腦筋,而OpenGL正是提供一種直觀的編程環(huán)境,它提供的一系列函數(shù)大大地簡(jiǎn)化了三維圖形程序。例如:* OpenGL 提供一系列的三維圖形單元供開(kāi)發(fā)者調(diào)用。* OpenGL 提供一系列的圖形變換函數(shù)。* OpenGL 提供一系列的外部設(shè)備訪問(wèn)函數(shù),使開(kāi)發(fā)者可以方便地訪問(wèn)鼠標(biāo)、鍵盤(pán)、 空間球、數(shù)據(jù)手套等這種直觀的三維圖形開(kāi)發(fā)環(huán)境體現(xiàn)了OpenGL的技術(shù)優(yōu)勢(shì),這也是許多三維圖形開(kāi)發(fā)者熱衷于OpenGL的緣由所在。1.3 、 OpenGL 成為目前三維圖形開(kāi)發(fā)標(biāo)準(zhǔn)OpenGL 成為目前三維圖形開(kāi)發(fā)標(biāo)準(zhǔn)在計(jì)

13、算機(jī)發(fā)展初期,人們就開(kāi)始從事計(jì)算機(jī)圖形的開(kāi)發(fā)。 直到計(jì)算機(jī)硬軟件和計(jì)算機(jī)圖形學(xué)高度發(fā)達(dá)的九十年代,人們發(fā)現(xiàn)復(fù)雜的數(shù)據(jù)以視覺(jué)的形式表現(xiàn)時(shí)是最易理解的,因而三維圖形得以迅猛發(fā)展,于是各種三維圖形工具軟件包相繼推出,如PHIGS、 PEX、 RenderMan 等。這些三維圖形工具軟件包有些側(cè)重于使用方便,有些側(cè)重于渲染效果或與應(yīng)用軟件的連接,但沒(méi)有一種三維工具軟件包在交互式三維圖形建模能力、外部設(shè)備管理以及編程方便程度上能夠OpenGL相比擬。OpenGL 經(jīng)過(guò)對(duì) GL 的進(jìn)一步發(fā)展,實(shí)現(xiàn)二維和三維的高級(jí)圖形技術(shù),在性能上表現(xiàn)得異常優(yōu)越,它包括建模、變換、 光線處理、色彩處理、動(dòng)畫(huà)以及更先進(jìn)的能力

14、,如紋理影射、物體運(yùn)動(dòng)模糊等。OpenGL 的這些能力為實(shí)現(xiàn)逼真的三維渲染效果、建立交互的三維景觀提供了優(yōu)秀的軟件工具。OpenGL 在硬件、窗口、操作系統(tǒng)方面是相互獨(dú)立的。許多計(jì)算機(jī)公司已經(jīng)把 OpenGL集成到各種窗口和操作系統(tǒng)中,其中操作系統(tǒng)包括 UNIX、Windows NT、DOS等,窗口系統(tǒng)有 X窗口、Windows等。為了實(shí)現(xiàn)一個(gè)完整功能的圖形處 理系統(tǒng),設(shè)計(jì)一個(gè)與OpenGL相關(guān)的系統(tǒng)結(jié)構(gòu)為:其最底層是圖形硬件,第二層為操作系統(tǒng), 第三層為窗口系統(tǒng),第四層為 OpenGL,第五層為應(yīng)用軟件。OpenGL是網(wǎng)絡(luò)透明的,在客戶 服務(wù)器(Client-Server)體系結(jié)卞中,Ope

15、nGL允許本地和遠(yuǎn)程繪圖。 所以在網(wǎng)絡(luò)系統(tǒng)中, OpenGL在X窗口、Windows或其它窗口系統(tǒng)下都可以以一個(gè)獨(dú)立的圖形窗口出現(xiàn)。OpenGL作為一個(gè)性能優(yōu)越的圖形應(yīng)用程序設(shè)計(jì)界面(API)而適合于廣泛的計(jì)算環(huán)境,從個(gè)人計(jì)算機(jī)到工作站和超級(jí)計(jì)算機(jī),OpenGL都能實(shí)現(xiàn)高性能的三維圖形功能。由于許多在計(jì)算機(jī)界具有領(lǐng)導(dǎo)地位的計(jì)算機(jī)公司紛紛采用OpenGL 作為三維圖形應(yīng)用程序設(shè)計(jì)界面,OpenGL應(yīng)用程序具有廣泛的移植性。因此,OpenGL已成為目前的三維圖形開(kāi)發(fā)標(biāo)準(zhǔn),是從事三維圖形開(kāi)發(fā)工作的技術(shù)人員所必須掌握的開(kāi)發(fā)工具。【 上頁(yè)】 【 下頁(yè)】【 打印】 【 關(guān)閉】頁(yè)首目錄報(bào)錯(cuò)后退字號(hào):大中小O

16、penGL基礎(chǔ)圖形編程 -OpenGL概念建立 出 處: 中國(guó)游戲開(kāi)發(fā)者 2001-09-21 作 者:目錄2.1 OpenGL基本理解2.2 OpenGL工作流程2.3 OpenGL圖形操作步驟2.1、 OpenGL基本理解OpenGL是一個(gè)與硬件圖形發(fā)生器的軟件接口,它包括了100多個(gè)圖形操作函數(shù),開(kāi)發(fā)者可以利用這些函數(shù)來(lái)構(gòu)造景物模型、進(jìn)行三維圖形交互軟件的開(kāi)發(fā)。正如上一章所述,OpenGL是一個(gè)高性能的圖形開(kāi)發(fā)軟件包。OpenGL支持網(wǎng)絡(luò),在網(wǎng)絡(luò)系統(tǒng)中用戶可以在不同的圖形終端上運(yùn)行程序顯示圖形。OpenGL 作為一個(gè)與硬件獨(dú)立的圖形接口,它不提供與硬件密切相關(guān)的設(shè)備操作函數(shù),同時(shí),它也不

17、提供描述類似于飛機(jī)、汽車、分子形狀等復(fù)雜形體的圖形操作函數(shù)。用戶必須從點(diǎn)、線、面等最基本的圖形單元開(kāi)始構(gòu)造自己的三維模型。當(dāng)然,象Openinventor那樣更高一級(jí)的基于 OpenGL的三維圖形建模開(kāi)發(fā)軟件包將提供方便的工具。因此 OpenGL的圖形操作函數(shù)十分基本、靈活。例如OpenGL中的模型繪制過(guò)程就多種多樣,內(nèi)容十分豐富,OpenGL提供了以下的對(duì)三維物體的繪制方式:* 網(wǎng)格線繪圖方式(wireframe )這種方式僅繪制三維物體的網(wǎng)格輪廓線。* 深度優(yōu)先網(wǎng)格線繪圖方式(depth_cued )用網(wǎng)格線方式繪圖,增加模擬人眼看物體一樣,遠(yuǎn)處的物體比近處的物體要暗些。* 反走樣網(wǎng)格線繪

18、圖方式(antialiased)用網(wǎng)格線方式繪圖,繪圖時(shí)采用反走樣技術(shù)以減少圖形線條的參差不齊。* 平面消隱繪圖方式(flat_shade)對(duì)模型的隱藏面進(jìn)行消隱,對(duì)模型的平面單元按光照程度進(jìn)行著色但不進(jìn)行光滑處理。* 光滑消隱繪圖方式(smooth_shade )對(duì)模型進(jìn)行消隱按光照渲染著色的過(guò)程中再進(jìn)行光滑處理,這種方式更接近于現(xiàn)實(shí)。* 加陰影和紋理的繪圖方式(shadows、 textures)在模型表面貼上紋理甚至于加上光照陰影,使得三維景觀象照片一樣。* 運(yùn)動(dòng)模糊的繪圖方式(motion-blured )模擬物體運(yùn)動(dòng)時(shí)人眼觀察所感覺(jué)的動(dòng)感現(xiàn)象。* 大氣環(huán)境效果(atmosphere-

19、effects )在三維景觀中加入如霧等大氣環(huán)境效果,使人身臨其境。* 深度域效果(depth-of-effects )類似于照相機(jī)鏡頭效果,模型在聚焦點(diǎn)處清晰,反之則模糊。這些三維物體繪圖和特殊效果處理方式,說(shuō)明OpenGL已經(jīng)能夠模擬比較復(fù)雜的三維物體或自然景觀,這就是我們所面對(duì)的OpenGL。2.2、 OpenGL工作流程整個(gè)OpenGL的基本工作流程如下圖:圖 2-1 OpenGL 基本工作流程其中幾何頂點(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ù)的處理方式是不同

20、的,但它們都經(jīng)過(guò)光柵化、逐個(gè)片元 ( Fragment)處理直至把最后的光柵數(shù)據(jù)寫(xiě)入幀緩沖器。在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)計(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.3、 Ope

21、nGL圖形操作步驟在上一節(jié)中說(shuō)明了 OpenGL的基本工作流程,根據(jù)這個(gè)流程可以歸納出在OpenGL中進(jìn)行主要的圖形操作直至在計(jì)算機(jī)屏幕上渲染繪制出三維圖形景觀的基本步驟:1)根據(jù)基本圖形單元建立景物模型,并且對(duì)所建立的模型進(jìn)行數(shù)學(xué)描述(OpenGL中把:點(diǎn)、線、多邊形、圖像和位圖都作為基本圖形單元)。2)把景物模型放在三維空間中的合適的位置,并且設(shè)置視點(diǎn)(viewpoint )以觀察所感興趣的景觀。3) 計(jì)算模型中所有物體的色彩,其中的色彩根據(jù)應(yīng)用要求來(lái)確定,同時(shí)確定光照條件、紋理粘貼方式等。4)把景物模型的數(shù)學(xué)描述及其色彩信息轉(zhuǎn)換至計(jì)算機(jī)屏幕上的象素,這個(gè)過(guò)程也就是光柵化(rasteriz

22、ation ) 。在這些步驟的執(zhí)行過(guò)程中,OpenGL 可能執(zhí)行其他的一些操作,例如自動(dòng)消隱處理等。另外,景物光柵化之后被送入幀緩沖器之前還可以根據(jù)需要對(duì)象素?cái)?shù)據(jù)進(jìn)行操作?!旧享?yè)】 【下頁(yè)】【打印】 【關(guān)閉】頁(yè)首目錄報(bào)錯(cuò)后退字號(hào):大中小 OpenGL基礎(chǔ)圖形編程 -Windows NT環(huán)境下的 OpenGL 出 處: 中國(guó)游戲開(kāi)發(fā)者 2001-09-23 作 者:目錄3.1 OpenGL的函數(shù)3.2 OpenGL基本功能3.3 OpenGL的結(jié)構(gòu)3.4 、 Windows NT 下的 OpenGL 函數(shù)如前面的章節(jié)所述,Windows NT下的OpenGL同樣包含100多個(gè)庫(kù)函數(shù),這些函數(shù)都按

23、一定的格式來(lái)命名,即每個(gè)函數(shù)都以gl開(kāi)頭。Windows NT下白O OpenGL除了具有基本的OpenGL函數(shù)外,還支持其他四類函數(shù): 相應(yīng)函數(shù)具體說(shuō)明OpenGL實(shí)用庫(kù)43 個(gè)函數(shù),每個(gè)函數(shù)以glu 開(kāi)頭。OpenGL 輔助庫(kù)31 個(gè)函數(shù),每個(gè)函數(shù)以aux 開(kāi)頭。Windows 專用庫(kù)函數(shù)(WGL)6 個(gè)函數(shù),每個(gè)函數(shù)以wgl 開(kāi)頭。Win32 API 函數(shù)5 個(gè)函數(shù),函數(shù)前面沒(méi)有專用前綴。表 2-1在OpenGL中有115個(gè)核心函數(shù),這些函數(shù)是最基本的,它們可以在任何OpenGL的工作平臺(tái)上應(yīng)用。這些函數(shù)用于建立各種各樣的形體,產(chǎn)生光照效果,進(jìn)行反走樣以及進(jìn)行紋理映射,進(jìn)行投影變換等等。

24、由于這些核心函數(shù)有許多種形式并能夠接受不同類型的參數(shù),實(shí)際上這些函數(shù)可以派生出300 多個(gè)函數(shù)。OpenGL 的實(shí)用函數(shù)是比OpenGL 核心函數(shù)更高一層的函數(shù),這些函數(shù)是通過(guò)調(diào)用核心函數(shù)來(lái)起作用的。這些函數(shù)提供了十分簡(jiǎn)單的用法,從而減輕了開(kāi)發(fā)者的編程負(fù)擔(dān)。OpenGL的實(shí)用函數(shù)包括紋理映射、坐標(biāo)變換、多邊形分化、繪制一些如橢球、圓柱、茶壺等簡(jiǎn)單多邊形實(shí)體(本指南將詳細(xì)講述這些函數(shù)的具體用法)等。 這部分函數(shù)象核心函數(shù)一樣在任何OpenGL平臺(tái)都可以應(yīng)用。OpenGL 的輔助庫(kù)是一些特殊的函數(shù),這些函數(shù)本來(lái)是用于初學(xué)者做簡(jiǎn)單的練習(xí)之用,因此這些函數(shù)不能在所有的OpenGL平臺(tái)上使用,在Wind

25、ows NT環(huán)境下可以使用這些函數(shù)。這些函數(shù)使用簡(jiǎn)單,它們可以用于窗口管理、輸入輸出處理以及繪制一些簡(jiǎn)單的三維形體。為了使OpenGL的應(yīng)用程序具有良好的移植性,在使用OpenGL輔助庫(kù)的時(shí)候應(yīng)謹(jǐn)慎。6個(gè) WGL函數(shù)是用于連接 OpenGL與 Windows NT的,這些函數(shù)用于在 Windows NT環(huán) 境下的OpenGL窗口能夠進(jìn)行渲染著色, 在窗口內(nèi)繪制位圖字體以及把文本放在窗口的某一 位置等。這些函數(shù)把Windows 與 OpenGL 揉合在一起。最后的5 個(gè) Win32 函數(shù)用于處理象素存儲(chǔ)格式和雙緩沖區(qū),顯然這些函數(shù)僅僅能夠用于Win32 系統(tǒng)而不能用于其它OpenGL平臺(tái)。3.2

26、、 OpenGL基本功能OpenGL 能夠?qū)φ麄€(gè)三維模型進(jìn)行渲染著色,從而繪制出與客觀世界十分類似的三維景象。另外OpenGL還可以進(jìn)行三維交互、動(dòng)作模擬等。具體的功能主要有以下這些內(nèi)容。* 模型繪制OpenGL 能夠繪制點(diǎn)、線和多邊形。應(yīng)用這些基本的形體,我們可以構(gòu)造出幾乎所有的三維模型。 OpenGL 通常用模型的多邊形的頂點(diǎn)來(lái)描述三維模型。如何通過(guò)多邊形及其頂點(diǎn)來(lái)描述三維模型,在指南的在后續(xù)章節(jié)會(huì)有詳細(xì)的介紹。* 模型觀察在建立了三維景物模型后,就需要用OpenGL描述如何觀察所建立的三維模型。觀察三維模型是通過(guò)一系列的坐標(biāo)變換進(jìn)行的。模型的坐標(biāo)變換在使觀察者能夠在視點(diǎn)位置觀察與視點(diǎn)相適

27、應(yīng)的三維模型景觀。在整個(gè)三維模型的觀察過(guò)程中,投影變換的類型決定觀察三維模型的觀察方式,不同的投影變換得到的三維模型的景象也是不同的。最后的視窗變換則對(duì)模型的景象進(jìn)行裁剪縮放,即決定整個(gè)三維模型在屏幕上的圖象。* 顏色模式的指定OpenGL 應(yīng)用了一些專門的函數(shù)來(lái)指定三維模型的顏色。程序員可以選擇二個(gè)顏色模式,即RGBA模式和顏色表模式。在RGBA模式中,顏色直接由 RGB值來(lái)指定;在顏色表模式中,顏色值則由顏色表中的一個(gè)顏色索引值來(lái)指定。程序員還可以選擇平面著色和光滑著色二種著色方式對(duì)整個(gè)三維景觀進(jìn)行著色。* 光照應(yīng)用用 OpenGL 繪制的三維模型必須加上光照才能更加與客觀物體相似。Ope

28、nGL 提供了管理四種光 (輻射光、環(huán)境光、 鏡面光和漫反射光)的方法, 另外還可以指定模型表面的反射特性。* 圖象效果增強(qiáng)OpenGL 提供了一系列的增強(qiáng)三維景觀的圖象效果的函數(shù),這些函數(shù)通過(guò)反走樣、混合和霧 化來(lái)增強(qiáng)圖象的效果。反走樣用于改善圖象中線段圖形的鋸齒而更平滑,混合用于處理模型的半透明效果,霧使得影像從視點(diǎn)到遠(yuǎn)處逐漸褪色,更接近于真實(shí)。* 位圖和圖象處理OpenGL還提供了專門對(duì)位圖和圖象進(jìn)行操作的函數(shù)。* 紋理映射三維景物因缺少景物的具體細(xì)節(jié)而顯得不夠真實(shí),為了更加逼真地表現(xiàn)三維景物,OpenGL提供了紋理映射的功能。OpenGL 提供的一系列紋理映射函數(shù)使得開(kāi)發(fā)者可以十分方便

29、地把真實(shí)圖象貼到景物的多邊形上,從而可以在視窗內(nèi)繪制逼真的三維景觀。* 實(shí)時(shí)動(dòng)畫(huà) 為了獲得平滑的動(dòng)畫(huà)效果,需要先在內(nèi)存中生成下一幅圖象,然后把已經(jīng)生成的圖象從內(nèi)存拷貝到屏幕上,這就是OpenGL的雙緩存技術(shù)(double buffer)。OpenGL提供了雙緩存技術(shù)的一系列函數(shù)。* 交互技術(shù)目前有許多圖形應(yīng)用需要人機(jī)交互,OpenGL 提供了方便的三維圖形人機(jī)交互接口,用戶可以選擇修改三維景觀中的物體。3.3、 Windows NT 下 OpenGL 的結(jié)構(gòu)OpenGL的作用機(jī)制是客戶(client) /服務(wù)器(sever)機(jī)制,即客戶(用 OpenGL繪制 景物的應(yīng)用程序)向服務(wù)器(即Ope

30、nGL內(nèi)核)發(fā)布OpenGL命令,服務(wù)器則解釋這些命令。 大多數(shù)情況下,客戶和服務(wù)器在同一機(jī)器上運(yùn)行。正是OpenGL 的這種客戶/服務(wù)器機(jī)制,OpenGL可以十分方便地在網(wǎng)絡(luò)環(huán)境下使用。因此Windows NT下的OpenGL是網(wǎng)絡(luò)透明的。正象 Windows的圖形設(shè)備接口( GDI)把圖形函數(shù)庫(kù)封裝在一個(gè)動(dòng)態(tài)鏈接庫(kù)( Windows NT 下的 GDI32.DLD內(nèi)一樣,OpenGL圖形庫(kù)也被封裝在一個(gè)動(dòng)態(tài)鏈接庫(kù)內(nèi)(OPENGL32.DLL。受客戶應(yīng)用程序調(diào)用的OpenGL函數(shù)都先在 OPENGL32.DLL中處理,然后傳給服務(wù)器WINSRV.DLLOpenGL的命令再次得到處理并且直接傳

31、給Win32的設(shè)備驅(qū)動(dòng)接口 ( Device DriveInterface,DDI) , 這樣就把經(jīng)過(guò)處理的圖形命令送給視頻顯示驅(qū)動(dòng)程序。下圖簡(jiǎn)要說(shuō)明這個(gè)過(guò)程: 圖 3-1 OpenGL 在 Windows NT 下運(yùn)行機(jī)制在三維圖形加速卡的GLINT圖形加速芯片的加速支持下,二個(gè)附加的驅(qū)動(dòng)程序被加入這個(gè)過(guò)程中。一個(gè) OpenGL可安裝客戶驅(qū)動(dòng)程序(Installable Client Driver,ICD)被加在客戶這一 邊, 一個(gè)硬件指定DDI( Hardware-specific DDI ) 被加在服務(wù)器這邊,這個(gè)驅(qū)動(dòng)程序與Wind32DDI 是同一級(jí)別的。圖3-2在三維圖形加速下 Op

32、enGL運(yùn)行機(jī)制上頁(yè)】 【 下頁(yè)】打印】 【 關(guān)閉】頁(yè)首目錄報(bào)錯(cuò)后退字號(hào):大中小 OpenGL基礎(chǔ)圖形編程 -OpenGL基本程序結(jié)構(gòu) 出 處: 中國(guó)游戲開(kāi)發(fā)者 2001-09-25 作 者:用 OpenGL 編寫(xiě)的程序結(jié)構(gòu)類似于用其他語(yǔ)言編寫(xiě)的程序。實(shí)際上,OpenGL 是一個(gè)豐富的三維圖形函數(shù)庫(kù),編寫(xiě)OpenGL 程序并非難事,只需在基本C 語(yǔ)言中調(diào)用這些函數(shù),用法同Turbo C、 Microsoft C 等類似,但也有許多不同之處。本指南所有的程序都是在Windows NT 的 Microsoft Visual C+ 集成環(huán)境下編譯連接的,其中有部分頭文件和函數(shù)是為這個(gè)環(huán)境所用的,例如

33、判別操作系統(tǒng)的頭文件“ glos.h”。 此外,為便于各類讀者同時(shí)快速入門,在短時(shí)間內(nèi)掌握OpenGL編程的基本方法和技巧,指南中例子盡量采用標(biāo)準(zhǔn) ANSI C調(diào)用OpenGL函數(shù)來(lái)編寫(xiě),而且所有例程都只采用 OpenGL附帶的輔 助庫(kù)中的窗口系統(tǒng)。此外,這樣也便于程序在各平臺(tái)間移植,尤其往工作站UNIX操作系統(tǒng)移植時(shí),也只需改動(dòng)頭文件等很少很少的部分。下面列出一個(gè)簡(jiǎn)單的OpenGL 程序:例 4-1 OpenGL 簡(jiǎn)單例程(Simple.c)#include <GL/gl.h>#include <GL/glaux.h>#include "glos.h&quo

34、t;void main(void) auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,500);auxInitWindow("simple");glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0,0.0,0.0);glRectf(-0.5,-0.5,0.5,0.5);glFlush(); _sleep(1000); 這個(gè)程序運(yùn)行結(jié)果是在屏幕窗口內(nèi)畫(huà)一個(gè)紅色的方塊。下面具體分析整個(gè)程序結(jié)構(gòu):首先,在程序最開(kāi)

35、始處是OpenGL 頭文件:<GL/gl.h>、<GL/glaux.h>。前一個(gè)是gl庫(kù)的頭文件,后一個(gè)是輔助庫(kù)的頭文件。此外,在以后的幾章中 還將說(shuō)明OpenGL的另外兩個(gè)頭文件,一個(gè)是 <GL/glu.h>實(shí)用庫(kù)的頭文件,另一個(gè)是<GL/glx.h>X窗口擴(kuò)充庫(kù)的頭文件(這個(gè)常用在工作站上)。接下來(lái)是主函數(shù) main()的定義:一般的程序結(jié)構(gòu)是先定義一個(gè)窗口:auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,500);auxInitWindow("simp

36、le");auxInitDisplayMode(AUX_SINGLE|AUX_RGBA設(shè)置窗口顯示模式為RGBA方式,即彩色方式,并且圖形緩存為單緩存(SINGLE BUFFE)R。 auxInitPosition(0, 0, 500, 500) 定義窗口的初始位置, 前兩個(gè)參數(shù)(0, 0)為窗口的左上角點(diǎn)的屏幕坐標(biāo),后兩個(gè)參數(shù)(500,500)為窗口的寬度和高度。 auxInitWindow("simple") 是窗口初始化,字符參數(shù)是窗口名稱。然后是窗口內(nèi)清屏:glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BU

37、FFER_BIT);第一句將窗口清為黑色,第二句將顏色緩沖區(qū)清為glClearColor(0.0, 0.0, 0.0, 0.0) 命令所設(shè)置的顏色,即同窗口背景顏色一致。再接著是在窗口內(nèi)畫(huà)一個(gè)物體:glColor3f(1.0,0.0,0.0);glRectf(-0.5,-0.5,0.5,0.5);很明顯,第一句設(shè)置物體顏色,函數(shù)中前三個(gè)參數(shù)分別為R、 G、 B 值,最后一個(gè)參數(shù)是 Alpha 值,范圍都從0 至 1;第二句繪制一個(gè)二維矩形。注意:OpenGL 是針對(duì)三維圖形而言,因此用作OpenGL 編程繪制物體必須意識(shí)到任何一個(gè)物體都是三維的,具有空間性,而顯示于屏幕上的物體都是三維物體在二

38、維平面上的投影。從表面上看,上述程序代碼很簡(jiǎn)單,實(shí)際上已經(jīng)用到了缺省的投影形式(正射投影)。再看glFlush()函數(shù),表示強(qiáng)制繪圖完成。最后一句_sleep(1000),參數(shù)單位為毫秒,整句意思是保持現(xiàn)有狀況一秒鐘,然后結(jié)束程序運(yùn)行。這個(gè)函數(shù)是VC+的庫(kù)函數(shù)??偠灾?,OpenGL程序基本結(jié)構(gòu)為定義窗口、清理窗口、繪制物體、結(jié)束運(yùn)行。【 上頁(yè)】 【 下頁(yè)】【 打印】 【 關(guān)閉】頁(yè)首目錄報(bào)錯(cuò)后退字號(hào):大中小OpenGL基礎(chǔ)圖形編程 -OpenGL數(shù)據(jù)類型和函數(shù)名 出 處: 中國(guó)游戲開(kāi)發(fā)者 2001-09-27 作 者:OpenGL的數(shù)據(jù)類型定義可以與其它語(yǔ)言一致,但建議在ANSI C下最好使用

39、以下定義的數(shù)據(jù)類型,例如GLint、 GLfloat 等。具體類型見(jiàn)表5-1 。前綴數(shù)據(jù)類型相應(yīng)C語(yǔ)言類型OpenGL 類型b8-bit integer signed charGLbytes16-bit integer shortGLshorti 32-bit integerlongGLint,GLsizeif32-bit floating-point floatGLfloat,GLclampfd 64-bit floating-point doubleGLdouble,GLclampd ub8-bit unsigned integer unsigned char GLubyte,GLbool

40、ean us16-bit unsigned integer unsigned short GLushort ui32-bit unsigned integer unsigned longGLuint,GLenum,GLbitfield 表 5-1 命令前綴和參數(shù)數(shù)據(jù)類型OpenGL的庫(kù)函數(shù)命名方式很有規(guī)律,了解這種規(guī)律后閱讀和編寫(xiě)程序都比較容易方便。首先,每個(gè)庫(kù)函數(shù)有前綴gl、glu、glx或aux,表示此函數(shù)分屬于基本庫(kù)、實(shí)用庫(kù)、X窗口擴(kuò)充庫(kù)或輔助庫(kù),其后的函數(shù)名頭字母大寫(xiě),后綴是參數(shù)類型的簡(jiǎn)寫(xiě),取i、f,參見(jiàn)表5-1 。例:glVertex2i(2,4);glVertex3f(2.0,4.

41、0,5.0);注意:有的函數(shù)參數(shù)類型后綴前帶有數(shù)字2、 3、 4。 2 代表二維,3 代表三維,4 代表alpha 值(以后介紹)。有些OpenGL函數(shù)最后帶一個(gè)字母v,表示函數(shù)參數(shù)可用一個(gè)指針指向一個(gè)向量(或數(shù)組)來(lái)替代一系列單個(gè)參數(shù)值。下面兩種格式都表示設(shè)置當(dāng)前顏色為紅色,二者等價(jià)。glColor3f(1.0,0.0,0.0);float color_array=1.0,0.0,0.0;glColor3fv(color_array);除了以上基本命名方式外,還有一種帶“*”星號(hào)的表示方法,例如 glColor*(),它表示可以用函數(shù)的各種方式來(lái)設(shè)置當(dāng)前顏色。同理, glVertex*v()

42、 表示用一個(gè)指針指向所有類型的向量來(lái)定義一系列頂點(diǎn)坐標(biāo)值。最后,OpenGL也定義GLvoid類型,如果用 C語(yǔ)言編寫(xiě),可以用它替代 void類型。【上頁(yè)】 【下頁(yè)】【打印】 【關(guān)閉】頁(yè)首目錄報(bào)錯(cuò)后退字號(hào):大中小 OpenGL基礎(chǔ)圖形編程 -OpenGL輔助庫(kù)的基本使用 出 處: 中國(guó)游戲開(kāi)發(fā)者 2001-09-29 作 者:目錄6.1 輔助庫(kù)函數(shù)分類6.2 輔助庫(kù)應(yīng)用示例OpenGL 是一個(gè)開(kāi)放的系統(tǒng),它是獨(dú)立于任何窗口系統(tǒng)或操作系統(tǒng)的。盡管它包含了許多圖形函數(shù),但它卻沒(méi)有窗口函數(shù),也沒(méi)有從鍵盤(pán)和鼠標(biāo)讀取事件的函數(shù),所以要初學(xué)者寫(xiě)出一個(gè)完整的圖形程序是相當(dāng)困難的。另外,OpenGL 圖形函數(shù)

43、中只提供基本的幾何原形:點(diǎn)、線、多邊形,因此要?jiǎng)?chuàng)建基本的三維幾何體如球、錐體等,也很不容易。而OpenGL輔助庫(kù)就是為解決這些基本問(wèn)題專門設(shè)計(jì)的,它提供了一些基本的窗口管理函數(shù)和三維圖形繪制函數(shù),能幫助初學(xué)者盡快進(jìn)入OpenGL世界,掌握關(guān)鍵的三維圖形技術(shù),體會(huì)其中奇妙的樂(lè)趣。但是,對(duì)于復(fù)雜的應(yīng)用,這些函數(shù)遠(yuǎn)遠(yuǎn)不夠,只能作為參考。6.1 、輔助庫(kù)函數(shù)分類這一節(jié)內(nèi)容可以作為手冊(cè)查閱,初學(xué)者不必深究。輔助庫(kù)函數(shù)大致分為六類:6.1.1 窗口初始化和退出相關(guān)函數(shù)有三個(gè),它們?cè)诘谝徽乱烟岬?,這里將詳細(xì)介紹:void auxInitWindow(GLbyte *titleString)打開(kāi)一個(gè)由auxI

44、nitDisplayMode() 和 auxInitPosition() 指定的窗口。函數(shù)參數(shù)是窗口標(biāo)題,窗口背景缺省顏色是RGBA下的黑色或顏色表(color_index)下的0號(hào)調(diào)色板的顏色。按下Escape鍵可以完成關(guān)掉窗口、結(jié)束程序、全部清屏三項(xiàng)功能。void auxInitDisplayMode(GLbitfield mask)設(shè)置窗口顯示模式?;灸J接蠷GBA或顏色表、單或雙緩存,也可指定其他附加模式:深度、模板或累積緩存(depth,stencil,and/or accumulation buffer ) 。參數(shù) mask 是一組位標(biāo)志的聯(lián)合(取或),AUX_RGBA AUX_

45、INDEX AUX_SINGLB AUX_DOUBLE 以及其它有效標(biāo) 志 AUX_DEPTH AUX_STENCI或 AUX_ACCUM=void auxInitPosition(GLint x,GLint y,GLsizei width,GLsizei height)設(shè)置窗口位置及大小。參數(shù) ( x, y) 為窗口的左上角點(diǎn)的屏幕坐標(biāo),參數(shù) ( width, height )為窗口的寬度和高度,單位為象素,缺省值為(0, 0, 100, 100) 。6.1.2 窗口處理和事件輸入當(dāng)窗口創(chuàng)建后,且在進(jìn)入主函數(shù)循環(huán)之前,應(yīng)當(dāng)?shù)怯浺韵铝谐龅幕卣{(diào)函數(shù)(callbackfunction ) :voi

46、d auxReshapeFunc(void(*function)(GLsizei,GLsizei)定義窗口改變時(shí)形狀重定函數(shù)。參數(shù) function 是一個(gè)函數(shù)指針,這個(gè)函數(shù)帶有兩個(gè)參數(shù),即窗口改變后的新寬度和新高度。通常,function 是 glViewport() ,顯示裁減后的新尺寸,重定義投影矩陣,以便使投影后圖像的比例與視點(diǎn)匹配,避免比例失調(diào)。若不調(diào)用 auxReshapeFunc(),缺省重定物體形狀的函數(shù)功能是調(diào)用一個(gè)二維的正射投影矩陣。運(yùn)用輔 助庫(kù),窗口將在每個(gè)事件改變后自動(dòng)重新繪制。void auxKeyFunction(GLint key,void(*function)(

47、void)定義鍵盤(pán)響應(yīng)函數(shù)。參數(shù)function就是當(dāng)按下key鍵時(shí)所調(diào)用的函數(shù)指針,輔助庫(kù)為參數(shù) key 定義了幾個(gè)常量:AUX_0 至 AUX_9、AUX_A 至 AUX_N AUX_a 至 AUX_z、AUX_LEFTAUX_RIGHT AUX_UP、AUX_DOWN (方向鍵)、AUX_ESCAPE AUX_SPAC或 AUX_RETURNvoid auxMouseFunc(GLint button,Glint mode,void(*function)(AUX_EVENTREC *)定義鼠標(biāo)響應(yīng)函數(shù)。參數(shù) function 就是當(dāng)鼠標(biāo)以mode 方式作用于button 時(shí)所調(diào)用的函數(shù)。

48、參數(shù) button 有 AUX_LEFTBUTTON AUX_MIDDLEBUTTOIN AUX_RIGHTBUTTON(以右手 為標(biāo)準(zhǔn))。參數(shù) mode代表鼠標(biāo)觸擊狀態(tài),擊中時(shí)為AUX_MOUSEDOWN,釋放時(shí)為AUX_MOUSEUR參數(shù)function必須帶一個(gè)參數(shù),它是指向結(jié)構(gòu) AUX_EVENNTRE(Cj指針。當(dāng)函數(shù)auxMouseFunc()被調(diào)用時(shí)將為這個(gè)結(jié)構(gòu)分配相應(yīng)的內(nèi)存。通常用法類似如下:void function(AUX_EVENTREC *event) GLint x,y;x=event->dataAUX_MOUSEX;y=event->dataAUX_MO

49、USEY;. 6.1.3 顏色表裝入因?yàn)镺penGL本身沒(méi)有窗口系統(tǒng),所以依賴于窗口系統(tǒng)的顏色映射就沒(méi)法裝入顏色查找表。如果采用顏色表模式,就要用到輔助庫(kù)提供的用RGB值定義的單個(gè)顏色索引函數(shù):void auxSetOneColor(GLint index,GLfloat red,GLfloat green,GLfloat blue)設(shè)置自定義顏色的索引。參數(shù)index 即索引號(hào),參數(shù)red、 green、 blue 分別為紅、綠、藍(lán)值,范圍在(01)內(nèi)。6.1.4 三維物體繪制每組三維物體包括兩種形式:網(wǎng)狀體 ( wire) 和實(shí)心體( solid) 。 網(wǎng)狀體沒(méi)有平面法向,而實(shí)心體有,能進(jìn)

50、行光影計(jì)算,有光照時(shí)采用實(shí)心體模型。下面這些函數(shù)的參數(shù)都是定義物體大小的,可以改變。功能函數(shù)繪制球void auxWireSphere(GLdouble radius)void auxSolidSphere(GLdouble radius)繪制立方體void auxWireCube(GLdouble size)void auxSolidCube(GLdouble size)繪制長(zhǎng)方體void auxWireBox(GLdouble width,GLdouble height,GLdouble depth)void auxSolidBox(GLdouble width,GLdouble heig

51、ht,GLdouble depth) 繪制環(huán)形圓紋面void auxWireTorus(GLdouble innerRadius,GLdouble outerRadius) void auxSolidTorus(GLdouble innerRadius,GLdouble outerRadius) 繪制圓柱void auxWireCylinder(GLdouble radius,GLdouble height)void auxSolidCylinder(GLdouble radius,GLdouble height) 繪制二十面體void auxWireIcosahedron(GLdouble

52、radius)void auxSolidIcosahedron(GLdouble radius) 繪制八面體void auxWireOctahedron(GLdouble radius)void auxSolidOctahedron(GLdouble radius) 繪制四面體void auxWireTetrahedron(GLdouble radius)void auxSolidTetrahedron(GLdouble radius) 繪制十二面體void auxWireDodecahedron(GLdouble radius)void auxSolidDodecahedron(GLdoub

53、le radius) 繪制圓錐void auxWireCone(GLdouble radius,GLdouble height)void auxSolidCone(GLdouble radius,GLdouble height) 繪制茶壺void auxWireTeapot(GLdouble size)void aucSolidTeapot(GLdouble size) 表 6-1以上物體均以各自中心為原點(diǎn)繪制,所有坐標(biāo)都已單位化,可以縮放。6.1.5 背景過(guò)程管理void auxIdleFunc(void *func)定義空閑狀態(tài)執(zhí)行函數(shù)。參數(shù)func 是一個(gè)指針,指向所要執(zhí)行的函數(shù)功能。當(dāng)

54、它為零時(shí), func 執(zhí)行無(wú)效。6.1.6 程序運(yùn)行void auxMainLoop(void(*displayFunc)(void)定義場(chǎng)景繪制循環(huán)函數(shù)。displayFunc 指針指向場(chǎng)景繪制函數(shù)。當(dāng)窗口需要更新或場(chǎng)景發(fā)生改變時(shí),程序便調(diào)用它所指的函數(shù),重新繪制場(chǎng)景。6.2 、輔助庫(kù)應(yīng)用示例下面舉一個(gè)輔助庫(kù)的應(yīng)用例子,testaux.c:例 6-1 輔助庫(kù)應(yīng)用例程testaux.c#include "glos.h"#include <GL/gl.h>#include <GL/glaux.h>void myinit(void);void CALLB

55、ACK myReshape(GLsizei w,GLsizei h);void CALLBACK display(void);void myinit(void)glClearColor(0.0,0.0,0.0,0.0);glClear(GL_COLOR_BUFFER_BIT);void CALLBACK myReshape(GLsizei w,GLsizei h)glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h)glOrtho(-1.5,1.5,-1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w,-10.0,10.0); elseglOrtho(-1.5*(GLfloat)h/(GLfloat)w, 1.5

溫馨提示

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