Çerçeve Arabelleği Alfa (Direct3D 9)
Çerçeve arabelleği alfa-harmanlama köşe alfa, malzeme alfa ve doku alfa biraz farklıdır. Köşe, malzeme ve doku alfa kümesi saydamlık değerleri yalnızca geçerli ilkel için kullanılır ve diğer temel öğeler üzerinde tek başına hiçbir etkisi yoktur. Çerçeve arabelleği alfa-harmanlama, son piksel rengini vermek için geçerli temel öğeyle çerçeve arabelleğindeki mevcut piksellerin nasıl birleştirildiği denetler.
Alfa karıştırma gerçekleştirirken iki renk birleştiriliyor: kaynak renk ve hedef renk. Kaynak renk saydam nesneden, hedef renk ise zaten piksel konumundaki renktir. Hedef renk, saydam nesnenin arkasındaki başka bir nesnenin, yani saydam nesne üzerinden görünür olacak nesnenin işlenmesinin sonucudur. Alfa karıştırma, kaynak ve hedef nesneler arasındaki oranı denetlemek için bir formül kullanır.
Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
ObjectColor, geçerli piksel konumunda işlenen temel öğeden gelen katkıdır. PixelColor, geçerli piksel konumundaki çerçeve arabelleğinden gelen katkıdır.
Kullanılabilecek alfa karışımı faktörleri kümesi aşağıda listelenmiştir.
Blend modu faktörü | Açıklama |
---|---|
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 | (Reklam, Reklam, Reklam, Reklam) |
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 | DirectX 6 ve üzeri için kullanımdan kaldırıldı. Kaynak ve hedef harmanlama faktörlerini ayrı çağrılarda D3DBLEND_SRCALPHA ve D3DBLEND_INVSRCALPHA olarak ayarlayarak aynı etkiyi elde edebilirsiniz. |
D3DBLEND_BOTHINVSRCALPHA | DirectX 6 için kullanımdan kaldırıldı. Kaynak ve hedef harmanlama faktörlerini ayrı çağrılarda D3DBLEND_INVSRCALPHA ve D3DBLEND_SRCALPHA olarak ayarlayarak aynı etkiyi elde edebilirsiniz. |
D3DBLEND_BLENDFACTOR | D3DRS_BLENDFACTOR ayarından elde edilen color.r, color.g, color.b ve color.a kullanın. |
D3DBLEND_INVBLENDFACTOR | D3DRS_BLENDFACTOR ayarından elde edilen 1-color.r, 1-color.g, 1-color.b ve 1-color.a kullanın. |
Direct3D, alfa saydamlığı karıştırmayı etkinleştirmek için D3DRS_ALPHABLENDENABLE işleme durumunu kullanır. Yapılan alfa karıştırma türü, D3DRS_SRCBLEND ve D3DRS_DESTBLEND işleme durumlarına bağlıdır. Kaynak ve hedef harmanlama durumları çiftler halinde kullanılır. Aşağıdaki kod parçası, kaynak harmanlama durumunu D3DBLEND_SRCCOLOR ve hedef harmanlama durumunu D3DBLEND_INVSRCCOLOR olarak ayarlar.
// 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);
Bu kod, kaynak renk (geçerli konumda işlenen temel öğe rengi) ile hedef renk (çerçeve arabelleğindeki geçerli konumdaki renk) arasında doğrusal bir karışım gerçekleştirir. Sonuçta elde edilen görünüm, hedef nesnenin renginin bir kısmının kaynak nesne üzerinden iletilmiş gibi görünmesi nedeniyle tonlu cama benzer; geri kalanı emilmiş gibi görünüyor.
Bu karışım faktörlerinin çoğu düzgün çalışması için dokudaki alfa değerlerini gerektirir. Bu nedenle, köşe veya malzeme alfa kullanılırken, uygulama hangi modların ilginç sonuçlara neden olacağıyla sınırlandırılır.
İlgili konular