Condividi tramite


Effetto di illuminazione speculare a distanza

Usa l'effetto di illuminazione speculare distante per creare un'immagine che sembra essere una superficie riflettente in cui la sorgente luminosa sembra provenire da una lunga distanza (ad esempio il sole o le luci di sovraccarico). Questo effetto usa il canale alfa come mappa di altezza e illumina l'immagine con una sorgente di luce distante.

Il colore della bitmap di output è il risultato del colore chiaro, della posizione della luce e della geometria della superficie. L'output del canale alfa per ogni pixel con illuminazione speculare è il massimo degli output del canale rosso, verde e blu per quel pixel.

Il CLSID per questo effetto è CLSID_D2D1DistantSpecular.

Immagine di esempio

L'esempio seguente mostra le immagini di input e output dell'effetto di illuminazione speculare distante.

screenshot dell'esempio di effetto che mostra le immagini di input e output dell'effetto di illuminazione speculare distante.

La bitmap di output finale può essere calcolata usando le equazioni seguenti.

calcolo bitmap di output

dove

K? = costante di illuminazione speculare.
simbolo normale della superficie. = vettore di unità normale della superficie.
simbolo vettore a metà strada. = vettore di unità "a metà" tra vettore dell'unità oculare e vettore di unità di luce.
Cr, Cg, Cb = il colore chiaro nei componenti RGB.

Fonte di luce distante

L'immagine mostra un esempio della direzione della luce da una sorgente di luce distante.

sorgente di luce distante

L'effetto utilizza i parametri azimuth ed elevazione per calcolare il vettore l vettore di luce. Utilizzando le equazioni seguenti:

calcolo vettore chiaro

dove Light?, Lighty e Lightz sono i valori di posizione della luce di input.

Proprietà dell'effetto

Enumerazione nome visualizzato e indice Descrizione
Azimuth
D2D1_DISTANTSPECULAR_PROP_AZIMUTH
Angolo di direzione della sorgente di luce nel piano XY rispetto all'asse X nella direzione del contatore. Le unità sono in gradi e devono essere comprese tra 0 e 360 gradi.
Il tipo è FLOAT.
Il valore predefinito è 0,0f.
Altitudine
D2D1_DISTANTSPECULAR_PROP_ELEVATION
Angolo di direzione della sorgente di luce nel piano YZ rispetto all'asse Y nella direzione dell'orologio contatore. Le unità sono in gradi e devono essere comprese tra 0 e 360 gradi.
Il tipo è FLOAT.
Il valore predefinito è 0,0f.
SpecularExponent
D2D1_DISTANTSPECULAR_PROP_SPECULAR_EXPONENT
Esponente per il termine speculare nell'equazione di illuminazione di Phong. Un valore maggiore corrisponde a una superficie più riflettente. Il valore è senza unità e deve essere compreso tra 1,0 e 128. Il tipo è FLOAT.
Il valore predefinito è 1,0f.
SpecularConstant
D2D1_DISTANTSPECULAR_PROP_SPECULAR_CONSTANT
Rapporto tra reflection speculare e luce in ingresso. Il valore è unitless e deve essere compreso tra 0 e 10.000. Il tipo è FLOAT.
Il valore predefinito è 1,0f.
SurfaceScale
D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE
Fattore di scala nella direzione Z. Il valore è unitless e deve essere compreso tra 0 e 10.000. Il tipo è FLOAT.
Il valore predefinito è 1,0f.
Color
D2D1_DISTANTSPECULAR_PROP_COLOR
Colore della luce in ingresso. Questa proprietà viene esposta come D2D1_VECTOR_3F (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_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Dimensioni di un elemento nel kernel Sobel usato per generare la normale superficie nella direzione X e Y. Questa proprietà è una D2D1_VECTOR_2F (Lunghezza unità kernel X, Lunghezza unità kernel Y) ed è definita in (unità DIP (device-independent pixel)/Unità 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_DISTANTSPECULAR_PROP_SCALE_MODE
Modalità di interpolazione usata dall'effetto per ridimensionare l'immagine alla lunghezza dell'unità kernel corrispondente. Esistono sei modalità di scala che vanno in termini di qualità e velocità.
Il tipo è D2D1_DISTANTSPECULAR_SCALE_MODE.
Il valore predefinito è D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR.

Modalità di scalabilità

Enumerazione Descrizione
D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Campiona il punto singolo più vicino e lo usa. Questa modalità usa meno tempo di elaborazione, ma restituisce l'immagine di qualità più bassa.
D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR Usa un campione a quattro punti e l'interpolazione lineare. Questa modalità restituisce un'immagine di qualità superiore rispetto al vicino più vicino.
D2D1_DISTANTSPECULAR_SCALE_MODE_CUBIC Usa un kernel cubico di esempio 16 per l'interpolazione. Questa modalità usa il tempo di elaborazione più elevato, ma restituisce un'immagine di qualità superiore.
D2D1_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Usa 4 campioni lineari all'interno di un singolo pixel per anti-aliasing dei bordi validi. Questa modalità è valida per ridurre le dimensioni delle immagini con pochi pixel.
D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC Usa il filtro anisotropico per campionare un modello in base alla forma trasformata della bitmap.
D2D1_DISTANTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Usa un kernel cubico di alta qualità con dimensioni variabili per eseguire una scalabilità preliminare 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à, per impostazione predefinita l'effetto viene D2D1_DISTANTSPECULAR_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