Efeito de iluminação ponto-especular

Use o efeito de iluminação especular pontual para criar uma imagem que pareça uma superfície reflexiva. O efeito usa o canal alfa da imagem como um mapa de altura e uma fonte de luz pontual que você posiciona, e calcula a reflexão e a luz de acordo com a parte especular do modelo de iluminação Phong.

A cor do bitmap de saída é resultado da cor da luz, da posição da luz e da geometria da superfície. A saída do canal alfa para cada pixel com iluminação especular é o máximo das saídas de canal vermelho, verde e azul para esse pixel.

O CLSID para este efeito é CLSID_D2D1PointSpecular.

Imagem de exemplo

O exemplo aqui mostra as imagens de entrada e saída do efeito de iluminação ponto-especular.

exemplo de captura de tela do efeito que mostra as imagens de entrada e saída do efeito de iluminação especular de ponto.

A luz especular refere-se à luz que é refletida em uma direção específica de acordo com o modelo de iluminação Phong.

um diagrama dos vetores usados para calcular uma saída de iluminação especular para um bitmap.

O efeito calcula os valores finais de pixel de saída usando as equações aqui:

as equações para calcular os valores finais de pixels.

onde

ok? = constante de iluminação especular.
o símbolo vetorial da unidade normal da superfície. = vetor de unidade normal de superfície que é uma função de x e y. Consulte o Mapa de altura e o vetor normal para os cálculos.
o símbolo vetorial da unidade intermediária. = vetor unitário intermediário entre o vetor unitário do olho e o vetor unitário da luz. Veja a fonte de luz pontual para os cálculos.
Lr, Lg, Lb = a cor clara nos componentes RGB.

Você define a constante de iluminação especular como a propriedade SpecularConstant e a cor da luz como a propriedade Color.

Fonte de luz pontual

Uma fonte de luz pontual emite luz em todas as direções, como na imagem aqui.

uma luz pontual emitindo luz em todas as direções.

Você define a posição da fonte de luz usando a propriedade LightPosition. O efeito calcula o vetor de luz, L , para uma fonte de luz pontual usando as equações aqui:

a equação do vetor de luz.

onde Light?, Lightye Lightz são a posição da luz de entrada. O efeito calcula o vetor intermediário, símbolo vetorial intermediário. conforme definido no modelo de iluminação Phong, usando a equação aqui. O modelo de iluminação assume que o vetor ocular, o símbolo do vetor ocular, está localizado em (0,0,1).

equação vetorial a meio caminho.

Tanto L quanto H são normalizados para vetores de comprimento unitário.

Mapa de altura e vetor normal

O efeito gera um mapa de altura para a imagem de entrada com base em seu canal alfa.

O componente altura (Z) é calculado utilizando a equação:

a equação para calcular a altura (z) da superfície.

O efeito calcula a superfície normal, o símbolo vetorial normal., para o bitmap de entrada usando um gradiente Sobel.

Iluminação especular constante e expoente

A luz especular representa a luz que é refletida da superfície do mapa de altura da imagem. Você especifica a propriedade SpecularExponent que determina a quantidade de reflexão especular do bitmap.

Expoentes maiores representam objetos mais brilhantes e refletem a luz em uma forma mais focada.

O SpecularConstant propriedade K? define a quantidade de luz refletida como uma proporção da luz recebida.

Propriedades do efeito

Nome de exibição e enumeração de índices Descrição
Posição de luz
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
A posição da luz da fonte luminosa pontual. A propriedade é um D2D1_VETOR_3F definido como (x, y, z). As unidades estão em pixels independentes do dispositivo (DIPs) e os valores são sem unidade e ilimitados. O tipo é D2D1_VETOR_3F.
O valor padrão é {0.0f, 0.0f, 0.0f}.
EspecularExpoente
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
O expoente para o termo especular na equação de iluminação Phong. Um valor maior corresponde a uma superfície mais reflexiva. Este valor é sem unidade e deve estar entre 1,0 e 128. O tipo é FLOAT.
O valor padrão é 1.0f.
EspecularConstante
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
A relação entre a reflexão especular e a luz recebida. O valor é sem unidade e deve estar entre 0 e 10.000. O tipo é FLOAT.
O valor padrão é 1.0f.
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
O fator de escala na direção Z para gerar um mapa de altura. O valor é sem unidade e deve estar entre 0 e 10.000. O tipo é FLOAT.
O valor padrão é 1.0f.
Cor
D2D1_POINTSPECULAR_PROP_COLOR
A cor da luz que entra. Esta propriedade é exposta como um D2D1_VETOR_3F (R, G, B) e usada para calcular LR, LG, LB. O tipo é D2D1_VETOR_3F.
O valor padrão é {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
O tamanho de um elemento no kernel Sobel usado para gerar a superfície normal nas direções X e Y. Esta propriedade corresponde aos valores dx e dy no gradiente de Sobel. Esta propriedade é um D2D1_VECTOR_2F(Kernel Unit Length X, Kernel Unit Length Y) e é definida como (DIPs/Kernel Unit). O efeito usa interpolação bilinear para dimensionar o bitmap para corresponder ao tamanho dos elementos do kernel. O tipo é D2D1_VETOR_2F.
O valor padrão é {1.0f, 1.0f}.
Modo de escala
D2D1_POINTSPECULAR_PROP_SCALE_MODE
O modo de interpolação que o efeito utiliza para escalar a imagem ao comprimento da unidade do kernel correspondente. Existem seis modos de escala que variam em qualidade e velocidade. Consulte Modos de escala para obter mais informações.
O tipo é D2D1_POINTSPECULAR_SCALE_MODE.
O valor padrão é D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Modos de dimensionamento

Enumeração Descrição
D2D1_POINTSPECULAR_SCALE_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_POINTSPECULAR_SCALE_MODE_LINEAR Utiliza uma amostra de quatro pontos e interpolação linear. Este modo produz uma imagem de qualidade superior à do vizinho mais próximo.
D2D1_POINTSPECULAR_SCALE_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_POINTSPECULAR_SCALE_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_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Usa filtragem anisotrópica para obter amostras de um padrão de acordo com a forma transformada do bitmap.
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Usa um kernel cúbico de tamanho variável e de alta qualidade para executar uma pré-redução da imagem se a redução estiver envolvida na transformação da matriz. Em seguida, usa o modo de interpolação cúbica para a saída final.

Nota

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

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