Platform SDK: DirectX

ライトの位置座標、範囲、および減衰

[C++]

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

位置座標

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

範囲

ライトの範囲プロパティは、オブジェクトが放射した光をシーン内のメッシュが受け取れなくなるまでの、ワールド空間での距離を決める。dvRange メンバには、ワールド空間でのライトの最大範囲を表す浮動小数点値が含まれる。ほとんどのアプリケーションでは、この範囲を D3d.h に定義されている最大値 D3DLIGHT_RANGE_MAX に設定する。ディレクショナル ライトでは範囲プロパティは使用しない。

減衰

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

減衰値を組み合わせて、より複雑な減衰エフェクトを出すことができる。また、減衰値を通常の範囲外の値に設定して、さらに珍しい減衰エフェクトを出すことができる。たとえば、負の減衰値を設定すると、距離が増加するに従ってライトが明るくなる。

Direct3D で減衰の計算に使用する数学モデルの詳細については、「距離の増加によるライトの減衰」を参照すること。範囲プロパティと同様、ディレクショナル ライトでは減衰プロパティは使用しない。

[Visual Basic]

D3DLIGHT7 型には、Visual Basic アプリケーションでライトの位置座標、範囲、および減衰プロパティを定義するために使用するメンバが含まれる。これらのプロパティは、ワールド空間でのライトの位置座標と、ライトが放射する光が距離の増加に伴ってどのように変化するかを定義する。

位置座標

ライトの位置座標は、D3DLIGHT7 型の position メンバに D3DVECTOR 型を使用して記述する。x、y、z 座標はワールド空間にあると仮定する。ディレクショナル ライトは、位置座標プロパティを使用しない唯一のライトである。

範囲

ライトの範囲プロパティは、オブジェクトが放射した光をシーン内のメッシュが受け取れなくなるまでの、ワールド空間での距離を決める。range メンバには、ワールド空間でのライトの最大範囲を表す浮動小数点値が含まれる。ほとんどのアプリケーションでは、この範囲を最大値 (18.446+e18) に設定する。ディレクショナル ライトでは範囲プロパティは使用しない。

減衰

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

減衰値を組み合わせて、より複雑な減衰エフェクトを出すことができる。また、減衰値を通常の範囲外の値に設定して、さらに珍しい減衰エフェクトを出すことができる。たとえば、負の減衰値を設定すると、距離が増加するに従ってライトが明るくなる。

Direct3D で減衰の計算に使用する数学モデルの詳細については、「距離の増加によるライトの減衰」を参照すること。範囲プロパティと同様、ディレクショナル ライトでは減衰プロパティは使用しない。