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 de la fonctionnalité. Vous pouvez calculer une matrice de transformation 3D complète et appliquer une matrice de transformation plus arbitraire à une image à l’aide de l’effet de transformation 3D .

Le CLSID de cet effet est CLSID_D2D13DPerspectiveTransform.

Exemple d’image

Avant
image avant l’effet.
After
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 d’affichage 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 de mise à l’é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, soft ou hard. Pour plus d’informations, consultez Modes de bordure .
Le type est D2D1_BORDER_MODE.
La valeur par défaut est D2D1_BORDER_MODE_SOFT.
Profondeur
D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH
Distance entre PerspectiveOrigin et le plan de projection. Valeur spécifiée dans les DIPs 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 sont en DIPs.
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
Traduction que l’effet effectue 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 sont en DIPs.
Le type est D2D1_VECTOR_3F.
La valeur par défaut est {0.0f, 0.0f, 0.0f}.
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
Traduction effectuée par l’effet après avoir fait pivoter le plan de projection. Cette propriété est une D2D1_VECTOR_3F définie comme suit : (X, Y, Z). Les unités sont en DIPs.
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 sont en DIPs.
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 de 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 l’utilise. 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 à 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 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_3DPERSPECTIVETRANSFORM_INTERPOLATION_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_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Utilise le filtrage anisotrope pour échantillonner un modèle en fonction de la forme transformée de la bitmap.

Notes

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

Notes

Le mode anisotrope 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 pour 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 place l’image avec des pixels noirs transparents au fur et à mesure qu’elle interpole, ce qui entraîne un bord souple.
D2D1_BORDER_MODE_HARD L’effet attache la sortie à la taille de l’image d’entrée.

Bitmap de sortie

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

L’effet effectue l’opération de transformation, puis applique un cadre englobant autour du résultat. L’image bitmap de sortie correspond à la taille du cadre englobant.

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