Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Material beskriver hur polygoner reflekterar ljus eller verkar avge ljus i en 3D-scen. Materialegenskaper beskriver ett materials diffusa reflektion, omgivande reflektion, ljusutsläpp och spektulära markeringsegenskaper. Direct3D använder D3DMATERIAL9 struktur för att bära all materialegenskapsinformation. Med undantag för den spektulära egenskapen beskrivs varje egenskap som en RGBA-färg som representerar hur mycket av de röda, gröna och blå delarna av en viss typ av ljus som den reflekterar och en alfablandningsfaktor.
Diffus och omgivande reflektion
Diffusa och omgivande medlemmar av D3DMATERIAL9 struktur beskriver hur ett material återspeglar det omgivande och diffusa ljuset i en scen. Eftersom de flesta scener innehåller mycket mer diffust ljus än omgivande ljus, spelar diffus reflektion den största delen i att bestämma färg. Dessutom, eftersom diffust ljus är riktning, påverkar infallsvinkeln för diffust ljus den övergripande intensiteten i reflektionen. Diffus reflektion är störst när ljuset träffar ett hörn parallellt med brytpunkten normal. När vinkeln ökar minskar effekten av diffus reflektion. Mängden ljus som reflekteras är vinkelns cosiné mellan det inkommande ljuset och hörnets normala, som visas i följande bild.
Omgivande reflektion, som omgivande ljus, är icke-riktad. Omgivande reflektion har en mindre inverkan på den uppenbara färgen på ett renderat objekt, men det påverkar den övergripande färgen och är mest märkbar när lite eller inget diffust ljus reflekterar av materialet. Ett materials omgivande reflektion påverkas av den omgivande ljusuppsättningen för en scen genom att anropa metoden IDirect3DDevice9::SetRenderState med D3DRS_AMBIENT-flaggan.
Diffus och omgivande reflektion fungerar tillsammans för att fastställa den upplevda färgen på ett objekt och är vanligtvis identiska värden. Om du till exempel vill återge ett blått kristallint objekt skapar du ett material som endast återspeglar den blå komponenten i diffust och omgivande ljus. När kristallen placeras i ett rum med vitt ljus verkar den vara blå. Men i ett rum som bara har rött ljus verkar samma kristall vara svart, eftersom dess material inte reflekterar rött ljus.
Utsläpp
Material kan användas för att få ett renderat objekt att verka självlysande. Den tillåtande medlemmen i D3DMATERIAL9-strukturen används för att beskriva färgen och transparensen för det avgivna ljuset. Utsläpp påverkar ett objekts färg och kan till exempel göra ett mörkt material ljusare och ta på sig en del av den utgivna färgen.
Du kan använda ett materials tillåtande egenskap för att lägga till illusionen att ett objekt avger ljus, utan att medföra beräkningskostnaderna för att lägga till ett ljus i scenen. När det gäller den blå kristallen är den tillåtande egenskapen användbar om du vill få kristallen att verka lysa upp, men inte kasta ljus på andra föremål i scenen. Kom ihåg att material med tillåtande egenskaper inte avger ljus som kan reflekteras av andra objekt i en scen. För att uppnå detta reflekterade ljus måste du placera ytterligare ett ljus i scenen.
Spegling
Spegling skapar markeringar på objekt, vilket gör att de ser glänsande ut. Den D3DMATERIAL9 strukturen innehåller två medlemmar som beskriver den spektulära markeringsfärgen samt materialets övergripande glans. Du etablerar färgen på de spektulära markerna genom att ställa in den spektulära medlemmen på önskad RGBA-färg – de vanligaste färgerna är vita eller ljusgrå. De värden som du anger i Power Member styr hur skarpa de spektulära effekterna är.
Spektulära markeringar kan skapa dramatiska effekter. Rita igen på den blå kristall analogin: ett större Power-värde skapar skarpare spektulära höjdpunkter, vilket gör att kristallen verkar vara ganska glänsande. Mindre värden ökar effektens yta, vilket skapar en tråkig reflektion som gör att kristallen ser frostig ut. Om du vill göra ett objekt verkligt matt ställer du in Power-medlemmen på noll och färgen i Specular till svart. Experimentera med olika reflektionsnivåer för att skapa ett realistiskt utseende för dina behov. Följande bild visar två identiska modeller. Den till vänster använder en speglingskraft på 10; modellen till höger saknar spegling.
Ange materialegenskaper
Direct3D-återgivningsenheter kan återges med en uppsättning materialegenskaper i taget.
I ett C++-program anger du de materialegenskaper som systemet använder genom att förbereda en D3DMATERIAL9 struktur och sedan anropa metoden IDirect3DDevice9::SetMaterial.
Om du vill förbereda D3DMATERIAL9 struktur för användning anger du egenskapsinformationen i strukturen för att skapa önskad effekt under återgivningen. I följande kodexempel konfigureras D3DMATERIAL9 struktur för ett lila material med skarpa vita prickiga markeringar.
D3DMATERIAL9 mat;
// Set the RGBA for diffuse reflection.
mat.Diffuse.r = 0.5f;
mat.Diffuse.g = 0.0f;
mat.Diffuse.b = 0.5f;
mat.Diffuse.a = 1.0f;
// Set the RGBA for ambient reflection.
mat.Ambient.r = 0.5f;
mat.Ambient.g = 0.0f;
mat.Ambient.b = 0.5f;
mat.Ambient.a = 1.0f;
// Set the color and sharpness of specular highlights.
mat.Specular.r = 1.0f;
mat.Specular.g = 1.0f;
mat.Specular.b = 1.0f;
mat.Specular.a = 1.0f;
mat.Power = 50.0f;
// Set the RGBA for emissive color.
mat.Emissive.r = 0.0f;
mat.Emissive.g = 0.0f;
mat.Emissive.b = 0.0f;
mat.Emissive.a = 0.0f;
När du har förberett D3DMATERIAL9-strukturen tillämpar du egenskaperna genom att anropa metoden IDirect3DDevice9::SetMaterial för renderingsenheten. Den här metoden accepterar adressen för en förberedd D3DMATERIAL9 struktur som enda parameter. Du kan anropa IDirect3DDevice9::SetMaterial med ny information efter behov för att uppdatera enhetens materialegenskaper. I följande kodexempel visas hur det kan se ut i kod.
// This code example uses the material properties defined for
// the mat variable earlier in this topic. The pd3dDev is assumed
// to be a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
hr = pd3dDev->SetMaterial(&mat);
if(FAILED(hr))
{
// Code to handle the error goes here.
}
När du skapar en Direct3D-enhet anges det aktuella materialet automatiskt till standardvärdet som visas i följande tabell.
| Medlem | Värde |
|---|---|
| Diffus | (R:0, G:0, B:0, A:0) |
| Speglande | (R:0, G:0, B:0, A:0) |
| Omgivande | (R:0, G:0, B:0, A:0) |
| Emissive | (R:0, G:0, B:0, A:0) |
| Kraft | (0.0) |
Hämtar materialegenskaper
Du hämtar de materialegenskaper som återgivningsenheten använder för närvarande genom att anropa metoden IDirect3DDevice9::GetMaterial för enheten. Till skillnad från metoden IDirect3DDevice9::SetMaterial kräver IDirect3DDevice9::GetMaterial inte förberedelse. Metoden IDirect3DDevice9::GetMaterial accepterar adressen för en D3DMATERIAL9 struktur och fyller den angivna strukturen med information som beskriver de aktuella materialegenskaperna innan den returneras.
// For this example, the pd3dDev variable is assumed to
// be a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
D3DMATERIAL9 mat;
hr = pd3dDev->GetMaterial(&mat);
if(FAILED(hr))
{
// Code to handle the error goes here.
}
Not
Om programmet inte anger materialegenskaper för återgivning använder systemet ett standardmaterial. Standardmaterialet återspeglar allt diffust ljus - vitt, till exempel - utan omgivande eller spekulativ reflektion och ingen tillåtande färg.
Relaterade ämnen