[OpenGL] zmiana wartosci kanalu alpha
Ostatnio zmodyfikowano 2010-11-05 18:49
dmx81 Temat założony przez niniejszego użytkownika |
[OpenGL] zmiana wartosci kanalu alpha » 2010-11-04 22:55:34 witam. scena: tekstury o czarnym tle - uzyskuje przez to "przezroczystosc" przez podwojny blending, jednak zauwazylem, ze ma to swoje wady: -wlasnie to, ze trzeba podwojnie obliczac kolor -trzeba pilnowac, aby rysowac od najdalszego (inaczej przenikaja przez siebie - wylaczony depth_test) -stosujac efekt mgly - "stojac" w oddali od tekstur, staja sie one zabarwione w miejscu, gdzie powinny byc przezroczyste(przez mgle - pole przezroczyste staje sie biale)
znalazlem inny sposob (tzn dopiero co o nim doczytalem i chcialbym sprobowac w praktyce) - poprzez alpha_test - ale potrzebuje do tego "przezroczystych" tekstur
mam pytanie, czy dobrym sposobem bedzie piksel po pikselu sprawdzac, czy kolor badany==kolor zadany do zmiany alpha? tzn jesli rgb=0,0,0 to ustaw alpha na 0 ? albo lepiej uzywac do tego jakiegos programu (jakiego najlepiej? - wiem, fajnie by bylo samemu sobie napisac, moze juz niedlugo :) wczytac obrazek, powiedziec dla jakiego koloru ustalic przezroczystosc... )
czy byc moze istnieja juz gotowe rozwiazania tego typu problemow? (bo wiem, ze glAlphaFunc() przyjmuje parametr alpha, dla ktorego ma byc przezroczystosc - ale najpierw wlasnie potrzebuje ustawic sobie piksele na teksturze w miejscach, gdzie chce, aby byla przezroczysta...
no i czy jesli juz tego dokonam, czy ktos z gory moze powiedziec, czy rozwiaze to moj problem? |
|
VND |
» 2010-11-05 00:51:05 Alpha chanel robisz w jakimś programie który go obsługuje. Photoshop lub podobne darmowe. Zaznaczasz obszar który ma być przeźroczysty, tworzysz nową warstwę lub bezpośrednio do alpha chanel i już. Zapisujesz wszystko do jakiegoś formatu 32-bitowego, np: TGA - prosto go wczytać bez użycia dodatkowych bibliotek. Ustawiasz: glAlphaFunc( GL_GREATER, 0.1f ); glEnable( GL_ALPHA_TEST ); i to wszystko. To samo osiągniesz używając blendowania. glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); glEnable( GL_BLEND );
Alpha chanel jest wygodny, szybko przygotujesz maskę w jakimś programie graficznym, ale działa zero-jedynkowo. Coś jest widoczne lub nie. Blending pozwala na stosowanie półprzeźroczystości, ale musisz sortować obiekty względem wsp.Z. |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-11-05 07:24:46 Dzieki VND - no tak jak opisalem wyzej, wlasnie tak robie - poprzez mieszanie kolorow i srotowanie - ale w tym konkretnym przypadku chcialem sprawdzic totalna przezroczystosc - mam nadzieje, ze zadziala jak nalezy przy nakladaniu mgly. to zostaje mi tylko obrobic tekstury w jakims programie graficznym i sprawdzimy |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-11-05 18:49:42 chcialem tylko potwierdzic, ze sposob z kanalem alfa (alpha) sprawdza sie w 100% jako sposob na przezroczystosc tekstur przy zastosowaniu efektu mgly - w przeciwienstwie do uzywania mieszania kolorow (obiekty bez mgly sa przezroczyste, ale po zalaczeniu mgly - ich przezroczysta dotad czesc staje sie zabarwiona - z daleka zamiast ladnych obiektow, np drzew, widzimy szare kwadraty z rysunkiem drzew)
oczywiscie glBlend i glAlphaTest mozemy uzywac zamiennie (wylaczajac i zalaczajac w odpowiednich miejscach w kodzie) dzieki za podpowiedzi |
|
« 1 » |