Efecto de transformación de perspectiva 3D

Utilice el efecto de transformación de perspectiva 3D para girar la imagen en 3 dimensiones como si se viera desde una distancia.

La transformación de perspectiva 3D es más cómoda que el efecto de transformación 3D, pero solo expone un subconjunto de la funcionalidad. Puede calcular una matriz de transformación 3D completa y aplicar una matriz de transformación más arbitraria a una imagen mediante el efecto de transformación 3D .

El CLSID de este efecto es CLSID_D2D13DPerspectiveTransform.

Imagen de ejemplo

Antes
la imagen antes del efecto.
Después
la imagen después del efecto.
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();

Propiedades de efecto

Enumeración de nombre para mostrar e índice Descripción
InterpolationMode
D2D1_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE.
El valor predeterminado es D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR.
BorderMode
D2D1_3DPERSPECTIVETRANSFORM_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.
Profundidad
D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH
Distancia desde PerspectiveOrigin hasta el plano de proyección. El valor especificado en DIP y debe ser mayor que 0.
El tipo es FLOAT.
El valor predeterminado es 1000.0f.
PerspectiveOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN
La ubicación X e Y del visor en la escena 3D. Esta propiedad es un D2D1_VECTOR_2F definido como: (punto X, punto Y). Las unidades están en DIP.
Establezca el valor Z con la propiedad Depth .
El tipo es D2D1_VECTOR_2F.
El valor predeterminado es {0.0f, 0.0f}.
LocalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET
Una traducción que realiza el efecto antes de girar el plano de proyección. Esta propiedad es un D2D1_VECTOR_3F definido como: (X, Y, Z). Las unidades están en DIP.
El tipo es D2D1_VECTOR_3F.
El valor predeterminado es {0.0f, 0.0f, 0.0f}.
GlobalOffset
D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET
Una traducción que realiza el efecto después de girar el plano de proyección. Esta propiedad es un D2D1_VECTOR_3F definido como: (X, Y, Z). Las unidades están en DIP.
El tipo es D2D1_VECTOR_3F.
El valor predeterminado es {0.0f, 0.0f, 0.0f}.
RotationOrigin
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN
Punto central del giro que realiza el efecto. Esta propiedad es un D2D1_VECTOR_3F definido como: (X, Y, Z). Las unidades están en DIP.
El tipo es D2D1_VECTOR_3F.
El valor predeterminado es {0.0f, 0.0f, 0.0f}.
Rotación
D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION
Ángulos de rotación para cada eje. Esta propiedad es un D2D1_VECTOR_3F definido como: (X, Y, Z). Las unidades están en grados.
El tipo es D2D1_VECTOR_3F.
El valor predeterminado es {0.0f, 0.0f, 0.0f}.

Modos de interpolación

Enumeración Descripción
D2D1_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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_3DPERSPECTIVETRANSFORM_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.

Mapa de bits de salida

El tamaño del mapa de bits de salida depende de la matriz de transformación que se aplica a la imagen.

El efecto realiza la operación de transformación y, a continuación, aplica un rectángulo delimitador alrededor del resultado. El mapa de bits de salida es el tamaño del cuadro de límite.

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