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.
Der Effekt berechnet die endgültigen Ausgabepixelwerte mithilfe der folgenden Formeln:
Hierbei gilt:
- kd = diffuse Lichtkonstante. Vom Benutzer angegeben.
= Flächennormaleinheitsvektor, eine Funktion von x und y.
= 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 |