環境光源 (Direct3D 9)
環境光線為場景提供定值光線。 它同等地照亮所有物件端點,因為其不取決於任何其他照明因素,例如頂點標準、光源方向、光源位置、範圍或衰減。 這是最快速的光源類型,但會產生最不實際的結果。 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 個光線的光衰減。 請參閱 衰減和焦點因數 (Direct3D 9) 。 |
Spoti | (0,0,0,0) | D3DVECTOR | 第 i 個光線的聚光燈係數。 請參閱 衰減和焦點因數 (Direct3D 9) 。 |
Sum | N/A | N/A | 環境光線的加總 |
Lai | (0,0,0,0) | D3DVECTOR | 第 i 個光線的環境光線色彩 |
Cₐ 的值為︰
- 頂點 color1,如果 AMBIENTMATERIALSOURCE = D3DMCS_COLOR1,而且頂點宣告中會提供第一個頂點色彩。
- 頂點色彩2,如果 AMBIENTMATERIALSOURCE = D3DMCS_COLOR2,則會在頂點宣告中提供第二個頂點色彩。
- 材料環境色彩。
注意
如果使用了 AMBIENTMATERIALSOURCE 選項,而且未提供頂點色彩,則會使用材質環境色彩。
若要使用材料環境色彩,請使用下方範例程式碼所示的 SetMaterial。
Gₐ 是全域環境色彩。 它是使用 SetRenderState (D3DRS_AMBIENT) 來設定。 Direct3D 場景中有一個全域環境色彩。 此參數與 Direct3D 光線物件無關聯。
Lai 是場景中第 i 個光線的環境色彩。 每個 Direct3D 光線都有一組屬性,其中一項是環境色彩。 sum(Lai) 這項字詞是場景中所有環境色彩的加總。
範例
在此範例中,物件使用場景環境光線和材料環境色彩上色。
#define GRAY_COLOR 0x00bfbfbf
// create material
D3DMATERIAL9 mtrl;
ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.Ambient.r = 0.75f;
mtrl.Ambient.g = 0.0f;
mtrl.Ambient.b = 0.0f;
mtrl.Ambient.a = 0.0f;
m_pd3dDevice->SetMaterial(&mtrl);
m_pd3dDevice->SetRenderState(D3DRS_AMBIENT, GRAY_COLOR);
根據方程式,為物件端點產生的色彩是材質色彩和淺色的組合。
下方兩個圖例顯示材質色彩 (灰色),以及淺色 (鮮紅)。
下圖顯示產生的場景。 場景中唯一的物件為球體。 環境光線使用相同色彩照亮所有物件端點。 其不取決於頂點標準或光線方向。 如此一來,球體看起來像是 2D 圓形,因為物件表面周圍的陰影並無差別。
若要讓物件看起來更逼真,請在環境光線之外套用光源擴散或反射光源。
相關主題