| 0からのゲームプログラミング > ライト |
| Back Next |
| 更新日 2004.05.02 |
| ライト |
| 今回は、ライト(光源)を設定してみましょう。 ライトを定義するには、D3DLIGHT9 構造体 を使用します。ScreenStage.cpp の CScreenStage::InitRender メンバ関数に以下のコードがありました。 ScreenStage.cpp |
|
以上のコードでライトを設定しています。試しに上記のコードをすべてコメントアウトして実行してみると、光が無くなる為に画面が真っ黒になります。 D3DLIGHT9 構造体 には、メンバが沢山ありますが、初めにすべてのメンバに ZeroMemory 関数で 0 を代入しておきます。これは、メンバの設定し忘れを防ぐ為です。デバッグモードでは、メンバに不正な値が入っていると、うまく実行されないことがあります。 光源の種類(light.Type)には、ポイント・ライト(点光源)、スポット・ライト、ディレクショナル・ライト(平行光源)等指定出来ますが、ここでは、D3DLIGHT_DIRECTIONAL(ディレクショナル・ライト)を設定しています。 D3DLIGHT_DIRECTIONAL(ディレクショナル・ライト)を設定した場合には、光が指す方向(light.Direction)を設定しておきます。例では、真上より少し斜めから光が射す感じです。 ディフューズ色(light.Diffuse)、スペキュラ色(light.Specular)、アンビエント色(light.Ambient)には、RGBの色成分に 0 〜 1 の間で、適当に値を入れておきます。 そして、IDirect3DDevice9::SetLight メソッド でライトをセットし、IDirect3DDevice9::LightEnable メソッド の第2パラメータに TRUE を指定して、ライトを有効にしておきます。 それぞれのメソッドの第1パラメータには、ゼロから始まるインデックス(最大数あり)を指定します。これで、一度に複数のライトを設定することが出来ます。(光源の数が増えると、当然計算量も増えますので、処理落ちの原因になることもあります。) 以下のように、赤成分の割合を大きくすると、夕焼けのシーンを作成することも出来ます。 |
|
スクリーンショット |
![]() |
| 【スポンサード リンク】 |
| Back Next |
| 0からのゲームプログラミング > ライト |