Sdílet prostřednictvím


Efekt spotového difuzního osvětlení

Pomocí efektu bodového difuzního osvětlení vytvořte obrázek, který vypadá jako nereflexní povrch, kde je zdroj světla omezen na směrovaný kužel světla a světlo je rozptýleno ve všech směrech. Tento efekt používá alfa kanál jako mapu výšky a rozsvítí obrázek s spotový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_D2D1SpotDiffuse.

Příklad obrázku

Příklad zde ukazuje vstupní a výstupní obrázky spotově difuzního světelného efektu.

efektu příklad snímku obrazovky, který ukazuje

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

výstup výpočtu rastrového obrázku

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 světlého vektoru. = 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 Typ a výchozí hodnota Popis
Pozice světla
D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
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é.
PointsAt
D2D1_SPOTDIFFUSE_PROP_UKAZUJE_NA
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Kde je spotové světlo zaměřeno. Vlastnost je vystavena jako D2D1_VECTOR_3F s (x, y, z). Jednotky jsou v jednotkách DIP a hodnoty jsou nevázané.
Soustředění
D2D1_SPOTDIFFUSE_PROP_FOCUS
PLOUT
1.0f
Fokus spotového světla. Tato vlastnost je bez jednotná a je definována mezi 0 a 200.
OmezeníConeAngle
D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE
POVZNÉST SE
90.0f
Úhel kužele, který omezuje oblast, kde je světlo promítané. Mimo kužel se nepromítne žádné světlo. Mezní úhel kužele je úhel mezi osou světlometu (osou mezi vlastnostmi LightPosition a PointsAt) a kuželem světlometu. Tato vlastnost je definována ve stupních a musí být v rozmezí od 0 do 90 stupňů.
Difuzníkonstant
D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT
PLAVAT
1.0f
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.
SurfaceScale
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
PLAVAT
1.0f
Měřítkový koeficient ve směru Z. Měřítko povrchu je bezstavné a musí být v rozmezí od 0 do 10 000.
Barva
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
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.
DélkaJednotkyJádra
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH (délka jednotky jádra)
D2D1_VECTOR_2F
{1.0f, 1.0f}
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(Kernel Unit Length X, Kernel Unit Length Y) a je definována v rámci DIPs/Kernel Unit. Efekt používá bilineární interpolaci ke škálování rastrového obrázku tak, aby odpovídal velikosti prvků jádra.
ScaleMode
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR
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í.

Režimy škálování

Výčet Popis
D2D1_SPOTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR Odebírá nejbližší bod a použije jej. Tento režim používá méně času zpracování, ale vypíše nejnižší kvalitu obrázku.
D2D1_SPOTDIFFUSE_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_SPOTDIFFUSE_SCALE_MODE_CUBIC K interpolaci se používá krychlové jádro se 16 vzorky. Tento režim používá nejvíce výpočetního času, ale výsledkem je obraz s vyšší kvalitou.
D2D1_SPOTDIFFUSE_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í obrázků o malé množství s malým počtem pixelů.
D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC Používá anisotropní filtrování k vzorkování vzorku podle transformovaného tvaru rastrového obrázku.
D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Použije vysoce kvalitní kubický kernel s proměnlivou velikostí pro předběžné zmenšení obrazu, pokud se v transformační matici používá zmenšení. 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í D2D1_SPOTDIFFUSE_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