Partilhar via


Efeito de iluminação distante-especular

Use o efeito de iluminação distante-especular para criar uma imagem que pareça ser uma superfície reflexiva de onde a fonte de luz parece vir de uma longa distância (como o sol ou luzes de teto). Este efeito usa o canal alfa como um mapa de altura e ilumina a imagem com uma fonte de luz distante.

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_D2D1DistantSpecular.

Imagem de exemplo

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

exemplo de captura de tela do efeito mostrando as imagens de entrada e saída do efeito de iluminação especular distante.

O bitmap de saída final pode ser calculado usando as seguintes equações.

cálculo de bitmap de saída

onde

k? = constante de iluminação especular.
símbolo normal da superfície. = vetor de unidade normal de superfície.
símbolo vetorial intermédio. = vetor unitário "intermédio" entre vetor unitário ocular e vetor unitário de luz.
Cr, Cg, Cb = a cor clara nos componentes RGB.

Fonte de luz distante

A imagem aqui mostra um exemplo da direção da luz a partir de uma fonte de luz distante.

fonte de luz distante

O efeito usa os parâmetros de azimute e elevação para calcular o vetor de luz vetor l. utilizando as seguintes equações:

cálculo vetorial de luz

onde Light?, Lightye Lightz são os valores de posição da luz de entrada.

Propriedades do efeito

Nome de exibição e enumeração de índices Descrição
Azimute
D2D1_DISTANTSPECULAR_PROP_AZIMUTH
O ângulo de direção da fonte luminosa no plano XY em relação ao eixo X no sentido anti-horário. As unidades são em graus e devem estar entre 0 e 360 graus.
O tipo é FLOAT.
O valor padrão é 0.0f.
Elevação
D2D1_DISTANTSPECULAR_PROP_ELEVATION
O ângulo de direção da fonte de luz no plano YZ em relação ao eixo Y no sentido anti-relógio. As unidades são em graus e devem estar entre 0 e 360 graus.
O tipo é FLOAT.
O valor padrão é 0.0f.
EspecularExpoente
D2D1_DISTANTSPECULAR_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. O valor é sem unidade e deve estar entre 1,0 e 128. O tipo é FLOAT.
O valor padrão é 1.0f.
EspecularConstante
D2D1_DISTANTSPECULAR_PROP_CONSTANTE_ESPECULAR
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.
Escala de superfície
D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE
O fator de escala na direção do eixo Z. O valor é sem unidade e deve estar entre 0 e 10,000. O tipo é FLOAT.
O valor padrão é 1.0f.
Cor
D2D1_DISTANTSPECULAR_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_DISTANTSPECULAR_PROP_COMPRIMENTO_UNITÁRIO_DO_KERNEL
O tamanho de um elemento no kernel Sobel usado para gerar a superfície normal na direção X e Y. Esta propriedade é um D2D1_VETOR_2F (Comprimento da Unidade do Kernel X, Comprimento da Unidade do Kernel Y) e é definida em pixels independentes do dispositivo (DIPs)/Unidade do Kernel. O efeito usa interpolação bilinear para dimensionar o bitmap para corresponder ao tamanho dos elementos do kernel. O tipo é D2D1_VECTOR_2F.
O valor padrão é {1.0f, 1.0f}.
Modo de escala
D2D1_DISTANTSPECULAR_PROP_SCALE_MODE
O modo de interpolação que o efeito utiliza para ajustar a imagem ao comprimento unitário correspondente do kernel. Existem seis modos de escala que variam em qualidade e velocidade.
O tipo é D2D1_DISTANTSPECULAR_SCALE_MODE.
O valor padrão é D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR.

Modos de escala

Enumeração Descrição
Modo de Escala de Distante Espelhado D2D1_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_DISTANTSPECULAR_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_DISTANTSPECULAR_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_DISTANTSPECULAR_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_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC Usa filtragem anisotrópica para obter amostras de um padrão de acordo com a forma transformada do bitmap.
D2D1_DISTANTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Utiliza um kernel cúbico de alta qualidade de tamanho variável para realizar uma pré-redução da imagem se o downscaling estiver envolvido na matriz de transformação. Em seguida, usa o modo de interpolação cúbica para a saída final.

Observação

Se não selecionar um modo, o efeito assume o valor D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR por 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