Efectos (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 describen los conceptos básicos de los efectos de Microsoft DirectComposition y se describen los tipos de efectos que admite DirectComposition.

Este tema contiene las siguientes secciones:

¿Qué es un efecto DirectComposition?

Un efecto DirectComposition es una operación de mapa de bits que se aplica durante la rasterización de un objeto visual para cambiar la apariencia del objeto visual de alguna manera.

DirectComposition crea un efecto tomando un subárbol visual y renderándolo en un solo mapa de bits antes de aplicar el efecto. Por ejemplo, para crear un efecto de transformación de perspectiva 3D, DirectComposition genera una imagen de un subárbol visual y, a continuación, textura la imagen en un plano 3D que se transforma según la matriz resultante del efecto de transformación 3D.

DirectComposition admite los siguientes tipos de efectos.

Tipo de efecto Descripción
Opacidad Establece la opacidad de un objeto visual completo.
Transformación de perspectiva 3D Aplica un efecto de transformación de perspectiva tridimensional (3D) a un objeto visual.

 

Nota:

DirectComposition no procesa ningún procesamiento especial al aplicar efectos al contenido estéreo 3D. Esto significa que el contenido 3D puede aparecer distorsionado cuando se aplica un efecto a él.

 

Opacidad

El efecto de opacidad permite establecer el factor de opacidad que se aplica a todo un objeto visual cuando se representa el objeto visual. Difiere de una máscara alfa en que se aplica el mismo factor de opacidad a todos los píxeles del objeto visual. La opacidad se especifica como un valor comprendido entre 0 (completamente transparente) y 1 (completamente opaco).

El factor de opacidad se aplica desde objetos visuales primarios a secundarios, pero los efectos visibles de la configuración de opacidad anidada no se indican en el valor de propiedad de los objetos visuales secundarios individuales. Por ejemplo, si un objeto visual raíz tiene una opacidad del 50 % (0,5) y uno de sus elementos secundarios tiene una opacidad del 20 % (0,2), la opacidad neta para ese elemento secundario se representa como 10 % (0,1), pero el valor de la propiedad Opacity del elemento secundario seguirá siendo 0,2.

Efectos de transformación de perspectiva 3D

En esta sección se describe el espacio de coordenadas que Usa DirectComposition para realizar efectos de transformación de perspectiva 3D. También describe los tipos de efectos de transformación de perspectiva 3D que admite DirectComposition.

Nota

En DirectComposition, aplicar efectos 3D a varios niveles del árbol visual no funciona de la misma manera que con un motor 3D completo, como Microsoft Direct3D. Por ejemplo, considere un objeto visual primario que tenga un solo objeto visual secundario. Si el objeto visual secundario se gira hacia delante en la dirección z (alrededor del eje Y) en 90 grados, el borde del borde visual secundario se enfrentaría al visor y, por lo tanto, esperaríamos que el objeto visual no fuera visible (porque un mapa de bits no tiene profundidad real). Si el objeto visual primario se gira hacia atrás en la dirección z negativa (alrededor del eje Y) en 90 grados, es posible que esperemos que el objeto visual secundario se vuelva visible (ya que las transformaciones se niegan entre sí). Sin embargo, en DirectComposition esto no es el caso. El objeto visual secundario no será visible porque se "aplanó en" el mapa de bits primario.

 

Espacio de coordenadas 3D de DirectComposition

El espacio de coordenadas DirectComposition para los efectos de transformación 3D localiza el origen (0,0,0,0) en la esquina superior izquierda de la superficie del mapa de bits, con valores positivos del eje X que continúan hacia la derecha, valores positivos del eje Y que continúan hacia abajo y los valores positivos del eje Z que continúan desde el origen, hacia el visor. En esta ilustración se muestra el espacio de coordenadas 3D de DirectComposition.

espacio de coordenadas 3d de directcompostion

Efecto de transformación de rotación 3D

Un efecto de transformación de rotación 3D gira un objeto visual en tres dimensiones por el ángulo especificado sobre un vector de eje de rotación [x,y,z] ubicado en el punto central especificado (x,y,z). El ángulo se especifica en grados. El vector del eje de rotación predeterminado es [0,0,-1] y el punto central predeterminado es (0,0,0).

Use el método IDCompositionDevice::CreateRotateTransform3D para crear un objeto de transformación de rotación 3D. El método recupera una interfaz IDCompositionRotateTransform3D que puede usar para establecer las propiedades del objeto.

Efecto de transformación de escalado 3D

Un efecto de transformación de escalado 3D hace que un objeto visual sea mayor o menor. Escala un objeto visual en la dirección [x,y,z] sobre el punto central (x,y,z). El punto central predeterminado es (0,0,0).

Use el método IDCompositionDevice::CreateScaleTransform3D para crear un objeto de transformación de escalado 3D. El método recupera una interfaz IDCompositionScaleTransform3D que puede usar para establecer las propiedades del objeto.

Efecto de transformación de conversión 3D

Un efecto de transformación de 3D cambia la posición de un objeto visual en la dirección [x,y,z].

Use el método IDCompositionDevice::CreateTranslateTransform3D para crear un objeto de transformación de traducción 3D. El método recupera una interfaz IDCompositionTranslateTransform3D que puede usar para establecer las propiedades del objeto.

Efecto de transformación de matriz 3D

La interfaz IDCompositionMatrixTransform3D le permite definir su propia matriz de transformación de 4 a 4 y aplicarla a un objeto visual. Esta interfaz es útil si necesita aplicar un tipo de efecto de transformación de perspectiva 3D que no está disponible a través de las otras interfaces de efecto de transformación 3D de DirectComposition. La matriz se define rellenando una estructura D3DMATRIX y pasandola al método IDCompositionMatrixTransform3D::SetMatrix . Como alternativa, puede establecer cada elemento de la matriz mediante el método IDCompositionMatrixTransform3D::SetMatrixElement .

Grupo de efectos de transformación 3D

IdCompositionDevice::CreateTransform3DGroup crea una colección de efectos de transformación 3D que se pueden aplicar a un objeto visual como grupo. La matriz puede incluir cualquier número de objetos de transformación y puede incluir transformaciones de matriz, rotación, escala y traducción. La colección de objetos de transformación 3D da como resultado una transformación cuyo valor es la multiplicación de matriz de las matrices de transformación individuales de la colección.

El orden de las transformaciones individuales en el grupo es importante. Por ejemplo, si primero gira, después escala y, a continuación, traslada, obtendrá un resultado diferente que si primero traslada, luego gira y, a continuación, escala. DirectComposition respeta el orden en el que se especifican transformaciones 3D dentro de un grupo 3D de transformación de la misma manera que para las transformaciones 2D. Además, las transformaciones de perspectiva 3D dan lugar a la aplanación del árbol visual después de aplicar todas las transformaciones 3D del objeto visual actual. Esto se hace para asegurarse de que la escena se ve lo más cerca posible de 3D.

Objetos Effect

Para aplicar un efecto a un objeto visual, primero debe crear y establecer las propiedades de un objeto de efecto que representa el tipo de efecto que desea generar en el objeto visual. A continuación, debe aplicar el objeto effect a la propiedad Effect del objeto visual.

Para crear un objeto effect, use uno de los métodos de interfaz IDCompositionDevice siguientes para crear un objeto effect para el tipo de efecto que desee. Los métodos siguientes crean objetos de efecto:

Cada uno de los métodos anteriores recupera una interfaz que puede usar para establecer las propiedades del objeto de efecto recién creado. Use los métodos de interfaz para establecer las propiedades según sea necesario para generar el efecto visual que desee.

La mayoría de las propiedades de un objeto de efecto se pueden animar. Para animar una propiedad determinada, cree un objeto de animación y aplíquelo a la propiedad que desea animar; De lo contrario, establezca la propiedad en un valor estático que genere el efecto que desee. Para obtener más información sobre cómo animar propiedades, vea Animación.

Para aplicar un objeto de efecto a un objeto visual, llame al método IDCompositionVisual::SetEffect . Cuando se aplica un efecto a un objeto visual, el efecto se aplica a todo el subárbol visual rooteado en ese objeto visual. Por lo tanto, por ejemplo, si establece la opacidad de un objeto visual en un 50 por ciento, la opacidad de todos los objetos visuales secundarios del subárbol visual se reducirá en un 50 por ciento. Puede aplicar el mismo objeto de efecto a uno o varios objetos visuales. Si modifica las propiedades de un objeto de efecto después de aplicarla a objetos visuales, todos los objetos visuales se vuelven a componer para reflejar el cambio.

Mediante el uso de un objeto de grupo de efectos, puede aplicar simultáneamente varios efectos a un objeto visual. En primer lugar, llame a IDCompositionDevice::CreateEffectGroup para crear el objeto de grupo de efectos y, a continuación, agregue efectos al grupo mediante la interfaz IDCompositionEffectGroup del objeto.

Conceptos de DirectComposition