Efecto de transformación 3D

Use el efecto de transformación 3D para aplicar una matriz de transformación 4x4 arbitraria a una imagen.

Este efecto aplica la matriz (M?) que se proporciona a los vértices de esquina de la imagen de origen ([ x y z 1 ]) mediante este cálculo:

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

El CLSID de este efecto es CLSID_D2D13DTransform.

Imagen de ejemplo

Antes
la imagen antes de la transformación.
Después
la imagen después de la transformación.
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();

Propiedades de efecto

Enumeración de nombre para mostrar e índice Descripción
InterpolationMode
D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE
Modo de interpolación que usa el efecto en la imagen. Hay 5 modos de escala que varían en calidad y velocidad.
El tipo es D2D1_3DTRANSFORM_INTERPOLATION_MODE.
El valor predeterminado es D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DTRANSFORM_PROP_BORDER_MODE
Modo utilizado para calcular el borde de la imagen, suave o dura. Consulta Modos de borde para obtener más información.
El tipo es D2D1_BORDER_MODE.
El valor predeterminado es D2D1_BORDER_MODE_SOFT.
TransformMatrix
D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX
Matriz de transformación 4x4 aplicada al plano de proyección. El siguiente cálculo de matriz se usa para asignar puntos de un sistema de coordenadas 3D al sistema de coordenadas 2D transformado.
Matriz de profundidad 3D Dónde:
Coordenadas del plano de proyección de entrada X, Y, Z = Coordenadas del plano de proyección de entrada
Mx,y = Transformar elementos Matrix
Coordenadas del plano de proyección X , Y , Z =Salidas

Los elementos de matriz individuales no están limitados y no tienen unidad.
El tipo es D2D1_MATRIX_4X4_F.
El valor predeterminado es Matrix4x4F(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1).

Modos de interpolación

Enumeración Descripción
D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR Muestra el punto único más cercano y lo usa. Este modo usa menos tiempo de procesamiento, pero genera la imagen de menor calidad.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR Usa un ejemplo de cuatro puntos y una interpolación lineal. Este modo usa más tiempo de procesamiento que el modo vecino más cercano, pero genera una imagen de mayor calidad.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC Usa un kernel cúbico de 16 muestras para la interpolación. Este modo usa el mayor tiempo de procesamiento, pero genera una imagen de mayor calidad.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR Usa 4 muestras lineales dentro de un solo píxel para un buen suavizado de contorno perimetral. Este modo es bueno para reducir verticalmente por pequeñas cantidades en imágenes con pocos píxeles.
D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC Usa el filtrado anisotrópico para muestrear un patrón según la forma transformada del mapa de bits.

Nota

Si no selecciona un modo, el efecto tiene como valor predeterminado D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR.

Nota

El modo Anisotrópico genera mapas MIP al escalar, sin embargo, si establece la propiedad Cached en true en los efectos que se introducen en este efecto, los mapas MIP no se generarán cada vez para imágenes suficientemente pequeñas.

Modos de borde

Nombre Descripción
D2D1_BORDER_MODE_SOFT El efecto rellena la imagen con píxeles negros transparentes a medida que interpola, lo que da como resultado un borde suave.
D2D1_BORDER_MODE_HARD El efecto sujeta la salida al tamaño de la imagen de entrada.

Clase de matriz de transformación 4x4

Direct2D proporciona una clase de matriz 4x4 para proporcionar funciones auxiliares para transformar la imagen en 3 dimensiones. Consulta el tema Matrix4x4F para obtener más información y una descripción de todos los miembros de la clase.

Función Descripción Matriz
Matrix4x4F::Scale(X, Y, Z) Genera una matriz de transformación que escala el plano de proyección en la dirección X, Y o Z. Matriz scale3d
SkewX(X) Genera una matriz de transformación que sesga el plano de proyección en la dirección X. Muestra una matriz de asimetría en la dirección X.
SkewY(Y) Genera una matriz de transformación que sesga el plano de proyección en la dirección Y. Matriz de asimetría
Translation(X, Y, Z) Genera una matriz de transformación que traduce el plano de proyección en la dirección X, Y o Z. matriz de traducción
RotationX(X) Genera una matriz de transformación que gira el plano de proyección sobre el eje X. girar x matriz
RotationY(Y) Genera una matriz de transformación que gira el plano de proyección sobre el eje Y. girar matriz y
RotationZ(Z) Genera una matriz de transformación que gira el plano de proyección sobre el eje Z. girar la matriz z
PerspectiveProjection(D) Transformación de perspectiva con un valor de profundidad de D. matriz de perspectiva
RotationArbitraryAxis(X, Y, Z, degrees) Gira el plano de proyección sobre el eje que especifique.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 y actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Servidor mínimo compatible Windows 8 y actualización de plataforma para Windows 7 [aplicaciones de escritorio | Aplicaciones de la Tienda Windows]
Encabezado d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect