Efecto de iluminación especular puntual

Utilice el efecto de iluminación especular de punto para crear una imagen que parezca ser una superficie reflectante. El efecto usa el canal alfa de la imagen como un mapa de altura y una fuente de luz puntual que se coloca, y calcula la reflexión y la luz según la parte especular del modelo de iluminación Phong.

El color del mapa de bits de salida es el resultado del color claro, la posición de la luz y la geometría de la superficie. La salida del canal alfa para cada píxel con iluminación especular es el máximo de las salidas de canal rojo, verde y azul para ese píxel.

El CLSID de este efecto es CLSID_D2D1PointSpecular.

Imagen de ejemplo

En el ejemplo siguiente se muestran las imágenes de entrada y salida del efecto de iluminación especular de punto.

captura de pantalla de ejemplo de efecto que muestra las imágenes de entrada y salida del efecto de iluminación especular puntual.

La luz especular hace referencia a la luz que se refleja en una dirección específica según el modelo de iluminación Phong.

un diagrama de los vectores usados para agregar una salida de iluminación especular para un mapa de bits.

El efecto calcula los valores finales de píxeles de salida mediante las ecuaciones aquí:

ecuaciones para calcular los valores de píxeles finales.

where

¿K? = constante de iluminación especular.
símbolo de vector de unidad normal de superficie. = vector de unidad normal de superficie que es una función de x e y. Consulte Mapa de altura y vector normal para los cálculos.
símbolo vectorial de unidad media. = vector de unidad "medio" entre vector de unidad ocular y vector de unidad de luz. Consulte Point light source (Origen de luz puntual ) para obtener los cálculos.
Lr, Lg, Lb = el color claro en componentes RGB.

La constante de iluminación especular se establece como la propiedad SpecularConstant y el color claro como la propiedad Color .

Fuente de luz puntual

Una fuente de luz puntual emite luz en todas las direcciones como en la imagen aquí.

una luz puntual que emite luz en todas las direcciones.

La posición de la fuente de luz se establece mediante la propiedad LightPosition . El efecto calcula el vector de luz, L , para una fuente de luz puntual mediante las ecuaciones aquí:

ecuación de vector de luz.

donde Light?, Lighty y Lightz son la posición de la luz de entrada. El efecto calcula el vector medio, símbolo de vector medio camino. tal y como se define en el modelo de iluminación Phong, usando la ecuación aquí. El modelo de iluminación supone que el vector ocular, el símbolo del vector de ojo, se encuentra en (0,0,1).

ecuación de vector medio.

Tanto L como H se normalizan en vectores de longitud unitaria.

Mapa de altura y vector normal

El efecto genera un mapa de altura para la imagen de entrada en función de su canal alfa.

El componente de alto (Z) se calcula mediante la ecuación:

ecuación para calcular la altura (z) de la superficie.

El efecto calcula la superficie normal, el símbolo vectorial normal. Para el mapa de bits de entrada mediante un degradado Sobel.

Constante de iluminación especular y exponente

La luz especular representa la luz que se refleja desde la superficie del mapa de altura de la imagen. Especifique la propiedad SpecularExponent que determina la cantidad de reflexión especular del mapa de bits.

Los exponentes más grandes representan objetos más brillantes y reflejan la luz en una forma más centrada.

¿La propiedad SpecularConstant K? define la cantidad de luz reflejada como una relación de la luz entrante.

Propiedades de efecto

Enumeración de nombre para mostrar e índice Descripción
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Posición de la luz del punto fuente de luz. La propiedad es un D2D1_VECTOR_3F definido como (x, y, z). Las unidades se encuentran en píxeles independientes del dispositivo (DIP) y los valores son a menos que y no estén enlazados. El tipo es D2D1_VECTOR_3F.
El valor predeterminado es {0.0f, 0.0f, 0.0f}.
SpecularExponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
Exponente del término especular en la ecuación de iluminación Phong. Un valor mayor corresponde a una superficie más reflectante. Este valor no es unitario y debe estar comprendido entre 1,0 y 128. El tipo es FLOAT.
El valor predeterminado es 1.0f.
SpecularConstant
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
Relación de reflexión especular con la luz entrante. El valor no tiene unidad y debe estar comprendido entre 0 y 10 000. El tipo es FLOAT.
El valor predeterminado es 1.0f.
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
Factor de escala en la dirección Z para generar un mapa de altura. El valor no tiene unidad y debe estar comprendido entre 0 y 10 000. El tipo es FLOAT.
El valor predeterminado es 1.0f.
Color
D2D1_POINTSPECULAR_PROP_COLOR
Color de la luz entrante. Esta propiedad se expone como un D2D1_VECTOR_3F (R, G, B) y se usa para calcular LR, LG, LB. El tipo es D2D1_VECTOR_3F.
El valor predeterminado es {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Tamaño de un elemento del kernel de Sobel usado para generar la superficie normal en las direcciones X e Y. Esta propiedad se asigna a los valores dx y dy del degradado Sobel. Esta propiedad es una D2D1_VECTOR_2F (longitud de unidad de kernel X, longitud de unidad de kernel Y) y se define en (DIPs/unidad de kernel). El efecto usa la interpolación bilineal para escalar el mapa de bits para que coincida con el tamaño de los elementos kernel. El tipo es D2D1_VECTOR_2F.
El valor predeterminado es {1.0f, 1.0f}.
Scalemode
D2D1_POINTSPECULAR_PROP_SCALE_MODE
Modo de interpolación que usa el efecto para escalar la imagen a la longitud de la unidad de kernel correspondiente. Hay seis modos de escala que oscilan en calidad y velocidad. Consulta Modos de escalado para obtener más información.
El tipo es D2D1_POINTSPECULAR_SCALE_MODE.
El valor predeterminado es D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Modos de escalado

Enumeración Descripción
D2D1_POINTSPECULAR_SCALE_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_POINTSPECULAR_SCALE_MODE_LINEAR Usa una interpolación lineal y una muestra de cuatro puntos. Este modo genera una imagen de mayor calidad que el vecino más cercano.
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC Usa un kernel cúbico de 16 muestras para la interpolación. Este modo usa el tiempo de procesamiento más alto, pero genera una imagen de mayor calidad.
D2D1_POINTSPECULAR_SCALE_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_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Usa el filtrado anisotrópico para muestrear un patrón según la forma transformada del mapa de bits.
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Usa un kernel cúbico de alta calidad de tamaño variable para realizar una escala previa de la imagen si la reducción vertical está implicada en la matriz de transformación. A continuación, usa el modo de interpolación cúbica para la salida final.

Nota:

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

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