Partilhar via


Efeitos (DirectComposition)

Observação

Para aplicativos no Windows 10, recomendamos o uso de APIs Windows.UI.Composition em vez de DirectComposition. Para saber mais, veja 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 suportados pelo DirectComposition.

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.

DirectComposition cria um efeito pegando 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 perspetiva 3D, DirectComposition produz uma imagem de uma subárvore visual e, em seguida, textura a imagem em um plano 3D que é transformado de acordo com a matriz resultante do efeito de transformação 3D.

DirectComposition suporta os seguintes tipos de efeitos.

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

 

Observação

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

 

Opacidade

O efeito de opacidade permite definir o fator de opacidade que é aplicado a um visual inteiro quando o visual é renderizado. Difere de uma máscara alfa na medida em que 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 de opacidade é aplicado de pai para 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 tem uma opacidade de 50% (0,5) e um de seus filhos tem uma opacidade de 20% (0,2), a opacidade líquida para essa criança é renderizada como 10% (0,1), mas o valor da propriedade Opacity da criança ainda seria 0,2.

Efeitos de transformação de perspetiva 3D

Esta seção descreve o espaço de coordenadas que o DirectComposition usa para executar efeitos de transformação de perspetiva 3D. Ele também descreve os tipos de efeitos de transformação de perspetiva 3D que o DirectComposition suporta.

Observação

No DirectComposition, a aplicação de efeitos 3D a vários níveis na árvore visual não funciona da mesma forma que 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 (em torno do eixo y) em 90 graus, a borda da borda visual filho ficará voltada para o espectador e, portanto, esperaríamos que o visual não fosse visível (porque um bitmap não tem profundidade real). Se o visual pai é então girado para trás na direção z negativa (em torno do eixo y) em 90 graus, podemos esperar que o visual da criança se torne totalmente visível (uma vez que as transformações se negam umas às outras). No entanto, no DirectComposition este não é o caso. O visual filho não será visível porque foi "nivelado" no bitmap pai.

 

O espaço de coordenadas 3D do DirectComposition

O espaço de coordenadas 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 prosseguindo para a direita, valores positivos do eixo y prosseguindo para baixo e valores positivos do eixo z prosseguindo para fora da origem, em direção ao visualizador. Esta ilustração mostra o espaço de coordenadas 3D DirectComposition.

de espaço de coordenadas DirectCompostion 3D

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 de eixo de rotação [x,y,z] localizado no ponto central especificado (x,y,z). O ângulo é especificado em graus. O vetor de eixo de rotação padrão é [0,0,-1] e o ponto central padrão é (0,0,0).

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

Efeito de transformação de escala 3D

Um efeito de transformação de escala 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 um IDCompositionScaleTransform3D interface 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 IDCompositionDevice::CreateTranslateTransform3D método para criar um objeto de transformação de tradução 3D. O método recupera um IDCompositionTranslateTransform3D interface que você pode usar para definir as propriedades do objeto.

Efeito de transformação da matriz 3D

A interfaceIDCompositionMatrixTransform3D permite definir sua própria matriz de transformação 4 por 4 e aplicá-la a um visual. Essa interface é útil se você precisar aplicar um tipo de efeito de transformação de perspetiva 3D que não está disponível por meio de 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 IDCompositionMatrixTransform3D::SetMatrixElement método.

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 matricial das matrizes de transformação individuais na coleção.

A ordem das transformações individuais no grupo é importante. Por exemplo, se você primeiro girar, depois escalar, depois traduzir, obterá um resultado diferente do que se primeiro traduzir, depois girar, depois escalar. DirectComposition respeita a ordem na qual você especifica transformações 3D dentro de um grupo 3D de transformação da mesma forma que faz para transformações 2D. Além disso, as transformações de perspetiva 3D resultam no achatamento da árvore visual depois que todas as transformações 3D no visual atual foram aplicadas. Isso é feito para garantir que a cena pareça o mais próxima possível do 3D.

Objetos de efeito

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 effect à 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:

  • CreateMatrixTransform3D
  • CreateRotateTransform3D
  • CreateScaleTransform3D
  • CreateTranslateTransform3D

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 produza o efeito desejado. Para obter mais informações sobre como animar propriedades, consulte Animation.

Para aplicar um objeto de efeito ao visual, chame o IDCompositionVisual::SetEffect método. Quando você aplica um efeito a um visual, o efeito é aplicado a toda a subárvore visual enraizada nesse visual. Assim, por exemplo, se você definir a opacidade de um visual para 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 elementos visuais. Se você modificar as propriedades de um objeto de efeito depois de aplicá-lo aos elementos visuais, todos os elementos visuais serão recompostos 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 do grupo de efeitos e, em seguida, adicione efeitos ao grupo usando a interfaceIDCompositionEffectGroupdo objeto.

Conceitos do DirectComposition