Partager via


Propriétés lumineuses (Direct3D 9)

Les propriétés lumineuses décrivent le type et la couleur d’une source de lumière. Selon le type de lumière utilisé, une lumière peut avoir des propriétés d’atténuation et de portée, ou d’effets de projecteur. Toutefois, tous les types de lumières n’utilisent pas toutes les propriétés. Direct3D utilise la structure D3DLIGHT9 pour transporter des informations sur les propriétés de la lumière pour tous les types de sources lumineuses. Cette section contient des informations sur toutes les propriétés lumineuses. Les informations sont divisées en groupes suivants.

La position, la plage et les propriétés d’atténuation définissent l’emplacement d’une lumière dans l’espace mondial et la façon dont la lumière qu’elle émet se comporte sur la distance. Comme pour toutes les propriétés lumineuses que vous utilisez en C++, celles-ci sont contenues dans la structure D3DLIGHT9 d’une lumière.

Atténuation de la lumière

L’atténuation contrôle la diminution de l’intensité d’une lumière vers la distance maximale spécifiée par la propriété de plage. Trois membres de structure D3DLIGHT9 représentent l’atténuation de la lumière : Atténuation0, Atténuation1 et Atténuation2. Ces membres contiennent des valeurs à virgule flottante allant de 0,0 à l’infini, contrôlant l’atténuation d’une lumière. Certaines applications définissent le membre Attenuation1 sur 1.0 et les autres sur 0.0, ce qui entraîne une intensité lumineuse qui change en tant que 1/D, où D est la distance entre la source de lumière et le sommet. L’intensité maximale de la lumière est à la source, décroissant à 1 / (Plage de lumière) à la plage de la lumière. En règle générale, une application définit Attenuation0 sur 0,0, Attenuation1 sur une valeur constante et Attenuation2 sur 0,0.

Vous pouvez combiner des valeurs d’atténuation pour obtenir des effets d’atténuation plus complexes. Vous pouvez également les définir sur des valeurs en dehors de la plage normale pour créer des effets d’atténuation même étrangers. Toutefois, les valeurs d’atténuation négatives ne sont pas autorisées. Consultez Atténuation et facteur de mise en évidence (Direct3D 9).

Couleur claire

Les lumières de Direct3D émettent trois couleurs qui sont utilisées indépendamment dans les calculs d’éclairage du système : une couleur diffuse, une couleur ambiante et une couleur spéculaire. Chacune est incorporée par le module d’éclairage Direct3D, en interagissant avec un équivalent du matériau actuel, pour produire une couleur finale utilisée dans le rendu. La couleur diffuse interagit avec la propriété de réflectance diffuse du matériau actuel, la couleur spéculaire avec la propriété de réflectance spéculaire du matériau, et ainsi de suite. Pour plus d’informations sur la façon dont Direct3D applique ces couleurs, consultez Mathématiques de l’éclairage (Direct3D 9).

Dans une application C++, la structure D3DLIGHT9 comprend trois membres pour ces couleurs : Diffuse, Ambient et Specular. Chacune est une structure D3DCOLORVALUE qui définit la couleur émise.

Le type de couleur qui s’applique le plus fortement aux calculs du système est la couleur diffuse. La couleur diffuse la plus courante est le blanc (R:1.0 G:1.0 B:1.0), mais vous pouvez créer des couleurs si nécessaire pour obtenir les effets souhaités. Par exemple, vous pouvez utiliser la lumière rouge pour un foyer, ou vous pouvez utiliser le feu vert pour un signal de trafic défini sur « Go ».

En règle générale, vous définissez les composants de couleur claire sur des valeurs comprises entre 0.0 et 1.0, inclusivement, mais ce n’est pas obligatoire. Par exemple, vous pouvez définir tous les composants sur 2.0, créant une lumière qui est « plus brillante que le blanc ». Ce type de paramètre peut être particulièrement utile lorsque vous utilisez des paramètres d’atténuation autres que constants.

Notez que bien que Direct3D utilise des valeurs RVBA pour les lumières, le composant de couleur alpha n’est pas utilisé.

En général, les couleurs des matériaux sont utilisées pour l’éclairage. Toutefois, vous pouvez spécifier que les couleurs des matériaux (émissives, ambiantes, diffuses et spéculaires) doivent être remplacées par des couleurs de vertex diffuses ou spéculaires. Pour ce faire, appelez SetRenderState et définissez les variables d’état de l’appareil répertoriées dans le tableau suivant.

Variable d’état de l’appareil Signification Type Default
D3DRS_AMBIENTMATERIALSOURCE Définit l’emplacement où obtenir la couleur de matériau ambiante. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Définit l’emplacement où obtenir une couleur de matériau diffuse. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Définit l’emplacement où obtenir la couleur de matériau spéculaire. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE Définit l’emplacement où obtenir la couleur de matériau émissive. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Désactive ou active l’utilisation des couleurs de vertex. BOOL true

 

La valeur alpha/transparence provient toujours uniquement du canal alpha de la couleur diffuse.

La valeur de brouillard provient toujours uniquement du canal alpha de la couleur spéculaire.

D3DMATERIALCOLORSOURCE peut avoir les valeurs suivantes.

  • D3DMCS_MATERIAL : la couleur du matériau est utilisée comme source.
  • D3DMCS_COLOR1 : la couleur de vertex diffuse est utilisée comme source.
  • D3DMCS_COLOR2 : la couleur de vertex spéculaire est utilisée comme source.

Direction de la lumière

La propriété de direction d’une lumière détermine la direction que la lumière émise par l’objet voyage dans l’espace mondial. La direction est utilisée uniquement par les lumières directionnelles et les projecteurs, et est décrite avec un vecteur.

Définissez la direction de la lumière dans le membre Direction de la structure D3DLIGHT9 de la lumière. Le membre direction est de type D3DVECTOR. Les vecteurs de direction sont décrits comme des distances par rapport à une origine logique, quelle que soit la position de la lumière dans une scène. Par conséquent, un projecteur qui pointe droit dans une scène - le long de l’axe z positif - a un vecteur de direction de <0,0,1> quel que soit l’endroit où sa position est définie pour être. De même, vous pouvez simuler la lumière du soleil qui brille directement sur une scène en utilisant une lumière directionnelle dont la direction est <de 0,-1,0>. Évidemment, vous n’avez pas besoin de créer des lumières qui brillent le long des axes de coordonnées; vous pouvez mélanger et faire correspondre des valeurs pour créer des lumières qui brillent à des angles plus intéressants.

Notes

Bien que vous n’ayez pas besoin de normaliser le vecteur de direction d’une lumière, assurez-vous toujours qu’elle a une magnitude. En d’autres termes, n’utilisez pas un <vecteur de direction 0,0,0> .

 

Position de la lumière

La position lumineuse est décrite à l’aide d’une structure D3DVECTOR dans le membre Position de la structure D3DLIGHT9 . Les coordonnées x, y et z sont supposées se trouver dans l’espace mondial. Les feux directionnels sont le seul type de lumière qui n’utilise pas la propriété position.

Plage de lumières

La propriété de plage d’une lumière détermine la distance, dans l’espace mondial, à laquelle les maillages d’une scène ne reçoivent plus la lumière émise par cet objet. Le membre Range contient une valeur à virgule flottante qui représente la plage maximale de la lumière, dans l’espace mondial. Les feux directionnels n’utilisent pas la propriété range.

Lumières et matériaux