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?
- O espaço de coordenadas 2D do DirectComposition
- Suporte para transformações 2D afins
- Transformações 2D de matriz
- Grupos de transformação
- Transformar animação
- Tópicos relacionados
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.
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. | |
Dimensione 2D IDCompositionScaleTransform | dimensione um visual pelo fator especificado sobre o ponto central especificado. | |
Inclinar 2D IDCompositionSkewTransform | incline um visual pelo ângulo especificado ao longo dos eixos x e y e em torno do ponto central especificado. | |
Traduza 2D IDCompositionTranslateTransform | altere a posição de um visual na direção dos eixos x e y. |
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.