Share via


Méthode IDirect3DDevice9 ::SetLight (d3d9helper.h)

Affecte un ensemble de propriétés d’éclairage pour cet appareil.

Syntaxe

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

Paramètres

[in] Index

Type : DWORD

Index de base zéro de l’ensemble de propriétés d’éclairage à définir. Si un ensemble de propriétés d’éclairage existe au niveau de cet index, il est remplacé par les nouvelles propriétés spécifiées dans pLight.

[in] unnamedParam2

Type : const D3DLIGHT9*

Pointeur vers une structure D3DLIGHT9 contenant les paramètres d’éclairage à définir.

Valeur retournée

Type : HRESULT

Si la méthode réussit, la valeur de retour est D3D_OK. Si la méthode échoue, la valeur de retour peut être D3DERR_INVALIDCALL.

Remarques

Définissez les propriétés de lumière en préparant une structure D3DLIGHT9 , puis en appelant la méthode IDirect3DDevice9 ::SetLight . La méthode IDirect3DDevice9 ::SetLight accepte l’index auquel l’appareil doit placer le jeu de propriétés de lumière dans sa liste interne de propriétés d’éclairage, ainsi que l’adresse d’une structure de D3DLIGHT9 préparée qui définit ces propriétés. Vous pouvez appeler IDirect3DDevice9 ::SetLight avec de nouvelles informations si nécessaire pour mettre à jour les propriétés d’éclairage de la lumière.

Le système alloue de la mémoire pour prendre en charge un ensemble de propriétés d’éclairage chaque fois que vous appelez la méthode IDirect3DDevice9 ::SetLight avec un index qui n’a jamais été affecté à des propriétés. Les applications peuvent définir un certain nombre de lumières, avec uniquement un sous-ensemble des lumières affectées activées à la fois. Vérifiez le membre MaxActiveLights de la structure D3DCAPS9 lorsque vous récupérez les fonctionnalités de l’appareil pour déterminer le nombre maximal de lumières actives prises en charge par cet appareil. Si vous n’avez plus besoin d’une lumière, vous pouvez la désactiver ou la remplacer par un nouvel ensemble de propriétés d’éclairage.

L’exemple suivant prépare et définit les propriétés d’une lumière point blanche dont la lumière émise ne s’atténue pas sur une distance.


// 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

Activez une source d’éclairage en appelant la méthode IDirect3DDevice9 ::LightEnable pour l’appareil.

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête d3d9helper.h (inclure D3D9.h)
Bibliothèque D3D9.lib

Voir aussi

IDirect3DDevice9

IDirect3DDevice9 ::GetLight

IDirect3DDevice9 ::GetLightEnable

IDirect3DDevice9 ::LightEnable