Compartilhar via


Efeito de iluminação especular de ponto

Use o efeito de iluminação especular de ponto para criar uma imagem que parece ser uma superfície reflexiva. O efeito usa o canal alfa da imagem como um mapa de altura e uma fonte de luz de ponto 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 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_D2D1PointSpecular.

Imagem de exemplo

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

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

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

um diagrama dos vetores usados para cacluir 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 pixel.

onde

K? = constante de iluminação especular.
o símbolo de vetor de unidade normal da superfície. = vetor de unidade normal de superfície que é uma função de x e y. Confira Mapa de altura e vetor normal para os cálculos.
o símbolo de vetor de unidade de meio. = vetor de unidade "no meio do caminho" entre o vetor da unidade ocular e o vetor de unidade leve. Consulte Fonte de luz de ponto para os cálculos.
Lr, Lg, Lb = a cor clara em componentes RGB.

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

Fonte de luz de ponto

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

uma luz de ponto 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 de ponto usando as equações aqui:

a equação de vetor de luz.

onde Light?, Lighty e Lightz são a posição da luz de entrada. O efeito calcula o vetor de metade, símbolo de vetor de meio caminho, conforme definido no modelo de iluminação Phong, usando a equação aqui. O modelo de iluminação pressupõe que o vetor ocular, o símbolo de vetor ocular, esteja localizado em (0,0,1).

equação de vetor de metade.

L e H são normalizados para vetores de comprimento de unidade.

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 de altura (Z) é calculado usando a equação :

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

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

Constante de iluminação especular e expoente

A luz especular representa a luz refletida da superfície do do mapa de altura da imagem. Especifique 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.

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

Propriedades do efeito

Nome de exibição e enumeração de índice Descrição
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
A posição de luz da fonte de luz do ponto. A propriedade é um D2D1_VECTOR_3F definido como (x, y, z). As unidades estão em DIPs (pixels independentes de dispositivo) e os valores são unitários e não associados. O tipo é D2D1_VECTOR_3F.
O valor padrão é {0.0f, 0.0f, 0.0f}.
SpecularExponent
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. Esse valor é sem unidade e deve estar entre 1,0 e 128. O tipo é FLOAT.
O valor padrão é 1.0f.
SpecularConstant
D2D1_POINTSPECULAR_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_POINTSPECULAR_PROP_SURFACE_SCALE
O fator de escala na direção Z para gerar um mapa de altura. O valor é unitless 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 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_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. Essa propriedade mapeia para os valores dx e dy no gradiente Sobel. Essa propriedade é uma D2D1_VECTOR_2F (Comprimento da Unidade de Kernel X, Comprimento da Unidade de Kernel Y) e é definida em (DIPs/Unidade de 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_POINTSPECULAR_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. Confira 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 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_POINTSPECULAR_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_POINTSPECULAR_SCALE_MODE_CUBIC Usa um kernel cúbico de 16 exemplos para interpolação. Esse modo usa a maior parte do tempo de processamento, mas gera uma imagem de maior qualidade.
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Usa quatro exemplos 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_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Usa a filtragem anisotrópica para amostrar um padrão de acordo com a forma transformada do bitmap.
D2D1_POINTSPECULAR_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_POINTSPECULAR_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