次の方法で共有


IDirect3DDevice9::SetLight

このデバイスに一連のライティング プロパティを割り当てます。

HRESULT 
SetLight(
  DWORD Index,
  CONST D3DLight9 * pLight
);

パラメータ

  • Index
    指定するライト プロパティ セットの 0 から始まるインデックスです。このインデックスにライト プロパティが存在する場合、プロパティは pLight に指定された新しいプロパティで上書きされます。
  • pLight
    D3DLIGHT9 構造体へのポインター。設定するライティング パラメーターを指定します。

戻り値

メソッドが成功した場合は、D3D_OK を返します。失敗した場合は、D3DERR_INVALIDCALL を返します。

解説 

D3DLIGHT9 構造体を準備し、IDirect3DDevice9::SetLight メソッドを呼び出して、ライト プロパティを設定します。 IDirect3DDevice9::SetLight メソッドは、デバイスがライト プロパティのセットをライト プロパティの内部リストに設定する必要があるインデックス、およびこれらのプロパティを定義する準備済みの D3DLIGHT9 構造体のアドレスを受け入れます。ライトの点灯プロパティを更新する必要がある場合は、新しい情報で IDirect3DDevice9::SetLight を呼び出すことができます。

プロパティを割り当てられたことのないインデックスを使用して IDirect3DDevice9::SetLight メソッドを呼び出すたびに、システムはライト プロパティのセットを格納するためのメモリーを割り当てます。アプリケーションでは、その時点で有効な割り当て済みのライトのサブセットのみを使用して複数のライトを設定できます。デバイスの能力を取得して、そのデバイスでサポートされるアクティブなライトの最大数を判定するには、D3DCAPS9 構造体の MaxActiveLights メンバーを確認します。ライトが不要になった場合は、ライトを無効にするか、新しいライト プロパティのセットを使用して上書きできます。

次の例では、距離による減衰のないライトを放出するホワイト ポイント ライトのプロパティを準備し、設定しています。

 // Assume d3dDevice is a valid pointer to an IDirect3DDevice9 interface. D3DLight9 d3dLight; HRESULT   hr;      // Initialize the structure. ZeroMemory(&D3dLight, sizeof(d3dLight));      // Set up a white point light. d3dLight.Type = D3DLIGHT_POINT; d3dLight.Diffuse.r  = 1.0f; d3dLight.Diffuse.g  = 1.0f; d3dLight.Diffuse.b  = 1.0f; d3dLight.Ambient.r  = 1.0f; d3dLight.Ambient.g  = 1.0f; d3dLight.Ambient.b  = 1.0f; d3dLight.Specular.r = 1.0f; d3dLight.Specular.g = 1.0f; d3dLight.Specular.b = 1.0f;      // Position it high in the scene and behind the user. // Remember, these coordinates are in world space, so // the user could be anywhere in world space, too.  // For the purposes of this example, assume the user // is at the origin of world space. d3dLight.Position.x = 0.0f; d3dLight.Position.y = 1000.0f; d3dLight.Position.z = -100.0f;      // Don't attenuate. d3dLight.Attenuation0 = 1.0f;  d3dLight.Range        = 1000.0f;      // Set the property information for the first light. hr = d3dDevice->SetLight(0, &d3dLight); if (SUCCEEDED(hr))     // Handle Success else     // Handle failure 

デバイスに対して IDirect3DDevice9::LightEnable メソッドを呼び出して光源を有効にします。

要件

ヘッダー: D3D9.h 宣言

ライブラリ: D3D9.lib 内容

関連項目

IDirect3DDevice9::GetLight, IDirect3DDevice9::GetLightEnable, IDirect3DDevice9::LightEnable