WebGL 平行光和環境光

2021-06-07 17:12:16 字數 1267 閱讀 8811

馮氏反射模型引申了這個四步走的光照系統,首先所有的光線都有以下兩個屬性:

發生漫反射光的rgb值。

發生鏡面反射光的rgb值。

其次所有材質都有以下四個屬性

反射的環境光rgb值

反射的漫反射光rgb值

反射的鏡面反射光rgb值

物體的反光度,它決定了鏡面反射的細節

對於場景中的每一點,它的顏色都是由照射光的顏色、材質本身的顏色和光照效果混合起來的。所以,根據馮氏反射模型,為了解決場景中的光照,每條光線我們都需要知道兩個屬性,每個物體表面上的點都需要4個屬性。環境光應當是自然的,而不是特定的光線,但我們依然需要找到一種方法來儲存整個場景中的環境光;有時可以用最簡單的方法,就是為每個光源設定乙個環境等級,然後把它們都放到乙個單一項中。

漫反射光中從乙個方向上來的光可以簡單分為兩種。一種是簡單的平行光,來自於同乙個方向的平行光束穿越整個場景。另一種是點光源,**於場景內的乙個點發出的光線,也就是說每個地方的光線角度都不一樣。

對於簡單的平行光來說,當光線打到物體表面的頂點上(圖中的a點和b點),入射角永遠都是相同的。想一下太陽光,光線都是平行的。

相反,對於點光源,a點和b點的入射角是不同的。這也就意味著對於點光源,我們需要為每個頂點都計算出各自不同的光線入射角度;然而對於平行光,我們只需要使用乙個固定的角度。

我們同樣知道每個頂點上的光照效果取決於光線的入射角度,所以我們需要找到乙個可以代表物體表面朝向的東西。對於3d幾何體,最好的辦法就是指定頂點所在表面的法線向量,這個向量允許我們用3組數字表示出物體表面的朝向。

在二維世界中我們可以同樣使用切線來達到這一目的,但是在三維世界中,切線的垂線是指向兩個方向的,所以我們要用兩個向量來表示它,而表示法線我們使用用乙個向量就可以了。

我們指定了頂點平面的法線向量,還有用來表示光照方向的向量,我們還需要計算出物體表面漫反**多少光。這與這兩個向量之間角度的余弦值成正比。

幸運的是,計算這兩個向量夾角的余弦值並不是什麼複雜的計算,如果它們兩者的長度都是1,那我們只要使用這兩個向量的點積即可。更幸運的是,點積運算是內置於著色器的,我們只要使用這個叫做dot的函式即可。

WebGL之旅(十三)平行光和漫反射

同色立方體 xu.lidong qq.com var gl srcvs attribute vec4 a position attribute vec4 a color uniform mat4 u mvpmatrix varying vec4 v color void main var gl sr...

16 光照(平行光)

1.基本概念 著色 根據光照條件,重建 物體表面明暗不一效果 的過程 光源型別 1 平行光 沒有衰減的平行的光線,類似於太陽光。用乙個方向和乙個顏色定義。2 點光源 理想化為質點點光源,類似於人造燈泡,有光線衰減。用光源位置和顏色定義。3 環境光 用於模擬真實世界中的非直射光 由光源發出經過牆壁或其...

irrlicht中設定平行光

使用scene manager的addlightscenenode,預設加入的是點光源,設定平行光,需要自己設定slight,將其type設定為elt directional,這都好說,問題是光的方向,被誤導了一下,因為ilightscenenode本身沒有setdirection之類的方法,而sl...