ライトの位置、範囲、減衰

ライトの位置、範囲、減衰

位置、範囲、減衰プロパティは、ワールド空間でのライトの位置、ライトが放射する光が距離の増加に伴ってどのように変化するかを定義する。C++ で使うすべてのライト属性と同様、これらのプロパティはライトの D3DLIGHT9 構造体に含まれる。

位置

ライトの位置は、D3DLIGHT9 構造体の Position メンバに D3DVECTOR 構造体を使って指定する。x、y、z 座標はワールド空間にあると仮定する。ディレクショナル ライトは、位置プロパティを使わない唯一のライトである。

範囲

ライトの範囲プロパティは、オブジェクトが放射した光をシーン内のメッシュが受け取れなくなるまでの、ワールド空間での距離を決める。Range メンバには、ワールド空間でのライトの最大範囲を表す浮動小数点数値が含まれる。ディレクショナル ライトでは範囲プロパティは使わない。

減衰

減衰は、範囲プロパティで指定した最大距離に近づくにつれてライトの強度がどのように減少するかを制御する。ライトの減衰は、D3DLIGHT9 構造体の 3 つのメンバ Attenuation0Attenuation1Attenuation2 で指定する。これらのメンバには、ライトの減衰を制御する 0.0 ~ 無限大の浮動小数点数値が含まれる。アプリケーションによっては、Attenuation1 メンバを 1.0 に設定し、その他のメンバを 0.0 に設定することで、ライトの強度が 1 / D として変化するようにする。ここで、D は光源から頂点までの距離である。光源ではライトの強度が最大で、そこから離れるに従って 1 / (ライトの範囲) に減少する。通常、アプリケーションでは Attenuation0 を 0.0 に設定し、Attenuation1 を定数に設定し、Attenuation2 を 0.0 に設定する。

減衰値を組み合わせて、より複雑な減衰エフェクトを出すことができる。また、減衰値を通常の範囲外の値に設定して、さらに珍しい減衰エフェクトを出すことができる。ただし、負の減衰値は設定できない。「減衰とスポットライト係数」を参照すること。