Delen via


Lichte eigenschappen (Direct3D 9)

Lichteigenschappen beschrijven het type en de kleur van een lichtbron. Afhankelijk van het type licht dat wordt gebruikt, kan een licht eigenschappen hebben voor vertenuatie en bereik, of voor spotlight-effecten. Maar niet alle soorten lichten gebruiken alle eigenschappen. Direct3D maakt gebruik van de D3DLIGHT9 structuur om informatie over lichteigenschappen voor alle soorten lichtbronnen te bevatten. Deze sectie bevat informatie voor alle lichteigenschappen. Informatie is onderverdeeld in de volgende groepen.

De eigenschappen van de positie, het bereik en de intenuatie definiëren de locatie van een licht in de wereldruimte en hoe het licht dat het uitstraalt zich over afstand gedraagt. Net als bij alle lichteigenschappen die u in C++gebruikt, bevinden deze zich in de D3DLIGHT9 structuur van een licht.

Lichte vertenuatie

Bij intenuatie wordt bepaald hoe de intensiteit van een licht afneemt tot de maximale afstand die is opgegeven door de bereikeigenschap. Drie D3DLIGHT9 structuurleden vertegenwoordigen lichte vertenuatie: Attenuation0, Attenuation1 en Attenuation2. Deze leden bevatten drijvende-kommawaarden, variërend van 0,0 tot oneindig, waardoor de attenuatie van een licht wordt bepaald. Sommige toepassingen stellen het lid Attenuation1 in op 1.0 en de andere op 0,0, wat resulteert in lichtintensiteit die verandert als 1/D, waarbij D de afstand is tussen de lichtbron en het hoekpunt. De maximale lichtintensiteit is bij de bron, dalend tot 1 / (Lichtbereik) bij het lichtbereik. Normaal gesproken stelt een toepassing Attenuation0 in op 0,0, Attenuation1 op een constante waarde en attenuation2 op 0,0.

U kunt attenuatiewaarden combineren om complexere vertenuatie-effecten te krijgen. U kunt ze ook instellen op waarden buiten het normale bereik om zelfs vreemder attenuatie-effecten te creëren. Negatieve vertenuatiewaarden zijn echter niet toegestaan. Zie Attenuation and Spotlight Factor (Direct3D 9).

Lichte kleur

Lichten in Direct3D geven drie kleuren uit die onafhankelijk worden gebruikt in de belichtingsberekeningen van het systeem: een diffuse kleur, een omgevingskleur en een speculaire kleur. Elk wordt opgenomen door de Direct3D-verlichtingsmodule, die communiceert met een tegenhanger van het huidige materiaal, om een uiteindelijke kleur te produceren die wordt gebruikt bij het weergeven. De diffuse kleur communiceert met de diffuse reflectantie-eigenschap van het huidige materiaal, de speculaire kleur met de specular reflectance-eigenschap van het materiaal, enzovoort. Zie Wiskunde van Verlichting (Direct3D 9)voor meer informatie over hoe Direct3D deze kleuren toepast.

In een C++-toepassing bevat de D3DLIGHT9 structuur drie leden voor deze kleuren: Diffuus, Omgevings- en Specular- elk een D3DCOLORVALUE structuur waarmee de kleur wordt gedefinieerd die wordt verzonden.

Het type kleur dat het meest van toepassing is op de berekeningen van het systeem is de diffuse kleur. De meest voorkomende diffuse kleur is wit (R:1.0 G:1.0 B:1.0), maar u kunt indien nodig kleuren maken om gewenste effecten te bereiken. U kunt bijvoorbeeld rood licht gebruiken voor een open haard of u kunt groen licht gebruiken voor een verkeerssignaal dat is ingesteld op 'Go'.

Over het algemeen stelt u de lichte kleurcomponenten in op waarden tussen 0,0 en 1,0, inclusief, maar dit is geen vereiste. U kunt bijvoorbeeld alle onderdelen instellen op 2.0, waardoor een licht wordt gemaakt dat 'helderder dan wit' is. Dit type instelling kan vooral nuttig zijn wanneer u andere instellingen voor attenuatie gebruikt dan constant.

Hoewel Direct3D RGBA-waarden gebruikt voor lichten, wordt het alfakleuronderdeel niet gebruikt.

Meestal worden materiaalkleuren gebruikt voor verlichting. U kunt echter opgeven dat materiaalkleuren-emissive, omgevings-, diffuse en specular-worden overschreven door diffuse of speculaire hoekpuntkleuren. Dit wordt gedaan door SetRenderState- aan te roepen en de apparaatstatusvariabelen in te stellen die worden vermeld in de volgende tabel.

Variabele apparaatstatus Betekenis Type Verstek
D3DRS_AMBIENTMATERIALSOURCE Definieert waar omgevingsmateriaalkleur moet worden getyp. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_DIFFUSEMATERIALSOURCE Definieert waar de kleur van diffuus materiaal moet worden getyp. D3DMATERIALCOLORSOURCE D3DMCS_COLOR1
D3DRS_SPECULARMATERIALSOURCE Hiermee definieert u waar u een speculaire materiaalkleur kunt ophalen. D3DMATERIALCOLORSOURCE D3DMCS_COLOR2
D3DRS_EMISSIVEMATERIALSOURCE Definieert waar u een emissive materiaalkleur kunt krijgen. D3DMATERIALCOLORSOURCE D3DMCS_MATERIAL
D3DRS_COLORVERTEX Hiermee wordt het gebruik van hoekpuntkleuren uitgeschakeld of ingeschakeld. BOOL WAAR

 

De alfa/doorzichtigheidswaarde komt altijd alleen uit het alfakanaal van de diffuse kleur.

De mistwaarde komt altijd alleen uit het alfakanaal van de speculaire kleur.

D3DMATERIALCOLORSOURCE kan de volgende waarden hebben.

  • D3DMCS_MATERIAL - Materiaalkleur wordt gebruikt als bron.
  • D3DMCS_COLOR1 - Diffuse hoekpuntkleur wordt gebruikt als bron.
  • D3DMCS_COLOR2 - Specular hoekpuntkleur wordt gebruikt als bron.

Lichtrichting

De richtingseigenschap van een licht bepaalt de richting die het licht dat door het object wordt uitgezonden, in de wereldruimte. De richting wordt alleen gebruikt door richtingslichten en spotlights en wordt beschreven met een vector.

Stel de lichtrichting in het richtingslid van de D3DLIGHT9 structuur van het licht in. Richtingslid is van het type D3DVECTOR. Richtingsvectoren worden beschreven als afstanden van een logische oorsprong, ongeacht de positie van het licht in een scène. Daarom heeft een spotlight die rechtstreeks naar een scène wijst - langs de positieve z-as - een richtingsvector van <0,0,1> ongeacht waar de positie is gedefinieerd. Op dezelfde manier kunt u zonlicht simuleren die direct op een scène schijnt met behulp van een directioneel licht waarvan de richting <0,-1,0>. Uiteraard hoeft u geen lichten te creëren die langs de coördinaatassen schijnen; u kunt waarden combineren en matchen om lichten te creëren die op interessantere hoeken schijnen.

Notitie

Hoewel u de richtingsvector van een licht niet hoeft te normaliseren, moet u er altijd zeker van zijn dat het een grootte heeft. Met andere woorden, gebruik geen <0,0,0> richtingsvector.

 

Lichte positie

Lichte positie wordt beschreven met behulp van een D3DVECTOR structuur in het positielid van de D3DLIGHT9 structuur. De x-, y- en z-coördinaten worden verondersteld in de wereldruimte te zijn. Richtingslichten zijn het enige type licht dat de positieeigenschap niet gebruikt.

Lichtbereik

De bereikeigenschap van een licht bepaalt de afstand, in de wereldruimte, waarbij meshes in een scène geen licht meer ontvangen dat door dat object wordt uitgezonden. Het bereiklid bevat een drijvende-kommawaarde die het maximale bereik van het licht vertegenwoordigt, in de wereldruimte. Richtingslichten gebruiken de bereikeigenschap niet.

lichten en materialen