Compartilhar via


Efeitos (DirectComposition)

Nota

Para aplicativos no Windows 10, recomendamos o uso de 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 usando 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, texturiza a 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.

 

Nota

O DirectComposition não faz 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 de opacidade aplicado a um visual inteiro quando o visual é renderizado. Ela 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 de 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 da rede desse filho será renderizada como 10% (0,1), mas o valor da propriedade opacidade do filho ainda será 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.

Nota

No DirectComposition, a aplicação de efeitos 3D a vários níveis na árvore visual não funciona da mesma maneira que funciona 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 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 DirectComposition para efeitos de transformação 3D localiza a origem (0,0,0) no canto superior esquerdo da superfície do 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 que prossseguem 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 de 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étodoIDCompositionDevice::CreateRotateTransform3D para criar um objeto de transformação de rotação 3D. O método recupera uma interfaceIDCompositionRotateTransform3Dque 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étodoIDCompositionDevice::CreateScaleTransform3D para criar um objeto de transformação de dimensionamento 3D. O método recupera uma interfaceIDCompositionScaleTransform3Dque 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 interfaceIDCompositionTranslateTransform3Dque você pode usar para definir as propriedades do objeto.

Efeito de transformação de matriz 3D

A interface deIDCompositionMatrixTransform3Dpermite 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 do DirectComposition 3D. 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

OIDCompositionDevice::CreateTransform3DGroupcria 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, se você primeiro girar, depois dimensionar, depois traduzir, obterá um resultado diferente do que se traduzir primeiro, depois girar e, em seguida, dimensionar. 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 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 de efeito à propriedade Effect do visual.

Para criar um objeto de efeito, use um dos seguintes métodos de interfaceIDCompositionDevicepara 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 Animation.

Para aplicar um objeto de efeito ao visual, chame o métodoIDCompositionVisual::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 redimensionadas 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 interfaceIDCompositionEffectGroup dodo objeto.

conceitos do DirectComposition