opengl學習筆記(六)

2021-10-19 12:38:16 字數 962 閱讀 1795

光的強度和離點光源的位置的平方成反比,並且為了使模型更加逼真,加入了常量因子,線性因子,指數因子,使其更加符合真實的效果。

與平行光模型不同的是,平行光的入射方向由點光源和表面位置決定,就像計算人的視線和表面一樣。並且考慮衰減和多個點光源的效果。

struct

attenuation;

//點光源的三個引數

我們如果想擁有多個點光源,就要設定對應的多個結構體。

vec4 calcpointlight

(int index, vec3 normal)

//index代表了第幾個點光源

除了平行光,如太陽,點光源,如燈泡,還有最後一種光源,成為聚光燈光源,如手電筒。

黑暗情況下,我們手電筒像黑暗處照射,我們可以看到光覆蓋的空間是呈錐形的。

聚光燈光源的特點:有方向,也就是手電筒對準的方向。光線衰減,和點光源一樣。角度有限,光覆蓋的範圍不是四面八方,而是以手電筒對準方向為中心,以一定角度的覆蓋空間。這些是區別於另外兩種光源的地方。

那麼我們如何來模擬呢?

struct spotlight : public pointlight

};

在點光源的基礎上,增加光源方向和截止角度。方向很好理解,不會像點光源一樣照射四面八方。但是聚光燈光源除了要隨距離衰減,還要隨距離中心的角度衰減。我們定義cutoff為cos值。當小於這個值時,不在聚光燈照射範圍內,當大於這個值時,認為在圓錐內。當等於時,我們認為正好處於邊界。我們想讓中心的光最強,邊界上的光剛好沒有,所以根據cos值到1和cutoff的百分比,縮放到0-1內,可以模擬出聚光燈光源的效果。

vec4 calcspotlight

(struct spotlight l, vec3 normal)

else

}

OpenGL學習筆記(六)變換的使用

version 330 core out vec4 vertexcolor out vec2 texturecoord layout location 3 in vec3 apos layout location 4 in vec3 acolor layout location 5 in vec2 ...

openGL學習筆記六 glew庫及使用

window預設支援到opengl1.3,後續也沒有更新,opengl並不是以api更新或者新的開發包方式更新功能,它使用了擴充套件方式獲取高版本新的功能。如執行擴充套件功能函式glarrayelementext 如下 char ext char glgetstring gl extensions ...

OpenGL學習筆記

我是一名ios開發者,opengl是乙個比較重要的技術。所以就此開啟我的菜鳥之路。opengl open graphics library 是乙個跨程式設計語 言 跨平台的程式設計圖形程式接 它將計算機的資源抽象稱為乙個個opengl的物件,對這些資源的操作抽象為乙個的opengl指令.direct...