Beleuchtungseffekt „Entfernt-Spiegelnd“

Verwenden Sie den Fernlichteffekt, um ein Bild zu erstellen, das eine reflektierende Oberfläche zu sein scheint, auf der die Lichtquelle aus einer großen Entfernung zu kommen scheint (z. B. die Sonne oder Oberlichter). Dieser Effekt verwendet den Alphakanal als Höhenkarte und beleuchtet das Bild mit einer entfernten Lichtquelle.

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

Beispielbild

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

Screenshot des Effektbeispiels mit den Eingabe- und Ausgabebildern des fernen Glanzlichteffekts.

Die endgültige Ausgabebitbitbit kann mithilfe der folgenden Formeln berechnet werden.

Ausgabebitberechnung

where

K? = Spiegellichtkonstante.
Surface-Normalsymbol. = Flächennormaleinheitsvektor.
halbwegs Vektorsymbol. = "halber" Einheitsvektor zwischen Augeneinheitsvektor und Lichteinheitsvektor.
Cr, Cg, Cb = die helle Farbe in RGB-Komponenten.

Fernlichtquelle

Die Abbildung zeigt ein Beispiel für die Richtung des Lichts von einer entfernten Lichtquelle.

Entfernte Lichtquelle

Der Effekt verwendet die Parameter azimuth und elevation, um den Lichtvektor l zu berechnen. Dabei werden die folgenden Formeln verwendet:

Berechnung des Lichtvektors

Dabei sind Light?, Lighty und Lightz die Eingabelichtpositionswerte.

Effekteigenschaften

Anzeigename und Indexenumeration BESCHREIBUNG
Azimut
D2D1_DISTANTSPECULAR_PROP_AZIMUTH
Der Richtungswinkel der Lichtquelle in der XY-Ebene relativ zur X-Achse in der Gegenuhrrichtung. Die Einheiten sind in Grad und müssen zwischen 0 und 360 Grad liegen.
Der Typ ist FLOAT.
Der Standardwert ist 0,0f.
Elevation
D2D1_DISTANTSPECULAR_PROP_ELEVATION
Der Richtungswinkel der Lichtquelle in der YZ-Ebene relativ zur Y-Achse in der Gegenuhrrichtung. Die Einheiten sind in Grad und müssen zwischen 0 und 360 Grad liegen.
Der Typ ist FLOAT.
Der Standardwert ist 0,0f.
SpecularExponent
D2D1_DISTANTSPECULAR_PROP_SPECULAR_EXPONENT
Der Exponent für den Glanzbegriff in der Phong-Beleuchtungsgleichung. Ein größerer Wert entspricht einer reflektierenderen Oberfläche. Der Wert ist einheitslos und muss zwischen 1,0 und 128 sein. Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
SpecularConstant
D2D1_DISTANTSPECULAR_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_DISTANTSPECULAR_PROP_SURFACE_SCALE
Der Skalierungsfaktor in Z-Richtung. Der Wert ist einheitslos und muss zwischen 0 und 10.000 sein. Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
Color
D2D1_DISTANTSPECULAR_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_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Die Größe eines Elements im Sobel-Kernel, das verwendet wird, um die Oberflächennormale in X- und Y-Richtung zu generieren. Diese Eigenschaft ist eine D2D1_VECTOR_2F (Kernel Unit Length X, Kernel Unit Length Y) und in (geräteunabhängige Pixel (DIPs)/Kernel-Einheit) 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_DISTANTSPECULAR_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 reichen.
Der Typ ist D2D1_DISTANTSPECULAR_SCALE_MODE.
Der Standardwert ist D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR.

Skalierungsmodi

Enumeration Beschreibung
D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Beispiele für den nächsten einzelnen Punkt und verwenden diesen. Dieser Modus verwendet weniger Verarbeitungszeit, gibt jedoch das Bild mit der niedrigsten Qualität aus.
D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR Verwendet ein Vier-Punkt-Beispiel und eine lineare Interpolation. Dieser Modus gibt ein Bild mit höherer Qualität aus als der nächste Nachbar.
D2D1_DISTANTSPECULAR_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_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Verwendet 4 lineare Beispiele innerhalb eines einzelnen Pixels für gutes Antialiasing von Kanten. Dieser Modus eignet sich gut für das Herunterskalieren von kleinen Mengen auf Bildern mit wenigen Pixeln.
D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC Verwendet anisotrope Filterung, um ein Muster entsprechend der transformierten Form der Bitmap zu samplen.
D2D1_DISTANTSPECULAR_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_DISTANTSPECULAR_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