Transformations (DirectComposition)

Remarque

Pour les applications sous Windows 10, nous vous recommandons d'utiliser les API Windows.UI.Composition au lieu de DirectComposition. Pour plus d'infos, consultez Moderniser votre application de bureau à l'aide de la couche visuelle.

Cette rubrique traite de la prise en charge par Microsoft DirectComposition des transformations affines (linéaires) en deux dimensions (2D) et décrit les types de transformations prises en charge par DirectComposition.

DirectComposition prend également en charge les transformations de perspective 3D, mais comme elles nécessitent la création d'une image bitmap intermédiaire, DirectComposition les considère comme des effets plutôt que comme des transformations. Pour plus d'informations sur les effets de transformation en perspective 3D, reportez-vous à la section Effets.

Cette rubrique contient les sections suivantes :

Qu'est-ce qu'une transformation 2D DirectComposition?

Une transformation 2D vous permet de modifier la position, la taille ou la nature d'un visuel en deux dimensions en le déplaçant vers un autre endroit (translation), en l'agrandissant ou en le réduisant (mise à l'échelle), en le tournant (rotation) ou en déformant sa forme (obliquité).

Une transformation 2D est réalisée en mappant les points d'un visuel d'une position à une autre dans le même espace de coordonnées, ou d'un espace de coordonnées à un autre. Ce mappage est décrit par un tableau de valeurs appelé matrice de transformation, défini comme une collection de trois lignes et trois colonnes de valeurs à virgule flottante, comme le montre le tableau suivant.

M11Par défaut : 1,0
M21Défaut : 0.0
M31OffsetX : 0.0

M12Par défaut : 0.0
M22Par défaut : 1,0
M32OffsetY : 0,0

0.0
0.0
1.0

La matrice de transformation pour les transformations affines 2D est une matrice 3 par 2 qui omet la troisième colonne de la matrice de transformation précédente. Le tableau suivant montre la disposition de cette matrice.

M11Par défaut : 1,0
M21Défaut : 0.0
M31OffsetX : 0.0

M12Par défaut : 0.0
M22Par défaut : 1,0
M32OffsetY : 0,0

Remarque

DirectComposition n'effectue aucun traitement spécial lors de l'application de transformations 2D à un contenu stéréo. Cela signifie que le contenu 3D peut apparaître déformé lorsqu'une transformation 2D lui est appliquée.

L'espace de coordonnées 2D de DirectComposition

DirectComposition utilise un espace de coordonnées 2D gauche, c'est-à-dire que les valeurs positives de l'axe des x augmentent vers la droite et les valeurs positives de l'axe des y augmentent vers le bas. Les visuels sont positionnés par rapport à l'origine, qui est le point d'intersection de l'axe des x et de l'axe des y (0, 0), comme le montre l'illustration suivante.

l'axe des x et l'axe des y d'un espace de coordonnées gauches

En manipulant les valeurs d'une matrice de transformation 3 x 2, vous pouvez faire pivoter, mettre à l'échelle, incliner et translater un objet en deux dimensions. Par exemple, si vous définissez OffsetX sur 100 et OffsetY sur 200, vous déplacez l'objet de 100 pixels vers la droite et de 200 pixels vers le bas.

Prise en charge des transformations affines 2D

Le tableau suivant décrit les types de transformations 2D affines prises en charge par DirectComposition et répertorie les interfaces que vous pouvez utiliser pour effectuer les différents types de transformations.

Transformation/interface Description Illustration
Rotation 2D IDCompositionRotateTransform fait pivoter un visuel de l'angle spécifié autour du point central spécifié. Illustration d'un carré tourné de 45 degrés dans le sens des aiguilles d'une montre par rapport au centre du carré d'origine.
Scale 2D IDCompositionScaleTransform met à l'échelle un visuel selon le facteur spécifié autour du point central spécifié. illustration d'un carré mis à l'échelle de 130 pour cent
Skew 2D IDCompositionSkewTransform incline un visuel de l'angle spécifié le long de l'axe x et de l'axe y, et autour du point central spécifié. Illustration d'un carré incliné de 30 degrés dans le sens inverse des aiguilles d'une montre par rapport à l'axe des y.
Translate 2D IDCompositionTranslateTransform modifie la position d'un visuel dans la direction de l'axe des x et de l'axe des y. illustration d'un carré déplacé de 20 unités le long de l'axe x positif et de 10 unités le long de l'axe y positif

Transformations 2D matricielles

L'interface IDCompositionMatrixTransform vous permet de définir votre propre matrice de transformation 2D affine 3 par 2 et de l'appliquer à un visuel. Cette interface est utile si vous devez appliquer un type de transformation 2D affine qui n'est pas disponible via les autres interfaces de transformation de DirectComposition. Vous définissez la matrice en remplissant une structure D2D_MATRIX_3X2_F et en la passant à la méthode IDCompositionMatrixTransform::SetMatrix.

Groupes de transformation

Vous pouvez utiliser des groupes de transformation pour combiner plusieurs transformations en une seule. Un groupe de transformation définit une collection d'objets de transformation dont les matrices sont multipliées dans l'ordre dans lequel elles sont spécifiées dans la collection. La matrice de transformation résultante est ensuite appliquée au visuel. Un groupe de transformation produit le même résultat que l'application de chaque transformation séparément.

N'oubliez pas que l'ordre des objets de transformation dans un groupe de transformation est important. Par exemple, si un visuel est d'abord pivoté, puis mis à l'échelle, puis traduit, le résultat est différent de celui obtenu si le visuel est d'abord traduit, puis pivoté, puis mis à l'échelle. DirectComposition applique toujours les transformations à un visuel dans l'ordre dans lequel elles sont spécifiées dans la collection.

Pour créer un groupe de transformation, créez d'abord les objets de transformation que vous souhaitez inclure dans le groupe, puis passez un tableau de pointeurs d'objets de transformation à la méthode IDCompositionDevice::CreateTransformGroup. Une fois que vous avez créé un groupe de transformation, vous ne pouvez plus ajouter ou supprimer d'objets de transformation. Cependant, vous pouvez modifier les propriétés des objets de transformation individuels de la collection, et les changements seront reflétés dans la matrice de transformation résultante.

Animation des transformations

Les propriétés d'une transformation peuvent être animées. Lorsqu'une propriété est animée, DirectComposition modifie la valeur de la propriété au fil du temps, plutôt qu'en une seule fois. Ceci est particulièrement utile pour créer des transitions. Pour plus d'informations, voir Animation.