Share via


Efeito de iluminação especular distante

Use o efeito de iluminação especular distante para criar uma imagem que parece ser uma superfície reflexiva onde a fonte de luz parece estar vindo de uma longa distância (como o sol ou luzes aéreas). Esse 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 clara, 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 esse efeito é CLSID_D2D1DistantSpecular.

Imagem de exemplo

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

captura de tela de exemplo de 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 equações a seguir.

cálculo de bitmap de saída

onde

K? = constante de iluminação especular.
símbolo normal de superfície. = vetor de unidade normal de superfície.
símbolo de vetor de metade. = vetor de unidade "no meio do caminho" entre o vetor da unidade ocular e o vetor de unidade leve.
Cr, Cg, Cb = a cor clara em componentes RGB.

Fonte de luz distante

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

fonte de luz distante

O efeito usa os parâmetros azimuth e elevation para calcular o vetor l de vetor de luz. Usando as seguintes equações:

cálculo de vetor de luz

em que Light?, Lighty e Lightz são os valores de posição de luz de entrada.

Propriedades do efeito

Nome de exibição e enumeração de índice Descrição
Azimuth
D2D1_DISTANTSPECULAR_PROP_AZIMUTH
O ângulo de direção da fonte de luz no plano XY em relação ao eixo X na direção do relógio do contador. As unidades estã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 na direção do relógio do contador. As unidades estão em graus e devem estar entre 0 e 360 graus.
O tipo é FLOAT.
O valor padrão é 0,0f.
SpecularExponent
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 é unitless e deve estar entre 1,0 e 128. O tipo é FLOAT.
O valor padrão é 1.0f.
SpecularConstant
D2D1_DISTANTSPECULAR_PROP_SPECULAR_CONSTANT
A proporção de reflexão especular para a luz de entrada. O valor é unitless e deve estar entre 0 e 10.000. O tipo é FLOAT.
O valor padrão é 1.0f.
SurfaceScale
D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE
O fator de escala na direção Z. O valor é unitless 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 de entrada. Essa propriedade é exposta como um D2D1_VECTOR_3F (R, G, B) e usada para calcular LR, LG, LB. O tipo é D2D1_VECTOR_3F.
O valor padrão é {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH
O tamanho de um elemento no kernel Sobel usado para gerar a superfície normal na direção X e Y. Essa propriedade é uma D2D1_VECTOR_2F (Comprimento da Unidade de Kernel X, Comprimento da Unidade de Kernel Y) e é definida em (DIPs (pixels independentes de dispositivo)/Unidade kernel). O efeito usa interpolação bilinear para dimensionar o bitmap para corresponder ao tamanho dos elementos kernel. O tipo é D2D1_VECTOR_2F.
O valor padrão é {1.0f, 1.0f}.
Scalemode
D2D1_DISTANTSPECULAR_PROP_SCALE_MODE
O modo de interpolação que o efeito usa para dimensionar a imagem para o comprimento da unidade de kernel correspondente. Há 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
D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Amostra o ponto único mais próximo e usa isso. Esse modo usa menos tempo de processamento, mas gera a imagem de menor qualidade.
D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR Usa um exemplo de quatro pontos e interpolação linear. Esse modo gera uma imagem de qualidade mais alta do que o vizinho mais próximo.
D2D1_DISTANTSPECULAR_SCALE_MODE_CUBIC Usa um kernel cúbico de 16 amostras para interpolação. Esse modo usa mais tempo de processamento, mas gera uma imagem de maior qualidade.
D2D1_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Usa 4 amostras lineares em um único pixel para um bom anti-aliasing de borda. Esse modo é bom para reduzir verticalmente em pequenas quantidades em imagens com poucos pixels.
D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC Usa a filtragem anisotrópica para amostrar um padrão de acordo com a forma transformada do bitmap.
D2D1_DISTANTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Usa um kernel cúbico de alta qualidade de tamanho variável para executar um dimensionamento pré-down 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 você não selecionar um modo, o efeito será D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Servidor mínimo com suporte Windows 8 e Atualização de Plataforma para Windows 7 [aplicativos da área de trabalho | Aplicativos da Windows Store]
Cabeçalho d2d1effects.h
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect