OpenGL學習10 OpenGL光照

2021-06-27 16:53:55 字數 2597 閱讀 3177

在opengl模型中,除非乙個物體自己會發光,否則它將受到3中不同的光照射:環境光(ambient)、散射光(diffuse)和鏡面光(specular)。現實世界中,當然不存在這樣的光,但是,作為光抽象,這三種型別的光允許我們模擬和控制光照在物體表面上所產生的主要型別的效果。

1、環境光

環境光並不是來自任何特定的方向。它來自某個光源,但光線確實在房間或場景中四處反射,沒有方向可言。由環境所照射的物體所在所有方向的便面都是均勻照亮的。之前的例子都可以看作是被一種環境光所照射的,因為物體總是可見並均勻著色,與他們的旋轉或觀察角度無關。圖1顯示乙個受環境光照射的物體。我們可以把環境光看成一種全域性因素,由所有光源共同產生。在opengl中光照成員實際上模擬了環境中源自所有光源的散光。

圖1,來自《opengl超級寶典》

2、散射光

opengl的散射光具有方向性,來自於乙個特定的方向,他根據入射光線的角度在表面上均勻的反射開來。因此,如果光線直接指向物體表面,它看上去就更亮一些。如果光線是從乙個較大的角度照射到物體表面上,他看上去就顯得暗一些。散射光的的例子包括檯燈、蠟燭以及正午時照射在窗戶一側的白光。從本質上說,正是光源的散射成分長生了被光照物體表面的著色。圖2中,這個物體是被一種散射光源所照射。

圖2,來自《opengl超級寶典》

3、鏡面光和散射光一樣,鏡面光也具有很強的方向性,但它的反射角很銳利,只沿乙個特定的方向反射。高強度的鏡面光(實際上是現實世界的材料屬性)趨向於在它所照射的表面形成乙個亮點,稱為鏡面亮點。由於它的亮度方向性本質,取決於觀察者的位置,鏡面光甚至可能看不到。聚光燈和太陽都能產生很強的鏡面光。圖3為鏡面光例子。

圖3,來自《opengl超級寶典》

4、混合光沒有一種光源是純粹由上面所述的任何一種型別光組成。事實上,光源是由各種強度的不同型別的光組成的。例如,實驗室中的紅色雷射幾乎是由純粹的紅色鏡面光組成的,當它照射物體時,將會產生乙個強烈的亮點。但是,煙或則灰塵會導致雷射束有所發散,產生非常小的環境光成分,使房間的其他物體染上一層微微的紅色。如果光束極為耀眼的照射到乙個表面,將會產生非常小的散射成分,可以在它所照亮的表面看到。圖4為上述場景中每種光成分。

圖4,來自《opengl超級寶典》

5、新增光照a)啟用光照

告訴opengl使用光照計算,可以呼叫glenable函式,並用gl_lighting作為引數;

glenable(gl_lighting);

這個呼叫告訴opengl在確定場景中每個頂點的顏色時使用材料屬性和光照參照。但是如果沒有指定溫和材料屬性和光照引數,物體將會保持為黑暗的無光狀態。

b)設定背景發射光

opengl提供了乙個全域性光源,它至發射環境光(背景光)。這種全域性環境光是一種零成本的在opengl的光照計算的結果上新增乙個偏移量的方式。這種光很有用,例如,它可以照明沒有被光源直接照射的物體背面,如果光照場景看上去太暗,可以調節這種全域性環境光。下面**為設定背景環境光:

glfloat ambientlight = ;

gllightmodelfv(gl_light_model_ambient, ambientlight);

下面為光照的例子:

void renderscene(void)

void renderinit()

;//環境光照

glenable(gl_depth_test); // 使能深度測試

glenable(gl_cull_face); // 使能物體背面不渲染

glfrontface(gl_ccw); // 正面環繞方式,逆時針

glenable(gl_lighting); // 使能光照

gllightmodelfv(gl_light_model_ambient,ambientlight);//設定背景光照

glenable(gl_color_material);

glcolormaterial(gl_front,gl_ambient_and_diffuse);

// 背景顏色

glclearcolor(0.0f, 0.0f, 0.0f,1.0f);

}

執行程式,結果如圖5;

圖4

OpenGL學習筆記之一 什麼是OpenGL

opengl到底是什麼?制定並維護的規範 specification opengl規範嚴格規定了每個函式該如何執行,以及它們的輸出值。至於內部具體每個函式是如何實現 implement 的,將由opengl庫的開發者自行決定 譯註 這裡開發者是指編寫opengl庫的人 因為opengl規範並沒有規定...

openg離線包 OpenGL離線渲染和緩衝區物件

理論 輸入 影象,點,線。輸出 影象 實現方案 從一般到特殊 1.不支援fbo 主要介紹pc上,移動裝置如果不支援fbo要實現離線渲染那就實在沒轍了。gldrawbuffer gl back glreadbuffer gl back 設定讀寫時後快取區。一般pc都支援雙緩衝機制,如果沒有gl bac...

OpenGL學習(一) OpenGL簡介

opengl是乙個開放式的 與硬體無關的圖形軟體包。opengl是乙個專業的 功能強大 呼叫方便的底層三圍圖形函式庫。opengl是乙個圖形與硬體的介面。建模變換 著色光照處理和材質設定 位圖顯示 影象增強和紋理對映 雙快取動畫 根據基本圖形單元 點 線 多邊形 影象和點陣圖 建立景物模型,並且對所...