Sdílet prostřednictvím


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

V tomto příkladu vidíte vstupní a výstupní obrázky efektu osvětlení typu point-specular.

příklad snímku obrazovky, který ukazuje vstupní a výstupní obrazy efektu bodového zrcadlového osvětlení.

Zrcadlové světlo odkazuje na světlo, které se odráží v konkrétním směru podle Phongova modelu osvětlení.

diagram vektorů použitých ke kalkulaci výstupu zrcadlového osvětlení rastrového obrázku.

Efekt vypočítá konečné výstupní hodnoty pixelů pomocí rovnic zde:

rovnice pro výpočet konečných hodnot pixelů.

kde

k? = zrcadlová světelná konstanta.
symbol vektoru normální jednotky povrchu. = povrchový normální jednotkový vektor, což je funkce x a y. Pro výpočty se podívejte na mapu výšky a normální vektor.
symbol polovičního jednotkového vektoru. = "poloviční" jednotkový vektor mezi vektorem pohledu a vektorem světla. Výpočty najdete v tématu Bodový zdroj světla.
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.

bodové světlo vyzařující světlo ve všech směrech.

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:

světlá vektorová rovnice.

kde Light?, Lightya Lightz jsou vstupní světlá pozice. Efekt vypočítá poloviční vektor, symbol polovičního vektoru., jak je definováno v Phongově modelu osvětlení, pomocí rovnice zde. Model osvětlení předpokládá, že vektor oka, symbol vektoru oka, je umístěn v (0,0,1).

vektorová rovnice v polovině.

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:

rovnici pro výpočet výšky (z) povrchu.

Efekt vypočítá normálu povrchu, symbol normálního vektoru,, 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

ID2D1Effect