Bodový speculární světelný efekt
Pomocí efektu bodového osvětlení vytvořte obrázek, který vypadá jako odrazný povrch. Efekt používá alfa kanál obrázku jako výškovou mapu a bodový zdroj světla, který umístíte, a vypočítá odraz a světlo podle specifikární části modelu osvětlení Phong.
Barva výstupního rastrového obrázku je výsledkem světlé barvy, umístění světla a geometrie povrchu. Výstup alfa kanálu pro každý pixel s spekulárním osvětlením je maximum červených, zelených a modrých výstupů kanálu pro daný pixel.
CLSID pro tento efekt je CLSID_D2D1PointSpecular.
- příklad obrázku
- bodový zdroj světla
- výšková mapa a normální vektor
- Zrcadlová světelná konstanta a exponent
- vlastnosti efektu
- režimy škálování
- Požadavky
- související témata
Příklad obrázku
V tomto příkladu vidíte vstupní a výstupní obrázky efektu osvětlení typu point-specular.
Zrcadlové světlo odkazuje na světlo, které se odráží v konkrétním směru podle Phongova modelu osvětlení.
Efekt vypočítá konečné výstupní hodnoty pixelů pomocí rovnic zde:
kde
- k? = zrcadlová světelná konstanta.


Lr, Lg, Lb = barva světla v součástech RGB.
Konstantu pro zrcadlové osvětlení nastavíte jako vlastnost SpecularConstant a barvu světla jako vlastnost Color.
Bodový zdroj světla
Bodový zdroj světla vysílá světlo ve všech směrech, jako je na obrázku.
Umístění zdroje světla nastavíte pomocí vlastnosti LightPosition. Efekt vypočítá světelný vektor, L , pro bodový zdroj světla pomocí rovnic zde:
kde Light?, Lightya Lightz jsou vstupní světlá pozice. Efekt vypočítá poloviční vektor, , jak je definováno v Phongově modelu osvětlení, pomocí rovnice zde. Model osvětlení předpokládá, že vektor oka,
, je umístěn v (0,0,1).
L i H jsou normalizovány na vektory délky jednotek.
Mapa výšky a normální vektor
Efekt vygeneruje mapu výšky pro vstupní obrázek na základě jejího alfa kanálu.
Komponenta height (Z) se vypočítá pomocí rovnice:
Efekt vypočítá normálu povrchu, , pro vstupní rastrový obrázek pomocí Sobelova gradientu.
Zrcadlová světelná konstanta a exponent
Specular light představuje světlo, které se odráží z povrchu výškové mapy obrazu. Zadáte vlastnost SpecularExponent, která určuje míru zrcadlového odrazu z bitmapy.
Větší exponenty představují lesklejší objekty a odrážejí světlo ve více zaměřeném tvaru.
Vlastnost SpecularConstant K? definuje množství reflektujícího světla jako poměr příchozího světla.
Vlastnosti efektu
Zobrazovaný název a seznam indexů | Popis |
---|---|
Pozice světla D2D1_POINTSPECULAR_PROP_LIGHT_POSITION |
Světlá pozice bodového zdroje světla. Vlastnost je D2D1_VECTOR_3F definována jako (x, y, z). Jednotky jsou v pixelech nezávislých na zařízeních (DIP) a hodnoty jsou bez jednotek a nevázané. Typ je D2D1_VECTOR_3F. Výchozí hodnota je {0.0f, 0.0f, 0.0f}. |
SpecularExponent D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT |
Exponent pro zrcadlový člen ve Phongově světelné rovnici. Větší hodnota odpovídá reflexnějšímu povrchu. Tato hodnota je bez jednotná a musí být mezi 1,0 a 128. Typ je FLOAT. Výchozí hodnota je 1,0f. |
Specularní konstanta D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT |
Poměr zrcadlového odrazu k příchozímu světlu. Hodnota je bez jednotná a musí být v rozmezí od 0 do 10 000. Typ je FLOAT. Výchozí hodnota je 1,0f. |
SurfaceScale D2D1_POINTSPECULAR_PROP_SURFACE_SCALE |
Koeficient ve směru Z pro generování mapy výšky Hodnota je bez jednotná a musí být v rozmezí od 0 do 10 000. Typ je FLOAT. Výchozí hodnota je 1,0f. |
Barva D2D1_POINTSPECULAR_PROP_COLOR |
Barva příchozího světla. Tato vlastnost je vystavena jako D2D1_VECTOR_3F (R, G, B) a slouží k výpočtu LR, LG, LB. Typ je D2D1_VECTOR_3F. Výchozí hodnota je {1.0f, 1.0f, 1.0f}. |
KernelUnitLength D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH |
Velikost prvku v jádru Sobel, který se používá k vygenerování normálního povrchu ve směrech X a Y. Tato vlastnost se mapuje na hodnoty dx a dy v gradientu Sobel. Tato vlastnost je D2D1_VECTOR_2F(délka jednotky jádra X, délka jednotky jádra Y) a je definována v jednotkách DIPs/Kernel. Efekt používá bilineární interpolaci ke škálování rastrového obrázku tak, aby odpovídal velikosti prvků jádra. Typ je D2D1_VECTOR_2F. Výchozí hodnota je {1.0f, 1.0f}. |
Mód měřítka No changes necessary. |
Režim interpolace, který efekt používá ke škálování obrázku na odpovídající délku jednotky jádra. Existuje šest režimů škálování, které jsou v rozsahu kvality a rychlosti. Další informace najdete v tématu Režimy škálování. Typ je D2D1_POINTSPECULAR_SCALE_MODE. Výchozí hodnota je D2D1_POINTSPECULAR_SCALE_MODE_LINEAR. |
Režimy škálování
Výčet | Popis |
---|---|
D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR | Vzorkuje nejbližší jeden bod a použije ho. Tento režim používá méně času zpracování, ale vypíše nejnižší kvalitu obrázku. |
D2D1_POINTSPECULAR_SCALE_MODE_LINEAR | Používá čtyřbodový vzorek a lineární interpolaci. Tento režim vypíše obrázek s vyšší kvalitou než nejbližší soused. |
D2D1_POINTSPECULAR_SCALE_MODE_CUBIC | Používá se krychlové jádro s 16 vzorky pro interpolaci. Tento režim vyžaduje nejvíce času na zpracování, ale vytváří obraz s vyšší kvalitou. |
D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR | Používá 4 lineární vzorky v jednom pixelu pro dobrý anti-aliasing okrajů. Tento režim je vhodný pro zmenšení obrazu o malé množství u obrázků s malým počtem pixelů. |
D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC | Používá anisotropní filtrování k vzorkování vzorku podle transformovaného tvaru rastrového obrázku. |
D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC | Pomocí kubického jádra s proměnlivou velikostí a vysokou kvalitou provádí předem zmenšení obrazu, pokud je zmenšení zahrnuto v transformační matici. Pak použije režim krychlové interpolace pro konečný výstup. |
Poznámka
Pokud režim nevyberete, efekt bude ve výchozím nastavení použit jako D2D1_POINTSPECULAR_SCALE_MODE_LINEAR.
Požadavky
Požadavek | Hodnota |
---|---|
Minimální podporovaný klient | Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store] |
Minimální podporovaný server | Windows 8 a Aktualizace platformy pro Windows 7 [desktopové aplikace | Aplikace pro Windows Store] |
Záhlaví | d2d1effects.h |
Knihovna | d2d1.lib, dxguid.lib |