Microsoft DirectX 8.0 (C++) |
位置座標、範囲、および減衰プロパティは、ワールド空間でのライトの位置座標、およびライトが放射する光が距離の増加に伴ってどのように変化するかを定義する。C++ で使用するすべてのライト プロパティと同様、これらのプロパティはライトの D3DLIGHT8 構造体に含まれる。
位置座標
ライトの位置座標は、D3DLIGHT8 構造体の Position メンバに D3DVECTOR 構造体を使用して指定する。x、y、z 座標はワールド空間にあると仮定する。ディレクショナル ライトは、位置座標プロパティを使用しない唯一のライトである。
範囲
ライトの範囲プロパティは、オブジェクトが放射した光をシーン内のメッシュが受け取れなくなるまでの、ワールド空間での距離を決める。Range メンバには、ワールド空間でのライトの最大範囲を表す浮動小数点値が含まれる。ディレクショナル ライトでは範囲プロパティは使用しない。
減衰
減衰は、範囲プロパティで指定した最大距離に近づくにつれてライトの強度がどのように減少するかを制御する。ライトの減衰は、3 つの D3DLIGHT8 構造体のAttenuation0、Attenuation1、および Attenuation2 メンバで表す。これらのメンバには、ライトの減衰を制御する 0.0 〜 無限大の浮動小数点値が含まれる。アプリケーションによっては、Attenuation1 メンバを 1.0 に設定し、その他のメンバを 0.0 に設定することで、ライトの強度が 1 / D として変化するようにする。ここで、D は光源から頂点までの距離である。光源ではライトの強度が最大で、そこから離れるに従って 1 / (ライトの範囲) に減少する。通常、アプリケーションでは Attenuation0 を 0.0 に設定し、Attenuation1 を定数に設定し、Attenuation2 を 0.0 に設定する。
減衰値を組み合わせて、より複雑な減衰エフェクトを出すことができる。また、減衰値を通常の範囲外の値に設定して、さらに珍しい減衰エフェクトを出すことができる。たとえば、負の減衰値を設定すると、距離が増加するに従ってライトが明るくなる。
Microsoft® Direct3D® で減衰の計算に使用する数学モデルの詳細については、「距離の増加によるライトの減衰」を参照すること。範囲プロパティと同様、ディレクショナル ライトでは減衰プロパティは使用しない。