Microsoft DirectX 8.0 (Visual Basic)

ライト プロパティの設定

Microsoft Visual Basic® アプリケーションでライト プロパティを設定するには、D3DLIGHT8 型を用意し、次に Direct3DDevice8.SetLight メソッドを呼び出す。SetLight メソッドは、デバイスがライト プロパティ セットをデバイス内部のライト プロパティのリストに配置する際のインデックスと、そのライト プロパティを定義する D3DLIGHT8 型のアドレスを受け取る。ライト プロパティの更新が必要なときは、新しい情報で SetLight を呼び出すことができる。

プロパティを割り当てられていないインデックスで SetLight メソッドを呼び出すたびに、システムはライト プロパティ セットを格納するためのメモリを割り当てる。アプリケーションでは、割り当てられているライトのサブセットを一度に有効にして、数多くのライトを設定できる。デバイスがサポートするアクティブなライトの最大数を決定するためにデバイス能力を取得するときは、D3DCAPS8 型の MaxActiveLights メンバをチェックする。ライトを使用する必要がなくなった場合は、そのライトを無効にするか、新しいライト プロパティ セットで上書きすることができる。

次のサンプル コードは、距離の増加によって減衰しない、白色のポイント ライトのプロパティを準備および設定する。

'
' このコードでは、変数 d3dDevice は、Direct3DDevice8 オブジェクトへの
' 有効な参照を格納すると仮定している。
'
Dim LightDesc As D3DLIGHT8
Dim c As D3DCOLORVALUE
Dim vPos As D3DVECTOR

' すべての放射光色に同じ色設定を使用する。
With c
    .r = 1#: .g = 1#: .b = 1#
    .a = 1# ' アルファ成分はライトに使用されない。
End With

With vPos
    .x = 0: .y = 1000: .z = -100
End With

With LightDesc
    .Type = D3DLIGHT_POINT
    .Position = vPos
    .Ambient = c: .diffuse = c: .specular = c
    .Attenuation0 = 1# ' ライトを減衰しない。
End With

d3dDevice.SetLight 0, LightDesc

ライト プロパティ セットは、再度 SetLight を呼び出していつでも更新できる。更新するライト プロパティ セットのインデックスと、新しいプロパティを含む D3DLIGHT8 型のアドレスを指定するだけである。

  ライト プロパティ セットをデバイスに割り当てても、追加されるプロパティを持つ光源が有効になるわけではない。光源を有効にするには、デバイスに対して Direct3DDevice8.LightEnable メソッドを呼び出す。