Framepuffer alpha (Direct3D 9)
Die Alphamischung von Framepuffern unterscheidet sich etwas von Vertex-Alpha, Material alpha und Textur-Alpha. Vertex-, Material- und Textur alpha-Werte legen Transparenzwerte fest, die nur für den aktuellen Grundtyp verwendet werden, und haben selbst keine Auswirkungen auf andere Grundtypen. Rahmenpuffer-Alpha-Blending steuert, wie der aktuelle Grundtyp mit vorhandenen Pixeln im Framepuffer kombiniert wird, um eine endgültige Pixelfarbe zu erzielen.
Bei der Alphamischung werden zwei Farben kombiniert: eine Quellfarbe und eine Zielfarbe. Die Quellfarbe stammt aus dem transparenten Objekt, die Zielfarbe ist die Farbe, die sich bereits an der Pixelposition befindet. Die Zielfarbe ist das Ergebnis des Renderns eines anderen Objekts, das sich hinter dem transparenten Objekt befindet, d. h. dem Objekt, das durch das transparente Objekt sichtbar wird. Bei der Alphamischung wird eine Formel verwendet, um das Verhältnis zwischen Quell- und Zielobjekten zu steuern.
Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
ObjectColor ist der Beitrag des Grundtyps, der an der aktuellen Pixelposition gerendert wird. PixelColor ist der Beitrag aus dem Framepuffer an der aktuellen Pixelposition.
Der Satz von Alphamischungsfaktoren, die verwendet werden können, finden Sie unten.
Blendmodusfaktor | Beschreibung |
---|---|
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) |
D3DBLEND_INVSRCALPHA | (1-As, 1-As, 1-As, 1-As) |
D3DBLEND_DESTALPHA | (Anzeigen, Anzeigen, Anzeigen, Anzeigen) |
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 | Veraltet für DirectX 6 und höher. Sie können den gleichen Effekt erzielen, indem Sie die Quell- und Zielmischungsfaktoren auf D3DBLEND_SRCALPHA und D3DBLEND_INVSRCALPHA in separaten Aufrufen festlegen. |
D3DBLEND_BOTHINVSRCALPHA | Veraltet für DirectX 6. Sie können den gleichen Effekt erzielen, indem Sie die Quell- und Zielmischungsfaktoren auf D3DBLEND_INVSRCALPHA und D3DBLEND_SRCALPHA in separaten Aufrufen festlegen. |
D3DBLEND_BLENDFACTOR | Verwenden Sie "color.r", "color.g", "color.b" und "color.a", die aus der einstellung D3DRS_BLENDFACTOR abgerufen wurden. |
D3DBLEND_INVBLENDFACTOR | Verwenden Sie 1-color.r, 1-color.g, 1-color.b und 1-color.a, die aus der D3DRS_BLENDFACTOR Einstellung abgerufen wurden. |
Direct3D verwendet den D3DRS_ALPHABLENDENABLE Renderzustand, um die Alphatransparenzmischung zu ermöglichen. Die Art der Alphamischung, die durchgeführt wird, hängt von den D3DRS_SRCBLEND und D3DRS_DESTBLEND Renderzuständen ab. Quell- und Zielmischungszustände werden in Paaren verwendet. Das folgende Codefragment legt den Quellmischungszustand auf D3DBLEND_SRCCOLOR und den Zielmischungszustand auf D3DBLEND_INVSRCCOLOR fest.
// 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);
Dieser Code führt eine lineare Mischung zwischen der Quellfarbe (der Farbe des Grundtyps, die an der aktuellen Position gerendert wird) und der Zielfarbe (die Farbe an der aktuellen Position im Framepuffer) aus. Das resultierende Erscheinungsbild ähnelt einem getönten Glas, in dem einige der Farben des Zielobjekts durch das Quellobjekt übertragen werden scheinen; der Rest davon scheint absorbiert zu werden.
Viele dieser Mischungsfaktoren erfordern Alphawerte in der Textur, um ordnungsgemäß zu funktionieren. Daher ist die Anwendung bei Verwendung von Vertex- oder Material alpha beschränkt, welche Modi interessante Ergebnisse liefern.
Verwandte Themen