資源描述:
《最新OpenGL編程技術(shù)光照課件PPT.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、OpenGL編程技術(shù)光照(d)理想鏡面反射方向與視線方向的夾角(a)漫反射(b)理想鏡面反射(c)一般光滑表面的鏡面反射圖6-6光學(xué)反射模型光學(xué)反射模型通常物體表面的反射光可以認為包含三個分量:對環(huán)境光的反射、對特定光源的漫反射和鏡面反射。環(huán)境光的反射:環(huán)境光(ambientlight)來自周圍環(huán)境(如墻面)散射的光,在空間近似均勻分布,入射至物體表面后向空間各個方向均勻反射出去。物體對環(huán)境光的反射分量表示:其中Ia是入射的環(huán)境光亮度,Ka是環(huán)境光漫反射系數(shù),它與物體表面性質(zhì)有關(guān)。如果簡單光照模型中僅考慮環(huán)境光的反射分量,則物體表面的亮度是一個恒定值,
2、沒有明暗的自然過渡。散射(diffusereflection):散射分量表示特定光源在物體表面的反射光中那些向空間各個方向均勻反射出去的光。蘭伯特(Lambert)余弦定律指出:當(dāng)點光源照射到一個散射體時,其表面反射光亮度和光源入射角(入射光線和表面法矢量的夾角)的余弦成正比,即其中Il是來自點光源的入射光亮度。Kd是漫反射系數(shù),與物體表面性質(zhì)有關(guān)。?是入射光線和表面法矢量的夾角(如果?>90?)。明暗處理圖6-7(a)多邊形表示的物體(b)Gouraud明暗處理光照計算時需要用到多邊形上點的法矢量,如果多邊形上點的法矢量總是取多邊形的面法矢,則由于不
3、同平面片之間法矢量不連續(xù),最終繪制出來的圖像看起來呈多面體狀。解決方法:首先多邊形的頂點法矢量不再簡單的取為其所在多邊形的面法矢,而是取為共該頂點的所有多邊形的面法矢的平均值;其次多邊形內(nèi)部點的法矢量也不再簡單地取為多邊形的面法矢,而是利用多邊形頂點的法矢量通過雙線性插值計算出。圖6-8對P點進行雙線性插值Phong明暗處理(插值法矢)如圖6-8,P1、P2、P3是多邊形頂點,其法矢量視為共該點的所有多邊形法矢量的平均值。由P1、P2的法矢量可以線性插值計算出A點的法矢量,由P1、P3的法矢量可以線性插值計算出B點的法矢量,于是P點的法矢量可以由A、B
4、點處的法矢量線性插值計算出,計算出P的法矢量后應(yīng)用簡單光照模型可以計算出P點的光亮度。Gouraud明暗處理(插值顏色)由于每個像素點都需要法向量插值和光照計算,Phong明暗處理計算量較大,一種簡化的處理方法是先利用光照模型計算出多邊形頂點處亮度,然后對亮度進行雙線性插值,直接獲得像素的顏色,如圖6-8,P1、P2、P3是多邊形頂點,其亮度已經(jīng)計算出。A點的亮度可以由P1、P2點的亮度線性插值計算出,B點的亮度可以由P1、P3點的亮度線性插值計算出,于是P點的亮度可以由A、B點的亮度線性插值計算出。Phong明暗處理計算量遠大于Gouraud明暗處理
5、,但效果好。5.2OpenGL中的光照OpenGL提供的函數(shù)可以方便地實現(xiàn)隱藏面消除、光照計算、紋理映射。OpenGL中隱藏面的消除采用的是Z緩沖器算法。glEnable(GL_DEPTH_TEST)和glDisable(GL_DEPTH_TEST)打開和禁止深度測試。OpenGL進行光照計算時采用的是簡單光照模型,只考慮光源直接照射下物體表面的反射,不考慮光在物體間的反射和光的透射。glEnable(GL_LIGHTING)和glDisable(GL_LIGHTING)打開和禁止光照計算。OpenGL認為物體表面的反射光包含三個分量:物體本身發(fā)出的光
6、、對環(huán)境光的反射,對特定光源的反射。①物體本身發(fā)出的光。OpenGL認為物體本身是可以發(fā)光的,但是這種光只會對物體本身的亮度產(chǎn)生影響,不能影響其它物體的光亮度。物體本身發(fā)出的光記為。②對環(huán)境光的反射。這里的環(huán)境光指的是全局環(huán)境光,它不依賴于任何特定光源。全局環(huán)境光概念的提出使得即使場景中沒有任何光源,觀察者也可以看到物體。假設(shè)全局環(huán)境光亮度Iglobal,物體表面的環(huán)境光反射系數(shù)為Ka,則物體對全局環(huán)境光的反射為。③對特定光源的反射。在OpenGL中,光源被定義為聚光燈。定義一個聚光燈需要指定光源的位置(即錐頂),聚光燈的方向(即圓錐軸的方向),聚光燈
7、的散射角(即圓錐中軸和邊的夾角)。聚光燈將光的發(fā)射形狀調(diào)整為圓錐形,此時空間光強度分布可以用聚光燈光強分布系數(shù)乘以錐頂處聚光燈光強給出。圖6-15視線和反射光線夾角圖6-16聚光燈綜合三個分量,在OpenGL中物體表面的反射光亮度為:參照P170做解釋。為減小計算量,OpenGL采用Gouraud明暗處理方法。glShadeModel(GL_SMOOTH)和glShadeModel(GL_FLAT)形式的函數(shù)調(diào)用來設(shè)置。圖6-15視線和反射光線夾角圖6-16聚光燈6.6.1、光照模型◇介紹例程:ep_7_1_光照球6.6.1、光照模型◇OpenGL光組
8、成在OpenGL簡單光照模型中的幾種光分為:輻射光(EmittedLight)、環(huán)境光(Amb