アンビエント照明 (Direct3D 9)
環境光は、シーンに一定の照明を生成します。 頂点法線、光の方向、光の位置、減衰などの他の照明要素に依存していないため、すべてのオブジェクト頂点を同じように照らします。 それは照明の最速のタイプですが、それは最も現実的な結果を生成します。 Direct3D には、ライトを作成せずに使用できる 1 つのグローバル環境光プロパティがあります。 または、任意のライト オブジェクトを設定して、環境光を実現することもできます。 シーンの環境光は、次の式で表されます。
Ambient Lighting = Cₐ*[Gₐ + sum(Atteni*Spoti*Lai)]
各値の説明:
パラメーター | 既定値 | 型 | 説明 |
---|---|---|---|
Cₐ | (0,0,0,0) | D3DCOLORVALUE | マテリアルのアンビエント色 |
Gₐ | (0,0,0,0) | D3DCOLORVALUE | グローバル アンビエント色 |
Atteni | (0,0,0,0) | D3DCOLORVALUE | i 番目のライトの減衰。 「減衰とスポットライト係数 (Direct3D 9)」を参照してください。 |
Spoti | (0,0,0,0) | D3DVECTOR | i 番目のライトのスポットライト係数。 「減衰とスポットライト係数 (Direct3D 9)」を参照してください。 |
Sum | 該当なし | 該当なし | 環境光の合計 |
Lai | (0,0,0,0) | D3DVECTOR | i 番目のライトのアンビエント色 |
Cₐ の値は、次のいずれかになります。
- AMBIENTMATERIALSOURCE = D3DMCS_COLOR1 で、1 つ目の頂点色が頂点の宣言で指定されている場合は、頂点色 1。
- AMBIENTMATERIALSOURCE = D3DMCS_COLOR2 で、2 つ目の頂点色が頂点の宣言で指定されている場合は、頂点色 2。
- マテリアルのアンビエント色。
Note
いずれかの AMBIENTMATERIALSOURCE オプションを使用し、頂点の色が指定されていない場合は、マテリアルのアンビエント カラーが使用されます。
マテリアルのアンビエント色を使用するには、下記のコード例に示すように、SetMaterial を使用します。
Gₐ は、グローバル アンビエント色です。 これは SetRenderState(D3DRS_AMBIENT) を使用して設定します。 Direct3D のシーンには、グローバル アンビエント色が 1 つあります。 このパラメーターは、Direct3D のライト オブジェクトには対応していません。
Lai は、シーンの i 番目のアンビエント色です。 各 Direct3D のライトには一連のプロパティがあり、その 1 つがアンビエント色です。 sum(Lai) の項は、シーン内のすべてのアンビエント色の合計です。
例
この例では、オブジェクトの色は、シーンの環境光と素材のアンビエント色を使用しています。
#define GRAY_COLOR 0x00bfbfbf
// create material
D3DMATERIAL9 mtrl;
ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.Ambient.r = 0.75f;
mtrl.Ambient.g = 0.0f;
mtrl.Ambient.b = 0.0f;
mtrl.Ambient.a = 0.0f;
m_pd3dDevice->SetMaterial(&mtrl);
m_pd3dDevice->SetRenderState(D3DRS_AMBIENT, GRAY_COLOR);
この方程式では、生成されるオブジェクトの頂点の色は、マテリアルの色と光の色の組み合わせになります。
次の 2 つのイメージは、マテリアルの色がグレーで、ライトの色が明るい赤であることを示しています。
結果として作成されるシーンは、次のようになります。 シーン内の唯一のオブジェクトは球です。 環境光は、すべてのオブジェクトの頂点を同じ色で照らします。 頂点の法線やライトの方向には依存しません。 その結果、オブジェクトのサーフェスの周囲にシェーディングの差が生じないため、球体は 2D の円のように見えます。
オブジェクトをよりリアルに見せるには、環境光に加えて、ディフューズ ライティングやスペキュラ ライティングを適用します。
関連トピック