衰減和焦點因數 (Direct3D 9)
全域照明方程式的擴散和聚光燈型光源元件內含描述光衰減及焦點圓錐的字詞。 以下將說明這些字詞。
衰減
光線的衰減取決於光線的類型以及光線與頂點位置之間的距離。 若要計算衰減,請使用下列其中一個方程式。
Atten = 1/ ( att0i + att1i * d + att2i * dー)
其中:
參數 | 預設值 | 類型 | 描述 | 範圍 |
---|---|---|---|---|
att0i | 0.0 | FLOAT | 定值衰減因數 | 0 至 +infinity |
att1i | 0.0 | FLOAT | 線性衰減因數 | 0 至 +infinity |
att2i | 0.0 | FLOAT | 二次方衰減因數 | 0 至 +infinity |
d | N/A | FLOAT | 頂點位置至光源位置的距離 | N/A |
- 若光線為定向光線,則 Atten = 1。
- 若光線與頂點之間的距離超過光線範圍,則 Atten = 0。
att0、att1、att2 值是由 D3DLIGHT9的衰減0、衰減1 和衰減2 成員所指定。
光線與頂點位置之間的距離一律為正值。
d = |Ldir |
其中:
參數 | 預設值 | 類型 | 描述 |
---|---|---|---|
Ldir | N/A | D3DVECTOR | 從頂點位置至光線位置的方向向量 |
如果 d 大於光線的範圍,也就是 D3DLIGHT9 結構的 Range 成員,Direct3D 不會進行進一步的衰減計算,而且不會對光線套用任何效果到頂點。
衰減定值作為公式中的係數,您可對其進行簡單的調整來產生多種出現衰減曲線。 您可將 Attenuation1 設為 1.0,以建立不會衰減但仍受限於範圍的光線,或您可以嘗試使用不同的值,以取得各種衰減效果。
衰減的光線範圍上限不是 0.0。 若要防止光線在光線範圍時突然出現,應用程式可以增加光線範圍。 或者,應用程式可以設定衰減定值,使衰減因數的光線範圍接近 0.0。 衰減值會乘以光線色彩的紅、綠及藍元件,以將光線的強度擴充作為光線傳輸至頂點之距離的因數。
焦點因數
以下方程式指定焦點因數。
參數 | 預設值 | 類型 | 描述 | 範圍 |
---|---|---|---|---|
羅亞斯 | N/A | FLOAT | spotlight i 的 cosine(angle) | N/A |
phii | 0.0 | FLOAT | 焦點 i 在弧度的半影角度 | [thetai, pi) |
thetai | 0.0 | FLOAT | 焦點 i 在弧度的本影角度 | [0, pi) |
falloff | 0.0 | FLOAT | Falloff 因數 | (-infinity, +infinity) |
其中:
rho = norm(Ldcs).norm(Ldir)
以及:
參數 | 預設值 | 類型 | 描述 |
---|---|---|---|
Ldcs | N/A | D3DVECTOR | 相機空間光線方向的負值 |
Ldir | N/A | D3DVECTOR | 從頂點位置至光線位置的方向向量 |
計算光線衰減之後,Direct3D 也會在適用的情況下考慮焦點效果、光線從表面反映的角度,以及目前材質的反射,以計算該頂點的擴散和反射元件。 如需詳細資訊,請參閱 SpotLight。
相關主題