版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、opengl學(xué)習(xí)筆記之光照、材質(zhì)OpenGL在處理光照時把光照系統(tǒng)分為三部分,分別是光源、材質(zhì)和光照模型。在處理光照時把光照系統(tǒng)分為三部分,分別是光源、材質(zhì)和光照模型。光源、材質(zhì)和光照模式都有各自的屬性,盡管屬性種類繁多,但這些屬性都只用很少的幾個函數(shù)來設(shè)置。使用使用glLightglLight函數(shù)可設(shè)置光源的屬性,函數(shù)可設(shè)置光源的屬性,使用使用glMaterialglMaterial函數(shù)可設(shè)置材質(zhì)的屬性,函數(shù)可設(shè)置材質(zhì)的屬性,使用使用
2、glLightModelglLightModel函數(shù)可設(shè)置光照模式。函數(shù)可設(shè)置光照模式。GL_AMBIENT、GL_DIFFUSE、GL_SPECULAR這三種屬性是光源和材質(zhì)所共有的,如果某光源發(fā)出的光線照射到某材質(zhì)的表面,則最終的漫反射強度由兩個GL_DIFFUSE屬性共同決定,最終的鏡面反射強度由兩個GL_SPECULAR屬性共同決定。在OpenGL中,僅僅支持有限數(shù)量的光源。使用GL_LIGHT0表示第0號光源,GL_LIGHT
3、1表示第1號光源,依次類推,OpenGL至少會支持8個光源,即GL_LIGHT0到GL_LIGHT7。使用glEnable函數(shù)可以開啟它們。例如,glEnable(GL_LIGHT0)可以開啟第0號光源。使用glDisable函數(shù)則可以關(guān)閉光源。一些OpenGL實現(xiàn)可能支持更多數(shù)量的光源,但總的來說,開啟過多的光源將會導(dǎo)致程序運行速度的嚴(yán)重下降,開啟過多的光源將會導(dǎo)致程序運行速度的嚴(yán)重下降,光源GL_LIGHT0與其他幾個光源不同,GL
4、_DIFFUSEGL_SPECULAR的默認(rèn)值是(1.0,1.01.01.0)而其他光源的默認(rèn)值是(0.00.00.01.0)。使用使用OpenGLOpenGL的光照模型包括以下幾個步驟的光照模型包括以下幾個步驟:1設(shè)置光源的種類、位置和方向(對于平行光源)2為每個圖元的每個頂點指定它的法線向量3為各個圖元指定它的材質(zhì)4啟用光照模型1光源設(shè)置光源設(shè)置設(shè)置環(huán)境光設(shè)置環(huán)境光glLightfv(GL_LIGHT0GL_AMBIENTambie
5、ntLight)設(shè)置漫射光成分設(shè)置漫射光成分glLightfv(GL_LIGHT0GL_DIFFUSEDiffuseLight)設(shè)置鏡面光成分設(shè)置鏡面光成分glLightfv(GL_LIGHT0GL_SPECULARSpecularLight)光源的屬性GL_SPECULAR影響鏡面反射區(qū)域的顏色,一般物體的鏡面反射區(qū)域的顏色為入射光線的顏色,要實現(xiàn)真實感,應(yīng)該將它的值設(shè)置成與GL_DIFFUSE相同。設(shè)置光源的位置設(shè)置光源的位置glL
6、ightfv(GL_LIGHT0GL_POSITIONsun_light_position)GL_POSITION屬性。表示光源所在的位置。由四個值(XYZW)表示。glLightf(GL_LIGHT0AttenuationWaySpotAttenuation)glLightf(GL_LIGHT0AttenuationWaySpotAttenuation)AttenuationWayAttenuationWay可以取以下幾個值:可以取以
7、下幾個值:GL_CONSTANT_ATTENUATIONGL_CONSTANT_ATTENUATION表示光線按常熟衰減(與距離無關(guān))GL_LINEAR_ATTENUATIONGL_LINEAR_ATTENUATION表示光線按距離線性衰減GL_QUADRATIC_ATTENUATIONGL_QUADRATIC_ATTENUATION表示光線按距離以二次函數(shù)衰減。參數(shù)參數(shù)SpotAttenuationSpotAttenuation為光線
8、的衰減系數(shù)。為光線的衰減系數(shù)。GL_CONSTANT_ATTENUATIONGL_CONSTANT_ATTENUATION、GL_LINEAR_ATTENUATIONGL_LINEAR_ATTENUATION、GL_QUADRATIC_ATTENUATIONGL_QUADRATIC_ATTENUATION屬性屬性。這三個屬性表示了光源所發(fā)出的光線的直線傳播特性?,F(xiàn)實生活中,光線的強度隨著距離的增加而減弱,OpenGL把這個減弱的趨勢抽象
9、成函數(shù):衰減因子=1(k1k2dk3k3d)其中d表示距離,光線的初始強度乘以衰減因子,就得到對應(yīng)距離的光線強度。k1k2k3分別是GL_CONSTANT_ATTENUATIONGL_LINEAR_ATTENUATIONGL_QUADRATIC_ATTENUATION。通過設(shè)置這三個常數(shù),就可以控制光線在傳播過程中的減弱趨勢控制光線在傳播過程中的減弱趨勢。4為圖元指定法向量為圖元指定法向量OpenGL必須通過圖元的法線向量來確定圖元的明
10、暗程度通過計算得到法線向量后,我們需要在繪制頂點前調(diào)用glNmal函數(shù)為頂點或圖元指定法使用glTranslate函數(shù)或者glRotate函數(shù)可以改變物體的外觀,但法線向量并不會隨之改變。然而,使用glScale函數(shù),對每一坐標(biāo)軸進(jìn)行不同程度的縮放,很有可能導(dǎo)致法線向量的不正確,雖然OpenGL提供了一些措施來修正這一問題,但由此也帶來了各種開銷。因此,在使用了法線向量的場合,應(yīng)盡量避免使用glScale函數(shù)。即使使用,也最好保證各坐標(biāo)
11、軸進(jìn)行等比例縮放對光源進(jìn)行平移或旋轉(zhuǎn),使之相對于靜止的物體移動,這可以在指定模型變換后設(shè)置光源位置,然后通過修改模型變換來改變光源的位置。5設(shè)置材質(zhì)設(shè)置材質(zhì)OpenGL用材料對光的紅、綠、藍(lán)三原色的反射率來近似定義材料的顏色。象光源一樣,材料顏色也分成環(huán)境、漫反射和鏡面反射成分,它們決定了材料對環(huán)境光、漫反射光和鏡面反射光的反射程度。在進(jìn)行光照計算時,材料對環(huán)境光的反射率與每個進(jìn)入光源的環(huán)境光結(jié)合,對漫反射光的反射率與每個進(jìn)入光源的漫反
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于材質(zhì)測量的光照建模研究.pdf
- 包含光澤材質(zhì)復(fù)雜場景全局光照明的高效繪制.pdf
- 可變材質(zhì)的交互級全局光照明繪制算法的研究.pdf
- 一種半球面模式的材質(zhì)光照測量系統(tǒng)研究與實現(xiàn).pdf
- 材質(zhì)教程第四講卡通材質(zhì)、變形器材質(zhì)、蟲漆材質(zhì)
- 虛實混合中的風(fēng)化材質(zhì)模擬和光照一致性問題研究.pdf
- 燈具材質(zhì)
- 鏈子材質(zhì)
- 材質(zhì)22775
- vray 材質(zhì)
- 材質(zhì)74194
- 材質(zhì)79084
- 刀具材質(zhì)
- vr材質(zhì)
- 鞋底材質(zhì)
- 載帶pc材質(zhì)和pet材質(zhì)的區(qū)別
- 光照計算
- vray材質(zhì)參數(shù)
- 木紋材質(zhì)詳解
- 墻體材質(zhì)分類
評論
0/150
提交評論