Beleuchtungseffekt „Punkt-Diffus“
Verwenden Sie den punktstreuen Beleuchtungseffekt, um ein Bild zu erstellen, das eine nicht reflektierende Oberfläche mit in alle Richtungen gestreutem Licht zu sein scheint. Dieser Effekt verwendet den Alphakanal als Höhenkarte und beleuchtet das Bild mit einer Punktlichtquelle.
Die Farbe der Ausgabe-Bitmap ist das Ergebnis der Hellenfarbe, der Lichtposition und der Oberflächengeometrie. Die Alphakanalausgabe für jedes Pixel mit diffuser Beleuchtung ist immer 1,0.
Die CLSID für diesen Effekt ist CLSID_D2D1PointDiffuse. Um diesen Effekt zu verwenden, fügen Sie dxguid.lib zu den Linkerabhängigkeiten hinzu.
Beispielbild
Das hier gezeigte Beispiel zeigt die Eingabe- und Ausgabebilder des punktstreuen Lichteffekts.
Diffuse Beleuchtung bezieht sich auf Licht, das in mehreren Richtungen reflektiert wird, wie hier zu sehen.
Der Effekt berechnet die endgültigen Ausgabepixelwerte mithilfe der folgenden Formeln:
Hierbei gilt:
- kd = diffuse Beleuchtungskonstante. Vom Benutzer angegeben.
= Flächennormaleinheitsvektor, eine Funktion von x und y.
= Einheitsvektor, der von der Oberfläche zum Licht zeigt.
Lr, Lg, Lb = die Helle Farbe in RGB-Komponenten.
Effekteigenschaften
Anzeigename und Indexenumeration | Beschreibung |
---|---|
LightPosition D2D1_POINTDIFFUSE_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 sind nicht gebunden. Der Typ ist D2D1_VECTOR_3F. Der Standardwert ist {0.0f, 0.0f, 0.0f}. |
DiffuseConstant D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT |
Das Verhältnis der diffusen Reflektion zu der Menge des eingehenden Lichts. Diese Eigenschaft muss zwischen 0 und 10.000 sein und ist einheitslos. Der Typ ist FLOAT. Der Standardwert ist 1,0f. |
SurfaceScale D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE |
Der Skalierungsfaktor in Z-Richtung. Die Oberflächenskala ist einheitslos und muss zwischen 0 und 10.000 sein. Der Typ ist FLOAT. Der Standardwert ist 1,0f. |
Color D2D1_POINTDIFFUSE_PROP_COLOR |
Die Farbe des eingehenden Lichts. Diese Eigenschaft wird als Vector 3 (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_POINTDIFFUSE_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 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_POINTDIFFUSE_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. Weitere Informationen finden Sie unter Skalierungsmodi . Der Typ ist D2D1_POINTDIFFUSE_SCALE_MODE. Der Standardwert ist D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR. |
Skalierungsmodi
Enumeration | Beschreibung |
---|---|
D2D1_POINTDIFFUSE_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_POINTDIFFUSE_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_POINTDIFFUSE_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_POINTDIFFUSE_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_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC | Verwendet die anisotrope Filterung, um ein Muster entsprechend der transformierten Form der Bitmap zu ermitteln. |
D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC | Verwendet einen Kubikkern mit variabler Größe hoher Qualität, um eine Vorabskalierung des Bilds durchzuführen, wenn eine Downskalierung in die Transformationsmatrix einbezogen wird. 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_POINTDIFFUSE_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 |