Partilhar via


Transformações (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 o suporte do Microsoft DirectComposition para transformações afins (lineares) bidimensionais (2D) e descreve os tipos de transformações suportadas pelo DirectComposition.

DirectComposition também suporta transformações de perspetiva 3D, mas como elas exigem a criação de um bitmap intermediário, DirectComposition as considera efeitos em vez de transformações. Para obter informações sobre efeitos de transformação de perspetiva 3D, consulte Effects.

Este tópico inclui as seguintes seções:

O que é uma transformação DirectComposition 2D?

Uma transformação 2D permite alterar a posição, o tamanho ou a natureza de um visual em duas dimensões, movendo o visual para outro local (translação), tornando-o maior ou menor (escala), girando-o (rotação) ou distorcendo sua forma (inclinação).

Uma transformação 2D é obtida mapeando os pontos de um visual de uma posição para outra dentro do mesmo espaço de coordenadas, ou de um espaço de coordenadas para outro. Esse mapeamento é descrito por uma tabela de valores chamada matriz de transformação, definida como uma coleção de três linhas com três colunas de valores de vírgula flutuante, conforme mostrado na tabela a seguir.

M11Padrão: 1.0
M21Padrão: 0.0
M31OffsetX: 0,0

M12Padrão: 0.0
M22Padrão: 1.0
M32OffsetY: 0,0

0.0
0.0
1.0

A matriz de transformação para transformações 2D afins é uma matriz 3 por 2 que omite a terceira coluna da matriz de transformação anterior. A tabela a seguir mostra o layout dessa matriz.

M11Padrão: 1.0
M21Padrão: 0.0
M31OffsetX: 0,0

M12Padrão: 0.0
M22Padrão: 1.0
M32OffsetY: 0,0

Observação

O DirectComposition não faz nenhum processamento especial ao aplicar transformações 2D a conteúdo estéreo. Isso significa que o conteúdo 3D pode parecer distorcido quando uma transformação 2D é aplicada a ele.

O espaço de coordenadas DirectComposition 2D

DirectComposition usa um espaço de coordenadas 2D canhoto; ou seja, os valores positivos do eixo x aumentam para a direita e os valores positivos do eixo y aumentam para baixo. Os elementos visuais são posicionados em relação à origem, que é o ponto onde os eixos x e y se cruzam (0, 0), como mostra a ilustração a seguir.

os eixos x e y de um espaço de coordenadas canhoto

Ao manipular valores em uma matriz de transformação 3 por 2, você pode girar, dimensionar, distorcer e traduzir um objeto em duas dimensões. Por exemplo, se você definir OffsetX como 100 e OffsetY como 200, moverá o objeto para a direita 100 pixels e para baixo 200 pixels.

Suporte para transformações 2D afins

A tabela a seguir descreve os tipos de transformações 2D afins suportadas pelo DirectComposition e lista as interfaces que você pode usar para executar os vários tipos de transformações.

Transformação/interface Descrição Ilustração
Girar 2D IDCompositionRotateTransform Rode um visual pelo ângulo especificado sobre o ponto central especificado. ilustração de um quadrado girado 45 graus no sentido horário sobre o centro do quadrado original
Escala 2D IDCompositionScaleTransform Dimensione um visual pelo fator especificado sobre o ponto central especificado. ilustração de um quadrado com escala de 130%
Inclinar 2D IDCompositionSkewTransform incline um visual pelo ângulo especificado ao longo dos eixos x e y e em torno do ponto central especificado. ilustração de um quadrado inclinado 30 graus no sentido anti-horário do eixo y
Definição da palavra 2D IDCompositionTranslateTransform Altere a posição de um visual na direção dos eixos x e y. ilustração de um quadrado moveu 20 unidades ao longo do eixo x positivo e 10 unidades ao longo do eixo y positivo

Transformações Matrix 2D

A interfaceIDCompositionMatrixTransformpermite que você defina sua própria matriz de transformação 2D afim 3 por 2 e aplique-a a um visual. Essa interface é útil se você precisar aplicar um tipo de transformação 2D afim que não está disponível por meio de outras interfaces de transformação DirectComposition. Você define a matriz preenchendo uma estrutura D2D_MATRIX_3X2_F e passando-a para o método IDCompositionMatrixTransform::SetMatrix.

Transformar grupos

Você pode usar grupos de transformação para combinar várias transformações em uma. Um grupo de transformação define uma coleção de objetos de transformação cujas matrizes são multiplicadas juntas na ordem em que são especificadas na coleção. A matriz de transformação resultante é então aplicada ao visual. Um grupo de transformação produz o mesmo resultado que aplicar cada transformação separadamente.

Lembre-se de que a ordem dos objetos de transformação em um grupo de transformação é importante. Por exemplo, se um visual é primeiro girado, depois dimensionado e, em seguida, traduzido, o resultado é diferente do que se o visual for primeiro traduzido, depois girado e, em seguida, dimensionado. DirectComposition sempre aplica as transformações a um visual na ordem em que são especificadas na coleção.

Para criar um grupo de transformações, primeiro crie os objetos de transformação que você deseja incluir no grupo e, em seguida, passe uma matriz de ponteiros de objeto de transformação para o IDCompositionDevice::CreateTransformGroup método. Depois de criar um grupo de transformação, não é possível adicionar ou remover nenhum objeto de transformação. No entanto, você pode modificar as propriedades dos objetos de transformação individuais na coleção e as alterações serão refletidas na matriz de transformação resultante.

Transformar animação

As propriedades de uma transformação podem ser animadas. Quando uma propriedade é animada, DirectComposition altera o valor da propriedade ao longo do tempo, em vez de tudo de uma vez. Isso é particularmente útil ao criar transições. Para obter mais informações, consulte Animation.