光線佈置


若想為 3D 物件增加更多立體感,可以透過不同的光線佈置,最快的方式是使用 lights,這會讓 3D 物件的不同面有不同的明暗感:

佈置光線時,記得要在 draw 每次的呼叫範圍內;lights 名稱上是複數,這是因為它是由兩種光線佈置組合而成,也就是 ambientLight(128, 128, 128)directionalLight(128, 128, 128, 0, 0, -1),前者是環境光(來自四面八方的光線),後者是方向光(平行光線),在這邊 ambientLightdirectionalLight的三個參數分別代表 RGB,而 directionalLight 的後三個參數代表光線是射往哪個方向,(0, 0, -1) 表示光線是往 z 負方向。

例如,下例將環境光設為暗黃色,而方向光設為藍色,依滑鼠位置決定方向:

pointLight 是點光源,在下例中,pointLight 的前三個參數是 RGB,後三個參數是點光源的位置,你可以跟上例比較看看,因為是點光源,藍色光部份會比較集中:

點光源的光度衰減程度,可以藉由 lightFalloff 來控制,三個參數分別是 constantlinearquadratic,預設值分別是 1、0、0,計算公式為 1 / (constant + d * linear + ( d * d ) * quadratic)d 為距離。

說到要集中感,當然就是聚光燈了,這可以透過 spotLight 來設置,在下例中,spotLight 的前三個參數是 RGB,後三個參數是聚光燈的位置,接著三個參數代表光線是射往哪個方向,最後一個參數是聚光燈的開口角度:

因為可以設置不只一個光源,要多面打光當然是沒問題的:

如果要停用光線佈置,可以使用 noLights,名稱上是複數,代表呼叫後先前佈置的全部光線都會停用,若要重新開啟光線,就要逐一呼叫各個光線佈置函式。