Effetto di illuminazione con luce puntuale diffusa

Usare l'effetto di illuminazione diffusa dal punto per creare un'immagine che sembra essere una superficie non riflettente con luce diffusa in tutte le direzioni. Questo effetto usa il canale alfa come mappa di altezza e illumina l'immagine con una fonte di luce punto.

Il colore della bitmap di output è un risultato del colore chiaro, della posizione della luce e della geometria della superficie. L'output del canale alfa per ogni pixel con illuminazione diffusa è sempre 1,0.

ClSID per questo effetto è CLSID_D2D1PointDiffuse. Per usare questo effetto, aggiungere dxguid.lib alle dipendenze del linker.

Immagine di esempio

L'esempio seguente mostra le immagini di input e output dell'effetto di illuminazione diffusa dal punto.

screenshot dell'esempio di effetto che mostra le immagini di input e output dell'effetto di illuminazione diffusa del punto.

L'illuminazione diffusa si riferisce alla luce che si riflette in più direzioni come visto qui.

la luce di illuminazione diffusa è diffusa in tutte le direzioni.

L'effetto calcola i valori dei pixel di output finali usando queste equazioni:

calcoli bitmap di output.

Dove:

kd = costante di illuminazione diffusa. Specificato dall'utente.
simbolo vettore normale di superficie. = vettore di unità normale di superficie, una funzione di x e y.
simbolo di vettore unità. = vettore unitario che punta dalla superficie alla luce.
Lr, Lg, Lb = il colore chiaro nei componenti RGB.

Proprietà dell'effetto

Enumerazione nome visualizzato e indice Descrizione
LightPosition
D2D1_POINTDIFFUSE_PROP_LIGHT_POSITION
Posizione della luce della fonte di luce punto. La proprietà è una D2D1_VECTOR_3F definita come (x, y, z). Le unità sono in pixel indipendenti dal dispositivo (DIP) e non sono collegate.
Il tipo è D2D1_VECTOR_3F.
Il valore predefinito è {0.0f, 0.0f, 0.0f}.
DiffuseConstant
D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT
Rapporto tra reflection diffusa e quantità di luce in ingresso. Questa proprietà deve essere compresa tra 0 e 10.000 ed è senza unità.
Il tipo è FLOAT.
Il valore predefinito è 1,0f.
SurfaceScale
D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE
Fattore di scala nella direzione Z. La scala di superficie è senza unità e deve essere compresa tra 0 e 10.000.
Il tipo è FLOAT.
Il valore predefinito è 1,0f.
Color
D2D1_POINTDIFFUSE_PROP_COLOR
Colore della luce in ingresso. Questa proprietà viene esposta come vettore 3 (R, G, B) e usata per calcolare LR, LG, LB.
Il tipo è D2D1_VECTOR_3F.
Il valore predefinito è {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
Dimensioni di un elemento nel kernel Sobel utilizzato per generare la normale superficie nella direzione X e Y. Questa proprietà esegue il mapping ai valori dx e dy nella sfumatura Sobel. Questa proprietà è una D2D1_VECTOR_2F (lunghezza unità kernel X, lunghezza unità kernel Y) e viene definita in (unità DIP/kernel). L'effetto usa l'interpolazione bilineare per ridimensionare la bitmap in modo che corrisponda alle dimensioni degli elementi del kernel.
Il tipo è D2D1_VECTOR_2F.
Il valore predefinito è {1.0f, 1.0f}.
Scalemode
D2D1_POINTDIFFUSE_PROP_SCALE_MODE
La modalità di interpolazione usa per ridimensionare l'immagine alla lunghezza dell'unità kernel corrispondente. Esistono sei modalità di scalabilità che vanno in qualità e velocità. Per altre informazioni, vedere Modalità di scalabilità .
Il tipo è D2D1_POINTDIFFUSE_SCALE_MODE.
Il valore predefinito è D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR.

Modalità di scalabilità

Enumerazione Descrizione
D2D1_POINTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR Esempi del singolo punto più vicino e lo usa. Questa modalità usa meno tempo di elaborazione, ma restituisce l'immagine di qualità più bassa.
D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR Usa un esempio a quattro punti e l'interpolazione lineare. Questa modalità restituisce un'immagine di qualità superiore rispetto al vicino più vicino.
D2D1_POINTDIFFUSE_SCALE_MODE_CUBIC Usa un kernel cubo di esempio 16 per l'interpolazione. Questa modalità usa il tempo di elaborazione più elevato, ma restituisce un'immagine di qualità superiore.
D2D1_POINTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Usa 4 esempi lineari all'interno di un singolo pixel per un buon anti-aliasing perimetrale. Questa modalità è utile per ridurre le dimensioni in base a piccole quantità per le immagini con pochi pixel.
D2D1_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC Usa un filtro anisotropico per campionire un modello in base alla forma trasformata della bitmap.
D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Usa un kernel cubico di dimensioni variabili di alta qualità per eseguire una pre-ridimensionamento dell'immagine se la scalabilità orizzontale è coinvolta nella matrice di trasformazione. Usa quindi la modalità di interpolazione cubica per l'output finale.

Nota

Se non si seleziona una modalità, l'effetto viene predefinito per D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR.

Requisiti

Requisito Valore
Client minimo supportato Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Server minimo supportato Windows 8 e Aggiornamento della piattaforma per Windows 7 [app desktop | App di Windows Store]
Intestazione d2d1effects.h
Libreria d2d1.lib, dxguid.lib

ID2D1Effect