Beleuchtungseffekt „Punkt-Diffus“

Verwenden Sie den punktdiffusiven Beleuchtungseffekt, um ein Bild zu erstellen, das eine nicht reflektierende Oberfläche mit Licht in alle Richtungen zu sein scheint. Dieser Effekt verwendet den Alphakanal als Höhenkarte und strahlt das Bild mit einer Punktlichtquelle aus.

Die Farbe der Ausgabebitmap ist das Ergebnis von Lichtfarbe, Lichtposition und 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 den Linkerabhängigkeiten hinzu.

Beispielbild

Das folgende Beispiel zeigt die Ein- und Ausgabebilder des punktdiffusorischen Beleuchtungseffekts.

Beispielscreenshot des Effekts, der die Ein- und Ausgabebilder des Punktdiffuslichteffekts zeigt.

Diffuse Beleuchtung bezieht sich auf Licht, das in mehrere Richtungen reflektiert wird, wie hier zu sehen.

Diffuses Beleuchtungslicht ist in alle Richtungen verteilt.

Der Effekt berechnet die endgültigen Ausgabepixelwerte, die mithilfe der folgenden Gleichungen berechnet werden:

Ausgabebitmapberechnungen.

Hierbei gilt:

kd = diffuse Beleuchtungskonstante. Wird vom Benutzer angegeben.
Surface Normal Vector-Symbol. = normaler Oberflächeneinheitsvektor, eine Funktion von x und y.
Einheitenvektorsymbol. = Einheitenvektor, der von der Oberfläche auf das Licht verweist.
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 ein D2D1 _ VECTOR _ 3F, der als (x, y, z) definiert ist. Die Einheiten befinden sich in geräteunabhängigen Pixeln (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 liegen und ist einheitenlos.
Der Typ ist FLOAT.
Der Standardwert ist 1,0f.
SurfaceScale
D2D1 _ POINTDIFFUSE _ PROP _ SURFACE _ SCALE
Der Skalierungsfaktor in Z-Richtung. Die Oberflächenskala ist einheitenlos 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 Vektor 3 (R, G, B) verfügbar gemacht und zum Berechnen von LR,LG,LBverwendet.
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 ein 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 von Kernelelementen 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 Bild auf die entsprechende Kerneleinheitlä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 _ _ SKALIERUNGSMODUS NÄCHSTER _ _ NACHBAR Probieren Sie den nächstgelegenen einzelnen Punkt aus, und verwendet diesen. Dieser Modus verwendet weniger Verarbeitungszeit, gibt jedoch das Bild mit der niedrigsten Qualität aus.
D2D1 _ POINTDIFFUSE _ SCALE _ MODE _ LINEAR Verwendet eine Vier-Punkt-Stichprobe und lineare Interpolation. Dieser Modus gibt ein Bild mit höherer Qualität als der nächste Nachbar aus.
D2D1 _ POINTDIFFUSE _ _ SKALIERUNGSMODUS _ KUBISCH Verwendet einen kubischen Kernel mit 16 Beispielen für die Interpolation. Dieser Modus verwendet die meiste Verarbeitungszeit, gibt jedoch ein Bild höherer Qualität aus.
D2D1 _ POINTDIFFUSE _ SCALE _ MODE _ MULTI _ SAMPLE _ LINEAR Verwendet vier lineare Stichproben innerhalb eines einzelnen Pixels für ein gutes Edge-Antialiasing. Dieser Modus eignet sich gut für das Herunterskalierung um kleine Mengen auf Bildern mit wenigen Pixeln.
D2D1 _ POINTDIFFUSE _ SCALE MODE _ _ ANISOTROP Verwendet die Anisotrope Filterung, um ein Muster entsprechend der transformierten Form der Bitmap abzubilden.
D2D1 _ POINTDIFFUSE _ SCALE _ MODE _ HIGH _ QUALITY _ CUBIC Verwendet einen kubischen Kernel mit variabler Größe, um ein Vorabskalieren des Bilds durchzuführen, wenn die Abwärtsskalierung in der Transformationsmatrix beteiligt ist. Verwendet dann den kubischen Interpolationsmodus für die endgültige Ausgabe.

Hinweis

Wenn Sie keinen Modus auswählen, lautet der Effekt standardmäßig D2D1 _ POINTDIFFUSE _ SCALE _ MODE _ LINEAR.

Requirements (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