ドキュメントを用意していなくて申し訳ありません
まずマテリアル( ポリゴン )側の色の説明です
ディフューズカラー
赤いものが赤く見えるのは、赤いものに光を当てると赤い色以外の光の成分が吸収されるからです
ディフューズカラーはそのような「物の基礎的な色」とも言える色です
アンビエントカラー
現実世界では光源との間に何も遮るものが無い場所でも閉じられた空間や夜でも無い限り
何も見えなくなるほど真っ暗にはなりません
それは光を当てられたものがその光を反射して、反射された光が別のものに当たり、
そのものもまた光を反射して・・・を繰り返して間接的に光が届いているからです
ただ、リアルタイムでこの「光の反射の反復」を計算するのは処理負荷が高いので、
「この空間は間接光があるから最低でもこの程度明るい」というような色を
「アンビエントカラー」として設定することで「光の反射の反復」を擬似的に表現しています
スペキュラカラー
車のボンネットや金属製のものは光が当たるとテカテカしています
このテカテカは、テカテカしたものに当たった光の内の拡散されずに反射された光です
この光の色をスペキュラカラーとして指定します
エミッシブカラー
自らが発している色です
自らが発している色なのでライト環境に関係なく常にライティング計算の計算結果に足されます
ライトでの同名の色は上記のマテリアルの色に作用する( 主に乗算される )色となります
( 例えばマテリアルのスペキュラカラーを白( R=1.0 G=1.0 B=1.0 )にしていても、
ライトのスペキュラカラーを青( R=0.0 G=0.0 B=1.0 )にすると、テカテカした部分は青になります )
具体的なライティングの計算式は以下の様になっています
ディフューズカラー計算結果 =
グローバルアンビエントライトカラー( SetGlobalAmbientLightで設定する色 ) × マテリアルのアンビエントカラー +
マテリアルのエミッシブカラー +
距離減衰率 × ( ライト0のディフューズカラー × マテリアルのディフューズカラー × 角度減衰率 + ライト0のアンビエントカラー × マテリアルのアンビエントカラー )
距離減衰率 × ( ライト1のディフューズカラー × マテリアルのディフューズカラー × 角度減衰率 + ライト1のアンビエントカラー × マテリアルのアンビエントカラー )
距離減衰率 × ( ライト2のディフューズカラー × マテリアルのディフューズカラー × 角度減衰率 + ライト2のアンビエントカラー × マテリアルのアンビエントカラー )
( 以下有効なライトは↑の計算を行う )
上記式の「距離減衰率」は
ディレクショナルライトの場合
常に1.0
ポイントライトの場合
距離減衰率=1.0÷( SetLightRangeAttenHandleの引数Atten0の値 + Atten1の値 × 頂点とライトまでの距離 + Atten2の値 × 頂点とライトまでの距離の二乗 )
スポットライトの場合
ポイントライトの距離減衰の計算結果に更に SetLightAngleHandle で指定した照射角度に応じて 1.0 〜 0.0 に減衰されたもの
「角度減衰率」は
ライトベクトル ・ ポリゴンの法線ベクトル
「・」はベクトルの内積計算をする演算子だと思ってください
各ベクトルは正規化( 大きさを1.0にすること )しているので、内積の計算結果は二つのベクトルが成す角が小さければ
小さいほど1に近づき、離れれば離れるほど−1に近づきます
尚、内積の計算結果が0以下になったら0とします
上記式の「ライトベクトル」は
ディレクショナルライトとスポットライトの場合
ライトの方向と逆方向のベクトル
ポイントライトの場合
頂点からライトの座標に向かうベクトル
です
スペキュラカラー計算結果 =
マテリアルのスペキュラカラー × 距離減衰率 × 角度減衰率 × ライト0のスペキュラカラー +
マテリアルのスペキュラカラー × 距離減衰率 × 角度減衰率 × ライト1のスペキュラカラー +
マテリアルのスペキュラカラー × 距離減衰率 × 角度減衰率 × ライト2のスペキュラカラー +
( 以下有効なライトは↑の計算を行う )
上記式の「距離減衰率」は「ディフューズカラー計算結果」での距離減衰率と同じです
「角度減衰率」は違い、以下の様になっています
中間ベクトル = 頂点からカメラに向かうベクトルを正規化したもの − ライトベクトル
途中計算結果 = 中間ベクトル ・ ポリゴンの法線ベクトル
角度減衰率 = 途中計算結果を「SetMaterialParamに設定する構造体MATERIALPARAMのメンバ変数Power」乗したもの( Power が 2.0 なら二乗 )
上記式の「ライトベクトル」はディフューズカラー計算の「角度減衰率」の中で出てくる
「ライトベクトル」と同じものです
画面に描画される色は
画面に描画される色 =
ディフューズカラー計算結果 × テクスチャカラー( 無ければディフューズカラー計算結果そのまま ) +
スペキュラカラー計算結果 × スペキュラテクスチャカラー( 無ければスペキュラカラー計算結果そのまま )
となります
基本的に今はなき Direct3D の固定機能パイプラインのライティング計算と同じですので、
詳細はこちらのページをご覧になってみてください m(_ _)m
http://msdn.microsoft.com/ja-jp/library/bb174694(v=VS.85).aspx