次の方法で共有


アンビエント照明 (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 の円のように見えます。

環境光のある球体の図

オブジェクトをよりリアルに見せるには、環境光に加えて、ディフューズ ライティングやスペキュラ ライティングを適用します。

照明の計算