Sdílet prostřednictvím


Světlé vlastnosti (Direct3D 9)

Světlé vlastnosti popisují typ a barvu zdroje světla. V závislosti na použitém typu světla může mít světlo vlastnosti pro ztlumení a rozsah nebo pro efekty spotlightu. Ale ne všechny typy světel používají všechny vlastnosti. Direct3D používá D3DLIGHT9 strukturu k přenosu informací o vlastnostech světla pro všechny typy zdrojů světla. Tato část obsahuje informace pro všechny vlastnosti světla. Informace jsou rozdělené do následujících skupin.

Vlastnosti pozice, rozsahu a ztlumení definují umístění světla ve světě a chování světla, které vysílá, přes vzdálenost. Stejně jako u všech světlých vlastností, které používáte v jazyce C++, jsou obsaženy ve struktuře D3DLIGHT9 světla.

Světlé ztlumení

Ztlumení určuje, jak intenzita světla klesá směrem k maximální vzdálenosti určené vlastností rozsahu. Tři D3DLIGHT9 členy struktury představují lehké ztlumení: attenuation0, Attenuation1 a Attenuation2. Tyto členy obsahují hodnoty s plovoucí desetinnou čárkou od 0,0 do nekonečna a řídí útlum světla. Některé aplikace nastaví člen Attenuation1 na 1,0 a ostatní na 0,0, což vede k intenzitě světla, která se změní jako 1 / D, kde D je vzdálenost od zdroje světla k vrcholu. Maximální intenzita světla je ve zdroji, která se snižuje na 1 / (rozsah světla) v rozsahu světla. Aplikace obvykle nastaví hodnotu Attenuation0 na 0,0, Attenuation1 na konstantní hodnotu a ztlumení2 na 0,0.

Pokud chcete získat složitější efekty ztlumení, můžete zkombinovat hodnoty ztlumení. Nebo je můžete nastavit na hodnoty mimo normální rozsah, abyste vytvořili ještě cizí efekty ztlumení. Záporné hodnoty útlumu však nejsou povoleny. Viz ztlumení a faktoru Spotlight (Direct3D 9).

Světlá barva

Světla v Direct3D generují tři barvy, které se používají nezávisle ve výpočtech osvětlení systému: difuzní barva, okolní barva a specifikační barva. Každý z nich je součástí modulu osvětlení Direct3D, který pracuje s protějškem z aktuálního materiálu, aby vytvořil konečnou barvu použitou při vykreslování. Difuzní barva interaguje s difuzní reflekční vlastností aktuálního materiálu, specifikovou barvou se specifikací materiálu a tak dále. Podrobnosti o tom, jak Direct3D tyto barvy používá, najdete v tématu Matematika osvětlení (Direct3D 9).

V aplikaci jazyka C++ obsahuje struktura D3DLIGHT9 tři členy pro tyto barvy – difuzní, okolí a specular – každá z nich je D3DCOLORVALUE struktura, která definuje barvu, která se vysílá.

Typ barvy, která se nejvíce vztahuje na výpočty systému, je difuzní barva. Nejběžnější difuzní barva je bílá (R:1.0 G:1.0 B:1.0), ale podle potřeby můžete vytvořit barvy, abyste dosáhli požadovaných efektů. Můžete například použít červené světlo pro krb nebo můžete použít zelené světlo pro dopravní signál nastavený na "Go".

Obecně platí, že komponenty světlé barvy nastavíte na hodnoty v rozmezí od 0,0 do 1,0 (včetně), ale nejedná se o požadavek. Můžete například nastavit všechny komponenty na hodnotu 2,0 a vytvořit světlo, které je "jasnější než bílé". Tento typ nastavení může být zvlášť užitečný, pokud používáte jiné nastavení než konstanta.

Všimněte si, že i když Direct3D používá hodnoty RGBA pro světla, alfa color komponenta se nepoužívá.

K osvětlení se obvykle používají barvy materiálu. Můžete však určit, že barvy materiálu- emissive, okolí, difuzní a specular-mají být přepsány difuzními nebo specifikovými barvami vrcholů. To se provádí voláním SetRenderState a nastavením proměnných stavu zařízení uvedených v následující tabulce.

Proměnná stavu zařízení Význam Typ Výchozí
D3DRS_AMBIENTMATERIALSOURCE Definuje, kde získat barvu okolního materiálu. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Definuje, kde získat barvu difuzního materiálu. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Definuje, kde získat specifika barvy materiálu. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE Definuje, kde získat barvu materiálu. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Zakáže nebo povolí použití barev vrcholů. BOOL PRAVDIVÝ

 

Hodnota alfa/průhlednosti vždy pochází pouze z alfa kanálu difuzní barvy.

Hodnota mlhy vždy pochází pouze ze specifikárního barevného alfa kanálu.

D3DMATERIALCOLORSOURCE mohou mít následující hodnoty.

  • D3DMCS_MATERIAL – barva materiálu se používá jako zdroj.
  • D3DMCS_COLOR1 - Jako zdroj se používá difuzní barva vrcholu.
  • D3DMCS_COLOR2 – jako zdroj se používá specifikovaná barva vrcholu.

Směr světla

Vlastnost směru světla určuje směr, kterým světlo vygenerované objektem cestuje ve světovém prostoru. Směr se používá pouze směrovými světly a reflektory a je popsán pomocí vektoru.

Nastavte směr světla ve směru členu D3DLIGHT9 světla. Směrový člen je typu D3DVECTOR. Směrové vektory jsou popsány jako vzdálenosti od logického původu bez ohledu na pozici světla ve scéně. Proto má spotlight, který odkazuje přímo na scénu - podél kladné osy z - má směrový vektor <0,0,1> bez ohledu na to, kde má být definována jeho pozice. Podobně můžete simulovat sluneční světlo svítící přímo na scéně pomocí směrového světla, jehož směr je <0,-1,0>. Očividně nemusíte vytvářet světla, která svítí podél os souřadnic; můžete kombinovat a shodovat hodnoty a vytvářet světla, která svítí v zajímavějších úhlech.

Poznámka

I když nepotřebujete normalizovat směrový vektor světla, vždy se ujistěte, že má velikost. Jinými slovy nepoužívejte <0,0> směrový vektor.

 

Světlá pozice

Světlá pozice je popsána pomocí struktury D3DVECTOR v členu pozice struktury D3DLIGHT9. Souřadnice x, y a z se předpokládají, že jsou ve světovém vesmíru. Směrová světla jsou jediným typem světla, které nepoužívají vlastnost pozice.

Světlý rozsah

Vlastnost rozsahu světla určuje vzdálenost ve světovém prostoru, ve kterém sítě ve scéně již nedostávají světlo vygenerované tímto objektem. Člen rozsahu obsahuje hodnotu s plovoucí desetinou čárkou, která představuje maximální rozsah světla ve světovém prostoru. Směrová světla nepoužívají vlastnost rozsahu.

světla a materiály