Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGL] zmiana wartosci kanalu alpha

Ostatnio zmodyfikowano 2010-11-05 18:49
Autor Wiadomość
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?
P-23556
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:
C/C++
glAlphaFunc( GL_GREATER, 0.1f ); // czarne przeźroczyste
glEnable( GL_ALPHA_TEST );
i to wszystko.

To samo osiągniesz używając blendowania.
C/C++
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. 
P-23559
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
P-23560
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
P-23575
« 1 »
  Strona 1 z 1