Delen via


Materialen (Direct3D 9)

Materialen beschrijven hoe veelhoeken licht weerspiegelen of licht uitstralen in een 3D-scène. Materiaaleigenschappen beschrijven de diffuse reflectie, omgevingsreflectie, lichtuitgifte en speculaire markeringskenmerken van een materiaal. Direct3D maakt gebruik van de D3DMATERIAL9 structuur om alle materiaaleigenschapsinformatie mee te nemen. Met uitzondering van de speculaire eigenschap wordt elke eigenschap beschreven als een RGBA-kleur die aangeeft hoeveel van de rode, groene en blauwe delen van een bepaald type licht het weerspiegelt en een alfamengerende factor.

Diffuse en omgevingsspiegeling

De diffuse en omgevingsleden van de D3DMATERIAL9 structuur beschrijven hoe een materiaal het omgevings- en diffuse licht in een scène weerspiegelt. Omdat de meeste scènes veel meer diffuus licht bevatten dan omgevingslicht, speelt diffuse weerspiegeling het grootste deel bij het bepalen van de kleur. Bovendien, omdat diffuus licht directioneel is, beïnvloedt de incidentiehoek voor diffuus licht de algehele intensiteit van de weerspiegeling. Diffuse weerspiegeling is het grootst wanneer het licht een hoekpunt parallel aan het hoekpunt normaal aantreft. Naarmate de hoek toeneemt, neemt het effect van diffuse reflectie af. De hoeveelheid licht is de cosinus van de hoek tussen het binnenkomende licht en het hoekpunt normaal, zoals wordt weergegeven in de volgende afbeelding.

illustratie van de hoeveelheid weerspiegeld licht

Omgevingsspiegeling, zoals omgevingslicht, is nietdirectioneel. Omgevingsspiegeling heeft minder invloed op de schijnbare kleur van een gerenderd object, maar dit heeft wel invloed op de algehele kleur en is het meest merkbaar wanneer weinig of geen diffuus licht het materiaal weerspiegelt. De omgevingsspiegeling van een materiaal wordt beïnvloed door de omgevingslichtset voor een scène door de methode IDirect3DDevice9::SetRenderState methode aan te roepen met de vlag D3DRS_AMBIENT.

Diffuse en omgevingsspiegeling werken samen om de waargenomen kleur van een object te bepalen en zijn meestal identieke waarden. Als u bijvoorbeeld een blauw kristallijn object wilt weergeven, maakt u een materiaal dat alleen het blauwe onderdeel van diffuus en omgevingslicht weerspiegelt. Wanneer het in een kamer met een wit licht wordt geplaatst, lijkt het kristal blauw te zijn. In een kamer met alleen rood licht lijkt hetzelfde kristal echter zwart te zijn, omdat het materiaal geen rood licht weergeeft.

Emissie

Materialen kunnen worden gebruikt om een gerenderd object zelflicht te maken. Het Emissive lid van de D3DMATERIAL9 structuur wordt gebruikt om de kleur en transparantie van het uitgezonden licht te beschrijven. Emissie is van invloed op de kleur van een object en kan bijvoorbeeld een donker materiaal helderder maken en een deel van de uitgezonden kleur overnemen.

U kunt de emissive eigenschap van een materiaal gebruiken om de illusie toe te voegen dat een object licht uitzendt, zonder de rekenkundige overhead van het toevoegen van een licht aan de scène. In het geval van het blauwe kristal is de emissive eigenschap nuttig als je het kristal wilt laten branden, maar niet licht wilt werpen op andere objecten in de scène. Houd er rekening mee dat materialen met emissive eigenschappen geen licht uitzenden dat door andere objecten in een scène kan worden weerspiegeld. Als u dit weerspiegelde licht wilt bereiken, moet u een extra licht in de scène plaatsen.

Speculatieve weerspiegeling

Met een speculaire weerspiegeling worden hoogtepunten op objecten gemaakt, waardoor ze glanzend lijken. De D3DMATERIAL9 structuur bevat twee leden die de speculaire markeringskleur en de algehele glans van het materiaal beschrijven. U stelt de kleur van de speculaire markeringen vast door het specular lid in te stellen op de gewenste RGBA-kleur. De meest voorkomende kleuren zijn wit of lichtgrijs. De waarden die u in het powerlid instelt, bepalen hoe scherp de speculatieve effecten zijn.

Specifieke markeringen kunnen dramatische effecten veroorzaken. Opnieuw tekenen op de blauwe kristal analogie: een grotere Machtswaarde creëert scherpere speculaire hoogtepunten, waardoor het kristal behoorlijk glanzend lijkt te zijn. Kleinere waarden vergroten het gebied van het effect, waardoor een saaie weerspiegeling ontstaat die ervoor zorgt dat het kristal er vorst uitziet. Als u een object echt mat wilt maken, stelt u het Power-lid in op nul en de kleur in Specular op zwart. Experimenteer met verschillende reflectieniveaus om een realistisch uiterlijk te produceren voor uw behoeften. In de volgende afbeelding ziet u twee identieke modellen. De aan de linkerkant maakt gebruik van een speculatieve reflectiekracht van 10; het model aan de rechterkant geen speculatieve reflectie heeft.

illustratie van speculatieve weerspiegelingsmodellen

Materiaaleigenschappen instellen

Direct3D-renderingapparaten kunnen worden weergegeven met één set materiaaleigenschappen tegelijk.

In een C++-toepassing stelt u de materiaaleigenschappen in die het systeem gebruikt door een D3DMATERIAL9 structuur voor te bereiden en vervolgens de methode IDirect3DDevice9::SetMaterial aan te roepen.

Als u de D3DMATERIAL9 structuur wilt voorbereiden voor gebruik, stelt u de eigenschapsgegevens in de structuur in om het gewenste effect te maken tijdens het weergeven. In het volgende codevoorbeeld wordt de D3DMATERIAL9 structuur ingesteld voor een paars materiaal met scherpe witte speculaire markeringen.

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;

Nadat u de D3DMATERIAL9-structuur hebt voorbereid, past u de eigenschappen toe door de methode IDirect3DDevice9::SetMaterial van het renderingapparaat aan te roepen. Deze methode accepteert het adres van een voorbereide D3DMATERIAL9 structuur als enige parameter. U kunt indien nodig IDirect3DDevice9::SetMaterial aanroepen met nieuwe informatie om de materiaaleigenschappen voor het apparaat bij te werken. In het volgende codevoorbeeld ziet u hoe dit eruit kan zien in code.

// 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.
}

Wanneer u een Direct3D-apparaat maakt, wordt het huidige materiaal automatisch ingesteld op de standaardwaarde die wordt weergegeven in de volgende tabel.

Lid Waarde
Diffuus (R:0, G:0, B:0, A:0)
Specular (R:0, G:0, B:0, A:0)
Ambient (R:0, G:0, B:0, A:0)
Emissive (R:0, G:0, B:0, A:0)
Macht (0.0)

 

Materiaaleigenschappen ophalen

U haalt de materiaaleigenschappen op die het renderingapparaat momenteel gebruikt door de methode IDirect3DDevice9::GetMaterial methode voor het apparaat aan te roepen. In tegenstelling tot de methode IDirect3DDevice9::SetMaterial, is IDirect3DDevice9::GetMaterial geen voorbereiding vereist. De methode IDirect3DDevice9::GetMaterial accepteert het adres van een D3DMATERIAL9 structuur en vult de opgegeven structuur met informatie over de huidige materiaaleigenschappen voordat deze wordt geretourneerd.

// 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.
}

Notitie

Als uw toepassing geen materiaaleigenschappen opgeeft voor rendering, gebruikt het systeem een standaardmateriaal. Het standaardmateriaal weerspiegelt alle diffuse licht - wit, bijvoorbeeld - zonder omgevings- of speculaire weerspiegeling, en geen emissive kleur.

 

lichten en materialen