Framepuffer alpha (Direct3D 9)
Die Alphamischung des Rahmenpuffers unterscheidet sich etwas von Vertex-Alpha, Material-Alpha und Textur-Alpha. Vertex-, Material- und Textur-Alphawerte setzen Transparenzwerte, die nur für den aktuellen Grundtyp verwendet werden und für sich genommen keine Auswirkungen auf andere Grundtypen haben. Die Alphamischung des Framepuffers steuert, wie der aktuelle Grundtyp mit vorhandenen Pixeln im Framepuffer kombiniert wird, um eine endgültige Pixelfarbe zu erhalten.
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 bereits an der Pixelposition liegt. Die Zielfarbe ist das Ergebnis des Renderns eines anderen Objekts, das sich hinter dem transparenten Objekt befindet, d. h. das Objekt, das durch das transparente Objekt sichtbar wird. Bei der Alphamischung wird eine Formel verwendet, um das Verhältnis zwischen den 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.
Die Alphamischungsfaktoren, die verwendet werden können, sind unten aufgeführt.
Faktor für den Mischmodus | 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 sie aus der einstellung D3DRS_BLENDFACTOR abgerufen haben. |
D3DBLEND_INVBLENDFACTOR | Verwenden Sie 1-color.r, 1-color.g, 1-color.b und 1-color.a aus der einstellung D3DRS_BLENDFACTOR. |
Direct3D verwendet den D3DRS_ALPHABLENDENABLE Renderzustand, um die Alphatransparenzmischung zu ermöglichen. Die Art der Alphamischung hängt von den D3DRS_SRCBLEND und D3DRS_DESTBLEND Renderstatus ab. Quell- und Zielmischungszustände werden in Paaren verwendet. Das folgende Codefragment legt den Quellmischungszustand auf D3DBLEND_SRCCOLOR und den Zustand der Zielmischung 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, der an der aktuellen Position gerendert wird) und der Zielfarbe (die Farbe an der aktuellen Position im Framepuffer) durch. Das resultierende Erscheinungsbild ähnelt getöntem Glas, da ein Teil der Farbe des Zielobjekts durch das Quellobjekt übertragen zu werden scheint; der Rest scheint absorbiert zu sein.
Viele dieser Blendfaktoren erfordern Alphawerte in der Textur, um ordnungsgemäß zu funktionieren. Daher ist die Anwendung bei verwendung von Vertex oder Material alpha darauf beschränkt, welche Modi interessante Ergebnisse liefern.
Zugehörige Themen