Frame Buffer Alpha (Direct3D 9)
Framebuffer alpha-blending is iets anders dan hoekpunt alfa, materiaal alfa en textuur alfa. Hoekpunt, materiaal en patroon alfa stellen transparantiewaarden in die alleen worden gebruikt voor de huidige primitieve en op zichzelf geen effect hebben op andere primitieven. Framebuffer alpha-blending bepaalt hoe de huidige primitieve wordt gecombineerd met bestaande pixels in de framebuffer om een uiteindelijke pixelkleur te krijgen.
Bij het uitvoeren van alfamenging worden twee kleuren gecombineerd: een bronkleur en een doelkleur. De bronkleur is afkomstig van het transparante object, de doelkleur is de kleur al op de pixellocatie. De doelkleur is het resultaat van het weergeven van een ander object achter het transparante object, dat wil gezegd, het object dat zichtbaar is via het transparante object. Alfamenging maakt gebruik van een formule om de verhouding tussen de bron- en doelobjecten te bepalen.
Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
ObjectColor is de bijdrage van de primitieve die wordt weergegeven op de huidige pixellocatie. PixelColor is de bijdrage van de framebuffer op de huidige pixellocatie.
De set alfamixfactoren die kunnen worden gebruikt, worden hieronder vermeld.
Combinatiemodusfactor | Beschrijving |
---|---|
D3DBLEND_ZERO | (0, 0, 0, 0) |
D3DBLEND_ONE | (1, 1, 1, 1) |
D3DBLEND_SRCCOLOR | (Rs, Gs, Bs, As) |
D3DBLEND_INVSRCCOLOR | (1-Rs, 1-Gs, 1-Bs, 1-As) |
D3DBLEND_SRCALPHA | (As, As, As, As, As) |
D3DBLEND_INVSRCALPHA | (1-As, 1-As, 1-As, 1-As) |
D3DBLEND_DESTALPHA | (Ad, Ad, Ad, Ad) |
D3DBLEND_INVDESTALPHA | (1-Ad, 1-Ad, 1-Ad, 1-Ad) |
D3DBLEND_DESTCOLOR | (Rd, Gd, Bd, Ad) |
D3DBLEND_INVDESTCOLOR | (1-Rd, 1-Gd, 1-Bd, 1-Ad) |
D3DBLEND_SRCALPHASAT | (f, f, f, 1); f = min(As, 1-Ad) |
D3DBLEND_BOTHSRCALPHA | Verouderd voor DirectX 6 en hoger. U kunt hetzelfde effect bereiken door de bron- en doelmixfactoren in te stellen op D3DBLEND_SRCALPHA en D3DBLEND_INVSRCALPHA in afzonderlijke aanroepen. |
D3DBLEND_BOTHINVSRCALPHA | Verouderd voor DirectX 6. U kunt hetzelfde effect bereiken door de bron- en doelmixfactoren in te stellen op D3DBLEND_INVSRCALPHA en D3DBLEND_SRCALPHA in afzonderlijke aanroepen. |
D3DBLEND_BLENDFACTOR | Gebruik color.r, color.g, color.b en color.a verkregen uit de instelling D3DRS_BLENDFACTOR. |
D3DBLEND_INVBLENDFACTOR | Gebruik 1-color.r, 1-color.g, 1-color.b en 1-color.a verkregen uit de D3DRS_BLENDFACTOR instelling. |
Direct3D maakt gebruik van de D3DRS_ALPHABLENDENABLE renderstatus om het combineren van alfatransparantie mogelijk te maken. Het type alfamix dat wordt uitgevoerd, is afhankelijk van de D3DRS_SRCBLEND en D3DRS_DESTBLEND weergavestatussen. Bron- en doelmixstatussen worden in paren gebruikt. Met het volgende codefragment wordt de bronmixstatus ingesteld op D3DBLEND_SRCCOLOR en de doelmixstatus op D3DBLEND_INVSRCCOLOR.
// This code fragment assumes that lpD3DDevice is a
// valid pointer to a device.
// Enable alpha blending.
lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
TRUE);
// Set the source blend state.
lpD3DDevice->SetRenderState(D3DRS_SRCBLEND,
D3DBLEND_SRCCOLOR);
// Set the destination blend state.
lpD3DDevice->SetRenderState(D3DRS_DESTBLEND,
D3DBLEND_INVSRCCOLOR);
Deze code voert een lineaire mix uit tussen de bronkleur (de kleur van de primitieve die op de huidige locatie wordt weergegeven) en de doelkleur (de kleur op de huidige locatie in de framebuffer). Het resulterende uiterlijk is vergelijkbaar met getint glas omdat een deel van de kleur van het doelobject lijkt te worden verzonden via het bronobject; de rest ervan lijkt te worden opgenomen.
Veel van deze blend-factoren vereisen alfawaarden in het patroon om correct te werken. Wanneer u dus hoekpunt of materiaal alfa gebruikt, wordt de toepassing beperkt tot welke modi interessante resultaten opleveren.
Verwante onderwerpen