次の方法で共有


Light プロパティ (Direct3D 9)

Light プロパティは、光源の種類と色を表します。 使用するライトの種類に応じて、ライトは減衰と範囲、またはスポットライト効果のプロパティを持つことができます。 ただし、すべての種類のライトですべてのプロパティが使用されるわけではありません。 Direct3D では、D3DLIGHT9 構造を使用して、すべての種類の光源のライト プロパティに関する情報を伝達します。 このセクションには、すべてのライト プロパティに関する情報が含まれています。 情報は次のグループに分かれています。

位置、範囲、および減衰のプロパティは、ワールド空間におけるライトの位置と、それを放射する光が距離を越えてどのように動作するかを定義します。 C++ で使用するすべてのライト プロパティと同様に、これらはライトの D3DLIGHT9 構造体に含まれています。

ライト減衰

減衰は、範囲プロパティで指定された最大距離に向かってライトの強度を下げる方法を制御します。 3 つの 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 のライトは、システムの照明計算で個別に使用される 3 つの色 (拡散色、アンビエント カラー、反射色) を出力します。 それぞれ Direct3D 照明モジュールによって組み込まれ、現在のマテリアルから対応するオブジェクトと対話して、レンダリングに使用される最終的な色が生成されます。 拡散色は、現在のマテリアルの拡散反射率プロパティ、マテリアルの反射反射率プロパティを持つ反射色などと相互作用します。 Direct3D でこれらの色を適用する方法の詳細については、照明の数学 (Direct3D 9)を参照してください。

C++ アプリケーションでは、D3DLIGHT9 構造体には、これらの色の 3 つのメンバー (拡散、アンビエント、反射) が含まれています。それぞれが、出力される色を定義する D3DCOLORVALUE 構造体です。

システムの計算に最も頻繁に適用される色の種類は、拡散色です。 最も一般的な拡散色は白 (R:1.0 G:1.0 B:1.0) ですが、必要に応じて色を作成して目的の効果を得ることができます。 たとえば、暖炉に赤いライトを使用したり、信号が "Go" に設定されている場合に緑色のライトを使用したりできます。

一般に、明るい色のコンポーネントを 0.0 ~ 1.0 の値に設定しますが、これは必須ではありません。 たとえば、すべてのコンポーネントを 2.0 に設定し、"白よりも明るい" ライトを作成できます。この種類の設定は、定数以外の減衰設定を使用する場合に特に便利です。

Direct3D ではライトに RGBA 値が使用されますが、アルファ カラー コンポーネントは使用されないことに注意してください。

通常、照明には素材の色が使用されます。 ただし、マテリアルの色 (放射、アンビエント、拡散、および反射) を拡散または反射頂点の色でオーバーライドするように指定できます。 これを行うには、SetRenderState を呼び出し、次の表に示すデバイス状態変数を設定します。

デバイス状態変数 意味 種類 デフォルト
D3DRS_AMBIENTMATERIALSOURCE アンビエント マテリアルの色を取得する場所を定義します。 D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE 拡散マテリアルの色を取得する場所を定義します。 D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE 反射マテリアルの色を取得する場所を定義します。 D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE 放射マテリアルの色を取得する場所を定義します。 D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX 頂点の色の使用を無効または有効にします。 BOOL

 

アルファ/透明度の値は、常に拡散カラーのアルファ チャネルからのみ取得されます。

霧の値は常に、反射カラーのアルファ チャネルからのみ取得されます。

D3DMATERIALCOLORSOURCEには、次の値を指定できます。

  • D3DMCS_MATERIAL - 素材の色がソースとして使用されます。
  • D3DMCS_COLOR1 - 拡散頂点の色がソースとして使用されます。
  • D3DMCS_COLOR2 - 反射頂点の色がソースとして使用されます。

ライトの方向

ライトの direction プロパティは、オブジェクトによって放出される光がワールド空間で移動する方向を決定します。 方向は方向ライトとスポットライトでのみ使用され、ベクトルで記述されます。

ライトの D3DLIGHT9 構造の Direction メンバーにライトの方向を設定します。 方向メンバーは D3DVECTOR型です。 方向ベクトルは、シーン内のライトの位置に関係なく、論理原点からの距離として記述されます。 したがって、正の z 軸に沿ってシーンを真っ直ぐにポイントするスポットライトは、その位置が定義されている場所に関係なく、<0,0,1> の方向ベクトルを持っています。 同様に、<方向が 0,-1,0>の方向光を使用して、シーン上で直接照らされる太陽光をシミュレートできます。 明らかに、座標軸に沿って輝くライトを作成する必要はありません。値を組み合わせて、より興味深い角度で輝くライトを作成できます。

手記

ライトの方向ベクトルを正規化する必要はありませんが、常に大きさがあることを確認してください。 つまり、<0,0,0> 方向ベクトルを使用しないでください。

 

ライトの位置

ライト位置は、D3DLIGHT9 構造体の Position メンバー内の D3DVECTOR 構造を使用して記述される。 x 座標、y 座標、z 座標はワールド空間内にあると見なされます。 方向ライトは、position プロパティを使用しないライトの唯一の種類です。

明るい範囲

ライトの範囲プロパティは、シーン内のメッシュがそのオブジェクトによって放出された光を受け取らなくなったワールド空間内の距離を決定します。 Range メンバーには、ワールド空間におけるライトの最大範囲を表す浮動小数点値が含まれています。 方向ライトでは、範囲プロパティは使用されません。

ライトとマテリアル