Sdílet prostřednictvím


Efekt osvětlení difuzního bodu

Pomocí efektu osvětlení difuzního bodu vytvořte obrázek, který vypadá jako nereflexní povrch se světlým rozptýleným ve všech směrech. Tento efekt používá alfa kanál jako výškovou mapu a osvětluje obraz bodovým zdrojem světla.

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 difuzním osvětlením je vždy 1,0.

CLSID pro tento efekt je CLSID_D2D1PointDiffuse. Chcete-li použít tento efekt, přidejte dxguid.lib do závislostí linkeru.

Příklad obrázku

Příklad zde ukazuje vstupní a výstupní obrázky efektu osvětlení difuzního bodu.

příklad snímku obrazovky ukazující vstupní a výstupní obrazy efektu bodového difuzního osvětlení.

Difuzní osvětlení označuje světlo, které se odráží ve více směrech, jak je vidět zde.

difuzní světlo je rozptýleno ve všech směrech.

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

výstupních rastrových výpočtů.

Kde:

kd = difuzní světelná konstanta. Určeno uživatelem.
symbol normálního vektoru. = povrchový normální vektor jednotky, funkce x a y.
symbol vektoru jednotek. = jednotkový vektor směřující z povrchu na světlo.
Lr, Lg, Lb = barva světla v součástech RGB.

Vlastnosti efektu

Zobrazovaný název a výčet indexu Popis
LightPosition
D2D1_POINTDIFFUSE_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 a jsou nevázané.
Typ je D2D1_VECTOR_3F.
Výchozí hodnota je {0.0f, 0.0f, 0.0f}.
Difuzní konstanta
D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT
Poměr difuzního odrazu k množství příchozího světla. Tato vlastnost musí být v rozmezí od 0 do 10 000 a je bez jednotek.
Typ je FLOAT.
Výchozí hodnota je 1,0f.
SurfaceScale
D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE
Koeficient ve směru Z. Měřítko povrchu je bezstavné a musí být v rozmezí od 0 do 10 000.
Typ je FLOAT.
Výchozí hodnota je 1,0f.
Barva
D2D1_POINTDIFFUSE_PROP_COLOR
Barva příchozího světla. Tato vlastnost je vystavena jako vektor 3 (R, G, B) a používá se k výpočtu LR, LG, LB.
Typ je D2D1_VECTOR_3F.
Výchozí hodnota je {1.0f, 1.0f, 1.0f}.
KernelUnitLength
D2D1_POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
Velikost prvku v jádru Sobel použité k vygenerování normálního povrchu ve směru X a Y. Tato vlastnost se mapuje na hodnoty dx a dy v sobelově gradientu. 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 na jednotku jádra. 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}.
ScaleMode
D2D1_POINTDIFFUSE_PROP_SCALE_MODE
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_POINTDIFFUSE_SCALE_MODE.
Výchozí hodnota je D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR.

Režimy škálování

Výčet Popis
D2D1_POINTDIFFUSE_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_POINTDIFFUSE_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_POINTDIFFUSE_SCALE_MODE_CUBIC Pro interpolaci se používá 16 vzorové krychlové jádro. Tento režim používá nejvíce času na zpracování, ale výsledkem je obraz s vyšší kvalitou.
D2D1_POINTDIFFUSE_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 drobné zmenšení obrázků s menším počtem pixelů.
D2D1_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC Používá anisotropní filtrování k vzorkování vzorku podle transformovaného tvaru rastrového obrázku.
D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Pomocí vysoce kvalitního krychlového jádra s proměnnou velikostí provede zmenšení obrázku před zmenšením měřítka, pokud je zmenšení měřítka součástí transformační matice. Pak použije režim krychlové interpolace pro konečný výstup.

Poznámka

Pokud režim nevyberete, efekt se nastaví na výchozí hodnotu D2D1_POINTDIFFUSE_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