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
- Fonte de luz pontual
- Mapa de altura e vetor normal
- Iluminação especular constante e expoente
- Propriedades de efeito
- Modos de escala
- Requisitos
- Tópicos relacionados
O exemplo aqui mostra as imagens de entrada e saída do efeito de iluminação ponto-especular.
A luz especular refere-se à luz que é refletida em uma direção específica de acordo com o modelo de iluminação Phong.
O efeito calcula os valores finais de pixel de saída usando as equações aqui:
onde
- ok? = constante de iluminação especular.


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.
Uma fonte de luz pontual emite luz em todas as direções, como na imagem aqui.
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:
onde Light?, Lightye Lightz são a posição da luz de entrada. O efeito calcula o vetor 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,
, está localizado em (0,0,1).
Tanto L quanto H são normalizados para vetores de comprimento unitário.
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:
O efeito calcula a superfície normal, , para o bitmap de entrada usando um gradiente Sobel.
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.
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. |
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.
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 |