Condividi tramite


Effetto di illuminazione a punto speculare

Usa l'effetto di illuminazione speculare del punto per creare un'immagine che sembra essere una superficie riflettente. L'effetto utilizza il canale alfa dell'immagine come mappa dell'altezza e una sorgente di luce puntiforme che posizioni, e calcola la riflessione e la luce in base alla componente 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 tale pixel.

Il CLSID di questo effetto è CLSID_D2D1PointSpecular.

Immagine di esempio

L'esempio mostra le immagini di input e output dell'effetto di illuminazione speculare a punto.

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

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

un diagramma dei vettori usati per calcolare un risultato di illuminazione speculare per una bitmap.

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

le equazioni per calcolare i valori dei pixel finali.

dove

Okay? = costante di illuminazione speculare.
simbolo del vettore di unità normale della superficie. = vettore di unità normale della superficie che è una funzione di x e y. Per i calcoli, vedere mappa altezza e vettore normale.
il simbolo del vettore unitario a metà strada. = vettore unitario "a metà" tra il vettore unitario dell'occhio e il vettore unitario della luce. Per i calcoli, vedere la sorgente luminosa puntiforme .
Lr, Lg, Lb = colore chiaro nei componenti RGB.

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

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

Imposti la posizione della sorgente luminosa usando la proprietà LightPosition. L'effetto calcola il vettore di luce, L , per una sorgente di luce punto usando le equazioni riportate di seguito:

'equazione del vettore di luce.

dove Light?, Lightye Lightz sono la posizione della luce di input. L'effetto calcola il vettore intermedio, simbolo del vettore intermedio. 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 trova in (0,0,1).

equazione vettoriale intermedia.

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

La mappa di altezza e il 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:

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

L'effetto calcola la normale della superficie, il simbolo del vettore normale., per il bitmap di input utilizzando un gradiente di Sobel.

Costante e esponente dell'illuminazione speculare

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

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

La proprietà SpecularConstant definisce la quantità di luce riflessa come rapporto della luce in ingresso.

Proprietà dell'effetto

Nome visualizzato e enumerazione dell'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 senza unità e senza limiti. 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 Phong. Un valore più grande 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
Il rapporto di riflessione speculare rispetto alla luce in ingresso. Il valore è senza unità 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 è senza unità e deve essere compreso tra 0 e 10.000. Il tipo è FLOAT.
Il valore predefinito è 1,0f.
Colore
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à corrisponde ai valori dx e dy nel gradiente Sobel. Questa proprietà è un D2D1_VECTOR_2F(Lunghezza Unità Kernel X, Lunghezza Unità Kernel Y) ed è definita in (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 scala che variano in qualità e velocità. Per altre informazioni, vedi 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 Campiona il punto singolo più vicino e lo utilizza. Questa modalità usa meno tempo di elaborazione, ma restituisce l'immagine di qualità più bassa.
D2D1_POINTSPECULAR_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_POINTSPECULAR_SCALE_MODE_CUBIC Usa un kernel cubico a 16 campioni 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 campioni lineari all'interno di un singolo pixel per un buon anti-aliasing dei bordi. Questa modalità è utile per scalare di poco le immagini con una bassa quantità di pixel.
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Usa il filtro anisotropico per campionare 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-riduzione della scala dell'immagine se il ridimensionamento è coinvolto 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 è impostato su 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
Biblioteca d2d1.lib, dxguid.lib

ID2D1Effect