Microsoft DirectX 8.0 (Visual Basic)

ステップ 2.2 : ライトの作成

Microsoft® Direct3D® では、3 種類のライトを使用できる。ポイント ライト、ディレクショナル ライト、およびスポット ライトである。Lights サンプル プロジェクトでは、光が 1 方向に進むディレクショナル ライトを作成し、ライトの方向を変化させている。

次のコードでは、D3DLIGHT8 構造体を使って、ディレクショナル ライトを定義する。

Dim light As D3DLIGHT8
light.Type = D3DLIGHT_DIRECTIONAL

次のコードでは、このライトのディフューズ色を白に設定している。

light.diffuse.r = 1#
light.diffuse.g = 1#
light.diffuse.b = 1#

次のコードでは、ライトの方向を円形に回転させている。

light.Direction.x = Cos(Timer * 2)
light.Direction.y = 1#
light.Direction.z = Sin(Timer * 2)

範囲を指定して、ライトのエフェクトが届く範囲を Direct3D に指示できる。このメンバは、ディレクショナル ライトには影響しない。次のコードでは、このライトに 1000 単位の範囲を割り当てている。

light.Range = 1000#

次のコードでは、Direct3DDevice8.SetLight を呼び出して、Direct3D デバイスにライトを割り当てている。

g_D3DDevice.SetLight 0, light     ' D3D にライトの情報を設定する。

SetLight が受け取る最初のパラメータは、このライトが割り当てられるインデックスである。ライトが既にその位置に存在する場合、新しいライトによって上書きされることに注意すること。2 番目のパラメータは、ライトを定義する light 構造体へのポインタである。Lights サンプル プロジェクトでは、このライトをインデックス 0 に配置する。

次のコードは、Direct3DDevice8.LightEnable を呼び出してライトを有効にする。

g_D3DDevice.LightEnable 0, 1

LightEnable が受け取る最初のパラメータは、有効にするライトのインデックスである。2 番目のパラメータは、ライトをオンにする (1) か、オフにする (0) かを指定する値である。Lights サンプル プロジェクトでは、インデックス 0 にあるライトがオンになっている。

このサンプルの次のステップは、Direct3DDevice8.SetRenderState を呼び出して、アンビエント ライトをオンにすることである。

g_D3DDevice.SetRenderState D3DRS_AMBIENT, &H202020

SetRenderState が受け取る 2 つのパラメータは、変更するデバイス ステート変数と、その変数に設定する値である。このサンプルでは、D3DRS_AMBIENT デバイス変数をライト グレー (&H202020) に設定している。アンビエント ライトは、すべてのオブジェクトを指定された色でライトアップする。

Direct3D でライトを使用するには、有効にしなければならない。次のコードでは、SetRenderState を呼び出して、ライトをレンダリングするように Direct3D に指示している。

g_D3DDevice.SetRenderState D3DRS_LIGHTING, 1    ' ライティングを確実に有効にする。

このサンプルでは、D3DRS_LIGHTING デバイス変数を TRUE に設定している。これは、ライトのレンダリングを有効にする効果がある。

ライティングの詳細については、「Direct3D のライティングにおける数学的計算」を参照すること。

このチュートリアルでは、ライトとマテリアルの使い方を示した。「チュートリアル 5 : テクスチャ マップの使い方」では、サーフェスにテクスチャを追加する方法を示す。