Microsoft DirectX 8.0 (Visual Basic) |
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 : テクスチャ マップの使い方」では、サーフェスにテクスチャを追加する方法を示す。