Share via


Efeitos (DirectComposition)

Observação

Para aplicativos em Windows 10, recomendamos usar APIs Windows.UI.Composition em vez de DirectComposition. Para obter mais informações, consulte Modernizar seu aplicativo da área de trabalho usando a camada Visual.

Este tópico discute os conceitos básicos dos efeitos do Microsoft DirectComposition e descreve os tipos de efeitos aos quais o DirectComposition dá suporte.

Este tópico contém as seguintes seções:

O que é um efeito DirectComposition?

Um efeito DirectComposition é uma operação de bitmap que é aplicada durante a rasterização de um visual para alterar a aparência do visual de alguma forma.

O DirectComposition cria um efeito tomando uma subárvore visual e renderizando-a em um único bitmap antes de aplicar o efeito. Por exemplo, para criar um efeito de transformação de perspectiva 3D, o DirectComposition produz uma imagem de uma subárvore visual e, em seguida, texturas da imagem em um plano 3D que é transformado de acordo com a matriz resultante do efeito de transformação 3D.

O DirectComposition dá suporte aos seguintes tipos de efeitos.

Tipo de efeito Descrição
Opacidade Define a opacidade de um visual inteiro.
Transformação de perspectiva 3D Aplica um efeito de transformação de perspectiva tridimensional (3D) a um visual.

 

Observação

O DirectComposition não faz nenhum processamento especial ao aplicar efeitos ao conteúdo estéreo 3D. Isso significa que o conteúdo 3D pode parecer distorcido quando um efeito é aplicado a ele.

 

Opacidade

O efeito opacidade permite definir o fator opacidade que é aplicado a um visual inteiro quando o visual é renderizado. Ele difere de uma máscara alfa, pois o mesmo fator de opacidade é aplicado a todos os pixels no visual. A opacidade é especificada como um valor que varia de 0 (completamente transparente) a 1 (completamente opaco).

O fator opacidade é aplicado de visuais pai a filho, mas os efeitos visíveis das configurações de opacidade aninhadas não são indicados no valor da propriedade de visuais filho individuais. Por exemplo, se um visual raiz tiver uma opacidade de 50% (0,5) e um de seus filhos tiver uma opacidade de 20% (0,2), a opacidade líquida desse filho será renderizada como 10% (0,1), mas o valor da propriedade Opacidade do filho ainda seria 0,2.

Efeitos de transformação da perspectiva 3D

Esta seção descreve o espaço de coordenadas que o DirectComposition usa para executar efeitos de transformação de perspectiva 3D. Ele também descreve os tipos de efeitos de transformação de perspectiva 3D compatíveis com o DirectComposition.

Observação

No DirectComposition, a aplicação de efeitos 3D a vários níveis na árvore visual não funciona da mesma maneira que acontece com um mecanismo 3D completo, como o Microsoft Direct3D. Por exemplo, considere um visual pai que tenha um único visual filho. Se o visual filho for girado para frente na direção z (ao redor do eixo y) em 90 graus, a borda da borda visual filho enfrentaria o visualizador e, portanto, esperaríamos que o visual não estivesse visível (porque um bitmap não tem profundidade real). Se o visual pai for girado para trás na direção z negativa (em torno do eixo y) em 90 graus, podemos esperar que o visual filho fique totalmente visivelmente (já que as transformações negam umas às outras). No entanto, no DirectComposition, esse não é o caso. O visual filho não ficará visível porque foi "mesclado" no bitmap pai.

 

O espaço de coordenadas 3D do DirectComposition

O espaço de coordenadas do DirectComposition para efeitos de transformação 3D localiza a origem (0,0,0) no canto superior esquerdo da superfície de bitmap, com valores positivos do eixo x continuando para a direita, valores positivos do eixo y continuando para baixo e valores positivos do eixo z continuando para fora da origem, em direção ao visualizador. Esta ilustração mostra o espaço de coordenadas 3D do DirectComposition.

espaço de coordenadas 3d directcompostion

Efeito de transformação de rotação 3D

Um efeito de transformação de rotação 3D gira um visual em três dimensões pelo ângulo especificado sobre um vetor do eixo de rotação [x,y,z] localizado no ponto central especificado (x,y,z). O ângulo é especificado em graus. O vetor do eixo de rotação padrão é [0,0,-1], e o ponto central padrão é (0,0,0).

Use o método IDCompositionDevice::CreateRotateTransform3D para criar um objeto de transformação de rotação 3D. O método recupera uma interface IDCompositionRotateTransform3D que você pode usar para definir as propriedades do objeto.

Efeito de transformação de dimensionamento 3D

Um efeito de transformação de dimensionamento 3D torna um visual maior ou menor. Ele dimensiona um visual na direção [x,y,z] sobre o ponto central (x,y,z). O ponto central padrão é (0,0,0).

Use o método IDCompositionDevice::CreateScaleTransform3D para criar um objeto de transformação de dimensionamento 3D. O método recupera uma interface IDCompositionScaleTransform3D que você pode usar para definir as propriedades do objeto.

Efeito de transformação de tradução 3D

Um efeito de transformação de tradução 3D altera a posição de um visual na direção [x,y,z].

Use o método IDCompositionDevice::CreateTranslateTransform3D para criar um objeto de transformação de tradução 3D. O método recupera uma interface IDCompositionTranslateTransform3D que você pode usar para definir as propriedades do objeto.

Efeito de transformação de matriz 3D

A interface IDCompositionMatrixTransform3D permite definir sua própria matriz de transformação 4 por 4 e aplicá-la a um visual. Essa interface será útil se você precisar aplicar um tipo de efeito de transformação de perspectiva 3D que não está disponível por meio das outras interfaces de efeito de transformação 3D do DirectComposition. Você define a matriz preenchendo uma estrutura D3DMATRIX e passando-a para o método IDCompositionMatrixTransform3D::SetMatrix . Como alternativa, você pode definir cada elemento da matriz usando o método IDCompositionMatrixTransform3D::SetMatrixElement .

Grupo de efeitos de transformação 3D

O IDCompositionDevice::CreateTransform3DGroup cria uma coleção de efeitos de transformação 3D que você pode aplicar a um visual como um grupo. A matriz pode incluir qualquer número de objetos de transformação e pode incluir matriz, girar, dimensionar e traduzir transformações. A coleção de objetos de transformação 3D resulta em uma transformação cujo valor é a multiplicação de matriz das matrizes de transformação individuais na coleção.

A ordem das transformações individuais no grupo é importante. Por exemplo, girar, ajustar a escala e mover terá um resultado diferente de mover, girar e ajustar a escala. O DirectComposition respeita a ordem na qual você especifica transformações 3D em um grupo 3D de transformação da mesma maneira que faz para transformações 2D. Além disso, as transformações de perspectiva 3D resultam no nivelamento da árvore visual depois que todas as transformações 3D no visual atual foram aplicadas. Isso é feito para garantir que a cena fique o mais próxima possível de 3D.

Objetos effect

Para aplicar um efeito a um visual, primeiro você precisa criar e definir as propriedades de um objeto de efeito que representa o tipo de efeito que você deseja produzir no visual. Em seguida, você precisa aplicar o objeto de efeito à propriedade Effect do visual.

Para criar um objeto de efeito, use um dos seguintes métodos de interface IDCompositionDevice para criar um objeto de efeito para o tipo de efeito desejado. Os seguintes métodos criam objetos de efeito:

Cada um dos métodos anteriores recupera uma interface que você pode usar para definir as propriedades do objeto de efeito recém-criado. Use os métodos de interface para definir as propriedades conforme necessário para produzir o efeito visual desejado.

A maioria das propriedades de um objeto de efeito pode ser animada. Para animar uma propriedade específica, crie um objeto de animação e aplique-o à propriedade que você deseja animar; caso contrário, defina a propriedade como um valor estático que produz o efeito desejado. Para obter mais informações sobre como animar propriedades, consulte Animação.

Para aplicar um objeto de efeito ao visual, chame o método IDCompositionVisual::SetEffect . Quando você aplica um efeito a um visual, o efeito é aplicado a toda a subárvore visual com raiz nesse visual. Portanto, por exemplo, se você definir a opacidade de um visual como 50%, a opacidade de todos os visuais filho na subárvore visual será reduzida em 50%. Você pode aplicar o mesmo objeto de efeito a um ou mais visuais. Se você modificar as propriedades de um objeto de efeito depois de aplicá-lo aos visuais, todos os visuais serão compostos novamente para refletir a alteração.

Usando um objeto de grupo de efeitos, você pode aplicar simultaneamente vários efeitos a um visual. Primeiro chame IDCompositionDevice::CreateEffectGroup para criar o objeto de grupo de efeitos e, em seguida, adicione efeitos ao grupo usando a interface IDCompositionEffectGroup do objeto.

Conceitos do DirectComposition