OpenGL光源 材質和光照模型

2021-07-05 14:01:17 字數 1205 閱讀 1149

好久沒寫部落格了,從現在開始,養成乙個好的習慣,不斷的進行總結。

以前都是直接用,效果好就行,不管是具體怎麼設定的。現在突然想想什麼都學不到,於是就自己動手除錯了一番,做了一下總結:

opengl在處理光照的過程中主要包含三項內容,光源、材質和光照模型。也就是我們在光照設定的**中常看到的gllightfv、glmaterialfv和gllightmodelfv。其中要注意的是,gl_ambient(環境光)、gl_diffuse(漫反射光)、gl_specular(鏡面反射)這三種屬性是光源和材質所共有的。光源和材質的相同屬性共同影響,並作用最終的顯示效果。

1.光源

光源的設定按照3+1的原則來進行設定,3代表的是gl_ambient、gl_diffuse和gl_specular這三種屬性,1代表的是光源的位置。光源的位置中又包含了兩種模式,一種是位置性光源,一種是方向性光源。具體的可參考opengl的api。

在這裡不得不提的在整個環境中的光源個數問題。gl_light0代表第0號光源,依次類推。注意gl_light0與其他光源的預設屬性是有區別的。gl_light0

gl_diffuse,gl_specular的預設值是(1.0,1.0,1.0,1.0),而其他光源的預設值是(0.0,0.0,0.0,1.0)。這一點在光源屬性的初始化過程中尤為重要。

2.材質

材質除了具有上面提到的那3個屬性外,另外還增加了gl_shininess(鏡面指數)和gl_emission,這些屬性的設定根據opengl的api可以完成設定。

但是,材質的顏色與光源的顏色有些不同。對於光源,r、g、b 值等於r、g、b 對其最大強度的百分比。若光源顏色的r、g、b 值都是1.0,則是最強的白光;若值變為0.5,顏色仍為白色,但強度為原來的一半,於是表現為灰色;若r=g=1.0,b=0.0,則光源為黃色。對於材質,r、g、b 值為材質對光的r、g、b 成分的反射率。比如,一種材質的r=1.0、g=0.5、b=0.0,則材質反射全部的紅色成分,一半的綠色成分,不反射藍色成分。也就是說,若opengl 的光源顏色為(lr、lg、lb),材質顏色為(mr、mg、mb),那麼,在忽略所有其他反射效果的情況下,最終到達眼睛的光的顏色為(lr*mr、lg*mg、lb*mb)。

3.光照模型

光照模型包含四部分,分別為:全域性環境光,近視點或遠視點,雙面光照,鏡面反射顏色是否和環境顏色、散射顏色分開。沒什麼特殊要求按照我提供的**進行設定即可。一般專案對這部分很少做細緻的要求。

最後,別忘記先開光照,然後在開啟設定好的燈。

OpenGL 光照和材質

opengl 光照和材質 前言 很難受呀,一天又過去了,沒有達到預期的進度,等下寫完這篇部落格,抓緊研究滑鼠實現軌跡球!長路漫漫啊 注 此篇文章建立在mfc環境搭建完成後 1.渲染處理 在opengl中,可以定義頂點的顏色,但如何定義線段的顏色,如何定義平面的顏色,這就需要opengl通過各個頂點的...

OPENGL 紋理,材質,光照

1.紋理 紋理對映就是將一張點陣圖貼在3d模型上,讓模型更有真實感。比如一顆人頭,眼睛鼻子嘴巴頭髮都由三角形構成,會給系統帶來很大的開銷。如果用紋理來做,可以由乙個球和人臉的紋理組成,真實感也很強。只是個例子,真這麼做會很恐怖。opengl把紋理座標規範化到0與1之間,就是說如果一張正方形的紋理,從...

OpenGL 光照模型

材質有三種,也就是對光有三種反射 材質被分為了三個屬性,也分別用三個引數來刻畫 對於乙個頂點,有四個向量來刻畫其光照 計算的時候也分為鏡面 漫和環境三類,之後再疊加起來即得到光照下的顏色 向量nlvr 求解顏色 鏡面反射 is rs max v r a,0 ls 環境反射 ia ra la於是 i ...