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
- Fonte de luz de ponto
- Mapa de altura e vetor normal
- Constante de iluminação especular e expoente
- Propriedades do efeito
- Modos de dimensionamento
- Requirements
- Tópicos relacionados
Imagem de exemplo
O exemplo aqui 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.
O efeito calcula os valores finais de pixel de saída usando as equações aqui:
onde
- K? = constante de iluminação especular.
= 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.
= 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.
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:
onde Light?, Lighty e Lightz são a posição da luz de entrada. O efeito calcula o vetor de metade, conforme definido no modelo de iluminação Phong, usando a equação aqui. O modelo de iluminação pressupõe que o vetor ocular, , esteja localizado em (0,0,1).
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 :
O efeito calcula a superfície 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 |