Partilhar via


Efeito de iluminação difusa pontual

Use o efeito de iluminação spot-difusa para criar uma imagem que pareça ser uma superfície não reflexiva onde a fonte de luz é limitada a um cone de luz direcionado e a luz está espalhada em todas as direções. Este efeito usa o canal alfa como um mapa de altura e ilumina a imagem com uma fonte de luz spot.

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 de canal alfa para cada pixel com iluminação difusa é sempre 1.0.

O CLSID para este efeito é CLSID_D2D1SpotDiffuse.

Imagem de exemplo

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

captura de tela de exemplo de efeito que mostra

Os valores finais dos pixels de saída são calculados pelo efeito usando estas equações:

cálculo de bitmap de saída

Onde:

kd = constante de iluminação difusa. Especificado pelo usuário.
símbolo vetorial normal. = vetor de unidade normal de superfície, uma função de x e y.
símbolo vetorial de luz. = vetor unitário apontando da superfície para a luz.
Lr, Lg, Lb = a cor clara nos componentes RGB.

Propriedades do efeito

Nome de exibição e enumeração de índice Tipo e valor padrão Descrição
Posição de luz
D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
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 são ilimitadas.
PontosEm
D2D1_SPOTDIFFUSE_PROP_POINTS_AT
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Onde o foco de luz está concentrado. A propriedade é exposta como uma D2D1_VETOR_3F com (x, y, z). As unidades estão em DIPs e os valores são ilimitados.
Foco
D2D1_SPOTDIFFUSE_PROP_FOCUS
FLUTUAR
1.0f
O foco do holofote. Esta propriedade é adimensional e é definida entre 0 e 200.
Ângulo de Limitação do Cone
D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE
FLUTUAR
90,0 °F
O ângulo do cone que restringe a região onde a luz é projetada. Nenhuma luz é projetada fora do cone. O ângulo do cone limite é o ângulo entre o eixo da luz spot (o eixo entre as propriedades LightPosition e PointsAt) e o cone de luz spot. Esta propriedade é definida em graus e deve estar entre 0 a 90 graus.
DifuseConstant
D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT
FLUTUAR
1.0f
A relação entre reflexão difusa e quantidade de luz recebida. Esta propriedade deve estar entre 0 e 10.000 e não tem unidade.
SurfaceScale
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
FLUTUAR
1.0f
O fator de escala na direção Z. A escala de superfície é sem unidade e deve estar entre 0 e 10.000.
Cor
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
A cor da luz que entra. Esta propriedade é exposta como um vetor 3 (R, G, B) e usada para calcular LR, LG, LB.
KernelUnitLength
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
D2D1_VECTOR_2F
{1.0f, 1.0f}
O tamanho de um elemento no kernel Sobel usado para gerar a superfície normal na direção X e Y. Esta propriedade mapeia os valores dx e dy no gradiente Sobel. Esta propriedade é um D2D1_VECTOR_2F (Comprimento da Unidade de Núcleo X, Comprimento da Unidade de Núcleo Y) e é definida em (DIPs/Unidade de Núcleo). O efeito usa interpolação bilinear para dimensionar o bitmap para corresponder ao tamanho dos elementos do kernel.
Modo de escala
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR
O modo de interpolação que o efeito usa para dimensionar a imagem para o comprimento correspondente da unidade do kernel. Existem seis modos de escala que variam em qualidade e velocidade. Consulte Modos de escala para obter mais informações.

Modos de escala

Enumeração Descrição
D2D1_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Usa 4 amostras lineares dentro de um único pixel para um bom antialiasing de bordas. Este modo é bom para reduzir em pequenas quantidades em imagens com poucos pixels.
D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC Usa filtragem anisotrópica para obter amostras de um padrão de acordo com a forma transformada do bitmap.
D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Utiliza um kernel cúbico de alta qualidade e tamanho variável para reduzir previamente a 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 padrão será D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR.

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