ライトなし |
ライトあり |
光の要素 | プロパティ | 型 | 内容 | 既定値 |
---|---|---|---|---|
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 |
列挙子 | 種類 | 位置 | 照射範囲 | 減衰 |
---|---|---|---|---|
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