Share via


Effet d’éclairage spéculaire par point

Utilisez l’effet d’éclairage spéculaire point pour créer une image qui semble être une surface réfléchissante. L’effet utilise le canal alpha de l’image comme une carte de hauteur et une source de lumière point que vous positionnez, et calcule la réflexion et la lumière en fonction de la partie spéculaire du modèle d’éclairage Phong.

La couleur de l’image bitmap de sortie est le résultat de la couleur claire, de la position claire et de la géométrie de la surface. La sortie du canal alpha pour chaque pixel avec un éclairage spéculaire est la valeur maximale des sorties de canal rouge, vert et bleu pour ce pixel.

Le CLSID de cet effet est CLSID_D2D1PointSpecular.

Exemple d’image

L’exemple ci-dessous montre les images d’entrée et de sortie de l’effet d’éclairage spéculaire point.

capture d’écran de l’exemple d’effet montrant les images d’entrée et de sortie de l’effet d’éclairage spéculaire de point.

La lumière spéculaire fait référence à la lumière qui est réfléchie dans une direction spécifique selon le modèle d’éclairage Phong.

diagramme des vecteurs utilisés pour cacluer une sortie d’éclairage spéculaire pour une bitmap.

L’effet calcule les valeurs de pixels de sortie finales à l’aide des équations ici :

équations pour le calcul des valeurs de pixels finales.

where

K? = constante d’éclairage spéculaire.
Symbole de vecteur d’unité normale de surface. = vecteur d’unité normale de surface qui est une fonction de x et y. Pour les calculs, consultez Carte de hauteur et vecteur normal .
Symbole de vecteur d’unité à mi-chemin. = vecteur d’unité « à mi-chemin » entre le vecteur d’unité oculaire et le vecteur d’unité de lumière. Pour les calculs, consultez Source de lumière point.
Lr, Lg, Lb = la couleur claire dans les composants RVB.

Vous définissez la constante d’éclairage spéculaire comme propriété SpecularConstant et la couleur claire comme propriété Color .

Source de lumière point

Une source de lumière ponctuelle émet de la lumière dans toutes les directions, comme dans l’image ici.

une lumière ponctuelle émettant de la lumière dans toutes les directions.

Vous définissez la position de la source de lumière à l’aide de la propriété LightPosition . L’effet calcule le vecteur lumineux, L , pour une source de lumière ponctuelle à l’aide des équations suivantes :

équation du vecteur lumineux.

où Light?, Lighty et Lightz sont la position de la lumière d’entrée. L’effet calcule le symbole vecteur à mi-chemin, vecteur à mi-chemin, tel que défini dans le modèle d’éclairage Phong, à l’aide de l’équation ici. Le modèle d’éclairage suppose que le vecteur oculaire, le symbole de vecteur oculaire, est situé à (0,0,1).

équation vectorielle à mi-chemin.

L et H sont normalisés en vecteurs de longueur unitaire.

Mappage de hauteur et vecteur normal

L’effet génère une carte de hauteur pour l’image d’entrée en fonction de son canal alpha.

Le composant height (Z) est calculé à l’aide de l’équation :

équation pour le calcul de la hauteur (z) de la surface.

L’effet calcule la normale de surface, le symbole de vecteur normal, pour la bitmap d’entrée à l’aide d’un dégradé Sobel.

Constante d’éclairage spéculaire et exposant

La lumière spéculaire représente la lumière qui est réfléchie à partir de la surface de la carte de hauteur de l’image. Vous spécifiez la propriété SpecularExponent qui détermine la quantité de réflexion spéculaire à partir de la bitmap.

Les exposants plus grands représentent des objets plus brillants et réfléchissent la lumière dans une forme plus ciblée.

La propriété SpecularConstant K? définit la quantité de lumière réfléchie comme un rapport de la lumière entrante.

Propriétés de l’effet

Nom complet et énumération d’index Description
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Position de la lumière de la source de lumière ponctuelle. La propriété est un D2D1_VECTOR_3F défini comme (x, y, z). Les unités sont exprimées en pixels indépendants de l’appareil (DIPs) et les valeurs sont sans unité et sans limite. Le type est D2D1_VECTOR_3F.
La valeur par défaut est {0.0f, 0.0f, 0.0f}.
SpecularExponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
Exposant pour le terme spéculaire dans l’équation d’éclairage de Phong. Une valeur plus grande correspond à une surface plus réfléchissante. Cette valeur est sans unité et doit être comprise entre 1,0 et 128. Le type est FLOAT.
La valeur par défaut est 1.0f.
SpecularConstant
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
Rapport entre la réflexion spéculaire et la lumière entrante. La valeur est sans unité et doit être comprise entre 0 et 10 000. Le type est FLOAT.
La valeur par défaut est 1.0f.
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
Facteur d’échelle dans la direction Z pour générer une carte de hauteur. La valeur est sans unité et doit être comprise entre 0 et 10 000. Le type est FLOAT.
La valeur par défaut est 1.0f.
Color
D2D1_POINTSPECULAR_PROP_COLOR
Couleur de la lumière entrante. Cette propriété est exposée en tant que D2D1_VECTOR_3F (R, G, B) et utilisée pour calculer LR, LG, LB. Le type est D2D1_VECTOR_3F.
La valeur par défaut est {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Taille d’un élément dans le noyau Sobel utilisé pour générer la normale de surface dans les directions X et Y. Cette propriété est mappée aux valeurs dx et dy dans le dégradé Sobel. Cette propriété est un D2D1_VECTOR_2F(Kernel Unit Length X, Kernel Unit Length Y) et est définie dans (DIPs/Kernel Unit). L’effet utilise l’interpolation bilinéaire pour mettre à l’échelle la bitmap pour qu’elle corresponde à la taille des éléments du noyau. Le type est D2D1_VECTOR_2F.
La valeur par défaut est {1.0f, 1.0f}.
ScaleMode
D2D1_POINTSPECULAR_PROP_SCALE_MODE
Mode d’interpolation utilisé par l’effet pour mettre à l’échelle l’image à la longueur d’unité de noyau correspondante. Il existe six modes d’échelle qui varient en qualité et en vitesse. Pour plus d’informations, consultez Modes de mise à l’échelle.
Le type est D2D1_POINTSPECULAR_SCALE_MODE.
La valeur par défaut est D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Modes de mise à l’échelle

Énumération Description
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Échantillonne le point unique le plus proche et l’utilise. Ce mode utilise moins de temps de traitement, mais génère l’image de qualité la plus faible.
D2D1_POINTSPECULAR_SCALE_MODE_LINEAR Utilise un échantillon à quatre points et une interpolation linéaire. Ce mode génère une image de qualité supérieure à celle du voisin le plus proche.
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC Utilise un noyau cube de 16 exemples pour l’interpolation. Ce mode utilise le temps de traitement le plus élevé, mais génère une image de meilleure qualité.
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Utilise 4 exemples linéaires au sein d’un seul pixel pour une bonne anticrénelage de bord. Ce mode est adapté à un scale-down de petites quantités sur des images de quelques pixels.
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Utilise le filtrage anisotrope pour échantillonner un modèle en fonction de la forme transformée de la bitmap.
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Utilise un noyau cube de haute qualité de taille variable pour effectuer une mise à l’échelle antérieure de l’image si une mise à l’échelle inférieure est impliquée dans la matrice de transformation. Utilise ensuite le mode d’interpolation cubique pour la sortie finale.

Notes

Si vous ne sélectionnez pas de mode, l’effet est D2D1_POINTSPECULAR_SCALE_MODE_LINEAR par défaut.

Spécifications

Condition requise Valeur
Client minimal pris en charge Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimal pris en charge Windows 8 et mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
En-tête d2d1effects.h
Bibliothèque d2d1.lib, dxguid.lib

ID2D1Effect