Udostępnij przez


Efekt oświetlenia punktowo-refleksyjnego

Użyj efektu oświetlenia punktowego, aby utworzyć obraz, który wydaje się być powierzchnią odbijającą. Efekt używa kanału alfa obrazu jako mapy wysokości i źródła światła punktowego, które można umieścić, oraz oblicza odbicie i światło zgodnie z widmową częścią modelu oświetlenia Phong.

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 specularnym to maksymalna wartość wyjściowa czerwonego, zielonego i niebieskiego kanału dla tego piksela.

Identyfikator CLSID dla tego efektu jest CLSID_D2D1PointSpecular.

Przykładowy obraz

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

przykładowy zrzut ekranu przedstawiający obrazy wejściowe i wyjściowe efektu oświetlenia punktowego.

Światło widmowe odnosi się do światła odbijanego w określonym kierunku zgodnie z modelem oświetlenia Phong.

diagram przedstawiający wektory używane do obliczania wyniku oświetlenia zwierciadlanego dla mapy bitowej.

Efekt oblicza końcowe wartości pikseli wyjściowych przy użyciu równań w tym miejscu:

równania do obliczania końcowych wartości pikseli.

gdzie

k? = stała oświetlenia widmowego.
symbol normalnego wektora jednostki powierzchni. = wektor jednostki normalnej powierzchni, który jest funkcją x i y. Sprawdź mapę wysokości i wektor normalny dla obliczeń.
symbol wektora jednostkowego w połowie. = "w połowie" wektor jednostkowy pomiędzy wektorem jednostkowym oka i wektorem jednostkowym światła. Aby uzyskać obliczenia, zobacz punktowe źródło światła.
Lr, Lg, Lb = jasny kolor w składnikach RGB.

Ustawiasz stałą oświetlenia widmowego jako właściwość SpecularConstant, a kolor światła jako właściwość Color.

Źródło światła punktowego

Źródło światła punktowego emituje światło we wszystkich kierunkach, takich jak na obrazie tutaj.

światło punktowe emitujące światło we wszystkich kierunkach.

Położenie źródła światła można ustawić przy użyciu właściwości LightPosition. Efekt oblicza wektor światła L dla źródła światła punktowego, za pomocą podanych tutaj równań.

równanie wektora światła.

gdzie Light?, Lightyi Lightz to pozycja światła wejściowego. Efekt oblicza wektor w połowie drogi, symbolizuje wektor w połowie drogi. zgodnie z definicją w modelu oświetlenia Phong, przy użyciu poniższego równania. Model oświetlenia zakłada, że wektor oczu, symbol wektora oka, znajduje się w lokalizacji (0,0,1).

równanie wektora w połowie.

Zarówno L, jak i H są znormalizowane do wektorów długości jednostkowej.

Mapa wysokości i wektor normalny

Efekt generuje mapę wysokości obrazu wejściowego na podstawie kanału alfa.

Składnik wysokości (Z) jest obliczany przy użyciu równania:

równanie do obliczenia wysokości (z) powierzchni.

Efekt oblicza normalną powierzchnię, symbol wektora normalnego., dla mapy bitowej wejściowej przy użyciu gradientu Sobel.

Stała i wykładnik oświetlenia specularnego

Światło widmowe reprezentuje światło odbite od powierzchni mapy wysokości obrazu. Należy określić właściwość SpecularExponent, która określa ilość odbicia widmowego z mapy bitowej.

Większe wykładniki reprezentują błyszczące obiekty i odzwierciedlają światło w bardziej skoncentrowanym kształcie.

Właściwość SpecularConstant K? określa ilość światła odbitego jako stosunek światła przychodzącego.

Właściwości efektu

Nazwa wyświetlana i wyliczenie indeksu Opis
Pozycja światła
D2D1_POINTSPECULAR_PROP_LIGHT_POSITION
Położenie światła punktu źródła światła. Właściwość D2D1_VECTOR_3F jest zdefiniowana jako (x, y, z). Jednostki znajdują się w pikselach niezależnych od urządzenia (DIP), a wartości są bez jednostek i nieograniczone. Typ jest D2D1_VECTOR_3F.
Wartość domyślna to {0.0f, 0.0f, 0.0f}.
SpecularExponent
D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT
Wykładnik terminu specularnego w równaniu oświetlenia Phong. Większa wartość odpowiada bardziej refleksyjnej powierzchni. Ta wartość jest bez jednostki i musi mieścić się w przedziale od 1,0 do 128. Typ to FLOAT.
Wartość domyślna to 1.0f.
SpecularConstant
D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT
Stosunek odbicia widmowego do światła przychodzącego. Wartość jest bezwymiarowa i musi należeć do zakresu od 0 do 10 000. Typ to zmiennoprzecinkowy (FLOAT).
Wartość domyślna to 1.0f.
SurfaceScale
D2D1_POINTSPECULAR_PROP_SURFACE_SCALE
Współczynnik skalowania w kierunku Z do generowania mapy wysokości. Wartość jest bezwymiarowa i musi mieścić się w zakresie od 0 do 10 000. Typ to FLOAT.
Wartość domyślna to 1.0f.
Kolor
D2D1_POINTSPECULAR_PROP_COLOR
Kolor światła przychodzącego. Ta właściwość jest uwidoczniona jako D2D1_VECTOR_3F (R, G, B) i używana do obliczania LR, LG, LB. Typ to = D2D1_VECTOR_3F.
Wartość domyślna to {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH
Rozmiar elementu w jądrze Sobela jest używany do generowania normalnej powierzchni w kierunkach X i Y. Ta właściwość odpowiada wartościom dx i dy w gradiencie Sobela. Ta właściwość to D2D1_VECTOR_2F (długość jednostki jądra X, długość jednostki jądra Y) i jest zdefiniowana w (DIPs/Jednostka jądra). Efekt używa interpolacji dwuliniowej do skalowania mapy bitowej w celu dopasowania rozmiaru elementów jądra. Typ jest D2D1_VECTOR_2F.
Wartość domyślna to {1.0f, 1.0f}.
Tryb skalowania
D2D1_POINTSPECULAR_PROP_SCALE_MODE
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.
Typ to tryb D2D1_POINTSPECULAR_SCALE_MODE.
Wartość domyślna to D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.

Tryby skalowania

Wyliczenie Opis
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR Pobiera próbkę z najbliższego pojedynczego punktu i wykorzystuje ją. Ten tryb używa mniej czasu przetwarzania, ale generuje obraz o najniższej jakości.
D2D1_POINTSPECULAR_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_POINTSPECULAR_SCALE_MODE_CUBIC Używa jądra sześciennego z 16 próbkami do interpolacji. Ten tryb używa najbardziej czasu przetwarzania, ale generuje obraz o wyższej jakości.
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR Używa 4 próbek liniowych w jednym pikselu dla skutecznego wygładzania krawędzi. Ten tryb jest dobry do skalowania w dół o niewielkie wartości na obrazach o niskiej rozdzielczości.
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC Używa filtrowania anisotropowego do próbkowania wzorca zgodnie z przekształconym kształtem mapy bitowej.
D2D1_POINTSPECULAR_MOD_SKALOWANIA_WYSOKA_JAKOŚĆ_KUBICZNA Używa sześciennego jądra o zmiennej wielkości i wysokiej jakości, aby wykonać wstępne skalowanie obrazu, jeśli w macierzy transformacji zawarte jest skalowanie w dół. Następnie używa trybu interpolacji sześciennych dla końcowych danych wyjściowych.

Notatka

Jeśli nie wybierzesz trybu, efekt zostanie ustawiony domyślnie na D2D1_POINTSPECULAR_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