Effet d’éclairage diffus par spot

Utilisez l’effet d’éclairage spot-diffuse pour créer une image qui semble être une surface non réfléchissante avec où la source de lumière est limitée à un cône de lumière dirigé et la lumière est 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 spot.

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 éclairage diffus est toujours de 1,0.

Le CLSID de cet effet est CLSID_D2D1SpotDiffuse.

Exemple d’image

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

capture d’écran de l’exemple d’effet montrant

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

Calcul bitmap de sortie

Où :

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

Propriétés de l’effet

Nom complet et énumération d’index Type et valeur par défaut Description
LightPosition
D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
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 sont illimitées.
PointsAt
D2D1_SPOTDIFFUSE_PROP_POINTS_AT
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
L’endroit où le spot lumineux est concentré. La propriété est exposée en tant que D2D1_VECTOR_3F avec (x, y, z). Les unités se trouvent dans les diPs et les valeurs sont illimitées.
Priorité
D2D1_SPOTDIFFUSE_PROP_FOCUS
FLOAT
1.0f
Focus de la lumière du spot. Cette propriété est sans unité et est définie entre 0 et 200.
LimitingConeAngle
D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE
FLOAT
90.0f
Angle cône qui limite la région où la lumière est projetée. Aucune lumière n’est projetée à l’extérieur du cône. L’angle de limitation du cône est l’angle entre l’axe de lumière du spot (l’axe entre les propriétés LightPosition et PointsAt ) et le cône clair spot. Cette propriété est définie en degrés et doit être comprise entre 0 et 90 degrés.
DiffuseConstant
D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT
FLOAT
1.0f
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é.
SurfaceScale
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
FLOAT
1.0f
Facteur d’échelle dans la direction Z. L’échelle de surface est sans unité et doit être comprise entre 0 et 10 000.
Color
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
Couleur de la lumière entrante. Cette propriété est exposée en tant que vecteur 3 (R, G, B) et utilisée pour calculer LR, LG, LB.
KernelUnitLength
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
D2D1_VECTOR_2F
{1.0f, 1.0f}
Taille d’un élément dans le noyau Sobel utilisé pour générer la normale de surface dans la direction 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.
ScaleMode
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR
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.

Modes de mise à l’échelle

Énumération Description
D2D1_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC Utilise le filtrage anisotrope pour échantillonner un modèle en fonction de la forme transformée de la bitmap.
D2D1_SPOTDIFFUSE_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_SPOTDIFFUSE_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