Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Punktowe źródło światła
- mapa wysokości i wektor normalny
- Stała i wykładnik oświetlenia zwierciadlanego
- Efekt właściwości
- tryby skalowania
- wymagania
- Tematy pokrewne
Przykładowy obraz
W tym przykładzie przedstawiono 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.
Efekt oblicza końcowe wartości pikseli wyjściowych przy użyciu równań w tym miejscu:
gdzie
- k? = stała oświetlenia widmowego.
= wektor jednostki normalnej powierzchni, który jest funkcją x i y. Sprawdź mapę wysokości i wektor normalny dla obliczeń.
= "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.
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ń.
gdzie Light?, Lightyi Lightz to pozycja światła wejściowego. Efekt oblicza 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,
, znajduje się w lokalizacji (0,0,1).
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:
Efekt oblicza normalną powierzchnię,
, 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 |