Partilhar via


Efeito de transformação de perspetiva 3D

Use o efeito de transformação de perspetiva 3D para girar a imagem em 3 dimensões como se fosse vista à distância.

A transformação de perspetiva 3D é mais conveniente do que o efeito de transformação 3D, mas expõe apenas um subconjunto da funcionalidade. Você pode calcular uma matriz de transformação 3D completa e aplicar uma matriz de transformação mais arbitrária a uma imagem usando o efeito transformação 3D.

O CLSID para este efeito é CLSID_D2D13DPerspectiveTransform.

Imagem de exemplo

Antes
a imagem antes do efeito.
Após
a imagem após o efeito.
ComPtr<ID2D1Effect> perspectiveTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D13DPerspectiveTransform, &perspectiveTransformEffect);

perspectiveTransformEffect->SetInput(0, bitmap);

perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN, D2D1::Vector3F(0.0f, 192.0f, 0.0f));
perspectiveTransformEffect->SetValue(D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION, D2D1::Vector3F(0.0f, 30.0f, 0.0f));

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

Propriedades do efeito

Nome para exibição e enumeração de índice Descrição
InterpolaçãoModo de Interpolação
D2D1_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE.
O valor padrão é D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DPERSPECTIVETRANSFORM_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.
Profundidade
D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH
A distância do PerspectiveOrigin ao plano de projeção. O valor especificado em DIPs e deve ser maior que 0.
Tipo é FLOAT.
O valor padrão é 1000.0f.
PerspectivaOrigem
D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN
A localização X e Y do espectador na cena 3D. Esta propriedade é um D2D1_VETOR_2F definido como: (ponto X, ponto Y). As unidades estão em DIPs.
Você define o valor Z com a propriedade Depth.
Type é D2D1_VETOR_2F.
O valor padrão é {0.0f, 0.0f}.
LocalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET
Uma translação que o efeito executa antes de girar o plano de projeção. Esta propriedade é um D2D1_VETOR_3F definido como: (X, Y, Z). As unidades estão em DIPs.
Type é D2D1_VETOR_3F.
O valor padrão é {0.0f, 0.0f, 0.0f}.
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
Uma translação que o efeito executa depois de girar o plano de projeção. Esta propriedade é um D2D1_VETOR_3F definido como: (X, Y, Z). As unidades estão em DIPs.
Type é D2D1_VETOR_3F.
O valor padrão é {0.0f, 0.0f, 0.0f}.
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
O ponto central da rotação que o efeito executa. Esta propriedade é um D2D1_VETOR_3F definido como: (X, Y, Z). As unidades estão em DIPs.
Type é D2D1_VETOR_3F.
O valor padrão é {0.0f, 0.0f, 0.0f}.
Rotação
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
Os ângulos de rotação para cada eixo. Esta propriedade é um D2D1_VETOR_3F definido como: (X, Y, Z). As unidades são em graus.
Type é D2D1_VETOR_3F.
O valor padrão é {0.0f, 0.0f, 0.0f}.

Modos de interpolação

Enumeração Descrição
D2D1_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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 será D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR como padrão.

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.

Bitmap de saída

O tamanho do bitmap de saída depende da matriz de transformação que é aplicada à imagem.

O efeito executa a operação de transformação e, em seguida, aplica uma caixa delimitadora em torno do resultado. O bitmap de saída é o tamanho da caixa delimitadora.

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