Share via


Beleuchtungseffekt „Punkt-Spiegelnd“

Verwenden Sie den Punkt-Spiegel-Beleuchtungseffekt, um ein Bild zu erstellen, das als reflektierende Oberfläche erscheint. Der Effekt verwendet den Alphakanal des Bilds als Höhenkarte und punktförmige Lichtquelle, die Sie positionieren, und berechnet die Reflexion und das Licht entsprechend dem Glanzteil des Phong-Beleuchtungsmodells.

Die Farbe der Ausgabe-Bitmap ist das Ergebnis der Hellenfarbe, der Lichtposition und der Oberflächengeometrie. Die Alphakanalausgabe für jedes Pixel mit Glanzlicht ist das Maximum der roten, grünen und blauen Kanalausgaben für dieses Pixel.

Die CLSID für diesen Effekt ist CLSID_D2D1PointSpecular.

Beispielbild

Das hier gezeigte Beispiel zeigt die Eingabe- und Ausgabebilder des Punkt-Glanzlichteffekts.

Screenshot des Effektbeispiels, der die Eingabe- und Ausgabebilder des Punkt-Glanzlichteffekts zeigt.

Glanzlicht bezieht sich auf Licht, das gemäß dem Phong-Beleuchtungsmodell in einer bestimmten Richtung reflektiert wird.

Ein Diagramm der Vektoren, die verwendet werden, um eine Glanzlichtausgabe für eine Bitmap zu kakluieren.

Der Effekt berechnet die endgültigen Ausgabepixelwerte anhand der folgenden Formeln:

die Formeln zum Berechnen der endgültigen Pixelwerte.

where

K? = Spiegellichtkonstante.
das Surface-Normaleinheitsvektorsymbol. = Flächennormaleinheitsvektor, der eine Funktion von x und y ist. Die Berechnungen finden Sie unter Höhenzuordnung und normaler Vektor .
das Vektorsymbol für die Hälfte der Einheit. = "halber" Einheitsvektor zwischen Augeneinheitsvektor und Lichteinheitsvektor. Die Berechnungen finden Sie unter Punktlichtquelle .
Lr, Lg, Lb = die Helle Farbe in RGB-Komponenten.

Sie legen die Spiegellichtkonstante als SpecularConstant-Eigenschaft und die Lichtfarbe als Color-Eigenschaft fest.

Punktlichtquelle

Eine Punktlichtquelle gibt Licht in alle Richtungen aus, wie im Bild hier.

ein Punktlicht, das Licht in alle Richtungen ausstrahlt.

Sie legen die Position der Lichtquelle mit der LightPosition-Eigenschaft fest. Der Effekt berechnet den Lichtvektor L für eine Punktlichtquelle anhand der folgenden Formeln:

die Lichtvektorgleichung.

Wobei Light?, Lighty und Lightz die Eingabelichtposition sind. Der Effekt berechnet das Vektorsymbol zur Hälfte des Vektors. wie im Phong-Beleuchtungsmodell definiert, wobei die Gleichung hier verwendet wird. Das Beleuchtungsmodell geht davon aus, dass sich der Augenvektor, das Augenvektorsymbol, bei (0,0,1) befindet.

halbwegs Vektorgleichung.

Sowohl L als auch H werden zu Vektoren mit Längeneinheit normalisiert.

Höhenzuordnung und normaler Vektor

Der Effekt generiert basierend auf seinem Alphakanal eine Höhenzuordnung für das Eingabebild.

Die Height -Komponente (Z) wird mit der Gleichung berechnet:

die Gleichung zum Berechnen der Höhe (z) der Oberfläche.

Der Effekt berechnet die Oberflächennormale, das normale Vektorsymbol, für die Eingabebitbitbit mit einem Sobel-Farbverlauf.

Spiegellichtkonstante und Exponent

Glanzlicht stellt das Licht dar, das von der Oberfläche der Bildhöhenkarte reflektiert wird. Sie geben die SpecularExponent-Eigenschaft an, die den Umfang der Spiegelung aus der Bitmap bestimmt.

Größere Exponenten stellen glänzendere Objekte dar und reflektieren Licht in einer fokussierteren Form.

Die SpecularConstant-Eigenschaft K? definiert die Menge des reflektierten Lichts als Verhältnis des eingehenden Lichts.

Effekteigenschaften

Anzeigename und Indexenumeration BESCHREIBUNG
LightPosition
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Die Lichtposition der Punktlichtquelle. Die -Eigenschaft ist eine D2D1_VECTOR_3F, die als (x, y, z) definiert ist. Die Einheiten befinden sich in geräteunabhängigen Pixeln (DEVICE-Independent Pixels, DIPs), und die Werte sind einheitslos und ungebunden. Der Typ ist D2D1_VECTOR_3F.
Der Standardwert ist {0.0f, 0.0f, 0.0f}.
SpecularExponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
Der Exponent für den Glanzbegriff in der Phong-Beleuchtungsgleichung. Ein größerer Wert entspricht einer reflektierenderen Oberfläche. Dieser Wert ist einheitslos und muss zwischen 1,0 und 128 sein. Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
SpecularConstant
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
Das Verhältnis der Spiegelung zum eingehenden Licht. Der Wert ist einheitslos und muss zwischen 0 und 10.000 sein. Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
Der Skalierungsfaktor in Z-Richtung zum Generieren einer Höhenzuordnung. Der Wert ist einheitslos und muss zwischen 0 und 10.000 sein. Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
Color
D2D1_POINTSPECULAR_PROP_COLOR
Die Farbe des eingehenden Lichts. Diese Eigenschaft wird als D2D1_VECTOR_3F (R, G, B) verfügbar gemacht und zum Berechnen von LR, LG, LB verwendet. Der Typ ist D2D1_VECTOR_3F.
Der Standardwert ist {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Die Größe eines Elements im Sobel-Kernel, das verwendet wird, um die Oberfläche normal in X- und Y-Richtung zu generieren. Diese Eigenschaft wird den dx- und dy-Werten im Sobel-Farbverlauf zugeordnet. Diese Eigenschaft ist eine D2D1_VECTOR_2F (Kernel Unit Length X, Kernel Unit Length Y) und wird in (DIPs/Kernel Unit) definiert. Der Effekt verwendet die bilineare Interpolation, um die Bitmap entsprechend der Größe der Kernelelemente zu skalieren. Der Typ ist D2D1_VECTOR_2F.
Der Standardwert ist {1.0f, 1.0f}.
Scalemode
D2D1_POINTSPECULAR_PROP_SCALE_MODE
Der Interpolationsmodus, den der Effekt verwendet, um das Image auf die entsprechende Kerneleinheitslänge zu skalieren. Es gibt sechs Skalierungsmodi, die in Qualität und Geschwindigkeit liegen. Weitere Informationen finden Sie unter Skalierungsmodi .
Der Typ ist D2D1_POINTSPECULAR_SCALE_MODE.
Der Standardwert ist D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Skalierungsmodi

Enumeration Beschreibung
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Beispiel für den nächsten einzelen Punkt und verwendet diesen. Dieser Modus verbraucht weniger Verarbeitungszeit, gibt jedoch das Bild mit der niedrigsten Qualität aus.
D2D1_POINTSPECULAR_SCALE_MODE_LINEAR Verwendet ein Vierpunktbeispiel und eine lineare Interpolation. Dieser Modus gibt ein Bild mit höherer Qualität aus als der nächste Nachbar.
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC Verwendet einen Kubikkern mit 16 Beispielen für die Interpolation. Dieser Modus verwendet die meiste Verarbeitungszeit, gibt jedoch ein Bild mit höherer Qualität aus.
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Verwendet 4 lineare Beispiele in einem einzelnen Pixel für eine gute Edge-Antialiasierung. Dieser Modus eignet sich gut für das Herunterskalieren von kleinen Mengen auf Bildern mit wenigen Pixeln.
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Verwendet anisotrope Filterung, um ein Muster entsprechend der transformierten Form der Bitmap zu samplen.
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC Verwendet einen hochwertigen Kubikkern mit variabler Größe, um eine Vorabskalierung des Bilds durchzuführen, wenn eine Downskalierung an der Transformationsmatrix beteiligt ist. Verwendet dann den kubischen Interpolationsmodus für die endgültige Ausgabe.

Hinweis

Wenn Sie keinen Modus auswählen, wird der Effekt standardmäßig auf D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Unterstützte Mindestversion (Server) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | Windows Store-Apps]
Header d2d1effects.h
Bibliothek d2d1.lib, dxguid.lib

ID2D1Effect