Share via


Beleuchtungseffekt „Scheinwerfer-Diffus“

Verwenden Sie den punktstreuen Lichteffekt, um ein Bild zu erstellen, das eine nicht reflektierende Oberfläche zu sein scheint, wobei die Lichtquelle auf einen gerichteten Lichtkegel beschränkt ist und das Licht in alle Richtungen gestreut wird. Dieser Effekt verwendet den Alphakanal als Höhenkarte und beleuchtet das Bild mit einer Spotlichtquelle.

Die Farbe der Ausgabe-Bitmap ist das Ergebnis der hellen Farbe, 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_D2D1SpotDiffuse.

Beispielbild

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

Screenshot des Effektbeispiels

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

Bitmapberechnung für Ausgabe

Hierbei gilt:

kd = diffuse Lichtkonstante. Vom Benutzer angegeben.
normales Vektorsymbol. = Flächennormaleinheitsvektor, eine Funktion von x und y.
Lichtvektorsymbol. = Einheitsvektor, der von der Oberfläche auf das Licht zeigt.
Lr, Lg, Lb = die helle Farbe in RGB-Komponenten.

Effekteigenschaften

Anzeigename und Indexaufzählung Typ und Standardwert BESCHREIBUNG
LightPosition
D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Die Lichtposition der Punktlichtquelle. Die Eigenschaft ist ein D2D1_VECTOR_3F definiert als (x, y, z). Die Einheiten befinden sich in geräteunabhängigen Pixeln (DIPs) und sind ungebunden.
PointsAt
D2D1_SPOTDIFFUSE_PROP_POINTS_AT
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Wo das Spotlicht fokussiert ist. Die Eigenschaft wird als D2D1_VECTOR_3F mit (x, y, z) verfügbar gemacht. Die Einheiten befinden sich in DIPs, und die Werte sind ungebunden.
Fokus
D2D1_SPOTDIFFUSE_PROP_FOCUS
GLEITKOMMAZAHL
1.0f
Der Fokus des Spotlichts. Diese Eigenschaft ist einheitslos und zwischen 0 und 200 definiert.
Einschränken vonConeAngle
D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE
GLEITKOMMAZAHL
90.0f
Der Kegelwinkel, der die Region einschränkt, in der das Licht projiziert wird. Kein Licht wird außerhalb des Kegels projiziert. Der begrenzende Kegelwinkel ist der Winkel zwischen der Spotlichtachse (der Achse zwischen den Eigenschaften LightPosition und PointsAt ) und dem Spotlichtkegel. Diese Eigenschaft ist in Grad definiert und muss zwischen 0 und 90 Grad betragen.
DiffuseConstant
D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT
GLEITKOMMAZAHL
1.0f
Das Verhältnis der diffusen Reflexion zu der Menge des eingehenden Lichts. Diese Eigenschaft muss zwischen 0 und 10.000 sein und ist einheitslos.
SurfaceScale
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
GLEITKOMMAZAHL
1.0f
Der Skalierungsfaktor in Z-Richtung. Die Oberflächenskala ist einheitslos und muss zwischen 0 und 10.000 sein.
Color
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
Die Farbe des einfallenden Lichts. Diese Eigenschaft wird als Vector 3 (R, G, B) verfügbar gemacht und zum Berechnen von LR, LG, LB verwendet.
KernelUnitLength
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
D2D1_VECTOR_2F
{1.0f, 1.0f}
Die Größe eines Elements im Sobel-Kernel, mit dem die Oberfläche normal in X- und Y-Richtung generiert wird. 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 bilineare Interpolation, um die Bitmap an die Größe der Kernelelemente zu skalieren.
Scalemode
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR
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 .

Skalierungsmodi

Enumeration Beschreibung
D2D1_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_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_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC Verwendet anisotrope Filterung, um ein Muster entsprechend der transformierten Form der Bitmap zu samplen.
D2D1_SPOTDIFFUSE_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_SPOTDIFFUSE_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