Метод 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 |