Share via


Transformações (DirectComposition)

Observação

Para aplicativos no Windows 10, é recomendável 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 o suporte do Microsoft DirectComposition para transformações afim bidimensionais (lineares) 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 alterar a posição, o tamanho ou a natureza de um visual em duas dimensões movendo o visual para outro local (tradução), tornando-o maior ou menor (dimensionamento), girando-o (rotação) ou distorcendo sua forma (distorçã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 afim é 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 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 canhoto; 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

Manipulando 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, mova o objeto para a direita 100 pixels e reduza 200 pixels.

Suporte para transformações 2D affine

A tabela a seguir descreve os tipos de transformações 2D affine compatíveis com o 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
Giraridcompositionrotatetransform 2D[newline] gire 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
Scale 2Didcompositionscaletransform[newline] dimensione um visual pelo fator especificado sobre o ponto central especificado. ilustração de uma escala quadrada de 130 por cento
Skew 2Didcompositionskewtransform[newline] distorcer um visual pelo ângulo especificado ao longo do eixo x e do eixo y e ao redor do ponto central especificado. ilustração de um quadrado distorcido 30 graus no sentido anti-horário do eixo y
Translate 2Didcompositiontranslatetransform[newline] altere a posição de um visual na direção do eixo x e do eixo 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 definir sua própria matriz de transformação 2D affine 3 por 2 e aplicá-la a um visual. Essa interface será útil se você precisar aplicar um tipo de transformação 2D affine 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 é aplicada ao visual. Um grupo de transformação produz o mesmo resultado que aplicar cada transformação separadamente.

Tenha em mente que a ordem dos objetos de transformação em um grupo de transformação é importante. Por exemplo, se um visual for girado primeiro, depois dimensionado e convertido, o resultado será diferente do que se o visual for traduzido primeiro, 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, consulte Animação.

Conceitos do DirectComposition