Udostępnij przez


Efekt oświetlenia punktowo-rozproszonego

Użyj efektu oświetlenia rozproszonego typu spot, aby utworzyć obraz, który wydaje się być nieodświetlającą powierzchnią, w której źródło światła jest ograniczone do skierowanego stożka światła, a światło jest rozpraszane we wszystkich kierunkach. Ten efekt używa kanału alfa jako mapy wysokości i oświetla obraz źródłem światła punktowego.

Kolor mapy bitowej danych wyjściowych jest wynikiem koloru światła, położenia światła i geometrii powierzchni. Wyjście kanału alfa dla każdego piksela z oświetleniem rozproszonym jest zawsze 1.0.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1SpotDiffuse.

Przykładowy obraz

W tym przykładzie przedstawiono obrazy wejściowe i wyjściowe efektu oświetlenia rozproszonego typu spot.

zrzut ekranu przykładowy przedstawiający

Efekt oblicza końcowe wartości pikseli wyjściowych przy użyciu następujących równań:

obliczenie wyjściowej mapy bitowej

Gdzie:

kd = stała oświetlenia rozproszonego. Określony przez użytkownika.
symbol wektora jednostkowego normalnego. = wektor jednostkowy normalny powierzchni, funkcja x i y.
symbol wektora światła. = wektor jednostkowy wskazujący od powierzchni do światła.
Lr, Lg, Lb = jasny kolor w składnikach RGB.

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Typ i wartość domyślna Opis
PozycjaŚwiatła
D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Położenie światła punktu źródła światła. Właściwość jest zdefiniowana jako D2D1_VECTOR_3F o współrzędnych (x, y, z). Jednostki są w pikselach niezależnych od urządzenia (DIPs) i są niezwiązane.
Wskaźniki
D2D1_SPOTDIFFUSE_PROP_POINTS_AT
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Gdzie koncentruje się światło punktowe. Właściwość jest widoczna jako D2D1_VECTOR_3F (x, y, z). Jednostki znajdują się w adresach IP, a wartości są niezwiązane.
Skupienie
D2D1_SPOTDIFFUSE_PROP_FOCUS
PŁYWAĆ
1.0f
Fokus światła punktowego. Ta właściwość jest bezwymiarowa i jest zdefiniowana w zakresie od 0 do 200.
Ograniczenie kąta stożka
D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE
SPŁAWIK
90.0f
Kąt stożka, który ogranicza obszar, w którym światło jest emitowane. Żadne światło nie jest rzutowane poza stożek. Kąt ograniczającego stożka jest kątem między osią światła punktowego (oś między właściwościami LightPosition a PointsAt) i stożka światła punktowego. Ta właściwość jest zdefiniowana w stopniach i musi należeć do zakresu od 0 do 90 stopni.
Stała dyfuzji
D2D1_SPOTDIFFUSE_PROP_KONSTANTA_ROZPROSZENIA
SPŁAWIK
1.0f
Stosunek odbicia rozproszonego do ilości światła przychodzącego. Ta właściwość musi należeć do przedziału od 0 do 10 000 i nie ma jednostki.
SurfaceScale
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
SPŁAWIK
1.0f
Współczynnik skalowania w kierunku Z. Skala powierzchni jest bezwymiarowa i musi mieścić się w zakresie od 0 do 10 000.
Kolor
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
Kolor światła przychodzącego. Ta właściwość jest uwidoczniona jako wektor 3 (R, G, B) i używana do obliczania LR, LG, LB.
KernelUnitLength
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
D2D1_VECTOR_2F
{1.0f, 1.0f}
Rozmiar elementu w jądrze Sobel używany do generowania powierzchni normalnego w kierunku X i Y. Ta właściwość mapuje wartości dx i dy na gradient Sobel. Ta właściwość jest D2D1_VECTOR_2F (długość jednostki jądra X, długość jednostki jądra Y) i jest zdefiniowana w (DIPs/Kernel Unit). Efekt używa interpolacji dwuliniowej do skalowania mapy bitowej w celu dopasowania rozmiaru elementów jądra.
Tryb skalowania
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR
Tryb interpolacji używany przez efekt do skalowania obrazu do odpowiedniej długości jednostki jądra. Istnieje sześć trybów skalowania, które wahają się w zakresie jakości i szybkości. Aby uzyskać więcej informacji, zobacz Tryby skalowania.

Tryby skalowania

Wyliczenie Opis
D2D1_SPOTDIFFUSE_SKALA_TRYB_NAJBLIŻSZY_SĄSIAD Próbkuje najbliższy pojedynczy punkt i używa tego punktu. Ten tryb używa mniej czasu przetwarzania, ale generuje obraz o najniższej jakości.
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR Używa próbki czterech punktów i interpolacji liniowej. Ten tryb generuje obraz o wyższej jakości niż najbliższy sąsiad.
D2D1_SPOTDIFFUSE_SCALE_MODE_CUBIC Używa 16-próbkowego jądra sześciennego do interpolacji. Ten tryb używa najbardziej czasu przetwarzania, ale generuje obraz o wyższej jakości.
D2D1_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Używa 4 próbek liniowych w jednym pikselu do dobrego antyaliasingu krawędzi. Ten tryb jest dobry do skalowania w dół o niewielkie wartości na obrazach o niewielkiej liczbie pikseli.
D2D1_SPOTDIFFUSE_SCALE_MODE_ANIZOTROPOWY Używa filtrowania anisotropowego do próbkowania wzorca zgodnie z przekształconym kształtem mapy bitowej.
D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Używa jądra sześciennego wysokiej jakości o zmiennym rozmiarze, aby wstępnie zmniejszyć obraz, jeśli skalowanie w dół jest uwzględnione w macierzy transformacji. Następnie używa trybu interpolacji sześciennych dla końcowych danych wyjściowych.

Notatka

Jeśli nie wybierzesz trybu, to efekt domyślnie zostanie ustawiony na D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR.

Wymagania

Wymaganie Wartość
Minimalny obsługiwany klient Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Minimalny obsługiwany serwer Windows 8 i aktualizacja platformy dla systemu Windows 7 [aplikacje klasyczne | Aplikacje ze Sklepu Windows]
Nagłówek d2d1effects.h
Biblioteka d2d1.lib, dxguid.lib

ID2D1Effect