




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、 OpenGL 與 3D 圖形世界1.1、 OpenGL 使人們進(jìn)入三維圖形世界我們生活在一個充滿三維物體的三維世界中,為了使計算機(jī)能精確地再現(xiàn)這些物體,我們必須能在三 維空間描繪這些物體。我們又生活在一個充滿信息的世界中,能否盡快地理解并運用這些信息將直接影響 事業(yè)的成敗,所以我們需要用一種最直接的形式來表示這些信息。最近幾年計算機(jī)圖形學(xué)的發(fā)展使得三維表現(xiàn)技術(shù)得以形成,這些三維表現(xiàn)技術(shù)使我們能夠再現(xiàn)三維世 界中的物體,能夠用三維形體來表示復(fù)雜的信息,這種技術(shù)就是可視化( Visualization ) 技術(shù)。可視化 技術(shù)使人能夠在三維圖形世界中直接對具有形體的信息進(jìn)行操作,和計算機(jī)直接交
2、流。這種技術(shù)已經(jīng)把人 和機(jī)器的力量以一種直覺而自然的方式加以統(tǒng) 一,這種革命性的變化無疑將極大地提高人們的工作效率。 可視化技術(shù)賦予人們一種仿真的、三維的并且具有實時交互的能力,這樣人們可以在三維圖形世界中用以 前不可想象的手段來獲取信息或發(fā)揮自己創(chuàng)造性的思維。機(jī)械工程師可以從二維平面圖中得以解放直接進(jìn) 入三維世界, 從而很快得到自己設(shè)計的三維機(jī)械零件模型。 醫(yī)生可以從病人的三維掃描圖象分析病人的病 灶。軍事指揮員可以面對用三維圖形技術(shù)生成的戰(zhàn)場地形,指揮具有真實感的三維飛機(jī)、軍艦、坦克向目 標(biāo)開進(jìn)并分析 戰(zhàn)斗方案的效果。更令人驚奇的是目前正在發(fā)展的虛擬現(xiàn)實技術(shù),它能使人們進(jìn)入一個三維的、多媒
3、體的虛擬世界,人 們可以游歷遠(yuǎn)古時代的城堡 ,也 可以遨游浩翰的太空。所有這些都依賴于計算機(jī)圖形學(xué)、計算機(jī)可視化技 術(shù)的發(fā)展。 人們對計算機(jī)可視化技術(shù)的研究已經(jīng)歷了一個很長的歷程, 而且形成了許多可視 化工具,其中 SGI 公司推出的 GL 三維圖形庫表現(xiàn)突出,易于使用而且功能強大。利用 GL 開發(fā)出來的三維應(yīng)用軟件頗 受許多專業(yè)技術(shù)人員的喜愛,這些三維應(yīng)用 軟件已涉及建筑、產(chǎn)品設(shè)計、醫(yī)學(xué)、地球科學(xué)、流體力學(xué)等領(lǐng) 域。隨著計算機(jī)技術(shù)的繼續(xù)發(fā)展, GL 已經(jīng)進(jìn)一步發(fā)展成為 OpenGL ,OpenGL 已被認(rèn)為是高 性能圖形和 交互式視景處理的標(biāo)準(zhǔn),目前包括 ATT 公司 UNIX 軟件實驗室、
4、 IBM 公司、 DEC 公司、 SUN 公司、 HP 公司、 Microsoft 公司和 SGI 公司在內(nèi)的幾家在計算機(jī)市場占領(lǐng)導(dǎo)地位的大公司都采用了 OpenGL 圖形 標(biāo)準(zhǔn)。值得一提的是,由于 Microsoft 公司在 Windows NT 中提供 OpenGL 圖形標(biāo)準(zhǔn), OpenGL 將在微 機(jī)中廣泛應(yīng)用, 尤其是 OpenGL 三維圖形加速卡和微機(jī)圖形工作站的推出, 人們可以在微機(jī)上實現(xiàn)三維 圖 形應(yīng)用,如 CAD 設(shè)計、仿真模擬、三維游戲等,從而更有機(jī)會、更方便地使用 OpenGL 及其應(yīng)用軟件來 建立自己的三維圖形世界。1.2、 OpenGL 提供直觀的三維圖形開發(fā)環(huán)境Ope
5、nGL 實際上是一種圖形與硬件的接口。它包括了 120 個圖形函數(shù),開發(fā)者可以用這些函數(shù)來建 立三維模型和進(jìn)行三維實時交互。與其他圖形程序設(shè)計接 口不同, OpenGL 提供了十分清晰明了的圖形 函數(shù),因此初學(xué)的程序設(shè)計員也能利用 OpenGL 的圖形處理能力和 1670 萬種色彩的調(diào)色板很快地設(shè)計出 三 維圖形以及三維交互軟件。OpenGL 強有力的圖形函數(shù)不要求開發(fā)者把三維物體模型的數(shù)據(jù)寫成固定的數(shù)據(jù)格式,這樣開發(fā)者不 但可以直接使用自己的數(shù)據(jù),而且可以利用其他不同格式的數(shù)據(jù)源。這種靈活性極大地節(jié)省了開發(fā)者的時 間,提高了軟件開發(fā)效益。長期以來,從事三維圖形開發(fā)的技術(shù)人員都不得不在自己的程
6、序中編寫矩陣變換、外部設(shè)備訪問等函 數(shù),這樣為調(diào)制這些與自己的軟件開發(fā)目標(biāo)關(guān)系并不十分密切的函數(shù)費腦筋, 而 OpenGL 正是提供一種直 觀的編程環(huán)境,它提供的一系列函數(shù)大大地簡化了三維圖形程序。例如:OpenGL 提供一系列的三維圖形單元供開發(fā)者調(diào)用OpenGL 提供一系列的圖形變換函數(shù)。? OpenGL 提供一系列的外部設(shè)備訪問函數(shù),使開發(fā)者可以方便地訪問鼠標(biāo)、鍵盤、空間球、數(shù)據(jù) 手套等這種直觀的三維圖形開發(fā)環(huán)境體現(xiàn)了 OpenGL 的技術(shù)優(yōu)勢, 這也是許多三維圖形開發(fā)者熱 衷于 OpenGL 的緣由所在。1.3、 OpenGL 成為目前三維圖形開發(fā)標(biāo)準(zhǔn)OpenGL 成為目前三維圖形開發(fā)
7、標(biāo)準(zhǔn)在計算機(jī)發(fā)展初期,人們就開始從事計算機(jī)圖形的開發(fā)。直到 計算機(jī)硬軟件和計算機(jī)圖形學(xué)高度發(fā)達(dá)的九十年代, 人們發(fā) 現(xiàn)復(fù)雜的數(shù)據(jù)以視覺的形式表現(xiàn)時是最易理解 的,因而三維圖形得以迅猛發(fā)展, 于是各種三維圖形工具軟件包相繼推出, 如 PHIGS 、PEX、 RenderMan 等。這些三維圖形工具軟件包有些側(cè)重于使用方便,有些側(cè)重于渲染效果或與應(yīng)用軟件的連接,但沒有一 種三維工具軟件包在交互式三維圖形建 模能力、外部設(shè)備管理以及編程方便程度上能夠 OpenGL 相比擬。OpenGL 經(jīng)過對 GL 的進(jìn)一步發(fā)展, 實現(xiàn)二維和三維的高級圖形技術(shù), 在性 能上表現(xiàn)得異常優(yōu)越, 它 包括建模、 變換、
8、光線處理、色彩處理、 動畫以及更先進(jìn)的能力, 如紋理影射、 物體運動模糊等。 OpenGL 的這些能力為實現(xiàn)逼真的三 維渲染效果、建立交互的三維景觀提供了優(yōu)秀的軟件工具。 OpenGL 在硬件、 窗口、操作系統(tǒng)方面是相互獨立的。許多計算機(jī)公司已經(jīng)把 OpenGL 集成到各種窗口和操作系統(tǒng)中, 其中操作系統(tǒng)包括 UNIX 、Windows NT 、DOS 等,窗口系統(tǒng)有 X 窗口、 Windows 等。為了實現(xiàn)一個完整功能的圖形處理系統(tǒng),設(shè)計一個與 OpenGL 相關(guān)的系統(tǒng)結(jié)構(gòu)為:其最底層是圖形硬 件,第二層為操作系統(tǒng),第三層為窗口系統(tǒng),第四層為 OpenGL ,第五層為應(yīng)用軟件。 OpenGL
9、 是網(wǎng)絡(luò)透明的,在客戶 服務(wù)器( Client-Server )體系結(jié)構(gòu) 中, OpenGL 允許本地和遠(yuǎn)程繪圖。所以在網(wǎng)絡(luò)系統(tǒng)中, OpenGL 在 X 窗口、 Windows 或其它窗口系統(tǒng) 下都可以以一個獨立的圖形窗口出現(xiàn)。OpenGL 作為一個性能優(yōu)越的圖形應(yīng)用程序設(shè)計界面(API ) 而適合于廣泛的計算環(huán)境,從個人計算機(jī)到工作站和超級計算機(jī), OpenGL 都能實現(xiàn)高性能的三維圖形功能。由于許多在計算機(jī)界具有領(lǐng)導(dǎo)地位 的計算機(jī)公司紛 紛采用 OpenGL 作為三維圖形應(yīng)用程序設(shè)計界面, OpenGL 應(yīng)用程序具有廣泛的移植性。 因此, OpenGL 已成為目前的三維圖形開發(fā)標(biāo)準(zhǔn),是從
10、事三維圖形開發(fā)工作的技術(shù)人員所必須掌握的開發(fā)工具。二、 OpenGL 概念建立2.1 、 OpenGL 基本理解OpenGL 是一個與硬件圖形發(fā)生器的軟件接口,它包括了 100 多個圖形操作函數(shù),開發(fā)者可以利用 這些函數(shù)來構(gòu)造景物模型、進(jìn)行三維圖形交互軟件的開 發(fā)。正如上一章所述, OpenGL 是一個高性能的 圖形開發(fā)軟件包。 OpenGL 支持網(wǎng)絡(luò),在網(wǎng)絡(luò)系統(tǒng)中用戶可以在不同的圖形終端上運行程序顯示圖形。 OpenGL 作為一個與硬件獨立的圖形接口,它不提供與硬件密切相關(guān)的設(shè)備操作函數(shù),同時,它也不提供 描述類似于飛機(jī)、汽車、分子形狀等復(fù)雜形體的圖形操 作函數(shù)。用戶必須從點、線、面等最基本
11、的圖形單 元開始構(gòu)造自己的三維模型。 當(dāng)然, 象 OpenInventor 那樣更高一級的基于 OpenGL 的三維圖形建 模開 發(fā)軟件包將提供方便的工具。因此 OpenGL 的圖形操作函數(shù)十分基本、靈活。例如 OpenGL 中的模型繪 制過程就多種多樣,內(nèi)容十分豐 富, OpenGL 提供了以下的對三維物體的繪制方式:? 網(wǎng)格線繪圖方式 ( wireframe )這種方式僅繪制三維物體的網(wǎng)格輪廓線。?深度優(yōu)先網(wǎng)格線繪圖方式(depth_cued )用網(wǎng)格線方式繪圖,增加模擬人眼看物體一樣,遠(yuǎn)處的物體比近處的物體要暗些。?反走樣網(wǎng)格線繪圖方式(antialiased )用網(wǎng)格線方式繪圖,繪圖時
12、采用反走樣技術(shù)以減少圖形線條的參差不齊。?平面消隱繪圖方式 (flat_shade )對模型的隱藏面進(jìn)行消隱,對模型的平面單元按光照程度進(jìn)行著色但不進(jìn)行光滑處理。?光滑消隱繪圖方式 (smooth_shade)對模型進(jìn)行消隱按光照渲染著色的過程中再進(jìn)行光滑處理,這種方式更接近于現(xiàn)實。?加陰影和紋理的繪圖方式(shadows、textures )在模型表面貼上紋理甚至于加上光照陰影,使得三維景觀象照片一樣。? 運動模糊的繪圖方式 (motion-blured )模擬物體運動時人眼觀察所感覺的動感現(xiàn)象。?大氣環(huán)境效果(atmosphere-effects )在三維景觀中加入如霧等大氣環(huán)境效果,使人
13、身臨其境。?深度域效果(depth-of-effects )類似于照相機(jī)鏡頭效果,模型在聚焦點處清晰,反之則模糊。這些三維物體繪圖和特殊效果處理方式,說明OpenGL已經(jīng)能夠模擬比較復(fù)雜的三維物體或自然景觀,這就是我們所面對的OpenGL。2.2、OpenGL 工作流程整個OpenGL的基本工作流程如下圖:其中幾何頂點數(shù)據(jù)包括模型的頂點集、線集、多邊形集,這些數(shù)據(jù)經(jīng)過流程圖的上部,包括運算器、 逐個頂點操作等;圖像數(shù)據(jù)包括象素集、影像集、位圖集等,圖像象素數(shù)據(jù)的處理方式與幾何頂點數(shù)據(jù)的 處理方式是不同的,但它們都經(jīng)過光柵化、逐個片元( Fragment )處理直至把最后的光柵數(shù)據(jù)寫入幀緩 沖器
14、。在OpenGL中的所有數(shù)據(jù)包括幾何頂點數(shù)據(jù)和象素數(shù)據(jù)都可以被存儲在顯示列表中或者立即可以得 到處理。OpenGL中,顯示列表技術(shù)是一項重要的技術(shù)。OpenGL要求把所有的幾何圖形單元都用頂點來描述,這樣運算器和逐個頂點計算操作都可以針對每 個頂點進(jìn)行計算和操作,然后進(jìn)行光柵化形成圖形碎片;對于象素數(shù)據(jù),象素操作結(jié)果被存儲在紋理組裝 用的內(nèi)存中,再象幾何頂點操作一樣光柵化形成圖形片元。整個流程操作的最后,圖形片元都要進(jìn)行一系列的逐個片元操作,這樣最后的象素值 器實現(xiàn)圖形的顯示。BZ送入幀緩沖2.3、OpenGL 圖形操作步驟在上一節(jié)中說明了 OpenGL的基本工作流程,根據(jù)這個流程可以歸納出在
15、 形操作直至在計算機(jī)屏幕上渲染繪制岀三維圖形景觀的基本步驟:OpenGL中進(jìn)行主要的圖1)根據(jù)基本圖形單元建立景物模型,并且對所建立的模型進(jìn)行數(shù)學(xué)描述( 多邊形、圖像和位圖都作為基本圖形單元)。把景物模型放在三維空間中的合適的位置,并且設(shè)置視點(viewpointOpenGL中把:點、線、3)等。計算模型中所有物體的色彩,其中的色彩根據(jù)應(yīng)用要求來確定,同時確定光照條件、)以觀察所感興趣的景觀。紋理粘貼方式)。把景物模型的數(shù)學(xué)描述及其色彩信息轉(zhuǎn)換至計算機(jī)屏幕上的象素,這個過程也就是光柵化(rasterization在這些步驟的執(zhí)行過程中,OpenGL可能執(zhí)行其他的一些操作,例如自動消隱處理等。另
16、外,景物光柵化之后被送入幀緩沖器之前還可以根據(jù)需要對象素數(shù)據(jù)進(jìn)行操作。三、WindowsNT 下的 OpenGL3.1、Windows NT 下的 OpenGL 函數(shù)如前面的章節(jié)所述, Windows NT 下的OpenGL同樣包含100多個庫函數(shù),這些函數(shù)都按一定的格 式來命名,即每個函數(shù)都以 gl開頭。Windows NT 下的OpenGL除了具有基本的 OpenGL函數(shù)外,還 支持其他四類函數(shù):相應(yīng)函數(shù)具體說明Ope nGL實用庫43個函數(shù),每個函數(shù)以glu開頭。Ope nGL輔助庫31個函數(shù),每個函數(shù)以aux開頭。Windows 專用庫函數(shù)(WGL )6個函數(shù),每個函數(shù)以 wgl開頭。
17、Win 32 API函數(shù)5個函數(shù),函數(shù)前面沒有專用前綴。在OpenGL中有115個核心函數(shù),這些函數(shù)是最基本的,它們可以在任何OpenGL的工作平臺上應(yīng)用。這些函數(shù)用于建立各種各樣的形體,產(chǎn)生光照效果,進(jìn)行反走樣以及進(jìn)行紋理映射,進(jìn)行投影變換等等。由于這些核心函數(shù)有許多種形式并能夠接受不同類型的參數(shù),實際上這些函數(shù)可以派生岀300多個函數(shù)。OpenGL的實用函數(shù)是比OpenGL核心函數(shù)更高一層的函數(shù),這些函數(shù)是通過調(diào)用核心函數(shù)來起作用的。這些函數(shù)提供了十分簡單的用法,從而減輕了開發(fā)者的編程負(fù)擔(dān)。OpenGL的實用函數(shù)包括紋理映射、坐標(biāo)變換、多邊形分化、繪制一些如橢球、圓柱、茶壺等簡單多邊形實體
18、(本指南將詳細(xì)講述這些函數(shù)的具體用法)等。這部分函數(shù)象核心函數(shù)一樣在任何OpenGL平臺都可以應(yīng)用。OpenGL的輔助庫是一些特殊的函數(shù),這些函數(shù)本來是用于初學(xué)者做簡單的練習(xí)之用,因此這些函數(shù)不能在所有的OpenGL平臺上使用,在Windows NT 環(huán)境下可以使用這些函數(shù)。這些函數(shù)使用簡單, 它們可以用于窗口管理、輸入輸出處理以及繪制一些簡單的三維形體。為了使OpenGL的應(yīng)用程序具有良好的移植性,在使用OpenGL輔助庫的時候應(yīng)謹(jǐn)慎。6 個 WGL 函數(shù)是用于連接 OpenGL 與 Windows NT 的,這些函數(shù)用于在 Windows NT 環(huán)境下的 OpenGL 窗口能夠進(jìn)行渲染著色
19、,在窗口內(nèi)繪制位圖字體以及把文本放在窗口的某一位置等。這些函數(shù)把 Windows 與 OpenGL 揉合在一 起。最后的 5 個 Win32 函數(shù)用于處理象素存儲格式和雙緩沖區(qū), 顯然這 些函數(shù)僅僅能夠用于 Win32 系統(tǒng)而不能用于其它 OpenGL 平臺。3.2 、 OpenGL 基本功能OpenGL 能夠?qū)φ麄€三維模型進(jìn)行渲染著色,從而繪制出與客觀世界十分類似的三維景象。另外OpenGL 還可以進(jìn)行三維交互、動作模擬等。具體的功能主要有以下這些內(nèi)容。? 模型繪制OpenGL 能夠繪制點、 線和多邊形。 應(yīng)用這些基本的形體, 我們可以構(gòu)造出幾乎所有的三維模型。OpenGL 通常用模型的多邊
20、形的頂點來描述三維模型。 如何通過多邊形及其頂點來描述三維模型, 在指南的在后續(xù)章節(jié)會有詳細(xì)的介紹。? 模型觀察在 建立了三維景物模型后,就需要用 OpenGL 描述如何觀察所建立的三維模型。觀察三維模型 是通過一系列的坐標(biāo)變換進(jìn)行的。 模型的坐標(biāo)變換在使觀察者能夠在 視點位置觀察與視點相適應(yīng) 的三維模型景觀。 在整個三維模型的觀察過程中, 投影變換的類型決定觀察三維模型的觀察方式, 不同的投影變換得到的三維模型的景象也是不同的。 最后的視窗變換則對模型的景象進(jìn)行裁剪縮放,即決定整個三維模型在屏幕上的圖象。? 顏色模式的指定OpenGL 應(yīng)用了一些專門的函數(shù)來指定三維模型的顏色。程序員可以選擇
21、二個顏色模式,即RGBA 模式和顏色表模式。在 RGBA 模式中,顏色直接由 RGB 值來指定;在 顏色表模式中,顏 色值則由顏色表中的一個顏色索引值來指定。程序員還可以選擇平面著色和光滑著色二種著色方 式對整個三維景觀進(jìn)行著色。? 光照應(yīng)用用 OpenGL 繪制的三維模型必須加上光照才能更加與客觀物體相似。OpenGL 提供了管理四種光(輻射光、環(huán)境光、鏡面光和漫反射光)的方法,另外還可以指定模型表面的反射特性。? 圖象效果增強OpenGL 提供了一系列的增強三維景觀的圖象效果的函數(shù),這些函數(shù)通過反走樣、混合和霧化來 增強圖象的效果。反走樣用于改善圖象中線段圖形的鋸齒而更平滑,混合用于處理模
22、型的半透明 效果,霧使得影像從視點到遠(yuǎn)處逐漸褪色,更接近于真實。? 位圖和圖象處理OpenGL 還提供了專門對位圖和圖象進(jìn)行操作的函數(shù)。? 紋理映射三維景物因缺少景物的具體細(xì)節(jié)而顯得不夠真實,為了更加逼真地表現(xiàn)三維景物, OpenGL 提供 了紋理映射的功能。 OpenGL 提供的一系列紋理映射函數(shù)使得開發(fā)者可以十分方便地把真實圖象 貼到景物的多邊形上,從而可以在視窗內(nèi)繪制逼真的三維景觀。? 實時動畫 為了獲得平滑的動畫效果,需要先在內(nèi)存中生成下一幅圖象,然后把已經(jīng)生成的圖象從內(nèi)存拷貝 到屏幕上,這就是OpenGL的雙緩存技術(shù)(double buffer )。OpenGL提供了雙緩存技術(shù)的一
23、系列函數(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ù)器(即 OpenGL內(nèi)核)發(fā)布OpenGL命令,服務(wù)器則解釋這些命令。大多數(shù)情況下,客 戶和服務(wù)器在同一機(jī)器上運行。正是OpenGL的這種客戶/服務(wù)器機(jī)制,OpenGL可以十分方便地在網(wǎng)絡(luò)環(huán)境下使用。因此 Windows NT 下的OpenGL是網(wǎng)絡(luò)透明的。正象 Windows的圖形設(shè)備接
24、口( GDI) 把圖形函數(shù)庫封裝在一個動態(tài)鏈接庫(Windows NT 下的GDI32.DLL )內(nèi)一樣,OpenGL圖形庫也被封裝在一個動態(tài)鏈接庫內(nèi) (OPENGL32.DLL )。受客戶應(yīng)用程序調(diào)用的 OpenGL函數(shù)都先在 OPENGL32.DLL 中處理,然后傳給服務(wù)器WINSRV.DLL 。OpenGL的命令再次得到處理并且直接傳給Win32的設(shè)備驅(qū)動接口( Device Drive lnterface,DDI ),這樣就把經(jīng)過處理的圖形命令送給視頻顯示驅(qū)動程序。下圖簡要 說明這個過程:在三維圖形加速卡的 GLINT圖形加速芯片的加速支持下,二個附加的驅(qū)動程序被加入這個過程中。個Op
25、enGL 可安裝客戶驅(qū)動程序(Installable Client Driver,ICD)被加在客戶這一邊,一個硬件指定DDI ( Hardware-specific DDI )被加在服務(wù)器這邊,這個驅(qū)動程序與Wind32 DDI是同一級別的圖3-2 在三維圖形加速下 OpenGL 運行機(jī)制四、OpenGL基礎(chǔ)程序結(jié)構(gòu)用OpenGL編寫的程序結(jié)構(gòu)類似于用其他語言編寫的程序。實際上,OpenGL是一個豐富的三維圖形函數(shù)庫,編寫OpenGL程序并非難事,只需在基本C語言中調(diào)用這些函數(shù),用法同Turbo C Microsoft C等類似,但也有許多不同之處。本指南所有的程序都是在 Windows N
26、T 的Microsoft Visual C+集成環(huán)境下編譯連接的,其中有部分頭文件和函數(shù)是為這個環(huán)境所用的,例如判別操作系統(tǒng)的頭文件“glos.h ”此外,為便于各類讀者同時快速入 門,在短時間內(nèi)掌握 OpenGL編程的基本方法和技巧,指南中例子盡量采用標(biāo)準(zhǔn)ANSI C調(diào)用OpenGL函數(shù)來編寫,而且所有例程都只采用OpenGL附帶的輔助庫中的窗口系統(tǒng)。此外,這樣也便于程序在各平臺間移植,尤其往工作站UNIX操作系統(tǒng)移植時,也只需改動頭文件等很少很少的部分。下面列出一個簡單的OpenGL程序:例 4-1 OpenGL簡單例程 (Simple.c )#include #include #incl
27、ude glos.hvoid 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);這個程序運行結(jié)果是在屏幕窗口內(nèi)畫一個紅色的方塊。下面具體分析整個程序結(jié)構(gòu):首先,在程序最開始處是
28、OpenGL 頭文件: 、 。前一 個是 gl 庫的頭文件,后一個是輔助庫的頭文件。此外,在以后的幾章中還將說明 OpenGL 的另外兩個頭文件, 一個是 實用 庫的頭文件, 另一個是 X 窗口擴(kuò)充庫 的頭文件 (這個常用在工作站上) 。接下來是主函數(shù) main() 的定義:一般的程序結(jié)構(gòu) 是先定義一個窗口:auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);auxInitPosition(0,0,500,500);auxInitWindow(simple);auxInitDisplayMode(AUX_SINGLE|AUX_RGBA) 設(shè)置窗口顯示模式為 RGBA
29、 方式,即彩色方式, 并且圖形緩存為單緩存( SINGLE BUFFER )。 auxInitPosition(0, 0, 500, 500) 定義窗口的初始位置, 前兩個參數(shù) (0, 0) 為窗口的左上角點的屏幕坐標(biāo),后兩個參數(shù) (500,500) 為窗口的寬度和高度。 auxInitWindow(simple) 是窗口初始化,字符 參數(shù)是窗口名稱。然后是窗口內(nèi)清屏:glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT);第一句將窗口清為黑色,第二句將顏色緩沖區(qū)清為glClearColor(0.0, 0.0, 0.0, 0.0)
30、命令所設(shè)置的顏色,即同窗口背景顏色一致。再接著是在窗口內(nèi)畫一個物體:glColor3f(1.0,0.0,0.0);glRectf(-0.5,-0.5,0.5,0.5);很明顯,第一句設(shè)置物體顏色,函數(shù)中前三個參數(shù)分別為R、G 、B 值,最后一個參數(shù)是 Alpha 值,范圍都從 0 至 1;第二句繪制一個二維矩形。 注意 : OpenGL 是針對三維圖形而言,因此用作 OpenGL 編程繪制物體必須意識到任何一個物體都是三維的,具有空間性,而顯示于屏幕上的物體都是三維物體在 二維平面上的投影。從表面上看,上述程序代碼很簡單,實際上已經(jīng)用到了缺省的投影形式(正射投影)。再看 glFlush() 函
31、數(shù),表示強制繪圖完成。最后一句 _sleep(1000) ,參數(shù)單位為毫秒,整句意思是保持現(xiàn)有狀況一秒鐘, 然后結(jié)束程序運行。這個函數(shù)是 VC+ 的庫函數(shù)。總而言之, OpenGL 程序基本結(jié)構(gòu)為定義窗口、清理窗口、繪制物體、結(jié)束運行。五、 OpenGL 的數(shù)據(jù)類型和函數(shù)名OpenGL 的數(shù)據(jù)類型定義可以與其它語言一致,但建議在ANSI C 下最好使用以下定義的數(shù)據(jù)類型,例如 GLint 、 GLfloat 等。具體類型見表 5-1 。前綴 數(shù)據(jù)類型 相應(yīng) C 語言類型 OpenGL 類型b8-bit integersigned charGLbytes16-bit integershortGL
32、shorti32-bit integerlongGLint,GLsizeif32-bit floating-pointfloatGLfloat,GLclampfd64-bit floating-pointdoubleGLdouble,GLclampdub8-bit unsigned integerunsigned charGLubyte,GLbooleanus16-bit unsigned integerunsigned shortGLushortui32-bit unsigned integerunsigned longGLuint,GLenum,GLbitfield表 5-1 命令前綴和參
33、數(shù)數(shù)據(jù)類型OpenGL 的庫函數(shù)命名方式很有規(guī)律,了解這種規(guī)律后閱讀和編寫程序都比較容易方便。 首先,每個庫函數(shù)有前綴 gl 、 glu 、 glx 或 aux ,表示此函數(shù)分屬于基本庫、實用庫、X 窗口擴(kuò)充庫或輔助庫,其后的函數(shù)名頭字母大寫,后綴是參數(shù)類型的簡寫,取i、f ,參見表 5-1 。例:glVertex2i(2,4);glVertex3f(2.0,4.0,5.0);注意 :有的函數(shù)參數(shù)類型后綴前帶有數(shù)字2 、3、4 。2 代表二維, 3 代表三維, 4 代表 alpha值(以后介紹)。有些 OpenGL 函數(shù)最后帶一個字母 v ,表示函數(shù)參數(shù)可用一個指針指向一個向量(或數(shù)組)來替代
34、一系列單個參數(shù)值。下面兩種格式都表示設(shè)置當(dāng)前顏色為紅色,二者等價。glColor3f(1.0,0.0,0.0);float color_array=1.0,0.0,0.0;glColor3fv(color_array);除了以上基本命名方式外,還有一種帶“* ”星號的表示方法,例如 glColor*() ,它表示可以用函數(shù)的各種方式來設(shè)置當(dāng)前顏色。同理,glVertex*v() 表示用一個指針指向所有類型的向量來定義一系列頂點坐標(biāo)值。最后, OpenGL 也定義 GLvoid 類型,如果用 C 語言編寫,可以用它替代 void 類型。六、 OpenGL 輔組庫的基本使用OpenGL 是一個開放
35、的系統(tǒng),它是獨立于任何窗口系統(tǒng)或操作系統(tǒng)的。盡管它包含了許多圖形函數(shù), 但它卻沒有窗口函數(shù), 也沒有從鍵盤和鼠標(biāo)讀取事件的函 數(shù),所以要初學(xué)者寫出一個完整的圖形程序是相 當(dāng)困難的。另外, OpenGL 圖形函數(shù)中只提供基本的幾何原形:點、線、多邊形,因此要創(chuàng)建基本的三維 幾何體 如球、錐體等,也很不容易。而 OpenGL 輔助庫就是為解決這些基本問題專門設(shè)計的,它提供了 一些基本的窗口管理函數(shù)和三維圖形繪制函數(shù),能幫助初學(xué)者盡 快進(jìn)入 OpenGL 世界,掌握關(guān)鍵的三維 圖形技術(shù),體會其中奇妙的樂趣。但是,對于復(fù)雜的應(yīng)用,這些函數(shù)遠(yuǎn)遠(yuǎn)不夠,只能作為參考。6.1、輔助庫函數(shù)分類這一節(jié)內(nèi)容可以作為
36、手冊查閱,初學(xué)者不必深究。 輔助庫函數(shù)大致分為六類:6.1.1窗口初始化和退出相關(guān)函數(shù)有三個,它們在第一章已提到,這里將詳細(xì)介紹:void auxInitWindow(GLbyte *titleString)打開一個由 auxInitDisplayMode() 和 auxInitPosition() 指定的窗口。函數(shù)參數(shù)是窗口標(biāo)題,窗口 背景缺省顏色是 RGBA 下的黑色或顏色表( color_index )下的 0 號調(diào)色板的顏色。按下 Escape 鍵可以 完成關(guān)掉窗口、結(jié)束程序、全部清屏三項功能。void auxInitDisplayMode(GLbitfield mask)設(shè)置窗口顯示
37、模式。基本模式有 RGBA 或顏色表、單或雙緩存,也可指定其他附加模式:深度、模板 或累積緩存 ( depth,stencil,and/or accumulation buffer )。參數(shù) mask 是一組位標(biāo)志的聯(lián)合 (取或) , AUX_RGBA 或 AUX_INDEX 、 AUX_SINGLE 或 AUX_DOUBLE ,以及其它有效標(biāo)志 AUX_DEPTH 、 AUX_STENCIL 或 AUX_ACCUM 。void auxInitPosition(GLint x,GLint y,GLsizei width,GLsizei height)設(shè)置窗口位置及大小。參數(shù)( x, y )為窗
38、口的左上角點的屏幕坐標(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ù)( callback function ):void auxReshapeFunc(void(*function)(GLsizei,GLsizei)定義窗口改變時形狀重定函數(shù)。參數(shù) function 是一個函數(shù)指針,這個函數(shù)帶有兩個參數(shù),即窗口改變后的新寬度和新高度。通常,function 是glViewport(),顯示裁減后的新尺寸,重定義投影矩陣,以便使投
39、影后圖像的比例與視點匹配,避免比例失調(diào)。若不調(diào)用auxReshapeFunc(),缺省重定物體形狀的函數(shù)功能是調(diào)用一個二維的正射投影矩陣。運用輔助庫,窗口將在每個事件改變后自動重新繪制。void auxKeyFunction(GLint key,void(*function)(void)定義鍵盤響應(yīng)函數(shù)。參數(shù)function 就是當(dāng)按下key鍵時所調(diào)用的函數(shù)指針,輔助庫為參數(shù)key定義 了幾個常量:AUX_0 至 AUX_9、AUX_A 至 AUX_Z、AUX_a 至 AUX_z、AUX_LEFT、AUX_RIGHT、 AUX_UP、AUX_DOWN (方向鍵)、 AUX_ESCAPE、AUX
40、_SPACE 或 AUX_RETURN。void auxMouseFunc(GLint button,Glint mode,void(*function)(AUX_EVENTREC *)定義鼠標(biāo)響應(yīng)函數(shù)。參數(shù) function 就是當(dāng)鼠標(biāo)以mode方式作用于button 時所調(diào)用的函數(shù)。參數(shù)button 有 AUX_LEFTBUTTON 、AUX_MIDDLEBUTTON 或 AUX_RIGHTBUTTON(以右手為標(biāo)準(zhǔn))。參數(shù)mode代表鼠標(biāo)觸擊狀態(tài),擊中時為AUX_MOUSEDOWN ,釋放時為 AUX_MOUSEUP。參數(shù)function 必須帶一個參數(shù),它是指向結(jié)構(gòu)AUX_EVENNT
41、REC 的指針。當(dāng)函數(shù) auxMouseFunc() 被調(diào)用時將為這個結(jié)構(gòu)分配相應(yīng)的內(nèi)存。通常用法類似如下:void function(AUX_EVENTREC *event)GLint x,y;x=event-dataAUX_MOUSEX;y=event-dataAUX_MOUSEY;6.1.3顏色表裝入因為OpenGL本身沒有窗口系統(tǒng),所以依賴于窗口系統(tǒng)的顏色映射就沒法裝入顏色查找表。如果采用顏色表模式,就要用到輔助庫提供的用RGB值定義的單個顏色索引函數(shù):void auxSetOneColor(GLint index,GLfloat red,GLfloat green,GLfloat b
42、lue)設(shè)置自定義顏色的索引。參數(shù)index即索引號,參數(shù)red、green、blue分別為紅、綠、藍(lán)值,范圍在(01)內(nèi)。6.1.4三維物體繪制每組三維物體包括兩種形式:網(wǎng)狀體(wire )和實心體(solid )。網(wǎng)狀體沒有平面法向,而實心體有,能進(jìn)行光影計算,有光照時采用實心體模型。下面這些函數(shù)的參數(shù)都是定義物體大小的,可以改變。以上物體均以各自中心為原點繪制,所有坐標(biāo)都已單位化,可以縮放。6.1.5背景過程管理void auxldleFunc(void *func)定義空閑狀態(tài)執(zhí)行函數(shù)。參數(shù)func是一個指針,指向所要執(zhí)行的函數(shù)功能。當(dāng)它為零時,func執(zhí)行無效。6.1.6程序運行vo
43、id auxMainLoop(void(*displayFunc)(void)定義場景繪制循環(huán)函數(shù)。displayFunc指針指向場景繪制函數(shù)。當(dāng)窗口需要更新或場景發(fā)生改變時,程序便調(diào)用它所指的函數(shù),重新繪制場景。6.2、輔助庫應(yīng)用示例下面舉一個輔助庫的應(yīng)用例子,testaux.c :例6-1輔助庫應(yīng)用例程testaux.c#include glos.h#include #include void myinit(void);void CALLBACK myReshape(GLsizei w,GLsizei h);void CALLBACK display(void);void myinit(v
44、oid)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);else glOrtho(-1.5*(GLfloat)h/(GLfloa
45、t)w, 1.5*(GLfloat)h/(GLfloat)w,-1.5,1.5,-10.0,10.0);glMatrixMode(GL_MODELVIEW); glLoadIdentity();void CALLBACK display(void)glColor3f(1.0,1.0,0.0);auxWireSphere(1.0);glFlush();void main(void)auxInitDisplayMode(AUX_SINGLE|AUX_RGBA); auxInitPosition(0,0,500,500);auxInitWindow(AUX_SAMPLE);myinit(); aux
46、ReshapeFunc(myReshape);auxlnitWindow(),然后初始化顏色 myinit(),這些auxReshapeFunc() 和 auxMainLoop() ,參數(shù)都是一 CALLBACK 說明)。myReshape(),它的兩個參數(shù)就是窗口的新寬度和新 并且在新視口內(nèi)重新定義投影矩陣,auxMainLoop(display);以上程序運行結(jié)果是在屏幕窗口內(nèi)繪制一個黃色的網(wǎng)狀球體,這個程序充分體現(xiàn)了輔助庫的基本應(yīng)用 方法。首先,在主函數(shù)中用輔助庫函數(shù)定義一個窗口在第一章中已說明。接下來是兩個十分重要的函數(shù) 個函數(shù)指針,指向的都是回調(diào)函數(shù)(回調(diào)函數(shù)定義用前者是窗口形狀重定
47、函數(shù),參數(shù)指針指向函數(shù)高度。然后用glViewport(0, 0, w, h)重定視口,glMatrixMode(GL_PROJECTION);glLoadldentity();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*(GLfloat)h/(GLfloat)w,-1.5,1.5,-10.0,10.0);即先用glMatrixMode()說明當(dāng)前矩陣操作與投影有關(guān)GL_P
48、ROJECTION ,再用glLoadldentity()將矩陣清為單位矩陣,避免受其它矩陣操作的干擾;然后調(diào)用glOrtho()對物體進(jìn)行正射投影,并且用判斷語句給出了兩種情況,使投影后圖像的比例與視點匹配,避免比例失調(diào)。再下來調(diào)用glMatrixMode()將矩陣操作改為對觀察物體有關(guān)的方式GL_MODELVIEW,同樣用glLoadldentity()清矩陣。后者是主函數(shù)循環(huán)函數(shù),參數(shù)指針指向函數(shù)display(),即繪制物體。當(dāng)窗口需要更新或物體發(fā)生改變時,程序便調(diào)用它重新繪制。以上例子是輔助庫的最基本應(yīng)用,復(fù)雜的應(yīng)用將在后續(xù)的章節(jié)中詳細(xì)介紹。七、OpenGL 建模OpenGL基本庫提
49、供了大量繪制各種類型圖元的方法,輔助庫也提供了不少描述復(fù)雜三維圖形的函 數(shù)。這一章主要介紹基本圖元,如點、線、多邊形,有了這些圖元,就可以建立比較復(fù)雜的模型了。圖6-1 網(wǎng)狀球體Valid7.1、描述圖元OpenGL是三維圖形的函數(shù)庫,它所定義的點、線、多邊形等圖元與一般的定義不太一樣,存在一定的差別。對編程者來說,能否理解二者之間的差別十分重要。一種差別源于基于計算機(jī)計算的限制。OpenGL中所有浮點計算精度有限,故點、線、多邊形的坐標(biāo)值存在一定的誤差。另一種差別源于位圖顯示的限制。以這種方式顯示圖形,最小的顯示圖元是一個象素,盡管每個象素寬度很小,但它們?nèi)匀槐?數(shù)學(xué)上所定義的點或線寬要大得
50、多。當(dāng)用OpenGL進(jìn)行計算時,雖然是用一系列浮點值定義點串,但每個點仍然是用單個象素顯示,只是近似擬合。OpenGL圖元是抽象的幾何概念,不是真實世界中的物體,因此須用相關(guān)的數(shù)學(xué)模型來描述。7.1.1齊次坐標(biāo) (Homogeneous Coordinate )在空間直角坐標(biāo)系中,任意一點可用一個三維坐標(biāo)矩陣x y z表示。如果將該點用一個四維坐標(biāo)的矩陣Hx Hy Hz H表示時,則稱為齊次坐標(biāo)表示方法。在齊次坐標(biāo)中,最后一維坐標(biāo)H稱為比例因子。在OpenGL中,二維坐標(biāo)點全看作三維坐標(biāo)點,所有的點都用齊次坐標(biāo)來描述,統(tǒng)一作為三維齊次點 來處理。每個齊次點用一個向量(x, y,乙w)表示,其中
51、四個元素全不為零。齊次點具有下列幾個性質(zhì):1 )如果實數(shù)a非零,則(x, y, x, w) 和(ax, ay, az, aw)表示同一個點,類似于 x/y = (ax)/( ay)2)三維空間點(x, y, z)的齊次點坐標(biāo)為(x, y,乙1.0),二維平面點(x,y)的齊次坐標(biāo)為(x, y, 0.0, 1.0)3)當(dāng)w不為零時,齊次點坐標(biāo)(x, y,乙w)即三維空間點坐標(biāo)(x/w, y/w, z/w) ;當(dāng)w為零時,齊次點(x, y,乙0.0)表示此點位于某方向的無窮遠(yuǎn)處。注意:OpenGL中指定 w大于或等于0.0。7.1.2點(Point )用浮點值表示的點稱為頂點(Vertex )。所
52、有頂點在OpenGL內(nèi)部計算時都作為三維點處理,用二 維坐標(biāo)(x, y)定義的點在OpenGL中默認(rèn)z值為0。所有頂點坐標(biāo)用齊次坐標(biāo)(x, y,乙w) 表示,如果w 不為0.0,這些齊次坐標(biāo)表示的頂點即為三維空間點(x/w, y/w, z/w)。編程者可以自己指定 w值,但很少這樣做。一般來說, w缺省為1.0。7.1.3線(Line )在OpenGL中,線代表線段(Line Segment ),不是數(shù)學(xué)意義上的那種沿軸兩個方向無限延伸的線。 這里的線由一系列頂點順次連結(jié)而成,有閉合和不閉合兩種。見圖7-1所示。圖7-1線段的兩種連結(jié)方式7.1.4多邊形(Polygon )OpenGL中定義的
53、多邊形是由一系列線段依次連結(jié)而成的封閉區(qū)域。這些線段不能交叉,區(qū)域內(nèi)不能有空洞,多邊形必須在凸多邊形,否則不能被OpenGL函數(shù)接受。合法和非法多邊形圖示見圖7-2Invalid圖7-2 合法和非法多邊形OpenGL多邊形可以是平面多邊形,即所有頂點在一個平面上,也可以是空間多邊形。更復(fù)雜的多邊 形將在提高篇中介紹。7.2、繪制圖元721定義頂點在OpenGL中,所有幾何物體最終都由有一定順序的頂點集來描述。函數(shù)glVertex234sifdv(TYPE coords)可以用二維、三維或齊次坐標(biāo)定義頂點。舉例如下:glVertex2s(2,3);glVertex3d(0.0,1.0,3.141
54、4926535);glVertex4f(2.4,1.0,-2.2,2.0);GLfloat pp3=5.0,2.0,10.2;glVertex3fv(pp);第一例子表示一個空間頂點(2, 3, 0),第二個例子表示用雙精度浮點數(shù)定義一個頂點,第三個例子表 示用齊次坐標(biāo)定義一個頂點,其真實坐標(biāo)為(1.2, 0.5, -1.1),最后一個例子表示用一個指針(或數(shù)組)定義頂點。7.2.2構(gòu)造幾何圖元在實際應(yīng)用中,通常用一組相關(guān)的頂點序列以一定的方式組織起來定義某個幾何圖元,而不采用單獨定義多個頂點來構(gòu)造幾何圖元。在OpenGL中,所有被定 義的頂點必須放在glBegain()和glEnd()兩個函
55、數(shù)之間才能正確表達(dá)一個幾何圖元或物體,否則, glVertex*() 不完成任何操作。如:glBegin(GL_POLYGON);glVertex2f(0.0,0.0);glVertex2f(0.0,3.0);glVertex2f(3.0,3.0);glVertex2f(4.0,1.5);glVertex2f(3.0,0.0);glEnd();以上這段程序定義了一個多邊形,如果將 glBegin()中的參數(shù)GL_POLYGON 改為GL_POINTS ,則 圖形變?yōu)橐唤M頂點(5個),見圖7-3所示。GL_P OLYGONGL_P 0 NTS圖7-3繪制多邊形或一組頂點點函數(shù)glBegin(GL
56、enum mode)標(biāo)志描述一個幾何圖元的頂點列表的開始,其參數(shù)mode表示幾何圖元的描述類型。所有類型及說明見表7-1所示,相應(yīng)的圖示見圖7-4。 73VI* *2GL_POINTSGL LIMESGL_LINE_STRIPU U4 4厲觀屈觀蕊應(yīng)T廖期衙GL_7R IANGLESVOVIGL QUADSGL QU如 STRIP聲M:lvsGL_TRIAIJGLE_STRIP圖7-4幾何圖元類型函數(shù)glEnd()標(biāo)志頂點列表的結(jié)束。從圖7-4中可看出,可以采用許多方法構(gòu)造幾何圖元,這些方法僅僅依賴于所給的頂點數(shù)據(jù)。在glBegin()和glEnd()之間最重要的信息就是由函數(shù)glVertex
57、*() 定義的頂點,必要時也可為每個頂點指定顏色、法向、紋理坐標(biāo)或其他,即調(diào)用相關(guān)的函數(shù),見表7-2所示,具體用法以后會逐步介紹。看如下幾句:glBegin(GL_POINTS);glColor3f(1.0,0.0,0.0); /* red color */glVertex(.);glColor3f(0.0,1.0,0.0); /* green color */glColor3f(0.0,0.0,1.0); /* blue color */glVertex(.);glVertex(.);glEnd();顏色等的設(shè)置只對當(dāng)前點或后續(xù)點有效。上一例中第一個點是紅色,第二個點和第三個點都是藍(lán)色。 其
58、中設(shè)置綠色時,之后沒有頂點操作,而是設(shè)置藍(lán)色,故只有當(dāng)前藍(lán)色對緊跟其后的兩個頂點有效。為了更好地理解構(gòu)造幾何圖元函數(shù)的用法,下面舉一個簡單的例子:例7-3 幾何圖元構(gòu)造例程 (drawgeom.c )#include glos.h#include#includevoid myinit(void);void DrawMyObjects(void);void CALLBACK myReshape(GLsizei w,GLsizei h);void CALLBACK display(void);void myinit(void)glClearColor(0.0,0.0,0.0,0.0); glCle
59、ar(GL_COLOR_BUFFER_BIT); glShadeModel(GL_FLAT);void CALLBACK myReshape(GLsizei w,GLsizei h)glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity();if(w=h)gl0rtho(-20.0,20.0,-20.0*(GLfloat)h/(GLfloat)w,20.0*(GLfloat)h/(GLfloat)w,-50.0,50.0);elseglOrtho(-20.0*(GLfloat)h/(GLfloat)w,20.0*(GLf
60、loat)h/(GLfloat)w,-20.0,20.0,-50.0,50.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();void CALLBACK display(void)glColor3f(1.0,1.0,0.0);DrawMyObjects();glFlush();void DrawMyObjects(void)/* draw some points */glBegin(GL_POINTS);glColor3f(1.0,0.0,0.0);glVertex2f(-10.0,11.0);glColor3f(1.0,1.0,0.0);glVer
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國X射線管組件行業(yè)市場深度分析及發(fā)展趨勢預(yù)測報告
- 中國桌面多用途座行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報告(2024-2030)
- 2020-2025年中國兼香型白酒行業(yè)市場調(diào)研分析及投資戰(zhàn)略咨詢報告
- 2025年中國波分復(fù)用器市場全景評估及投資規(guī)劃建議報告
- 以趣啟筆:快樂教育思想在小學(xué)作文教學(xué)中的實踐與升華
- 以諺為翼:英語諺語教學(xué)對小學(xué)生英語學(xué)習(xí)興趣的激發(fā)與影響探究
- 開工安全評估報告范文
- 果仁項目安全風(fēng)險評價報告
- 2020-2025年中國冷卻塔填料市場運行態(tài)勢及行業(yè)發(fā)展前景預(yù)測報告
- 2022-2027年中國山東省房地產(chǎn)行業(yè)發(fā)展監(jiān)測及發(fā)展戰(zhàn)略規(guī)劃報告
- 信念的力量課件
- 金蟬的養(yǎng)殖管理
- 大海(張雨生)原版五線譜鋼琴譜正譜樂譜
- 有限空間作業(yè)實操評分標(biāo)準(zhǔn)
- 規(guī)劃展覽館方案-南京軍區(qū)軍史館布展總體方案
- 精品案例-LTE負(fù)荷均衡優(yōu)化案例
- (完整版)煤礦主扇司機(jī)考試卷(含答案)
- 雙柏縣工業(yè)用大麻開發(fā)種植實施計劃方案
- 租賃房屋交接清單
- 吊頂檢驗報告(共5頁)
- (完整版)10KV電力線路施工組織設(shè)計方案
評論
0/150
提交評論