Udostępnij za pośrednictwem


Frame Buffer Alpha (Direct3D 9)

Mieszanie alfa-bufora ramowego różni się nieco od alfa wierzchołka, materiału alfa i tekstury alfa. Wartości przezroczystości wierzchołków, materiału i tekstury alfa, które są używane tylko dla bieżącego pierwotnego elementu pierwotnego, a same w sobie nie mają wpływu na inne elementy pierwotne. Bufor ramkowy alfa-blending steruje sposobem łączenia bieżącego pierwotnego z istniejącymi pikselami w buforze ramki w celu uzyskania końcowego koloru pikseli.

Podczas łączenia alfa są łączone dwa kolory: kolor źródłowy i kolor docelowy. Kolor źródłowy pochodzi z przezroczystego obiektu, a kolor docelowy jest kolorem już w lokalizacji pikseli. Kolor docelowy jest wynikiem renderowania innego obiektu, który znajduje się za obiektem przezroczystym, czyli obiektem, który będzie widoczny za obiektem przezroczystym. Mieszanie alfa używa formuły do kontrolowania współczynnika między obiektami źródłowymi i docelowymi.

Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor 

ObjectColor jest współtworzeniem elementu pierwotnego renderowanego w bieżącej lokalizacji pikseli. PixelColor to współtworzenie buforu ramki w bieżącej lokalizacji pikseli.

Poniżej wymieniono zestaw czynników mieszanych alfa, których można użyć.

Współczynnik trybu mieszania Opis
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, 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 Przestarzałe dla wersji DirectX 6 lub nowszej. Ten sam efekt można osiągnąć, ustawiając czynniki mieszane źródła i miejsca docelowego na D3DBLEND_SRCALPHA i D3DBLEND_INVSRCALPHA w osobnych wywołaniach.
D3DBLEND_BOTHINVSRCALPHA Przestarzałe dla directx 6. Ten sam efekt można osiągnąć, ustawiając czynniki mieszane źródła i miejsca docelowego, aby D3DBLEND_INVSRCALPHA i D3DBLEND_SRCALPHA w oddzielnych wywołaniach.
D3DBLEND_BLENDFACTOR Użyj elementu color.r, color.g, color.b i color.a uzyskanego z ustawienia D3DRS_BLENDFACTOR.
D3DBLEND_INVBLENDFACTOR Użyj wartości 1-color.r, 1-color.g, 1-color.b i 1-color.a uzyskanej z ustawienia D3DRS_BLENDFACTOR.

 

Funkcja Direct3D używa stanu renderowania D3DRS_ALPHABLENDENABLE, aby umożliwić mieszanie przezroczystości alfa. Typ łączenia alfa, który jest wykonywany, zależy od D3DRS_SRCBLEND i D3DRS_DESTBLEND stanów renderowania. Stany mieszane źródła i miejsca docelowego są używane w parach. Poniższy fragment kodu ustawia stan źródłowej mieszanki na D3DBLEND_SRCCOLOR i docelowy stan mieszanki na 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);

Ten kod wykonuje liniową mieszankę między kolorem źródłowym (kolorem elementu pierwotnego renderowanego w bieżącej lokalizacji) i kolorem docelowym (kolorem w bieżącej lokalizacji w buforze ramki). Wynikowy wygląd jest podobny do przyciemnianego szkła w tym, że niektóre kolory obiektu docelowego wydają się być przesyłane za pośrednictwem obiektu źródłowego; reszta wydaje się być wchłonięta.

Wiele z tych czynników mieszanych wymaga wartości alfa w teksturze, aby działały poprawnie. W związku z tym w przypadku korzystania z wierzchołka lub materiału alfa aplikacja jest ograniczona co do tego, które tryby będą generować interesujące wyniki.

Alfa Blending