Compartilhar via


Transformações (DirectComposition)

Observação

Para aplicativos no Windows 10, recomendamos usar APIs Windows.UI.Composition em vez de DirectComposition. Para obter mais informações, consulte Modernize 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 compatíveis com o DirectComposition.

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

Este tópico inclui as seções a seguir:

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

Uma transformação 2D permite que você altere a posição, o tamanho ou a natureza de um visual em duas dimensões, movendo-o para outro local (translação), tornando-o maior ou menor (dimensionamento), 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 ponto flutuante, conforme mostrado na tabela a seguir.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 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.

M11Default: 1.0
M21Default: 0.0
M31OffsetX: 0.0

M12Default: 0.0
M22Default: 1.0
M32OffsetY: 0.0

Observação

O DirectComposition não faz nenhum processamento especial ao aplicar transformações 2D ao 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 2D do DirectComposition

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

O eixo x e o eixo y de um espaço de coordenadas à esquerda

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

Suporte para transformações 2D afins

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

Transformar/interface Descrição Ilustração
Girar 2D IDCompositionRotateTransform gire um visual pelo ângulo especificado em torno do ponto central especificado. ilustração de um quadrado girado 45 graus no sentido horário em torno do centro do quadrado original
Dimensione 2D IDCompositionScaleTransform dimensione um visual pelo fator especificado sobre o ponto central especificado. ilustração de um quadrado em escala de 130 por cento
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 a partir do eixo y
Traduza 2D IDCompositionTranslateTransform altere a posição de um visual na direção dos eixos x e y. ilustração de um quadrado movido 20 unidades ao longo do eixo x positivo e 10 unidades ao longo do eixo y positivo

Transformações 2D de matriz

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

Grupos de transformação

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 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 a aplicação de 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 for primeiro girado, depois dimensionado e, em seguida, traduzido, o resultado será diferente do que se o visual for primeiro traduzido, depois girado e, em seguida, dimensionado. O DirectComposition sempre aplica as transformações a um visual na ordem em que elas são especificadas na coleção.

Para criar um grupo de transformação, 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 método IDCompositionDevice::CreateTransformGroup. Depois de criar um grupo de transformação, você não pode 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, confira Animação.