




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、OpenGL基礎(chǔ)圖形編程基礎(chǔ)圖形編程 - OpenGL光照光照張志華數(shù)理學(xué)院第十章第十章 OpenGL光照光照l(shuí) 本章是比較重要的一部分,前幾章只是基礎(chǔ),在本章是比較重要的一部分,前幾章只是基礎(chǔ),在這章里將著重講述光照模型、明暗處理、光源設(shè)置、這章里將著重講述光照模型、明暗處理、光源設(shè)置、材質(zhì)定義以及有關(guān)的計(jì)算機(jī)圖形學(xué)概念等內(nèi)容,介紹材質(zhì)定義以及有關(guān)的計(jì)算機(jī)圖形學(xué)概念等內(nèi)容,介紹如何運(yùn)用如何運(yùn)用OpenGL函數(shù)來(lái)繪制真實(shí)感圖形,充分展示函數(shù)來(lái)繪制真實(shí)感圖形,充分展示三維圖形世界的魅力。如果讀者以前從未接觸過(guò)這方三維圖形世界的魅力。如果讀者以前從未接觸過(guò)這方面的概念,要直接應(yīng)用面的概念,要直接應(yīng)
2、用OpenGL函數(shù)庫(kù)編寫三維圖形函數(shù)庫(kù)編寫三維圖形程序,是很困難的。因此,我們將結(jié)合程序,是很困難的。因此,我們將結(jié)合OpenGL的特的特殊性簡(jiǎn)潔明了地介紹一些有關(guān)真實(shí)感圖形繪制的概念,殊性簡(jiǎn)潔明了地介紹一些有關(guān)真實(shí)感圖形繪制的概念,幫助讀者理解基本的幫助讀者理解基本的OpenGL光照、材質(zhì)等函數(shù)的應(yīng)光照、材質(zhì)等函數(shù)的應(yīng)用方式,順利掌握最基本的真實(shí)感圖形編程方法,引用方式,順利掌握最基本的真實(shí)感圖形編程方法,引導(dǎo)讀者快速進(jìn)入導(dǎo)讀者快速進(jìn)入OpenGL三維圖形世界。三維圖形世界。第十章第十章 OpenGL光照光照l(shuí)10.1、真實(shí)感圖形基本概念、真實(shí)感圖形基本概念真實(shí)感圖形繪制是計(jì)算機(jī)圖形學(xué)的一個(gè)
3、重要真實(shí)感圖形繪制是計(jì)算機(jī)圖形學(xué)的一個(gè)重要組成部分,它綜合利用數(shù)學(xué)、物理學(xué)、計(jì)算機(jī)科組成部分,它綜合利用數(shù)學(xué)、物理學(xué)、計(jì)算機(jī)科學(xué)和其它科學(xué)知識(shí)在計(jì)算機(jī)圖形設(shè)備上生成象彩學(xué)和其它科學(xué)知識(shí)在計(jì)算機(jī)圖形設(shè)備上生成象彩色照片那樣的具有真實(shí)感的圖形。色照片那樣的具有真實(shí)感的圖形。一般說(shuō)來(lái),用一般說(shuō)來(lái),用計(jì)算機(jī)在圖形設(shè)備上生成真實(shí)感圖形必須完成以計(jì)算機(jī)在圖形設(shè)備上生成真實(shí)感圖形必須完成以下四個(gè)步驟:下四個(gè)步驟: l四個(gè)步驟:四個(gè)步驟:l一是用建模,即用一定的數(shù)學(xué)方法建立所需三維場(chǎng)景的幾一是用建模,即用一定的數(shù)學(xué)方法建立所需三維場(chǎng)景的幾何描述,場(chǎng)景的幾何描述直接影響圖形的復(fù)雜性和圖形繪何描述,場(chǎng)景的幾何描述
4、直接影響圖形的復(fù)雜性和圖形繪制的計(jì)算耗費(fèi);制的計(jì)算耗費(fèi);l二是將三維幾何模型經(jīng)過(guò)一定變換轉(zhuǎn)為二維平面透視投影二是將三維幾何模型經(jīng)過(guò)一定變換轉(zhuǎn)為二維平面透視投影圖;圖;l三是確定場(chǎng)景中所有可見面,運(yùn)用隱藏面消隱算法將視域三是確定場(chǎng)景中所有可見面,運(yùn)用隱藏面消隱算法將視域外或被遮擋住的不可見面消去;外或被遮擋住的不可見面消去;l四是計(jì)算場(chǎng)景中可見面的顏色,即根據(jù)基于光學(xué)物理的光四是計(jì)算場(chǎng)景中可見面的顏色,即根據(jù)基于光學(xué)物理的光照模型計(jì)算可見面投射到觀察者眼中的光亮度大小和顏色照模型計(jì)算可見面投射到觀察者眼中的光亮度大小和顏色分量,并將它轉(zhuǎn)換成適合圖形設(shè)備的顏色值,從而確定投分量,并將它轉(zhuǎn)換成適合圖
5、形設(shè)備的顏色值,從而確定投影畫面上每一象素的顏色,最終生成圖形。影畫面上每一象素的顏色,最終生成圖形。第十章第十章 OpenGL光照光照第十章第十章 OpenGL光照光照l(shuí) 由于真實(shí)感圖形是通過(guò)由于真實(shí)感圖形是通過(guò)景物表面的顏色和景物表面的顏色和明暗色調(diào)來(lái)表現(xiàn)景物的幾何形狀、空間位置以明暗色調(diào)來(lái)表現(xiàn)景物的幾何形狀、空間位置以及表面材料的,而一個(gè)物體表面所呈現(xiàn)的顏色及表面材料的,而一個(gè)物體表面所呈現(xiàn)的顏色是由表面向視線方向輻射的光能決定的。是由表面向視線方向輻射的光能決定的。l在計(jì)算機(jī)圖形學(xué)中,常采用一個(gè)既能表示光能在計(jì)算機(jī)圖形學(xué)中,常采用一個(gè)既能表示光能大小又能表示其顏色組成的物理量即光亮度大
6、小又能表示其顏色組成的物理量即光亮度(luminance)或光強(qiáng)()或光強(qiáng)(intensity of light)來(lái)描述物體表面朝某方向輻射光能的顏色。采來(lái)描述物體表面朝某方向輻射光能的顏色。采用這個(gè)物理量可以正確描述光在物體表面的反用這個(gè)物理量可以正確描述光在物體表面的反射、透射和吸收現(xiàn)象,因而可以正確計(jì)算出物射、透射和吸收現(xiàn)象,因而可以正確計(jì)算出物體表面在空間給定方向上的光能顏色。體表面在空間給定方向上的光能顏色。第十章第十章 OpenGL光照光照l(shuí) 物體表面向空間給定方向輻射的光強(qiáng)可應(yīng)用光照模物體表面向空間給定方向輻射的光強(qiáng)可應(yīng)用光照模型進(jìn)行計(jì)算。簡(jiǎn)單的光照模型通常假定物體表面是光滑的型
7、進(jìn)行計(jì)算。簡(jiǎn)單的光照模型通常假定物體表面是光滑的且由理想材料構(gòu)成,因此只考慮光源照射在物體表面產(chǎn)生且由理想材料構(gòu)成,因此只考慮光源照射在物體表面產(chǎn)生的反射光,所生成的圖形可以模擬出不透明物體表面的明的反射光,所生成的圖形可以模擬出不透明物體表面的明暗過(guò)渡,具有一定的真實(shí)感效果。暗過(guò)渡,具有一定的真實(shí)感效果。l復(fù)雜的光照模型除了考慮上述因素外,還要考慮周圍環(huán)境復(fù)雜的光照模型除了考慮上述因素外,還要考慮周圍環(huán)境的光對(duì)物體表面的影響。如光亮平滑的物體表面會(huì)將環(huán)境的光對(duì)物體表面的影響。如光亮平滑的物體表面會(huì)將環(huán)境中其它物體映像在表面上,而通過(guò)透明物體也可看到其后中其它物體映像在表面上,而通過(guò)透明物體也
8、可看到其后的環(huán)境景象。的環(huán)境景象。這類光照模型稱為整體光照模型,它能模擬這類光照模型稱為整體光照模型,它能模擬出鏡面映像、透明等較精致的光照效果。出鏡面映像、透明等較精致的光照效果。l為了更真實(shí)的繪制圖形,還要考慮物體表面的細(xì)節(jié)紋理,為了更真實(shí)的繪制圖形,還要考慮物體表面的細(xì)節(jié)紋理,這通常使用一種稱為這通常使用一種稱為“紋理映射紋理映射”(texture mapping)的技術(shù)把已有的平面花紋圖案映射到物體表面上,并在的技術(shù)把已有的平面花紋圖案映射到物體表面上,并在應(yīng)用光照模型時(shí)將這些花紋的顏色考慮進(jìn)去,物體表面應(yīng)用光照模型時(shí)將這些花紋的顏色考慮進(jìn)去,物體表面細(xì)節(jié)的模擬使繪制的圖形更接近自然景
9、物。細(xì)節(jié)的模擬使繪制的圖形更接近自然景物。以上內(nèi)容中,真實(shí)感圖形繪制的四大步驟前兩步在以上內(nèi)容中,真實(shí)感圖形繪制的四大步驟前兩步在前面的章節(jié)已經(jīng)詳細(xì)介紹過(guò),這里不再重復(fù),第三步前面的章節(jié)已經(jīng)詳細(xì)介紹過(guò),這里不再重復(fù),第三步OpenGL將自動(dòng)完成所有消隱過(guò)程,第四步下面幾節(jié)詳將自動(dòng)完成所有消隱過(guò)程,第四步下面幾節(jié)詳述。另外,部分復(fù)雜光照模型應(yīng)用將在后續(xù)章節(jié)里介紹。述。另外,部分復(fù)雜光照模型應(yīng)用將在后續(xù)章節(jié)里介紹。第十章第十章 OpenGL光照光照第十章第十章 OpenGL光照光照l(shuí)10.2、光照模型、光照模型10.2.1 簡(jiǎn)單光照模型簡(jiǎn)單光照模型當(dāng)光照射到一個(gè)物體表面上時(shí),會(huì)出現(xiàn)三種情形:當(dāng)光照
10、射到一個(gè)物體表面上時(shí),會(huì)出現(xiàn)三種情形:l首先,光可以通過(guò)物體表面向空間反射,產(chǎn)生反射光。首先,光可以通過(guò)物體表面向空間反射,產(chǎn)生反射光。l其次,對(duì)于透明體,光可以穿透該物體并從另一端射出,其次,對(duì)于透明體,光可以穿透該物體并從另一端射出,產(chǎn)生透射光。產(chǎn)生透射光。l最后,部分光將被物體表面吸收而轉(zhuǎn)換成熱。最后,部分光將被物體表面吸收而轉(zhuǎn)換成熱。l在上述三部分光中,僅僅是透射光和反射光能夠進(jìn)入人眼在上述三部分光中,僅僅是透射光和反射光能夠進(jìn)入人眼產(chǎn)生視覺(jué)效果。這里介紹的簡(jiǎn)單光照模型只考慮被照明物產(chǎn)生視覺(jué)效果。這里介紹的簡(jiǎn)單光照模型只考慮被照明物體表面的反射光影響,假定物體表面光滑不透明且由理想體表
11、面的反射光影響,假定物體表面光滑不透明且由理想材料構(gòu)成,環(huán)境假設(shè)為由白光照明。材料構(gòu)成,環(huán)境假設(shè)為由白光照明。第十章第十章 OpenGL光照光照l(shuí) 一般來(lái)說(shuō),反射光可以分成三個(gè)分量,即一般來(lái)說(shuō),反射光可以分成三個(gè)分量,即環(huán)境反射、環(huán)境反射、漫反射和鏡面反射漫反射和鏡面反射。l環(huán)境反射分量:環(huán)境反射分量:假定入射光均勻地從周圍環(huán)境入射至景物表面并假定入射光均勻地從周圍環(huán)境入射至景物表面并等量地向各個(gè)方向反射出去,通常物體表面還會(huì)受到從周圍環(huán)境來(lái)的等量地向各個(gè)方向反射出去,通常物體表面還會(huì)受到從周圍環(huán)境來(lái)的反射光(如來(lái)自地面、天空、墻壁等的反射光)的照射,這些光常統(tǒng)反射光(如來(lái)自地面、天空、墻壁等
12、的反射光)的照射,這些光常統(tǒng)稱為稱為環(huán)境光環(huán)境光(Ambient Light););l漫反射分量:漫反射分量:表示特定光源在景物表面的反射光中那些向空間各表示特定光源在景物表面的反射光中那些向空間各方向均勻反射出去的光,這些光常稱為漫射光(方向均勻反射出去的光,這些光常稱為漫射光(Diffuse Light););l鏡面反射光鏡面反射光為朝一定方向的反射光,如一個(gè)點(diǎn)光源照射一個(gè)金屬球?yàn)槌欢ǚ较虻姆瓷涔?,如一個(gè)點(diǎn)光源照射一個(gè)金屬球時(shí)會(huì)在球面上形成一塊特別亮的區(qū)域,呈現(xiàn)所謂時(shí)會(huì)在球面上形成一塊特別亮的區(qū)域,呈現(xiàn)所謂“高光高光(Highlight)”,它是光源在金屬球面上產(chǎn)生的鏡面反射光,它是光源
13、在金屬球面上產(chǎn)生的鏡面反射光(Specular Light)。對(duì)于較光滑物體,其鏡面反射光的高光區(qū)域?。?。對(duì)于較光滑物體,其鏡面反射光的高光區(qū)域小而亮;相反,粗糙表面的鏡面反射光呈發(fā)散狀態(tài),其高光區(qū)域大而不而亮;相反,粗糙表面的鏡面反射光呈發(fā)散狀態(tài),其高光區(qū)域大而不亮。亮。l下面先看一個(gè)簡(jiǎn)單的光照例程。下面先看一個(gè)簡(jiǎn)單的光照例程。第十章第十章 OpenGL光照光照l(shuí)例例10-1 簡(jiǎn)單光照例程簡(jiǎn)單光照例程(light0.c)#include glos.h#include #include #include void myinit(void);void CALLBACK myReshape(GLs
14、izei w, GLsizei h);void CALLBACK display(void);第十章第十章 OpenGL光照光照l(shuí)void myinit(void)GLfloat light_position = 1.0, 1.0, 1.0, 0.0 ;glLightfv(GL_LIGHT0, GL_POSITION, light_position);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glDepthFunc(GL_LESS);glEnable(GL_DEPTH_TEST);第十章第十章 OpenGL光照光照l(shuí)void CALLBACK disp
15、lay(void)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);auxSolidSphere(1.0);glFlush();第十章第十章 OpenGL光照光照l(shuí)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/(GLflo
16、at)w, -10.0, 10.0);elseglOrtho (-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();第十章第十章 OpenGL光照光照l(shuí)void main(void)auxInitDisplayMode (AUX_SINGLE | AUX_RGBA);auxInitPosition (0, 0, 500, 500);auxInitWindow (Simple Lighting);myin
17、it();auxReshapeFunc (myReshape);auxMainLoop(display);第十章第十章 OpenGL光照光照l(shuí)以上程序運(yùn)行結(jié)果是顯示一個(gè)具有灰色光影的球。其中函以上程序運(yùn)行結(jié)果是顯示一個(gè)具有灰色光影的球。其中函數(shù)數(shù)myinit()中包含了關(guān)鍵的設(shè)定光源位置、啟動(dòng)光照等幾中包含了關(guān)鍵的設(shè)定光源位置、啟動(dòng)光照等幾句,而其它程序語(yǔ)言幾乎與以前的沒(méi)有多大區(qū)別,但效果句,而其它程序語(yǔ)言幾乎與以前的沒(méi)有多大區(qū)別,但效果卻完全不一樣。下面幾個(gè)小節(jié)將詳細(xì)介紹有關(guān)函數(shù)的用法。卻完全不一樣。下面幾個(gè)小節(jié)將詳細(xì)介紹有關(guān)函數(shù)的用法。第十章第十章 OpenGL光照光照l(shuí)10.2.2 Op
18、enGL光組成光組成在在OpenGL簡(jiǎn)單光照模型中的幾種光分為:簡(jiǎn)單光照模型中的幾種光分為:輻射輻射光(光(Emitted Light)、環(huán)境光()、環(huán)境光(Ambient Light)、)、漫射光(漫射光(Diffuse Light)、鏡面光()、鏡面光(Specular Light)。)。輻射光是輻射光是最簡(jiǎn)單的一種光,它直接從物體發(fā)出并最簡(jiǎn)單的一種光,它直接從物體發(fā)出并且不受任何光源影響。且不受任何光源影響。環(huán)境光是環(huán)境光是由光源發(fā)出經(jīng)環(huán)境多次散射而無(wú)法確定由光源發(fā)出經(jīng)環(huán)境多次散射而無(wú)法確定其方向的光,即似乎來(lái)自所有方向。一般說(shuō)來(lái),房間其方向的光,即似乎來(lái)自所有方向。一般說(shuō)來(lái),房間里的環(huán)
19、境光成分要多些,戶外的相反要少得多,因?yàn)槔锏沫h(huán)境光成分要多些,戶外的相反要少得多,因?yàn)榇蟛糠止獍聪嗤较蛘丈?,而且在戶外很少有其他物大部分光按相同方向照射,而且在戶外很少有其他物體反射的光。當(dāng)環(huán)境光照到曲面上時(shí),它在各個(gè)方向體反射的光。當(dāng)環(huán)境光照到曲面上時(shí),它在各個(gè)方向上均等地發(fā)散(類似于無(wú)影燈光)。上均等地發(fā)散(類似于無(wú)影燈光)。第十章第十章 OpenGL光照光照l(shuí) 漫射光漫射光來(lái)自一個(gè)方向,它垂直于物體時(shí)比傾斜時(shí)來(lái)自一個(gè)方向,它垂直于物體時(shí)比傾斜時(shí)更明亮。一旦它照射到物體上,則在各個(gè)方向上均勻更明亮。一旦它照射到物體上,則在各個(gè)方向上均勻地發(fā)散出去。于是,無(wú)論視點(diǎn)在哪里它都一樣亮。來(lái)地發(fā)散
20、出去。于是,無(wú)論視點(diǎn)在哪里它都一樣亮。來(lái)自特定位置和特定方向的任何光,都可能有散射成分。自特定位置和特定方向的任何光,都可能有散射成分。鏡面光鏡面光來(lái)自特定方向并沿另一方向反射出去,一來(lái)自特定方向并沿另一方向反射出去,一個(gè)平行激光束在高質(zhì)量的鏡面上產(chǎn)生個(gè)平行激光束在高質(zhì)量的鏡面上產(chǎn)生100%的鏡面反的鏡面反射。光亮的金屬和塑料具有很高非反射成分,而象粉射。光亮的金屬和塑料具有很高非反射成分,而象粉筆和地毯等幾乎沒(méi)有反射成分。因此,三某種意義上筆和地毯等幾乎沒(méi)有反射成分。因此,三某種意義上講,物體的反射程度等同于其上的光強(qiáng)(或光亮度)。講,物體的反射程度等同于其上的光強(qiáng)(或光亮度)。第十章第十章
21、 OpenGL光照光照l(shuí)10.2.3 創(chuàng)建光源創(chuàng)建光源(Light Source)光源有許多特性,如顏色、位置、方向等。選擇光源有許多特性,如顏色、位置、方向等。選擇不同的特性值,則對(duì)應(yīng)的光源作用在物體上的效果也不同的特性值,則對(duì)應(yīng)的光源作用在物體上的效果也不一樣,這在以后的章節(jié)中會(huì)逐步介紹的。下面詳細(xì)不一樣,這在以后的章節(jié)中會(huì)逐步介紹的。下面詳細(xì)講述定義光源特性的函數(shù)講述定義光源特性的函數(shù)glLight*():void glLightifv(GLenum light , GLenum pname, TYPE param)創(chuàng)建具有某種特性的光源。其中第一個(gè)參數(shù)創(chuàng)建具有某種特性的光源。其中第一個(gè)
22、參數(shù)light指定所創(chuàng)建的光源號(hào),如指定所創(chuàng)建的光源號(hào),如GL_LIGHT0、GL_LIGHT1、.、GL_LIGHT7。第二個(gè)參數(shù)。第二個(gè)參數(shù)pname指定光源特性,這個(gè)參數(shù)的輔助信息見表指定光源特性,這個(gè)參數(shù)的輔助信息見表10-1所示。所示。最后一個(gè)參數(shù)設(shè)置相應(yīng)的光源特性值。最后一個(gè)參數(shù)設(shè)置相應(yīng)的光源特性值。第十章第十章 OpenGL光照光照l(shuí)注意:以上列出的注意:以上列出的GL_DIFFUSE和和GL_SPECULAR的缺的缺省值只能用于省值只能用于GL_LIGHT0,其他幾個(gè)光源的,其他幾個(gè)光源的GL_DIFFUSE和和GL_SPECULAR缺省值為缺省值為(0.0,0.0,0.0,1
23、.0)。另外,表中后六個(gè)參數(shù)的應(yīng)用放在下一。另外,表中后六個(gè)參數(shù)的應(yīng)用放在下一篇中介紹。在上面例程中,光源的創(chuàng)建為:篇中介紹。在上面例程中,光源的創(chuàng)建為:GLfloat light_position = 1.0, 1.0, 1.0, 0.0 ;glLightfv(GL_LIGHT0, GL_POSITION, light_position);第十章第十章 OpenGL光照光照l(shuí)其中其中l(wèi)ight_position是一個(gè)指針,指向定義的光源位是一個(gè)指針,指向定義的光源位置齊次坐標(biāo)數(shù)組。其它幾個(gè)光源特性都為缺省值。同置齊次坐標(biāo)數(shù)組。其它幾個(gè)光源特性都為缺省值。同樣,我們也可用類似的方式定義光源的其
24、他幾個(gè)特性樣,我們也可用類似的方式定義光源的其他幾個(gè)特性值,例如:值,例如:GLfloat light_ambient = 0.0, 0.0, 0.0, 1.0 ;GLfloat light_diffuse = 1.0, 1.0, 1.0, 1.0 ;GLfloat light_specular = 1.0, 1.0, 1.0, 1.0 ;glLightfv(GL_LIGHT0, GL_AMBIENT , light_ambient );glLightfv(GL_LIGHT0, GL_DIFFUSE , light_diffuse );glLightfv(GL_LIGHT0, GL_SPECU
25、LAR, light_specular);第十章第十章 OpenGL光照光照l(shuí)10.2.4 啟動(dòng)光照啟動(dòng)光照在在OpenGL中,必須明確指出光照是否有效或無(wú)中,必須明確指出光照是否有效或無(wú)效。如果光照無(wú)效,則只是簡(jiǎn)單地將當(dāng)前顏色映射到效。如果光照無(wú)效,則只是簡(jiǎn)單地將當(dāng)前顏色映射到當(dāng)前頂點(diǎn)上去,不進(jìn)行法向、光源、材質(zhì)等復(fù)雜計(jì)算,當(dāng)前頂點(diǎn)上去,不進(jìn)行法向、光源、材質(zhì)等復(fù)雜計(jì)算,那么顯示的圖形就沒(méi)有真實(shí)感,如前幾章例程運(yùn)行結(jié)那么顯示的圖形就沒(méi)有真實(shí)感,如前幾章例程運(yùn)行結(jié)果顯示。要使光照有效,果顯示。要使光照有效,首先得啟動(dòng)光照,首先得啟動(dòng)光照,即:即:glEnable(GL_LIGHTING);若使
26、光照無(wú)效,則調(diào)用若使光照無(wú)效,則調(diào)用gDisable(GL_LIGHTING)可關(guān)閉當(dāng)前光照。然后,必須使所定義的每個(gè)光源有可關(guān)閉當(dāng)前光照。然后,必須使所定義的每個(gè)光源有效,例效,例light0.c中只用了一個(gè)光源,即:中只用了一個(gè)光源,即:glEnable(GL_LIGHT0);其它光源類似,只是光源號(hào)不同而已。其它光源類似,只是光源號(hào)不同而已。第十章第十章 OpenGL光照光照l(shuí)10.3、明暗處理、明暗處理在計(jì)算機(jī)圖形學(xué)中,光滑的曲面表面常用多邊形在計(jì)算機(jī)圖形學(xué)中,光滑的曲面表面常用多邊形予以逼近和表示,而每個(gè)小多邊形輪廓(或內(nèi)部)就予以逼近和表示,而每個(gè)小多邊形輪廓(或內(nèi)部)就用單一的顏
27、色或許多不同的顏色來(lái)勾畫(或填充),用單一的顏色或許多不同的顏色來(lái)勾畫(或填充),這種處理方式就稱為這種處理方式就稱為明暗處理明暗處理。在。在OpenGL中,用單中,用單一顏色處理的稱為一顏色處理的稱為平面明暗處理平面明暗處理(Flat Shading),),用許多不同顏色處理的稱為用許多不同顏色處理的稱為光滑明暗處理光滑明暗處理(Smooth Shading),也稱為),也稱為Gourand明暗處理(明暗處理(Gourand Shading)。設(shè)置明暗處理模式的函數(shù)為:)。設(shè)置明暗處理模式的函數(shù)為:void glShadeModel(GLenum mode);函數(shù)參數(shù)為函數(shù)參數(shù)為GL_FLA
28、T或或GL_SMOOTH,分別表,分別表示平面明暗處理和光滑明暗處理。示平面明暗處理和光滑明暗處理。第十章第十章 OpenGL光照光照l(shuí) 應(yīng)用平面明暗處理模應(yīng)用平面明暗處理模式時(shí),多邊形內(nèi)每個(gè)點(diǎn)的式時(shí),多邊形內(nèi)每個(gè)點(diǎn)的法向一致,且顏色也一致;法向一致,且顏色也一致;應(yīng)用光滑明暗處理模式時(shí),應(yīng)用光滑明暗處理模式時(shí),多邊形所有點(diǎn)的法向是由多邊形所有點(diǎn)的法向是由內(nèi)插生成的,具有一定的內(nèi)插生成的,具有一定的連續(xù)性,因此每個(gè)點(diǎn)的顏連續(xù)性,因此每個(gè)點(diǎn)的顏色也相應(yīng)內(nèi)插,故呈現(xiàn)不色也相應(yīng)內(nèi)插,故呈現(xiàn)不同色。這種模式下,插值同色。這種模式下,插值方法采用的是雙線性插值方法采用的是雙線性插值法,如圖法,如圖10-
29、2所示。所示。第十章第十章 OpenGL光照光照l(shuí) Gouraud明暗處理通常算法為:明暗處理通常算法為:l先用多邊形頂點(diǎn)的光強(qiáng)線性插值出當(dāng)前掃描線與多邊先用多邊形頂點(diǎn)的光強(qiáng)線性插值出當(dāng)前掃描線與多邊形邊交點(diǎn)處的光強(qiáng),然后再用交點(diǎn)的光強(qiáng)線插值處掃形邊交點(diǎn)處的光強(qiáng),然后再用交點(diǎn)的光強(qiáng)線插值處掃描線位于多邊形內(nèi)區(qū)段上每一象素處的光強(qiáng)值。圖中描線位于多邊形內(nèi)區(qū)段上每一象素處的光強(qiáng)值。圖中顯示出一條掃描線與多邊形相交,交線的端點(diǎn)是顯示出一條掃描線與多邊形相交,交線的端點(diǎn)是A點(diǎn)點(diǎn)和和B點(diǎn),點(diǎn),P點(diǎn)是掃描線上位于多邊形內(nèi)的任一點(diǎn),多點(diǎn)是掃描線上位于多邊形內(nèi)的任一點(diǎn),多邊形三個(gè)頂點(diǎn)的光強(qiáng)分別為邊形三個(gè)頂點(diǎn)的
30、光強(qiáng)分別為I1、I2和和I3.取取A點(diǎn)的光強(qiáng)點(diǎn)的光強(qiáng)Ia為為I1和和I2的線性插值,的線性插值,B點(diǎn)的光強(qiáng)點(diǎn)的光強(qiáng)Ib為為I1和和I3的線性的線性插值,插值,P點(diǎn)的光強(qiáng)點(diǎn)的光強(qiáng)Ip則為則為Ia和和Ib的線性插值。采用的線性插值。采用Gouraud明暗處理不但可以使用多邊形表示的曲面光明暗處理不但可以使用多邊形表示的曲面光強(qiáng)連續(xù),而且計(jì)算量很小。這種算法還可以以增量的強(qiáng)連續(xù),而且計(jì)算量很小。這種算法還可以以增量的形式改進(jìn),且能用硬件直接實(shí)現(xiàn)算法,從而廣泛用于形式改進(jìn),且能用硬件直接實(shí)現(xiàn)算法,從而廣泛用于計(jì)算機(jī)實(shí)時(shí)圖形生成。請(qǐng)看下面光滑明暗處理的例程:計(jì)算機(jī)實(shí)時(shí)圖形生成。請(qǐng)看下面光滑明暗處理的例程
31、:第十章第十章 OpenGL光照光照l(shuí)例例10-2 明暗處理例程明暗處理例程(Shading.c)#include glos.h#include #include #include void myinit(void);void object(void);void CALLBACK display(void);void CALLBACK myReshape(GLsizei w, GLsizei h);第十章第十章 OpenGL光照光照l(shuí)/* GL_SMOOTH is actually the default shading model. */void myinit (void)glShadeMo
32、del (GL_SMOOTH);第十章第十章 OpenGL光照光照l(shuí)void object(void)glBegin (GL_POLYGON);glColor3f (1.0, 0.0, 0.0);glVertex2f (4.0, 4.0);glColor3f(1.0,1.0,1.0);glVertex2f (12.0, 4.0);glColor3f(0.0,0.0,1.0);glVertex2f (12.0, 12.0);glColor3f(0.0,1.0,0.0);glVertex2f (4.0, 12.0);glEnd ();第十章第十章 OpenGL光照光照l(shuí)void CALLBACK
33、display(void)glClear (GL_COLOR_BUFFER_BIT);object ();glFlush ();第十章第十章 OpenGL光照光照l(shuí)void CALLBACK myReshape(GLsizei w, GLsizei h)glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w = h)gluOrtho2D (0.0, 16.0, 0.0, 16.0 * (GLfloat) h/(GLfloat) w);elsegluOrtho2D (0.0, 16.0 * (GLfloa
34、t) w/(GLfloat) h, 0.0, 16.0);glMatrixMode(GL_MODELVIEW);第十章第十章 OpenGL光照光照l(shuí)void main(void)auxInitDisplayMode (AUX_SINGLE | AUX_RGBA);auxInitPosition (0, 0, 500, 500);auxInitWindow (Smooth Shading);myinit();auxReshapeFunc (myReshape);auxMainLoop(display);第十章第十章 OpenGL光照光照l(shuí) 以上程序運(yùn)行結(jié)果是在屏幕上顯示一個(gè)色彩連續(xù)變以上程序運(yùn)行
35、結(jié)果是在屏幕上顯示一個(gè)色彩連續(xù)變化的三角形。這個(gè)程序是用的化的三角形。這個(gè)程序是用的RGBA顯示模式,若改用顏顯示模式,若改用顏色表模式,則顏色內(nèi)插實(shí)際上是顏色表的內(nèi)插,因此呈現(xiàn)色表模式,則顏色內(nèi)插實(shí)際上是顏色表的內(nèi)插,因此呈現(xiàn)的顏色可能不連續(xù)。不妨自己試試。的顏色可能不連續(xù)。不妨自己試試。另外,若在另外,若在light0.c程序中加上一句定義程序中加上一句定義GL_FLAT明明暗處理模式,則又會(huì)出現(xiàn)怎樣的情形呢?讀者可以仔細(xì)比暗處理模式,則又會(huì)出現(xiàn)怎樣的情形呢?讀者可以仔細(xì)比較一下。較一下。第十章第十章 OpenGL光照光照l(shuí)10.4、材質(zhì)、材質(zhì)10.4.1 材質(zhì)顏色材質(zhì)顏色OpenGL用材
36、料對(duì)光的紅、綠、藍(lán)三原色的反射率來(lái)用材料對(duì)光的紅、綠、藍(lán)三原色的反射率來(lái)近似定義材料的顏色。象光源一樣,材料顏色也分成近似定義材料的顏色。象光源一樣,材料顏色也分成環(huán)境、環(huán)境、漫反射和鏡面反射成分,漫反射和鏡面反射成分,它們決定了材料對(duì)環(huán)境光、漫反它們決定了材料對(duì)環(huán)境光、漫反射光和鏡面反射光的反射程度。射光和鏡面反射光的反射程度。l在進(jìn)行光照計(jì)算時(shí),在進(jìn)行光照計(jì)算時(shí),材料對(duì)環(huán)境光的反射率與每個(gè)進(jìn)入光材料對(duì)環(huán)境光的反射率與每個(gè)進(jìn)入光源的環(huán)境光結(jié)合,對(duì)漫反射光的反射率與每個(gè)進(jìn)入光源的源的環(huán)境光結(jié)合,對(duì)漫反射光的反射率與每個(gè)進(jìn)入光源的漫反射光結(jié)合,對(duì)鏡面光的反射率與每個(gè)進(jìn)入光源的鏡面漫反射光結(jié)合,對(duì)
37、鏡面光的反射率與每個(gè)進(jìn)入光源的鏡面反射光結(jié)合。反射光結(jié)合。對(duì)對(duì)環(huán)境光與漫反射光的反射程度環(huán)境光與漫反射光的反射程度決定了材料決定了材料的顏色,并且它們很相似。對(duì)的顏色,并且它們很相似。對(duì)鏡面反射光的反射率通常是鏡面反射光的反射率通常是白色或灰色白色或灰色(即對(duì)鏡面反射光中紅、綠、藍(lán)的反射率相(即對(duì)鏡面反射光中紅、綠、藍(lán)的反射率相同)。同)。l鏡面反射高光最亮的地方將變成具有光源鏡面光強(qiáng)度的顏鏡面反射高光最亮的地方將變成具有光源鏡面光強(qiáng)度的顏色。例如光亮的紅色塑料球,球的大部分表現(xiàn)為紅色,光色。例如光亮的紅色塑料球,球的大部分表現(xiàn)為紅色,光亮的高光將是白色的。亮的高光將是白色的。第十章第十章 O
38、penGL光照光照l(shuí)10.4.2 材質(zhì)定義材質(zhì)定義材質(zhì)的定義與光源的定義類似。其函數(shù)為:材質(zhì)的定義與光源的定義類似。其函數(shù)為:void glMaterialifv(GLenum face,GLenum pname,TYPE param);定義光照計(jì)算中用到的當(dāng)前材質(zhì)。定義光照計(jì)算中用到的當(dāng)前材質(zhì)。face可以是可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK,它表明當(dāng)前材質(zhì)應(yīng)該應(yīng)用,它表明當(dāng)前材質(zhì)應(yīng)該應(yīng)用到物體的哪一個(gè)面上;到物體的哪一個(gè)面上;pname說(shuō)明一個(gè)特定的材質(zhì);說(shuō)明一個(gè)特定的材質(zhì);param是材質(zhì)是材質(zhì)的具體數(shù)值,若函數(shù)為向量形式,則的具體數(shù)值,若函數(shù)為向
39、量形式,則param是一組值的指針,反之為是一組值的指針,反之為參數(shù)值本身。非向量形式僅用于設(shè)置參數(shù)值本身。非向量形式僅用于設(shè)置GL_SHINESS。pname參數(shù)值參數(shù)值具體內(nèi)容見表具體內(nèi)容見表10-1。另外,參數(shù)。另外,參數(shù)GL_AMBIENT_AND_DIFFUSE表示表示可以用相同的可以用相同的RGB值設(shè)置環(huán)境光顏色和漫反射光顏色。值設(shè)置環(huán)境光顏色和漫反射光顏色。第十章第十章 OpenGL光照光照第十章第十章 OpenGL光照光照l(shuí)例例10-3 材質(zhì)定義例程材質(zhì)定義例程(light1.c)#include glos.h#include #include void myinit(void
40、);void CALLBACK myReshape(GLsizei w, GLsizei h);第十章第十章 OpenGL光照光照l(shuí)void CALLBACK display(void); void myinit(void)/* 設(shè)置材質(zhì)的各種光的顏色成分反射比率設(shè)置材質(zhì)的各種光的顏色成分反射比率 */GLfloat mat_ambient=0.8,0.8,0.8,1.0;GLfloat mat_diffuse=0.8,0.0,0.8,1.0;/* 紫色紫色 */GLfloat mat_specular = 1.0, 0.0, 1.0, 1.0 ;/* 亮紫色亮紫色 */GLfloat mat
41、_shininess = 50.0 ;GLfloat light_position = 1.0, 1.0, 1.0, 0.0 ;第十章第十章 OpenGL光照光照l(shuí) glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glLightfv(GL_LIGHT0
42、, GL_POSITION, light_position);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glDepthFunc(GL_LESS);glEnable(GL_DEPTH_TEST);第十章第十章 OpenGL光照光照l(shuí)void CALLBACK display(void)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);auxSolidSphere(1.0);glFlush();第十章第十章 OpenGL光照光照l(shuí)void CALLBACK myReshape(GLsizei w, GLs
43、izei 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)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);glMatrixMode(GL_MODELVIEW); glLoadI
44、dentity();第十章第十章 OpenGL光照光照l(shuí)void main(void)auxInitDisplayMode (AUX_SINGLE | AUX_RGBA | AUX_DEPTH16);auxInitPosition (0, 0, 500, 500);auxInitWindow (Lighting_1 );myinit();auxReshapeFunc (myReshape);auxMainLoop(display);第十章第十章 OpenGL光照光照l(shuí) 以上程序運(yùn)行結(jié)果是一個(gè)紫色的球。在函以上程序運(yùn)行結(jié)果是一個(gè)紫色的球。在函數(shù)數(shù)myinit()中定義了球的材質(zhì)顏色,光源的定中定
45、義了球的材質(zhì)顏色,光源的定義仍延用義仍延用light0.c中的,而中的,而light.c物體的光源物體的光源定義為缺省形式。從例子中明顯地看出,物體定義為缺省形式。從例子中明顯地看出,物體的材質(zhì)顏色定義與光源顏色定義幾乎一樣,物的材質(zhì)顏色定義與光源顏色定義幾乎一樣,物體反射到眼中的顏色與二者都有關(guān)系,具體關(guān)體反射到眼中的顏色與二者都有關(guān)系,具體關(guān)系請(qǐng)看下一小節(jié)。系請(qǐng)看下一小節(jié)。第十章第十章 OpenGL光照光照l(shuí)10.4.3 材質(zhì)材質(zhì)RGB值和光源值和光源RGB值的關(guān)系值的關(guān)系材質(zhì)的顏色與光源的顏色有些不同。對(duì)于光源,材質(zhì)的顏色與光源的顏色有些不同。對(duì)于光源,R、G、B值等于值等于R、G、B對(duì)
46、其最大強(qiáng)度的百分比。若光源顏對(duì)其最大強(qiáng)度的百分比。若光源顏色的色的R、G、B值都是值都是1.0,則是最強(qiáng)的白光;若值變?yōu)椋瑒t是最強(qiáng)的白光;若值變?yōu)?.5,顏色仍為白色,但強(qiáng)度為原來(lái)的一半,于是表現(xiàn)為灰色;顏色仍為白色,但強(qiáng)度為原來(lái)的一半,于是表現(xiàn)為灰色;若若RG1.0,B0.0,則光源為黃色。對(duì)于材質(zhì),則光源為黃色。對(duì)于材質(zhì),R、G、B值為材質(zhì)對(duì)光的值為材質(zhì)對(duì)光的R、G、B成分的反射率。比如,一成分的反射率。比如,一種材質(zhì)的種材質(zhì)的R1.0、G0.5、B0.0,則材質(zhì)反射全部的,則材質(zhì)反射全部的紅色成分,一半的綠色成分,不反射藍(lán)色成分。也就是說(shuō),紅色成分,一半的綠色成分,不反射藍(lán)色成分。也就是
47、說(shuō),若若OpenGL的光源顏色為(的光源顏色為(LR、LG、LB),材質(zhì)顏色為),材質(zhì)顏色為(MR、MG、MB),那么,在忽略所有其他反射效果的),那么,在忽略所有其他反射效果的情況下,最終到達(dá)眼睛的光的顏色為(情況下,最終到達(dá)眼睛的光的顏色為(LR*MR、LG*MG、LB*MB)。)。第十章第十章 OpenGL光照光照l(shuí)同樣,如果有兩束光,相應(yīng)的值分別為(同樣,如果有兩束光,相應(yīng)的值分別為(R1、G1、B1)和()和(R2、G2、B2),則),則OpenGL將將各個(gè)顏色成分相加,得到(各個(gè)顏色成分相加,得到(R1+R2、G1+G2、B1+B2),若任一成分的和值大于),若任一成分的和值大于1
48、(超出了設(shè)(超出了設(shè)備所能顯示的亮度)則約簡(jiǎn)到備所能顯示的亮度)則約簡(jiǎn)到1.0。下面一例程。下面一例程就說(shuō)明了二者之間的關(guān)系。就說(shuō)明了二者之間的關(guān)系。第十章第十章 OpenGL光照光照l(shuí)例例10-4 材質(zhì)與光源的材質(zhì)與光源的RGB關(guān)系例程關(guān)系例程(light2.c)#include glos.h#include #include void myinit(void);void CALLBACK myReshape(GLsizei w, GLsizei h);void CALLBACK display(void);第十章第十章 OpenGL光照光照l(shuí)void myinit(void)GLfloat
49、 mat_ambient= 0.8, 0.8, 0.8, 1.0 ;GLfloat mat_diffuse= 0.8, 0.0, 0.8, 1.0 ;/* 紫色紫色 */GLfloat mat_specular = 1.0, 0.0, 1.0, 1.0 ;GLfloat mat_shininess = 50.0 ;GLfloat light_diffuse= 0.0, 0.0, 1.0, 1.0;/* 藍(lán)色藍(lán)色 */GLfloat light_position = 1.0, 1.0, 1.0, 0.0 ;第十章第十章 OpenGL光照光照l(shuí) glMaterialfv(GL_FRONT, GL_
50、AMBIENT, mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);glLightfv(GL_LIGHT0, GL_POSITION, light_position);glEnable(GL_LIGHTING);glEnable
51、(GL_LIGHT0);glDepthFunc(GL_LESS);glEnable(GL_DEPTH_TEST);第十章第十章 OpenGL光照光照l(shuí)void CALLBACK display(void)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);auxSolidSphere(1.0);glFlush();第十章第十章 OpenGL光照光照l(shuí)void CALLBACK myReshape(GLsizei w, GLsizei h)glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glL
52、oadIdentity();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)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();第十章第十章 OpenGL光照光照l(shuí)void main(void)auxInitDisplayMode
53、(AUX_SINGLE | AUX_RGBA | AUX_DEPTH16);auxInitPosition (0, 0, 500, 500);auxInitWindow (Lighting_2 );myinit();auxReshapeFunc (myReshape);auxMainLoop(display);第十章第十章 OpenGL光照光照l(shuí)以上程序運(yùn)行結(jié)果是一個(gè)以上程序運(yùn)行結(jié)果是一個(gè)藍(lán)色的球,其中高光部分藍(lán)色的球,其中高光部分仍為上一例的亮紫色。從仍為上一例的亮紫色。從上可看出,球漫反射光的上可看出,球漫反射光的結(jié)果是結(jié)果是mat_diffuse與與light_diffuse中的三個(gè)顏中
54、的三個(gè)顏色分量值相乘,即色分量值相乘,即 (0.0*1.0,0.0*1.0,0.8*1.0,1.0*1.0)=(0.0,0.0,0.8,1.0),所以球大部分呈現(xiàn)藍(lán)色。所以球大部分呈現(xiàn)藍(lán)色。第十章第十章 OpenGL光照光照l(shuí)10.4.4 材質(zhì)改變材質(zhì)改變?cè)趯?shí)際應(yīng)用的許多情況下,不同的物體或在實(shí)際應(yīng)用的許多情況下,不同的物體或同一物體的不同部分都有可能設(shè)置不同的材質(zhì),同一物體的不同部分都有可能設(shè)置不同的材質(zhì),OpenGL函數(shù)庫(kù)提供了兩種方式實(shí)現(xiàn)這種要求。函數(shù)庫(kù)提供了兩種方式實(shí)現(xiàn)這種要求。下面一例程采用的是設(shè)置矩陣堆棧來(lái)保存不同下面一例程采用的是設(shè)置矩陣堆棧來(lái)保存不同物體的材質(zhì)信息:物體的材質(zhì)信
55、息:第十章第十章 OpenGL光照光照l(shuí)例例10-5 矩陣堆棧改變材質(zhì)例程矩陣堆棧改變材質(zhì)例程(chgmat1.c)#include glos.h#include #include #include void myinit(void);void CALLBACK display(void);void CALLBACK myReshape(GLsizei w, GLsizei h); 第十章第十章 OpenGL光照光照l(shuí)/* 初始化初始化z-buffer、光源和光照模型,在此不具體定、光源和光照模型,在此不具體定義材質(zhì)。義材質(zhì)。*/void myinit(void)GLfloat ambient
56、 = 0.0, 0.0, 0.0, 1.0 ;GLfloat diffuse = 1.0, 1.0, 1.0, 1.0 ;GLfloat specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat position = 0.0, 3.0, 2.0, 0.0 ;GLfloat lmodel_ambient = 0.4, 0.4, 0.4, 1.0 ;glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LESS);第十章第十章 OpenGL光照光照l(shuí) glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);glLightfv(
57、GL_LIGHT0, GL_DIFFUSE, diffuse);glLightfv(GL_LIGHT0, GL_POSITION, position);glEnable(GL_LIGHTING);glEnable(GL_LIGHT0);glClearColor(0.0, 0.1, 0.1, 0.0);第十章第十章 OpenGL光照光照l(shuí)void CALLBACK display(void)GLfloat no_mat = 0.0, 0.0, 0.0, 1.0 ;GLfloat mat_ambient = 0.7, 0.7, 0.7, 1.0 ;GLfloat mat_ambient_color
58、 = 0.8, 0.8, 0.2, 1.0 ;GLfloat mat_diffuse = 0.1, 0.5, 0.8, 1.0 ;GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat no_shininess = 0.0 ;GLfloat low_shininess = 5.0 ;GLfloat high_shininess = 100.0 ;GLfloat mat_emission = 0.3, 0.2, 0.2, 0.0;glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);第十章第十章 Ope
59、nGL光照光照l(shuí)/* 第一行第一列繪制的球僅有漫反射光而無(wú)環(huán)境光和鏡面第一行第一列繪制的球僅有漫反射光而無(wú)環(huán)境光和鏡面光。光。*/glPushMatrix();glTranslatef (-3.75, 3.0, 0.0);glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, no_mat);glMaterialfv(GL_FRONT, GL_SHININESS, no_shininess);glM
60、aterialfv(GL_FRONT, GL_EMISSION, no_mat);auxSolidSphere(1.0);glPopMatrix();第十章第十章 OpenGL光照光照l(shuí)/* 第一行第二列繪制的球有漫反射光和鏡面光,并有低高第一行第二列繪制的球有漫反射光和鏡面光,并有低高光,而無(wú)環(huán)境光光,而無(wú)環(huán)境光 。*/glPushMatrix();glTranslatef (-1.25, 3.0, 0.0);glMaterialfv(GL_FRONT, GL_AMBIENT, no_mat);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);g
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 康復(fù)輔具的跨國(guó)合作與市場(chǎng)準(zhǔn)入考核試卷
- 木材切割精度控制技術(shù)考核試卷
- 停車設(shè)備行業(yè)營(yíng)銷策略與渠道建設(shè)考核試卷
- 圖書、報(bào)刊行業(yè)風(fēng)險(xiǎn)管理考核試卷
- 電工培訓(xùn)課件
- 再生物資回收在氣候變化適應(yīng)策略中的應(yīng)用考核試卷
- 家居紡織品的文化與藝術(shù)欣賞考核試卷
- 土地利用規(guī)劃中的鄉(xiāng)村景觀規(guī)劃考核試卷
- 快遞商鋪轉(zhuǎn)讓合同范本
- 采購(gòu)合作合同范本
- 2023年新改版教科版五年級(jí)下冊(cè)科學(xué)全冊(cè)教案(附知識(shí)點(diǎn))
- 固定式塔式起重機(jī)基礎(chǔ)設(shè)計(jì)及計(jì)算
- 奶牛性控凍精的使用細(xì)則:張相文 整理
- GB/T 34376-2017數(shù)控板料折彎?rùn)C(jī)技術(shù)條件
- GB/T 22492-2008大豆肽粉
- 三年級(jí)下冊(cè)豎式脫式計(jì)算
- 《財(cái)務(wù)風(fēng)險(xiǎn)的識(shí)別與評(píng)估管理國(guó)內(nèi)外文獻(xiàn)綜述》
- ??谑写媪糠抠I賣合同模板(范本)
- 經(jīng)典文學(xué)作品中的女性形象研究外文文獻(xiàn)翻譯2016年
- 高爐煤氣安全知識(shí)的培訓(xùn)
- 2008 年全國(guó)高校俄語(yǔ)專業(yè)四級(jí)水平測(cè)試試卷
評(píng)論
0/150
提交評(píng)論