Condividi tramite


Effetto di illuminazione con luce puntuale speculare

Usare l'effetto di illuminazione speculare punto per creare un'immagine che sembra essere una superficie riflettente. L'effetto usa il canale alfa dell'immagine come mappa di altezza e una sorgente di luce punto posizionata e calcola la reflection e la luce in base alla parte speculare del modello di illuminazione Phong.

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_D2D1PointSpecular.

Immagine di esempio

L'esempio seguente mostra le immagini di input e output dell'effetto di illuminazione speculare punto.The example here shows the input and output images of the point-specular lighting effect.

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

La luce speculare si riferisce alla luce riflessa in una direzione specifica in base al modello di illuminazione Phong.

diagramma dei vettori usati per incluare un output di illuminazione speculare per una bitmap.

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

equazioni per calcolare i valori dei pixel finali.

dove

K? = costante di illuminazione speculare.
simbolo del vettore di unità normale della superficie. = vettore di unità normale di superficie che è una funzione di x e y. Per i calcoli, vedere Mappa dell'altezza e vettore normale .
simbolo del vettore dell'unità a metà strada. = vettore di unità "a metà" tra vettore dell'unità oculare e vettore di unità di luce. Per i calcoli, vedere Fonte di luce punto .
Lr, Lg, Lb = il colore chiaro nei componenti RGB.

Impostare la costante di illuminazione speculare come proprietà SpecularConstant e il colore della luce come proprietà Color .

Fonte di luce punto

Una sorgente di luce punto emette luce in tutte le direzioni come nell'immagine qui.

una luce punto che emette luce in tutte le direzioni.

Impostare la posizione della sorgente di luce usando la proprietà LightPosition . L'effetto calcola il vettore di luce L per una sorgente di luce punto usando le equazioni qui:

equazione del vettore di luce.

dove Light?, Lighty e Lightz sono la posizione della luce di input. L'effetto calcola il vettore a metà strada, simbolo vettore a metà strada. Come definito nel modello di illuminazione Phong, usando l'equazione qui. Il modello di illuminazione presuppone che il vettore oculare, il simbolo del vettore oculare, si trovi in (0,0,1).

equazione vettoriale a metà strada.

Sia L che H sono normalizzati in vettori a lunghezza unità.

Mappa dell'altezza e vettore normale

L'effetto genera una mappa di altezza per l'immagine di input in base al canale alfa.

Il componente height (Z) viene calcolato usando l'equazione:

equazione per calcolare l'altezza (z) della superficie.

L'effetto calcola la normale superficie, il simbolo vettore normale., per la bitmap di input usando una sfumatura Sobel.

Costante e esponente dell'illuminazione speculare

La luce speculare rappresenta la luce riflessa dalla superficie della mappa di altezza dell'immagine. Specificare la proprietà SpecularExponent che determina la quantità di reflection speculare dalla bitmap.

Gli esponenti più grandi rappresentano oggetti più lucidi e riflettono la luce in una forma più evidenziata.

La proprietà SpecularConstant K? definisce la quantità di luce riflessa come rapporto tra la luce in ingresso.

Proprietà dell'effetto

Enumerazione nome visualizzato e indice Descrizione
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Posizione della luce della sorgente di luce punto. La proprietà è un D2D1_VECTOR_3F definito come (x, y, z). Le unità sono in pixel indipendenti dal dispositivo (DIP) e i valori sono unitless e non associati. Il tipo è D2D1_VECTOR_3F.
Il valore predefinito è {0.0f, 0.0f, 0.0f}.
SpecularExponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
Esponente per il termine speculare nell'equazione di illuminazione di Phong. Un valore maggiore corrisponde a una superficie più riflettente. Questo valore è senza unità e deve essere compreso tra 1,0 e 128. Il tipo è FLOAT.
Il valore predefinito è 1,0f.
SpecularConstant
D2D1_POINTSPECULAR_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_POINTSPECULAR_PROP_SURFACE_SCALE
Fattore di scala nella direzione Z per generare una mappa di altezza. Il valore è unitless e deve essere compreso tra 0 e 10.000. Il tipo è FLOAT.
Il valore predefinito è 1,0f.
Color
D2D1_POINTSPECULAR_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_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Dimensioni di un elemento nel kernel Sobel usato per generare la normale superficie nelle direzioni 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) ed è definita in (unità DIP/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_POINTSPECULAR_PROP_SCALE_MODE
Modalità di interpolazione usata dall'effetto 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_POINTSPECULAR_SCALE_MODE.
Il valore predefinito è D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Modalità di scalabilità

Enumerazione Descrizione
D2D1_POINTSPECULAR_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_POINTSPECULAR_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_POINTSPECULAR_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_POINTSPECULAR_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_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Usa un filtro anisotropico per campionire un modello in base alla forma trasformata della bitmap.
D2D1_POINTSPECULAR_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_POINTSPECULAR_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