Light 屬性 (Direct3D 9)
淺色屬性描述光源的類型和色彩。 根據使用的光線類型,光線可有衰減和範圍或聚光燈特效屬性。 但是,並非所有類型的光線都會使用所有屬性。 Direct3D 會使用 D3DLIGHT9 結構,針對所有類型的光源攜帶光線屬性的相關資訊。 本節包含所有光線屬性的資訊。 資訊分成下列群組。
位置、範圍及衰減屬性定義現世空間裡的照明位置,並且定義如何經由距離發出光線的行為。 如同您在 C++ 中使用的所有光線屬性,這些屬性包含在光線的 D3DLIGHT9 結構中。
光線衰減
衰減控制光線強度如何隨著範圍屬性指定的最大距離減少。 三個 D3DLIGHT9 結構成員代表光線衰減:衰減0、衰減1 和衰減2。 這些成員包含從 0.0 到無限大的浮點值,控制光線的衰減。 某些應用程式設定 Attenuation1 成員至 1.0,其他成員至 0.0,導致光線強度變更為 1 / D,其中 D 是光源到頂點的距離。 最大光線強度在於來源,在光線的距離減至 1 (光線範圍)。 一般而言,應用程式會將衰減0 設定為 0.0、衰減1 設定為常數值,並將衰減2 設定為 0.0。
您可以合併衰減值,以獲得更複雜的衰減效果。 或者可將這些值設為一般範圍以外的值,以建立更怪異的衰減效果。 但不接受負衰減值。 請參閱 Direct3D 9 (衰減和焦點因數) 。
淺色
在 Direct3D 光線發出三種顏色,其在系統照明運算中各自獨立運用︰ 擴散色彩、環境色彩及反射色彩。 每個由 Direct3D 結合在一起的照明模組,與目前材質對應互動,以製作轉譯中使用的最後色彩。 擴散色彩與目前材質的擴散反射率屬性互動,反射色彩與材質反射的反射率屬性互動,依此類推。 如需 Direct3D 如何套用這些色彩的詳細資料,請參閱 光源的數學 (Direct3D 9) 。
在 C++ 應用程式中, D3DLIGHT9 結構包含這些色彩的三個成員 - 擴散、環境及反射 - 每一個都是 D3DCOLORVALUE 結構,可定義所發出的色彩。
最常運用系統運算的色彩類型是擴散色彩。 最常見的擴散色彩為白色 (R:1.0 G:1.0 B:1.0),但是您可以依需求建立色彩來達到所需的效果。 例如,壁爐可以使用紅光,或者也可以將交通號誌的綠燈設定為「執行」(Go)。
一般而言,您將淺色元件值設定為 0.0 到 1.0 (含) 之間,但這不是必需。 例如,您可以將所有元件設定為 2.0,建立「比白色更亮」的光線。當您使用常數以外的衰減設定時,這種類型的設定特別有用。
請注意,雖然 Direct3D 會針對光線使用 RGBA 值,但不會使用 Alpha 色彩元件。
通常會使用照明材質色彩。 不過,您可以指定材質發色、環境、擴散及反射是由擴散或反射頂點色彩覆寫。 這是藉由呼叫 SetRenderState 並設定下表所列的裝置狀態變數來完成。
裝置狀態變數 | 意義 | 類型 | 預設 |
---|---|---|---|
D3DRS_AMBIENTMATERIALSOURCE | 定義要取得環境材質色彩的位置。 | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_DIFFUSEMATERIALSOURCE | 定義要在哪裡取得擴散材質色彩。 | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR1 |
D3DRS_SPECULARMATERIALSOURCE | 定義要取得反射材質色彩的位置。 | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR2 |
D3DRS_EMISSIVEMATERIALSOURCE | 定義要在哪裡取得放射材質色彩。 | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_COLORVERTEX | 停用或使用頂點色彩。 | BOOL | true |
Alpha/透明度值永遠只來自擴散色彩 alpha 色板。
霧值永遠只來自反射色彩 alpha 色板。
D3DMATERIALCOLORSOURCE 可以有下列值。
- D3DMCS_MATERIAL - 材質色彩會當做來源使用。
- D3DMCS_COLOR1 - 擴散頂點色彩會當做來源使用。
- D3DMCS_COLOR2 - 反射頂點色彩會當做來源使用。
光方向
光方向屬性決定了移動物件在自然空間發出的光方向。 方向只由方向燈和聚光燈使用,而且只用向量描述。
在光線 D3DLIGHT9 結構的 Direction 成員中設定光線方向。 方向成員的類型為 D3DVECTOR。 無論場景中的光線位置為何,從邏輯原點描述方向向量為距離。 因此,只要直接將聚光燈隨正 z 軸指向場景,不論其位置定義為何,均具有 <0,0,1> 方向向量。 同樣地,您可以透過使用的方向燈 (方向為 <0,-1,0>) 模擬陽光直接照射場景。 顯然,您不需要建立沿著座標軸亮色的光線;您可以混合和比對值,以建立更有趣角度的光線。
注意
雖然您不需要將光線方向向量正常化,您隨時都確定它的級數。 換言之,請不要使用 <0,0,0> 方向向量。
光線位置
在D3DLIGHT9結構的 Position 成員中使用D3DVECTOR結構描述光線位置。 x-、y 和 z 座標假設在世界空間中。 方向燈是唯一不使用位置屬性的光線類型。
光線範圍
光線範圍屬性決定自然空間中的距離,而場景中網狀結構在此距離不會再接收該物件發出的光線。 Range 成員包含浮點值,代表世界空間中光線的最大範圍。 方向燈不使用範圍屬性。
相關主題