Share via


Transformaciones (DirectComposition)

Nota:

En el caso de las aplicaciones en Windows 10, se recomienda usar las API de Windows.UI.Composition en lugar de DirectComposition. Para obtener más información, consulta Modernize your desktop app using the Visual layer (Modernización de la aplicación de escritorio mediante la capa visual).

En este tema se describe la compatibilidad de Microsoft DirectComposition con transformaciones affine (2D) bidimensionales (lineales) y se describen los tipos de transformaciones que admite DirectComposition.

DirectComposition también admite transformaciones de perspectiva 3D, pero porque requieren la creación de un mapa de bits intermedio, DirectComposition los considera efectos en lugar de transformaciones. Para obtener información sobre los efectos de transformación de perspectiva 3D, vea Efectos.

Este tema incluye las siguientes secciones:

¿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 hace que sea mayor o menor (escalado), girarlo (rotación) o distorsionar su forma (rotación).

Una transformación 2D se logra mediante la asignación de los puntos de un objeto visual de una posición a otra dentro del mismo espacio de coordenadas o de 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 de afín es una matriz de 3 a 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 usa un espacio de coordenadas 2D a la izquierda; 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 donde el eje X y el eje Y se intersecan (0, 0), como se muestra en la ilustración siguiente.

el eje X y el eje Y de un espacio de coordenadas a la izquierda

Mediante la manipulación de valores en una matriz de transformación de 3 a 2, puede rotar, escalar, asimetría y traducir un objeto en dos dimensiones. Por ejemplo, si establece OffsetX en 100 y OffsetY en 200, mueve el objeto a la derecha de 100 píxeles y 200 píxeles hacia abajo.

Compatibilidad con transformaciones 2D affine

En la tabla siguiente se describen los tipos de transformaciones 2D affine compatibles con DirectComposition y se enumeran las interfaces que puede usar para realizar los distintos tipos de transformaciones.

Transformación e interfaz Descripción Ilustración
Rotate 2Didcompositionrotatetransform[newline] gira un objeto visual por el ángulo especificado sobre el punto central especificado. ilustración de un cuadrado girado de 45 grados en el sentido de las agujas del reloj sobre el centro del cuadrado original
Escala 2Didcompositionscaletransform[newline] escale un objeto visual por el factor especificado sobre el punto central especificado. ilustración de un cuadrado escalado del 130 por ciento
Skew 2Didcompositionskewtransform[newline] sesgar un objeto visual por el ángulo especificado a lo largo del eje X y del eje Y, y alrededor del punto central especificado. ilustración de una asimetría cuadrada de 30 grados en sentido contrario a las agujas del reloj desde el eje Y
Translate 2Didcompositiontranslatetransform[newline] cambie la posición de un objeto visual en la dirección del eje X y del eje Y. ilustración de un cuadrado movido 20 unidades a lo largo del eje X positivo y 10 unidades a lo largo del eje Y positivo

 

Transformaciones 2D de matriz

La interfaz IDCompositionMatrixTransform le permite definir su propia matriz de transformación 3 affine 2D 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. La matriz se define rellenando una estructura de D2D_MATRIX_3X2_F y pasandola al método IDCompositionMatrixTransform::SetMatrix .

Transformar grupos

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 un objeto visual se gira por primera vez, se escala y, a continuación, se traduce, el resultado es diferente que si el objeto visual se traduce por primera vez, después 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, primero cree 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.

Transformación de la animació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 es especialmente útil al crear transiciones. Para obtener más información, vea Animación.

Conceptos de DirectComposition