Effet d’éclairage diffus par point

Utilisez l’effet d’éclairage à diffusion de points pour créer une image qui semble être une surface non réfléchissante avec de la lumière diffusée dans toutes les directions. Cet effet utilise le canal alpha comme carte de hauteur et allume l’image avec une source de lumière point.

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 surface. La sortie du canal alpha pour chaque pixel avec un éclairage diffus est toujours 1.0.

Le CLSID de cet effet est CLSID_D2D1PointDiffuse. Pour utiliser cet effet, ajoutez dxguid.lib aux dépendances de l’éditeur de liens.

Exemple d’image

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

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

L’éclairage diffus fait référence à la lumière qui se reflète dans plusieurs directions comme ici.

la lumière diffuse est dispersée dans toutes les directions.

L’effet calcule les valeurs de pixel de sortie finales calculées à l’aide des équations suivantes :

calculs bitmap de sortie.

Où :

kd = constante d’éclairage diffus. Spécifié par l’utilisateur.
symbole vecteur normal surface. = vecteur d’unité normale de surface, fonction de x et y.
symbole vecteur d’unité. = vecteur unitaire pointant de la surface vers la lumière.
Lr, Lg, Lb = la couleur claire dans les composants RVB.

Propriétés d’effet

Nom d’affichage et énumération d’index Description
LightPosition
D2D1_POINTDIFFUSE_PROP_LIGHT_POSITION
Position lumineuse de la source de lumière point. La propriété est une D2D1_VECTOR_3F définie comme (x, y, z). Les unités sont en pixels indépendants de l’appareil (DIPs) et ne sont pas liées.
Le type est D2D1_VECTOR_3F.
La valeur par défaut est {0.0f, 0.0f, 0.0f}.
DiffuseConstant
D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT
Rapport entre la réflexion diffuse et la quantité de lumière entrante. Cette propriété doit être comprise entre 0 et 10 000 et est sans unité.
Le type est FLOAT.
La valeur par défaut est 1.0f.
SurfaceScale
D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE
Facteur d’échelle dans le sens Z. L’échelle de surface 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_POINTDIFFUSE_PROP_COLOR
Couleur de la lumière entrante. Cette propriété est exposée sous la forme d’un vecteur 3 (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_POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
Taille d’un élément dans le noyau Sobel utilisé pour générer la surface normale dans le sens X et Y. Cette propriété est mappée aux valeurs dx et dy dans le dégradé Sobel. Cette propriété est une 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 en fonction de 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_POINTDIFFUSE_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 de mise à l’échelle qui varient en qualité et en vitesse. Pour plus d’informations, consultez Modes de mise à l’échelle .
Le type est D2D1_POINTDIFFUSE_SCALE_MODE.
La valeur par défaut est D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR.

Modes de mise à l’échelle

Énumération Description
D2D1_POINTDIFFUSE_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_POINTDIFFUSE_SCALE_MODE_LINEAR Utilise un exemple à 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_POINTDIFFUSE_SCALE_MODE_CUBIC Utilise un exemple de noyau cubique de 16 pour l’interpolation. Ce mode utilise le plus de temps de traitement, mais génère une image de meilleure qualité.
D2D1_POINTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Utilise 4 exemples linéaires au sein d’un seul pixel pour une bonne anti-aliasing de bord. Ce mode est adapté à la mise à l’échelle de petites quantités sur des images de quelques pixels.
D2D1_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC Utilise le filtrage anisotrope pour échantillonner un modèle en fonction de la forme transformée de la bitmap.
D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Utilise un noyau cubique de haute qualité de taille variable pour effectuer une mise à l’échelle antérieure de l’image si la 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 par défaut est D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR.

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