Delen via


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.

Alpha Blending-