OpenGL - Material (材質)

在真實世界中,白色物體在綠光照射下看起來是綠色而不是白色,紅色物體在綠光照射下看起來是黑色,而有的同樣顏色的物體在同樣的光照下亮度卻不同,這都是由物體的材質不同造成的。

 

場景中物體的顏色取決於物體材質的反射和透射屬性。

 

在忽略其他效果的情況下,若光源顏色爲( LR , LG , LB ),材質顏色爲( MR , MG , MB ),最終顏色爲( LR*MR , LG*MG , LB*MB )。若有兩束光,分別爲( R1 , G1 , B1 )和( R2 , G2 , B2 ),材質顏色爲( MR , MG , MB ),最終顏色爲( (R1+R2)*MR , (G1+G2)*MG , (B1+B2)*MB )。

 

OpenGL中物體的材質屬性包括:

 

環境反射
漫反射
鏡面反射
輻射 ( 關於 輻射 參見 C# - OpenGL - Lighting (光照) 5 輻射光)

 

材質的定義與光源的定義類似。其函數爲:

 

void glMaterial{if}[v]( GLenum face , GLenum pname , TYPE param );

 

face 定義GL_FRONT(正面)或GL_BACK(背面)或GL_FRONT_AND_BACK(雙面)
pname 定義特定的材質
param 定義材質的具體數值

 

 

 


GL_SHINESS 取值範圍 [ 0.0 , 128.0 ]
數值越大,鏡面高光的範圍越小、亮度越大
數值越小,鏡面高光的範圍越大、亮度越小

 

材質 - 示例

 

程序截圖
設置 鏡面反射 前後

 

 

 

 

源碼下載
CSharp_OpenGL_Material.rar

 

下載 CsGL 1.4.1 DLL

 

使材質顏色追蹤當前顏色

 

函數原型 void glColorMaterial( GLenum face , GLenum mode );

 

glColorMaterial( GL_FRONT , GL_DIFFUSE ); // 使環境材質顏色追蹤當前顏色
glEnable( GL_COLOR_MATERIAL ); // 啓用 材質顏色追蹤當前顏色

 

當需要改變場景中單個材質時,建議調用glColorMaterial();
當需要改變多個材質參數時,建議調用glMaterial*();
當不需要材質顏色追蹤當前顏色時,要記得要關閉它,以避免相應的開銷。

 

使材質顏色追蹤當前顏色 - 示例

 

程序截圖

 

 

 

源碼下載
CSharp_OpenGL_Color_Material.rar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章