ライト (Light) の設定


ライトなし

ライトあり
Lightクラスのプロパティ
光の要素 プロパティ 内容 既定値
  Type LightType 光源の種類 Directional
  Direction Vector3 光が指す方向 (ワールド座標) 0, 0, 1
環境光 Ambient Color すべての方向から同じ強さで照らす 0, 0, 0, 0
拡散反射光 Diffuse Color 「光の向き」と「表面の法線ベクトル」の角度で強さが決まる 0, 255, 255, 255
鏡面反射光 Specular Color 「光の向き」「法線ベクトル」
「視線の向き」との角度で強さが決まる
0, 0, 0, 0
  Attenuation0 float 減衰率。点光源とスポット ライトに対してのみ有効  
Attenuation1
Attenuation2
  Range float 光源の有効距離。点光源に対してのみ有効  
  Enabled bool ライトの有効・無効 false
LightType列挙型
列挙子 種類 位置 照射範囲 減衰
Point 点光源 空間内の1点 全方向 距離の2乗
Spot スポット ライト 空間内の1点 コーン内だけ 距離の2乗と方向
Directional 平行光源 無限遠 一定方向 なし

ライトの設定方法

ライトはデバイスのLightsプロパティから設定します。

このLightsプロパティで設定するLightsクラスはLightクラスのコレクションとなっており、複数のライトを扱えるようになっています。よってライトの設定をするときには、要素番号を指定します。

device.Lights[ 0 ].Type = LightType.Directional;                // 光源の種類
device.Lights[ 0 ].Direction = new Vector3( 1.0f, 1.0f, 1.0f ); // 光が指す方向

device.Lights[ 0 ].Diffuse = Color.Gray;   // ライトの色
device.Lights[ 0 ].Ambient = Color.Gray;

device.Lights[ 0 ].Enabled = true;         // ライトの有効・無効

// ライトを更新する
device.Lights[ 0 ].Update();

ライトの有効 / 無効

ライトの効果を有効にするには、RenderStateのLightingプロパティにtrueを設定します。逆にアプリケーションの定義色で描画したいときには、ライトを無効とします。

device.RenderState.Lighting = true;

法線 (Normal Vector) を持たない頂点データにより構成されるオブジェクトには、ライトの効果は反映されません。

ライトの色とマテリアルの色

オブジェクトが表示されるときの色は、オブジェクトのマテリアルの色成分とライトの色成分によって決定されます。

実際には下表のように、ライトの色成分に含まれるマテリアルの色成分のみが表示されます。

マテリアルの色 黄色 ( 255, 255, 0 )
ライトの色 ( 255, 255, 255 ) シアン ( 0, 255, 255 ) ( 255, 0, 0 )
表示色 黄色 ( 255, 255, 0 ) ( 0, 255, 0 ) ( 255, 0, 0 )
表示イメージ

ビデオカードがサポートするライトの確認

平行光源がサポートされているならばSupportsDirectionalLightsプロパティはtrueを返します。

device.DeviceCaps.VertexProcessingCaps.SupportsDirectionalLights

同時に使用できるライトの最大数は、MaxActiveLightsプロパティで調べられます。

device.DeviceCaps.MaxActiveLights

デバイスがサポートする機能の情報は、正確ではない場合もあります。構シテのンル | MSDN

ビデオカードがサポートする機能の調査方法