Partager via


Effet de transformation de perspective 3D

Utilisez l’effet de transformation de perspective 3D pour faire pivoter l’image en 3 dimensions comme si elle était vue à distance.

La transformation de perspective 3D est plus pratique que l’effet de transformation 3D, mais expose uniquement un sous-ensemble des fonctionnalités. Vous pouvez calculer une matrice de transformation 3D complète et appliquer une matrice de transformation plus arbitraire à une image à l’aide de la transformation 3D effet.

Le CLSID pour cet effet est CLSID_D2D13DPerspectiveTransform.

Exemple d’image

Avant
l’image avant l’effet.
Après
l’image après l’effet.
ComPtr<ID2D1Effect> perspectiveTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DPerspectiveTransform, &perspectiveTransformEffect);

perspectiveTransformEffect->SetInput(0, bitmap);

perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN, D2D1::Vector3F(0.0f, 192.0f, 0.0f));
perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION, D2D1::Vector3F(0.0f, 30.0f, 0.0f));

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(perspectiveTransformEffect.Get());
m_d2dContext->EndDraw();

Propriétés d’effet

Nom complet et énumération d’index Description
InterpolationMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE
Mode d’interpolation utilisé par l’effet sur l’image. Il existe 5 modes d’échelle qui varient en qualité et en vitesse.
Le type est D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE.
La valeur par défaut est D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE
Mode utilisé pour calculer la bordure de l’image, douce ou dure. Pour plus d’informations, consultez modes bordure.
Le type est D2D1_BORDER_MODE.
La valeur par défaut est D2D1_BORDER_MODE_SOFT.
Profondeur
D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH
La distance entre le PerspectiveOrigin jusqu’au plan de projection. La valeur spécifiée dans les adresses IP virtuelles et doit être supérieure à 0.
Le type est FLOAT.
La valeur par défaut est 1000.0f.
PerspectiveOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN
Emplacement X et Y de la visionneuse dans la scène 3D. Cette propriété est une D2D1_VECTOR_2F définie comme suit : (point X, point Y). Les unités se trouvent dans des ADRESSES IP.
Vous définissez la valeur Z avec la propriété Depth.
Le type est D2D1_VECTOR_2F.
La valeur par défaut est {0.0f, 0.0f}.
LocalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET
Une traduction effectuée par l’effet avant de faire pivoter le plan de projection. Cette propriété est une D2D1_VECTOR_3F définie comme suit : (X, Y, Z). Les unités se trouvent dans des ADRESSES IP.
Le type est D2D1_VECTOR_3F.
La valeur par défaut est {0.0f, 0.0f, 0.0f}.
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
Une traduction effectuée par l’effet après qu’il fait pivoter le plan de projection. Cette propriété est une D2D1_VECTOR_3F définie comme suit : (X, Y, Z). Les unités se trouvent dans des ADRESSES IP.
Le type est D2D1_VECTOR_3F.
La valeur par défaut est {0.0f, 0.0f, 0.0f}.
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
Point central de la rotation effectuée par l’effet. Cette propriété est une D2D1_VECTOR_3F définie comme suit : (X, Y, Z). Les unités se trouvent dans des ADRESSES IP.
Le type est D2D1_VECTOR_3F.
La valeur par défaut est {0.0f, 0.0f, 0.0f}.
Rotation
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
Angles de rotation pour chaque axe. Cette propriété est une D2D1_VECTOR_3F définie comme suit : (X, Y, Z). Les unités sont en degrés.
Le type est D2D1_VECTOR_3F.
La valeur par défaut est {0.0f, 0.0f, 0.0f}.

Modes d’interpolation

Énumération Description
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Échantillonne le point unique le plus proche et utilise cela. Ce mode utilise moins de temps de traitement, mais génère l’image de qualité la plus faible.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR Utilise un exemple de quatre points et une interpolation linéaire. Ce mode utilise plus de temps de traitement que le mode voisin le plus proche, mais génère une image de qualité supérieure.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_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 qualité supérieure.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_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 utile pour effectuer un scale-down de petites quantités sur des images avec quelques pixels.
D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Utilise le filtrage anisotropique pour échantillonner un modèle en fonction de la forme transformée de la bitmap.

Note

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

Note

Le mode anisotropique génère des mipmaps lors de la mise à l’échelle, toutefois, si vous définissez la propriété mise en cache sur true sur les effets qui sont entrés dans cet effet, les mipmaps ne seront pas générés chaque fois pour des images suffisamment petites.

Modes de bordure

Nom Description
D2D1_BORDER_MODE_SOFT L’effet fait glisser l’image avec des pixels noirs transparents pendant qu’elle interpole, ce qui entraîne un bord doux.
D2D1_BORDER_MODE_HARD L’effet bloque la sortie à la taille de l’image d’entrée.

Bitmap de sortie

La taille de la bitmap de sortie dépend de la matrice de transformation appliquée à l’image.

L’effet effectue l’opération de transformation, puis applique une zone englobante autour du résultat. La bitmap de sortie est la taille du cadre englobant.

Exigences

Exigence Valeur
Client minimum pris en charge Windows 8 et Mise à jour de plateforme pour Windows 7 [applications de bureau | Applications du Windows Store]
Serveur minimum 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