共用方式為


淺色屬性 (Direct3D 9)

淺色屬性描述光源的類型和色彩。 視所使用的光線類型而定,光線可以具有衰減和範圍的屬性,或聚光燈效果的屬性。 但是,並非所有類型的燈光都會使用所有屬性。 Direct3D 會使用 D3DLIGHT9 結構來攜帶所有類型的光源的光線屬性相關信息。 本節包含所有光線屬性的資訊。 資訊分成下列群組。

位置、範圍和衰減屬性會定義光線在世界空間中的位置,以及其發出光線在距離上的行為。 如同您在C++中使用的所有光線屬性,這些屬性包含在光線的 D3DLIGHT9 結構中。

光衰減

衰減會控制光線強度如何降低到 range 屬性所指定的最大距離。 三個 D3DLIGHT9 結構成員代表光衰減:衰減0、衰減1 和衰減2。 這些成員包含從 0.0 到無限範圍的浮點值,控制光線的衰減。 有些應用程式會將衰減1 成員設定為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 色彩元件。

通常材質色彩用於光源。 不過,您可以指定由擴散或反射頂點色彩覆寫材質色彩-emissive、環境、擴散和反射。 這是藉由呼叫 SetRenderState 並設定下表所列的裝置狀態變數來完成。

裝置狀態變數 意義 類型 違約
D3DRS_AMBIENTMATERIALSOURCE 定義要取得環境材質色彩的位置。 D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE 定義要取得擴散材質色彩的位置。 D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE 定義要取得反射材質色彩的位置。 D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE 定義要取得反射材質色彩的位置。 D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX 停用或使用頂點色彩。 BOOL

 

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 座標假設位於世界空間中。 方向燈是唯一不使用position屬性的光線類型。

淺色範圍

光線的範圍屬性會決定世界空間中的距離,場景中的網格不再接收該對象發出的光線。 Range 成員包含浮點值,代表世界空間中光線的最大範圍。 方向燈不會使用 range 屬性。

燈和材質