Efeito de iluminação difusa de spot
Use o efeito de iluminação spot-diffuse para criar uma imagem que parece ser uma superfície não reflexiva com onde a fonte de luz é limitada a um cone de luz direcionado e a luz é espalhada em todas as direções. Esse efeito usa o canal alfa como um mapa de altura e acende a imagem com uma fonte de luz spot.
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 difusa é sempre 1,0.
O CLSID para esse efeito é CLSID_D2D1SpotDiffuse.
Imagem de exemplo
O exemplo aqui mostra as imagens de entrada e saída do efeito de iluminação spot-diffuse.
O efeito calcula que os valores finais de pixel de saída são calculados usando estas equações:
Em que:
- kd = constante de iluminação difusa. Especificado pelo usuário.
= vetor de unidade normal de superfície, uma função de x e y.
= vetor de unidade apontando da superfície para a luz.
Lr, Lg, Lb = a cor clara em componentes RGB.
Propriedades de efeito
Nome de exibição e enumeração de índice | Tipo e valor padrão | Descrição |
---|---|---|
LightPosition D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION |
D2D1_VECTOR_3F {0.0f, 0.0f, 0.0f} |
A posição de luz da fonte de luz do ponto. A propriedade é uma D2D1_VECTOR_3F definida como (x, y, z). As unidades estão em DIPs (pixels independentes de dispositivo) e não são associados. |
PointsAt D2D1_SPOTDIFFUSE_PROP_POINTS_AT |
D2D1_VECTOR_3F {0.0f, 0.0f, 0.0f} |
Onde a luz spot está focada. A propriedade é exposta como um D2D1_VECTOR_3F com (x, y, z). As unidades estão em DIPs e os valores não são associados. |
Foco D2D1_SPOTDIFFUSE_PROP_FOCUS |
FLOAT 1,0f |
O foco da luz spot. Essa propriedade é sem unidade e é definida entre 0 e 200. |
LimitingConeAngle D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE |
FLOAT 90.0f |
O ângulo do cone que restringe a região em que a luz é projetada. Nenhuma luz é projetada fora do cone. O ângulo de cone de limitação é o ângulo entre o eixo de luz spot (o eixo entre as propriedades LightPosition e PointsAt ) e o cone de luz spot. Essa propriedade é definida em graus e deve estar entre 0 e 90 graus. |
DiffuseConstant D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT |
FLOAT 1,0f |
A taxa de reflexão difusa para a quantidade de luz de entrada. Essa propriedade deve estar entre 0 e 10.000 e é sem unidade. |
SurfaceScale D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE |
FLOAT 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 de entrada. Essa propriedade é exposta como um Vector 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. Essa propriedade mapeia para os valores dx e dy no gradiente Sobel. Essa propriedade é uma D2D1_VECTOR_2F(Comprimento da Unidade do Kernel X, Comprimento da Unidade de Kernel Y) e é definida em (UNIDADE DIPs/Kernel). O efeito usa interpolação bilinear para dimensionar o bitmap para corresponder ao tamanho dos elementos kernel. |
Scalemode 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 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. |
Modos de escala
Enumeração | Descrição |
---|---|
D2D1_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC | Usa a filtragem anisotrópica para amostrar um padrão de acordo com a forma transformada do bitmap. |
D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC | Usa um kernel cúbico de alta qualidade de tamanho variável para executar 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 você não selecionar um modo, o efeito usará como padrão D2D1_SPOTDIFFUSE_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 |