Dela via


Ljuseffekt med koncentrerat och diffust ljus

Använd ljuseffekten spot-diffuse för att skapa en bild som verkar vara en icke-reflekterande yta där ljuskällan är begränsad till en riktad kon av ljus och ljuset är utspridt i alla riktningar. Den här effekten använder alfakanalen som en höjdkarta och belyser bilden med en spotlightkälla.

Färgen på utdatabitkartan är ett resultat av ljus färg, ljus position och ytgeometri. Alfakanalens utdata för varje pixel med diffus belysning är alltid 1,0.

CLSID för den här effekten är CLSID_D2D1SpotDiffuse.

Exempelbild

Exemplet här visar in- och utdatabilderna av den spot-diffusa belysningseffekten.

skärmbild av effektexempel som visar

Effekten beräknar de slutliga pixelvärdena med hjälp av följande ekvationer:

utdatabitmappsberäkning

Var:

kd = diffus belysningskonstant. Anges av användaren.
normal vektorsymbol. = ytnormal enhetsvektor, en funktion av x och y.
ljusvektorsymbol. = enhetsvektor som pekar från yta till ljus.
Lr, Lg, Lb = ljusfärgen i RGB-komponenter.

Effektegenskaper

Visningsnamn och indexuppräkning Typ- och standardvärde Beskrivning
LightPosition
D2D1_SPOTDIFFUSE_PROP_LJUSPOSITION
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Punktljuskällans ljusposition. Egenskapen är en D2D1_VECTOR_3F definierad som (x, y, z). Enheterna finns i enhetsoberoende bildpunkter (DIP:er) och är obundna.
PointsAt
D2D1_SPOTDIFFUSE_PROP_POINTS_AT
D2D1_VECTOR_3F
{0.0f, 0.0f, 0.0f}
Där spotljuset är fokuserat. Egenskapen exponeras som en D2D1_VECTOR_3F med (x, y, z). Enheterna finns i DIP:er och värdena är obundna.
Fokus
D2D1_SPOTDIFFUSE_PROP_FOCUS (fokusparameter för spotdiffus)
FLYTA
1.0f
Fokus i strålkastaren. Den här egenskapen är enhetslös och definieras mellan 0 och 200.
LimitingConeAngle
D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE
FLYTA
90.0f
Konvinkeln som begränsar den region där ljuset projiceras. Inget ljus projiceras utanför konen. Den begränsande konvinkeln är vinkeln mellan punktljusaxeln (axeln mellan LightPosition och PointsAt egenskaper) och punktljuskonen. Den här egenskapen definieras i grader och måste vara mellan 0 och 90 grader.
DiffusKonstant
D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT
FLYTA
1.0f
Förhållandet mellan diffus reflektion och mängden inkommande ljus. Den här egenskapen måste vara mellan 0 och 10 000 och är enhetslös.
Ytskala
D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE
FLYTA
1.0f
Skalningsfaktorn i Z-riktningen. Ytskalan är enhetslös och måste vara mellan 0 och 10 000.
Färg
D2D1_SPOTDIFFUSE_PROP_COLOR
D2D1_VECTOR_3F
{1.0f, 1.0f, 1.0f}
Färgen på det inkommande ljuset. Den här egenskapen exponeras som en Vector 3 (R, G, B) och används för att beräkna LR, LG, LB.
KernelUnitLength
D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH
D2D1_VECTOR_2F
{1.0f, 1.0f}
Storleken på ett element i Sobel-kerneln som används för att generera ytnormal i X- och Y-riktningen. Den här egenskapen mappar till dx- och dy-värdena i Sobel-gradienten. Den här egenskapen är en D2D1_VECTOR_2F(Kernel Unit Length X, Kernel Unit Length Y) och definieras i (DIPs/Kernel Unit). Effekten använder bilinearinterpolation för att skala bitmappen så att den matchar storleken på kernelelement.
Skalningsläge
D2D1_SPOTDIFFUSE_PROP_SCALE_MODE
D2D1_SPOTDIFFUSE_SCALE_MODE
D2D1_SPOTDIFFUSE_SKALALÄGE_LINJÄR
Interpolationsläget som effekten använder för att skala bilden till motsvarande längd på kernelenheten. Det finns sex skalningslägen som varierar i kvalitet och hastighet. Se Skalningslägen för mer information.

Skalningslägen

Uppräkning Beskrivning
D2D1_SPOTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR Tar prov på den närmaste enskilda punkten och använder den. I det här läget används mindre bearbetningstid, men den lägsta kvalitetsbilden matas ut.
D2D1_SPOTDIFFUSE_SCALE_MODE_LINJÄR Använder ett fyrpunktsexempel och linjär interpolation. Det här läget ger en bild av högre kvalitet än närmaste granne.
D2D1_SPOTDIFFUSE_SCALE_MODE_CUBIC Använder en kubisk kärna med 16 prover för interpolering. Det här läget använder mest bearbetningstid, men ger en bild av högre kvalitet.
D2D1_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR Använder 4 linjära exempel inom en enda pixel för bra kantutjämning. Det här läget är bra för att skala ned med små mängder på bilder med några bildpunkter.
D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC Använder anisotropisk filtrering för att prova ett mönster enligt bitmappens transformerade form.
D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC Använder en kubisk kärna med variabel storlek av hög kvalitet för att förminska bilden om nedskalning ingår i transformeringsmatrisen. Använder sedan kubikinterpoleringsläget för de slutliga utdata.

Not

Om du inte väljer ett läge ställs effekten in på D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR som standard.

Krav

Krav Värde
Lägsta klient som stöds Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar]
Lägsta server som stöds Windows 8 och Platform Update för Windows 7 [skrivbordsappar | Windows Store-appar]
Rubrik d2d1effects.h
Bibliotek d2d1.lib, dxguid.lib

ID2D1Effect