Поделиться через


Метод IDirect3DDevice9::SetLight (d3d9helper.h)

Назначает набор свойств освещения для этого устройства.

Синтаксис

HRESULT SetLight(
  [in] DWORD           Index,
  [in] const D3DLIGHT9 *unnamedParam2
);

Параметры

[in] Index

Тип: DWORD

Отсчитываемый от нуля индекс набора задается свойств освещения. Если в этом индексе существует набор свойств освещения, он перезаписывается новыми свойствами, указанными в pLight.

[in] unnamedParam2

Тип: const D3DLIGHT9*

Указатель на структуру D3DLIGHT9 , содержащую заданные параметры освещения.

Возвращаемое значение

Тип: HRESULT

Если метод выполнен успешно, возвращаемое значение будет D3D_OK. Если метод завершается сбоем, возвращаемое значение можно D3DERR_INVALIDCALL.

Комментарии

Задайте свойства освещения, подготовив структуру D3DLIGHT9 , а затем вызвав метод IDirect3Ddevice9::SetLight . Метод IDirect3DDevice9::SetLight принимает индекс, по которому устройство должно помещать набор свойств света во внутренний список свойств света, а также адрес подготовленной структуры D3DLIGHT9 , определяющей эти свойства. Вы можете вызвать IDirect3DDevice9::SetLight с новыми сведениями, необходимыми для обновления свойств освещения света.

Система выделяет память для размещения набора свойств освещения при каждом вызове метода IDirect3DDevice9::SetLight с индексом, которому никогда не присваивались свойства. Приложения могут задавать несколько огней, одновременно включив только подмножество назначенных огней. Проверьте элемент MaxActiveLights структуры D3DCAPS9 при получении возможностей устройства, чтобы определить максимальное количество активных огней, поддерживаемых этим устройством. Если индикатор больше не нужен, его можно отключить или перезаписать новым набором свойств света.

В следующем примере подготавливаются и задаются свойства для белого точечного света, излучаемый свет которого не затухает на расстоянии.


// 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 для устройства.

Требования

Требование Значение
Целевая платформа Windows
Header d3d9helper.h (включая D3D9.h)
Библиотека D3D9.lib

См. также раздел

IDirect3DDevice9

IDirect3DDevice9::GetLight

IDirect3DDevice9::GetLightEnable

IDirect3DDevice9::LightEnable