Dela via


Ljusegenskaper (Direct3D 9)

Ljusegenskaper beskriver en ljuskällas typ och färg. Beroende på vilken typ av ljus som används kan ett ljus ha egenskaper för attenuation och räckvidd, eller för spotlight-effekter. Men alla typer av lampor använder inte alla egenskaper. Direct3D använder D3DLIGHT9 struktur för att ge information om ljusegenskaper för alla typer av ljuskällor. Det här avsnittet innehåller information om alla ljusegenskaper. Informationen är indelad i följande grupper.

Egenskaperna position, intervall och dämpning definierar ett ljuss plats i världsrymden och hur det ljus det avger beter sig över avstånd. Precis som med alla ljusegenskaper som du använder i C++, finns dessa i ett ljuss D3DLIGHT9 struktur.

Ljusdämpning

Attenuation styr hur ett ljuss intensitet minskar mot det maximala avstånd som anges av range-egenskapen. Tre D3DLIGHT9 strukturmedlemmar representerar lätt dämpning: Attenuation0, Attenuation1 och Attenuation2. Dessa medlemmar innehåller flyttalsvärden som sträcker sig från 0,0 till oändligheten och styr en ljusdämpning. Vissa program anger attenuation1-medlemmen till 1,0 och de andra till 0,0, vilket resulterar i ljusintensitet som ändras till 1/D, där D är avståndet från ljuskällan till brytpunkten. Den maximala ljusintensiteten är vid källan, vilket minskar till 1 / (Ljust intervall) vid ljusets intervall. Vanligtvis anger ett program Attenuation0 till 0.0, Attenuation1 till ett konstant värde och Attenuation2 till 0.0.

Du kan kombinera dämpningsvärden för att få mer komplexa dämpningseffekter. Eller så kan du ställa in dem på värden utanför det normala intervallet för att skapa ännu konstigare dämpningseffekter. Negativa dämpningsvärden tillåts dock inte. Se Attenuation och Spotlight Factor (Direct3D 9).

Ljus färg

Ljus i Direct3D avger tre färger som används oberoende av systemets ljusberäkningar: en diffus färg, en omgivande färg och en spektulär färg. Var och en införlivas av Direct3D-belysningsmodulen, som interagerar med en motsvarighet från det aktuella materialet, för att producera en slutlig färg som används vid återgivning. Den diffusa färgen interagerar med den diffusa reflektansegenskapen för det aktuella materialet, den spektulära färgen med materialets spekulativa reflektansegenskap och så vidare. Information om hur Direct3D använder dessa färger finns i Matematik av belysning (Direct3D 9).

I ett C++-program innehåller den D3DLIGHT9 strukturen tre medlemmar för dessa färger – Diffus, Ambient och Specular – var och en är en D3DCOLORVALUE struktur som definierar färgen som genereras.

Den typ av färg som gäller mest för systemets beräkningar är den diffusa färgen. Den vanligaste diffusa färgen är vit (R:1.0 G:1.0 B:1.0), men du kan skapa färger efter behov för att uppnå önskade effekter. Du kan till exempel använda rött ljus för en öppen spis, eller använda grönt ljus för en trafiksignal inställd på "Go".

I allmänhet anger du ljusfärgskomponenterna till värden mellan 0.0 och 1.0, inklusive, men detta är inte ett krav. Du kan till exempel ställa in alla komponenter på 2.0, vilket skapar ett ljus som är "ljusare än vitt". Den här typen av inställning kan vara särskilt användbar när du använder andra dämpningsinställningar än konstant.

Observera att även om Direct3D använder RGBA-värden för lampor används inte alfafärgkomponenten.

Vanligtvis används materialfärger för belysning. Du kan dock ange att materialfärger-tillåtande, omgivande, diffusa och specular-ska åsidosättas av diffusa eller spektulära hörnfärger. Detta görs genom att anropa SetRenderState och ange enhetstillståndsvariablerna som anges i följande tabell.

Variabel för enhetstillstånd Betydelse Typ Standard
D3DRS_AMBIENTMATERIALSOURCE Definierar var du vill hämta omgivande materialfärg. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Definierar var du vill få diffus materialfärg. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Definierar var du vill hämta spektulär materialfärg. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE Definierar var du vill hämta tillåtande materialfärg. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Inaktiverar eller aktiverar användning av hörnfärger. BOOL SANN

 

Alfa-/transparensvärdet kommer alltid bara från den diffusa färgens alfakanal.

Dimvärdet kommer alltid bara från den spektulära färgens alfakanal.

D3DMATERIALCOLORSOURCE kan ha följande värden.

  • D3DMCS_MATERIAL – Materialfärg används som källa.
  • D3DMCS_COLOR1 – Diffus hörnfärg används som källa.
  • D3DMCS_COLOR2 – Spektulär hörnfärg används som källa.

Ljusriktning

En ljusriktningsegenskap bestämmer riktningen som ljuset som avges av objektet färdas i världsrymden. Riktningen används endast av riktningsljus och spotlights och beskrivs med en vektor.

Ange ljusriktningen i riktningsmedlemmen i ljusets D3DLIGHT9 struktur. Riktningsmedlemmen är av typen D3DVECTOR. Riktningsvektorer beskrivs som avstånd från ett logiskt ursprung, oavsett ljusets position i en scen. Därför har en spotlight som pekar rakt in i en scen - längs den positiva z-axeln - en riktningsvektor på <0,0,1> oavsett var dess position definieras vara. På samma sätt kan du simulera solljus som skiner direkt på en scen med hjälp av ett riktningsljus vars riktning är <0,-1,0>. Uppenbarligen behöver du inte skapa lampor som lyser längs koordinataxlarna; du kan blanda och matcha värden för att skapa ljus som lyser i mer intressanta vinklar.

Not

Även om du inte behöver normalisera ett ljuss riktningsvektor måste du alltid vara säker på att den har en omfattning. Använd med andra ord inte en <0,0,0> riktningsvektor.

 

Ljus position

Ljus position beskrivs med hjälp av en D3DVECTOR struktur i position medlem i D3DLIGHT9 struktur. X-, y- och z-koordinaterna antas finnas i världsrymden. Riktningsljus är den enda typen av ljus som inte använder positionsegenskapen.

Ljust intervall

En ljuss områdesegenskap avgör avståndet i världsrymden där nät i en scen inte längre tar emot ljus som avges av objektet. Range-medlemmen innehåller ett flyttalsvärde som representerar ljusets maximala intervall i världsrymden. Riktningsljus använder inte range-egenskapen.

ljus och material