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 でこれらの色を適用する方法の詳細については、「 Maths of Lighting (Direct3D 9)」を参照してください。
C++ アプリケーションでは、 D3DLIGHT9 構造体には、これらの色 (拡散、アンビエント、反射) の 3 つのメンバーが含まれています。それぞれが、出力される色を定義する D3DCOLORVALUE 構造体です。
システムの計算に最も大きい影響を与える色の種類は、拡散色です。 最も一般的な拡散色は白 (R:1.0 G:1.0 B:1.0) ですが、必要に応じて色を作成して必要な効果を実現できます。 たとえば、暖炉に赤い光を使ったり、信号を "進め" に設定するために緑の光を使ったりすることができます。
一般に、光の色コンポーネントは 0.0 ~ 1.0 (両端の値を含む) の値に設定しますが、必須ではありません。 たとえば、すべてのコンポーネントを 2.0 に設定し、"白より明るい" ライトを作成します。この種類の設定は、定数以外の減衰設定を使用する場合に特に便利です。
Direct3D ではライトに RGBA 値が使用されますが、アルファ カラー コンポーネントは使用されないことに注意してください。
通常、光には素材の色が使われます。 ただし、素材の色 (放射、環境、拡散、反射) が拡散または反射頂点色により上書きされることを指定できます。 これを行うには、 SetRenderState を 呼び出し、次の表に示すデバイス状態変数を設定します。
デバイス状態変数 | 説明 | Type | Default |
---|---|---|---|
D3DRS_AMBIENTMATERIALSOURCE | アンビエント マテリアルの色を取得する場所を定義します。 | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_DIFFUSEMATERIALSOURCE | 拡散マテリアルの色を取得する場所を定義します。 | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR1 |
D3DRS_SPECULARMATERIALSOURCE | 反射マテリアルの色を取得する場所を定義します。 | D3DMATERIALCOLORSOURCE | D3DMCS_COLOR2 |
D3DRS_EMISSIVEMATERIALSOURCE | 放射マテリアルの色を取得する場所を定義します。 | D3DMATERIALCOLORSOURCE | D3DMCS_MATERIAL |
D3DRS_COLORVERTEX | 頂点の色の使用を無効または有効にします。 | BOOL | true |
アルファ/透明度の値は、常に拡散色のアルファ チャネルからのみ取得されます。
霧の値は、常に反射色のアルファ チャネルからのみ取得されます。
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 メンバーには、ワールド空間内のライトの最大範囲を表す浮動小数点値が含まれています。 指向性ライトは範囲プロパティを使いません。
関連トピック