要讓一個 3D 的場景更為逼真,除了材質之外,最重要的就是適當的光線了。
光線到達物體時,會因為物體的形狀反射部分的光線回來,所以才會有曲面的效果,並且依照材質的反射率不同,反射回來光線也會有變化。
主要的光源大致上分為三種:
最簡單的方式就是將物體的顏色跟環境光的顏色做分量相乘。
垂直於表面的向量,我們稱做法向量。當平行光水平照射的時候,光的強度會越強,如果不平行的話,則是依照入射角衰減,而垂直於平行光的亮度會最小。
我們可以用一個公式表達
事實上這就是朗伯餘弦定理。
計算平行光最重要的事情是找出頂點的法向量,這在多邊形或是不規則的形狀時,需要不少的運算,用 webGL 實現需要非常多程式碼。不過有 three.js
的幫忙我們可以很簡單就套用光源。
跟平行光唯一的差別在於我們需要計算點光源跟頂點的位置來決定強度。
這兩天的介紹,說明了光源以及透視轉換的原理,不過並沒有提到在 webGL 中是如何實現的。如果對實作有興趣的話,可以參考 learning opengl 這篇文章,雖然裡頭的內容是講 openGL,不過實現方式基本上都是相同的。
有了投影、光源基礎後,明天我們會開始介紹 three.js
以及基本的 API。