Transformaciones (DirectComposition)
Nota:
En el caso de las aplicaciones de Windows 10, se recomienda usar las API de Windows.UI.Composition en lugar de DirectComposition. Para obtener más información, consulte Modernización de una aplicación de escritorio mediante la capa visual.
En este tema se describe la compatibilidad de Microsoft DirectComposition con transformaciones afines (2D) bidimensionales (lineales) y se describen los tipos de transformaciones que admite DirectComposition.
DirectComposition también admite transformaciones de perspectiva 3D, pero dado que requieren la creación de un mapa de bits intermedio, DirectComposition considera que son efectos en lugar de transformaciones. Para obtener información sobre los efectos de transformación de perspectiva 3D, consulte Efectos.
Este tema incluye las siguientes secciones:
- ¿Qué es una transformación 2D de DirectComposition?
- Espacio de coordenadas 2D de DirectComposition
- Compatibilidad con transformaciones 2D afines
- Transformaciones 2D de matriz
- Grupos de transformación
- Animación de transformación
- Temas relacionados
¿Qué es una transformación 2D de DirectComposition?
Una transformación 2D permite modificar la posición, el tamaño o la naturaleza de un objeto visual en dos dimensiones moviendo el objeto visual a otra ubicación (traducción), lo que lo convierte en mayor o menor (escalado), lo convierte en (rotación) o distorsiona su forma (asimetría).
Una transformación 2D se logra asignando los puntos de un objeto visual de una posición a otra dentro del mismo espacio de coordenadas, o desde un espacio de coordenadas a otro. Esta asignación se describe mediante una tabla de valores denominada matriz de transformación, definida como una colección de tres filas con tres columnas de valores de punto flotante, como se muestra en la tabla siguiente.
M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0
M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0.0
0,0
0,0
1.0
La matriz de transformación para las transformaciones 2D afines es una matriz de 3 por 2 que omite la tercera columna de la matriz de transformación anterior. En la tabla siguiente se muestra el diseño de esta matriz.
M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0
M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0.0
Nota:
DirectComposition no realiza ningún procesamiento especial al aplicar transformaciones 2D al contenido estéreo. Esto significa que el contenido 3D puede aparecer distorsionado cuando se aplica una transformación 2D.
Espacio de coordenadas 2D de DirectComposition
DirectComposition utiliza un espacio de coordenadas 2D de lado izquierdo; es decir, los valores positivos del eje X aumentan a la derecha y los valores positivos del eje Y aumentan hacia abajo. Los objetos visuales se colocan en relación con el origen, que es el punto en que el eje X y el eje Y forman intersección (0, 0), como se muestra en la ilustración siguiente.
Al manipular valores en una matriz de transformación de 3 por 2, puede girar, escalar, sesgar y traducir un objeto en dos dimensiones. Por ejemplo, si establece OffsetX en 100 y OffsetY en 200, mueva el objeto a la derecha 100 píxeles y hacia abajo 200 píxeles.
Compatibilidad con transformaciones 2D afines
En la tabla siguiente se describen los tipos de transformaciones 2Dafines compatibles con DirectComposition y se enumeran las interfaces que puede usar para realizar los distintos tipos de transformaciones.
Transformación/interfaz | Descripción | Ilustración |
---|---|---|
Rotación 2D IDCompositionRotateTransform | gira un objeto visual por el ángulo especificado sobre el punto central especificado. | |
Escalado 2D IDCompositionScaleTransform | escala un objeto visual por el factor especificado sobre el punto central especificado. | |
Asimetría 2D IDCompositionSkewTransform | sesga un objeto visual por el ángulo especificado a lo largo del eje X y del eje Y, y alrededor del punto central especificado. | |
Traslado 2D IDCompositionTranslateTransform | cambia la posición de un objeto visual en la dirección del eje X y del eje Y. |
Transformaciones 2D de matriz
La interfaz IDCompositionMatrixTransform le permite definir su propia matriz de transformación 2D afín de 3 por 2 y aplicarla a un objeto visual. Esta interfaz es útil si necesita aplicar un tipo de transformación 2D afín que no está disponible a través de las otras interfaces de transformación DirectComposition. Para definir la matriz, rellene una estructura D2D_MATRIX_3X2_F y pásela al método IDCompositionMatrixTransform::SetMatrix.
Grupos de transformación
Puede usar grupos de transformación para combinar varias transformaciones en una. Un grupo de transformación define una colección de objetos de transformación cuyas matrices se multiplican juntas en el orden en que se especifican en la colección. A continuación, la matriz de transformación resultante se aplica al objeto visual. Un grupo de transformación genera el mismo resultado que aplicar cada transformación por separado.
Tenga en cuenta que el orden de los objetos de transformación en un grupo de transformación es importante. Por ejemplo, si primero se gira un objeto visual, luego se escala y, a continuación, se traslada, el resultado es diferente que si el objeto visual se traslada primero, luego se gira y, a continuación, se escala. DirectComposition siempre aplica las transformaciones a un objeto visual en el orden en que se especifican en la colección.
Para crear un grupo de transformación, cree primero los objetos de transformación que desea incluir en el grupo y, a continuación, pase una matriz de punteros de objeto de transformación al método IDCompositionDevice::CreateTransformGroup. Después de crear un grupo de transformación, no puede agregar ni quitar ningún objeto de transformación. Sin embargo, puede modificar las propiedades de los objetos de transformación individuales de la colección y los cambios se reflejarán en la matriz de transformación resultante.
Animación de transformación
Las propiedades de una transformación se pueden animar. Cuando se anima una propiedad, DirectComposition cambia el valor de la propiedad a lo largo del tiempo, en lugar de todo a la vez. Esto resulta especialmente útil al crear transiciones. Para obtener más información, consulte Animación.