環境光源

環境光線會為場景提供固定的光線。 由於環境光線與其他任何光線係數 (頂點法線、光線方向、光線位置、範圍和衰減) 無關,因此,它會以相同的方式照亮所有物件。 環境光線在所有方向皆為固定,而且會使用相同的色彩為物件的所有像素著色。 環境光線計算起來相當快,卻會讓物件看起來平板且不真實。

環境光線是最快速的光線類型,但它會產生最不真實的結果。 Direct3D 包含單一全域環境光線屬性,您可以在不建立任何光線的情況下使用。 或者,您可以設定任何光線物件以提供環境光線。

場景的環境光線是由下列方程式所描述。

環境光線 = Cₐ*[Gₐ + sum(Atteni*Spoti*Lai)]

其中:

參數 預設值 類型 描述
Cₐ (0,0,0,0) D3DCOLORVALUE 材質環境色彩
Gₐ (0,0,0,0) D3DCOLORVALUE 全域環境色彩
Atteni (0,0,0,0) D3DCOLORVALUE 第 i 盞燈的光線衰減。 請參閱衰減和聚光光線係數
Spoti (0,0,0,0) D3DVECTOR 第 i 盞燈的聚光光線係數。 請參閱衰減和聚光光線係數
總和 N/A N/A 環境光線的總和
Lai (0,0,0,0) D3DVECTOR 第 i 盞燈的光線環境色彩

 

Cₐ 的值可以是:

  • 頂點色彩 1,如果 AMBIENTMATERIALSOURCE = D3DMCS_COLOR1,而頂點宣告中會提供第一個頂點色彩。
  • 頂點色彩 2,如果 AMBIENTMATERIALSOURCE = D3DMCS_COLOR2,則會在頂點宣告中提供第二個頂點色彩。
  • 材質環境色彩。

註:如果使用 AMBIENTMATERIALSOURCE 選項,且未提供頂點色彩,則使用材質環境色彩。

 

若要使用材質環境色彩,請使用 SetMaterial,如下列範例程式代碼所示。

Gₐ 是全域環境色彩。 它是使用 SetRenderState 設定的 (D3DRS_AMBIENT)。 Direct3D 場景中有一個全域環境色彩。 此參數與 Direct3D 光線物件無關。

Lai 是場景中第 i 盞燈的環境色彩。 每個 Direct3D 光線都有一組屬性,其中一個是環境色彩。 詞彙 sum(Lai) 是場景中所有環境色彩的總和。

範例

在此範例中,使用場景環境光線和材質環境色彩為物件著色。

#define GRAY_COLOR  0x00bfbfbf

Ambient.r = 0.75f;
Ambient.g = 0.0f;
Ambient.b = 0.0f;
Ambient.a = 0.0f;

根據方程式,所產生的物件頂點色彩是由材質色彩和光線色彩組合而成。

下方兩張圖片顯示了材質色彩 (灰色) 和光線色彩 (亮紅色)。

illustration of a gray sphereillustration of a red sphere

產生的場景會如下圖所示。 場景中的唯一一個物件為球體。 環境光線會以相同的色彩照亮所有物件頂點。 它與頂點法線或光線方向無關。 正因如此,由於物件表面四周的著色沒有任何差異,球體看起來會與 2D 圓形相似。

illustration of a sphere with ambient lighting

若要為物件提供更逼真的外觀,除了環境光線之外,也應套用擴散或反射光線。

光線數學