Partilhar via


Efeito de transformação 3D

Use o efeito de transformação 3D para aplicar uma matriz de transformação 4x4 arbitrária a uma imagem.

Este efeito aplica a matriz (M?) fornecida aos vértices de canto da imagem de origem ([ x y z 1 ]) usando este cálculo:

[ xr yr zr 1 ]=[ x y z 1 ]*M?

O CLSID para este efeito é CLSID_D2D13DTransform.

Imagem de exemplo

Antes
a imagem antes da transformação.
Após
a imagem após a transformação.
ComPtr<ID2D1Effect> D2D13DTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DTransform, &D2D13DTransformEffect);

D2D13DTransformEffect->SetInput(0, bitmap);

// You can use the helper methods in D2D1::Matrix4x4F to create common matrix transformations.
D2D1_MATRIX_4X4_F matrix = 
    D2D1::Matrix4x4F::Translation(0.0f, -192.0f, 0.0f) *
    D2D1::Matrix4x4F::RotationY(30.0f) *
    D2D1::Matrix4x4F::Translation(0.0f, 192.0f, 0.0f);

D2D13DTransformEffect->SetValue(D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(D2D13DTransformEffect.Get());
m_d2dContext->EndDraw();

Propriedades do efeito

Nome para exibição e enumeração de índice Descrição
InterpolaçãoModo de Interpolação
D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE
O modo de interpolação que o efeito usa na imagem. Existem 5 modos de escala que variam em qualidade e velocidade.
Type é D2D1_3DTRANSFORM_INTERPOLATION_MODE.
O valor padrão é D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DTRANSFORM_PROP_BORDER_MODE
O modo usado para calcular a borda da imagem, suave ou hard. Consulte Modos de borda para obter mais informações.
Type é D2D1_BORDER_MODE.
O valor padrão é D2D1_BORDER_MODE_SOFT.
TransformMatrix
D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX
Uma matriz de transformação 4x4 aplicada ao plano de projeção. O cálculo matricial a seguir é usado para mapear pontos de um sistema de coordenadas 3D para o sistema de coordenadas 2D transformado.
Matriz de profundidade 3D em que:
X, Y, Z = Coordenadas do plano de projeção de entrada
Mx,y = Elementos da matriz de transformação
X , Y , Z = Coordenadas do plano de projeção de saída

Os elementos matriciais individuais não são limitados e são sem unidade.
Type é D2D1_MATRIX_4X4_F.
O valor padrão é Matrix4x4F(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1).

Modos de interpolação

Enumeração Descrição
D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Recolhe amostras do ponto único mais próximo e utiliza-o. Este modo usa menos tempo de processamento, mas produz a imagem de menor qualidade.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR Utiliza uma amostra de quatro pontos e interpolação linear. Este modo utiliza mais tempo de processamento do que o modo vizinho mais próximo, mas produz uma imagem de qualidade superior.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC Usa um núcleo cúbico de 16 amostras para interpolação. Este modo utiliza a maior parte do tempo de processamento, mas produz uma imagem de qualidade superior.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Usa 4 amostras lineares dentro de um único pixel para uma boa suavização de borda. Este modo é bom para reduzir em pequenas quantidades em imagens com poucos pixels.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Usa filtragem anisotrópica para obter amostras de um padrão de acordo com a forma transformada do bitmap.

Observação

Se você não selecionar um modo, o efeito padrão será D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR.

Observação

O modo anisotrópico gera mipmaps ao dimensionar, no entanto, se você definir a propriedade Cached como true nos efeitos que são inseridos para esse efeito, os mipmaps não serão gerados sempre para imagens suficientemente pequenas.

Modos de borda

Designação Descrição
D2D1_BORDER_MODE_SOFT O efeito preenche a imagem com pixels pretos transparentes à medida que interpola, resultando em uma borda suave.
D2D1_BORDER_MODE_HARD O efeito fixa a saída ao tamanho da imagem de entrada.

Classe de matriz de transformação 4x4

O Direct2D fornece uma classe de matriz 4x4 para fornecer funções auxiliares para transformar a imagem em 3 dimensões. Consulte o tópicoMatrix4x4F para obter mais informações e uma descrição de todos os membros da classe.

Função Descrição Matriz
Matrix4x4F::Escala (X, Y, Z) Gera uma matriz de transformação que dimensiona o plano de projeção na direção X, Y e/ou Z. matriz scale3d
Inclinação (X) Gera uma matriz de transformação que distorce o plano de projeção na direção X. Mostra uma matriz inclinada na direção X.
SkewY(Y) Gera uma matriz de transformação que distorce o plano de projeção na direção Y. matriz de inclinação
Tradução(X, Y, Z) Gera uma matriz de transformação que traduz o plano de projeção na direção X, Y ou Z. traduzir matrix
Rotação X (X) Gera uma matriz de transformação que gira o plano de projeção em torno do eixo X. girar x matriz
Rotação Y (Y) Gera uma matriz de transformação que gira o plano de projeção em torno do eixo Y. girar a matriz y
Rotação Z (Z) Gera uma matriz de transformação que gira o plano de projeção em torno do eixo Z. girar a matriz z
PerspectivaProjeção(D) Uma transformação de perspetiva com um valor de profundidade de D. matriz de perspetiva
RotationArbitraryAxis(X, Y, Z, graus) Gira o plano de projeção sobre o eixo especificado.

Requerimentos

Exigência Valor
Cliente mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Servidor mínimo suportado Windows 8 e Atualização da Plataforma para Windows 7 [aplicações de ambiente de trabalho | Aplicações da Loja Windows]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect