Partager via


Propriétés légères (Direct3D 9)

Les propriétés de lumière 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 pour l’atténuation et la plage, ou pour les effets à la une. Mais 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 lumière pour tous les types de sources de lumière. Cette section contient des informations pour toutes les propriétés légères. Les informations sont divisées en groupes suivants.

Les propriétés de position, de plage et 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 avec toutes les propriétés légères que vous utilisez en C++, celles-ci sont contenues dans la structure D3DLIGHT9 d’une lumière.

Atténuation légè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 une atténuation légère : Attenuation0, Attenuation1 et Attenuation2. 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é de lumière qui change comme 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ères) à 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. Voir 'atténuation et de spotlight Factor (Direct3D 9).

Couleur claire

Les lumières dans Direct3D émettent trois couleurs utilisées indépendamment dans les calculs d’éclairage du système : une couleur diffuse, une couleur ambiante et une couleur spéculaire. Chacun est incorporé par le module d’éclairage Direct3D, qui interagit 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), chacun d’eux 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 blanche (R :1.0 G :1.0 B :1.0), mais vous pouvez créer des couleurs selon les besoins pour obtenir les effets souhaités. Par exemple, vous pouvez utiliser la lumière rouge pour une cheminée, ou vous pouvez utiliser la lumière verte pour un signal de circulation défini sur « Go ».

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

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

Généralement, les couleurs du matériau sont utilisées pour l’éclairage. Toutefois, vous pouvez spécifier que les couleurs matérielles emissives, 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 Faire défaut
D3DRS_AMBIENTMATERIALSOURCE Définit l’emplacement où obtenir la couleur du matériau ambiant. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Définit l’emplacement où obtenir la 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 du matériau émissif. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Désactive ou active l’utilisation des couleurs de vertex. BOOL VRAI

 

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

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

D3DMATERIALCOLORSOURCE pouvez 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 - 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 à partir d’une origine logique, quelle que soit la position de la lumière dans une scène. Par conséquent, un projecteur qui pointe directement dans une scène - le long de l’axe z positif - a un vecteur de direction de <0,0,1> peu importe où sa position est définie. De même, vous pouvez simuler la lumière du soleil directement sur une scène à l’aide d’une lumière directionnelle dont la direction est <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 mettre en correspondance des valeurs pour créer des lumières qui brillent à des angles plus intéressants.

Note

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

 

Position de lumière

La position de lumière 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 être dans l’espace mondial. Les lumières directionnelles 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 lumières directionnelles n’utilisent pas la propriété de plage.

lumières et matériaux