Läs på engelska

Dela via


Rambuffert alfa (Direct3D 9)

Rambuffert alfa-blandning är lite annorlunda än hörn alfa, material alfa och textur alfa. Hörn, material och textur alfa anger transparensvärden som endast används för den aktuella primitiven, och i sig har ingen effekt på andra primitiver. Alfablandning av rambuffertar styr hur den aktuella primitiven kombineras med befintliga bildpunkter i bildrutebufferten för att ge en slutlig pixelfärg.

När du utför alfablandning kombineras två färger: en källfärg och en målfärg. Källfärgen kommer från det transparenta objektet, målfärgen är redan färgen på pixelplatsen. Målfärgen är resultatet av återgivningen av ett annat objekt som finns bakom det transparenta objektet, dvs. det objekt som visas via det transparenta objektet. Alfablandning använder en formel för att styra förhållandet mellan käll- och målobjekten.

Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor 

ObjectColor är bidraget från den primitiva som återges på den aktuella pixelplatsen. PixelColor är bidraget från bildrutebufferten på den aktuella pixelplatsen.

Den uppsättning alfablandningsfaktorer som kan användas visas nedan.

Blandningslägesfaktor Beskrivning
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 (Som, Som, Som, Som)
D3DBLEND_INVSRCALPHA (1-As, 1-As, 1-As, 1-As)
D3DBLEND_DESTALPHA (Ad, 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 Föråldrad för DirectX 6 och senare. Du kan uppnå samma effekt genom att ange käll- och målblandningsfaktorerna till D3DBLEND_SRCALPHA och D3DBLEND_INVSRCALPHA i separata anrop.
D3DBLEND_BOTHINVSRCALPHA Föråldrad för DirectX 6. Du kan uppnå samma effekt genom att ange käll- och målblandningsfaktorerna till D3DBLEND_INVSRCALPHA och D3DBLEND_SRCALPHA i separata anrop.
D3DBLEND_BLENDFACTOR Använd color.r, color.g, color.b och color.a som hämtats från inställningen D3DRS_BLENDFACTOR.
D3DBLEND_INVBLENDFACTOR Använd 1-color.r, 1-color.g, 1-color.b och 1-color.a som hämtas från inställningen D3DRS_BLENDFACTOR.

 

Direct3D använder D3DRS_ALPHABLENDENABLE återgivningstillstånd för att aktivera alfatransparensblandning. Vilken typ av alfablandning som görs beror på D3DRS_SRCBLEND och D3DRS_DESTBLEND återgivningstillstånd. Käll- och målblandningstillstånd används i par. Följande kodfragment anger källblandningstillståndet till D3DBLEND_SRCCOLOR och målblandningstillståndet till 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);

Den här koden utför en linjär blandning mellan källfärgen (färgen på den primitiva som återges på den aktuella platsen) och målfärgen (färgen på den aktuella platsen i bildrutebufferten). Det resulterande utseendet liknar tonat glas genom att en del av målobjektets färg verkar överföras via källobjektet. resten verkar absorberas.

Många av dessa blandningsfaktorer kräver alfavärden i strukturen för att fungera korrekt. När du använder hörn eller material alfa begränsas programmet till vilka lägen som ger intressanta resultat.

Alpha Blending