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

[SDL] Przeźroczystość

Ostatnio zmodyfikowano 2011-01-27 18:42
Autor Wiadomość
absflg
Temat założony przez niniejszego użytkownika
[SDL] Przeźroczystość
» 2011-01-25 21:20:27
Oto mój problem:

Zdefiniowałem funkcje odpowiedzialne za wczytanie (na potrzeby mapy w grze) zbioru cegiełek, z których stworzona jest grafika. Ustawiam na zbiorze kolor maskę przeźroczystości na kolor:

C/C++
Uint32 colorMask = SDL_MapRGB( this->bmp->format, r, g, b );
SDL_SetColorKey( this->bmp, SDL_SRCCOLORKEY | SDL_RLEACCEL, colorMask );

Tu wszystko działa. Dalej tworzę klasę planszy gry: tło i maska na to. Przy składaniu planszy idzie kolejno: tło, później postacie i zdarzenia na mapie, na koniec maska (są na niej np. korony drzew zasłaniające postać). Tło zapełniam cegłami i nie ma tu żadnego problemu. Następnie zalewam maskę kolorem rgb(255,0,255), nakładam na nią cegły (w cegłach przeźroczystość działa). Na koniec chce ustawić w miejsce resztek koloru rgb(255,0,255) maskę przeźroczystości:

C/C++
Uint32 col = SDL_MapRGB( this->mask->format, 0xff, 0x00, 0xff );
//(...)
SDL_SetColorKey( this->mask, SDL_SRCCOLORKEY | SDL_RLEACCEL, col );

Niby to samo co wcześniej, ale nie działa. Po spłaszczeniu:

C/C++
SDL_BlitSurface( this->back, NULL, screen, NULL ); //tlo
SDL_BlitSurface( this->mask, NULL, screen, NULL ); //maska

Na ekran jest kopiowana warstwa tła, a następnie warstwa maski zalana zamiast przeźroczystością tym nieszczęsnym kolorem rgb(255,0,255). Co zrobić aby działała prawidłowo?
P-27046
DejaVu
» 2011-01-25 21:39:22
http://cpp0x.pl/forum/temat/?id=1961

Zerknij na powyższy temat i powiedz czy to Ci rozwiązuje problem.
P-27051
absflg
Temat założony przez niniejszego użytkownika
» 2011-01-25 21:44:27
Nie rozwiązuje. Jak pisałem zrobiłem to dokładnie w ten sposób lecz tło nie zrobiło się przeźroczyste.
P-27054
Drraven
» 2011-01-25 21:44:48
SDL ma coś takiego jak SDL_Image (obsługa innych formatów graficznych). W *.png da się ustawić alphe, Zainteresuj się tym.
Color Key
obrazy png w sdl
Wtym drugim linku narpiew masz pokazane jak zainstalować tą bibliotekę do SDL'a.
P-27055
absflg
Temat założony przez niniejszego użytkownika
» 2011-01-25 21:46:49
Ale ja nie mam problemu z ustawieniem alfy na wczytanym obrazie z pliku, tylko na obrazie utworzonym w programie.
P-27056
DejaVu
» 2011-01-25 21:54:16
Spróbuj nałożyć maskę na bitmapę, a nie na ekran i gotową bitmapę później przekopiuj na ekran - być może pomoże. Obecnie nie mam SDL'a skonfigurowanego więc nie za bardzo mam jak przetestować ten przypadek o którym mówisz.
P-27060
absflg
Temat założony przez niniejszego użytkownika
» 2011-01-25 22:02:30
Właśnie tak robię:
- ładuję bitmapę
- ustawiam przeźroczystość
- pokrywam jej odpowiednimi elementami 2 SDL_Surface stworzone funkcją SDL_CreateRGBSurface
- ustawiam przeźroczystość drugiej SDL_Surface
- nakładam je kolejno na ekran

W efekcie uzyskuję całe okno pokryte drugą warstwą wraz z jej ustawionym kolorem (który powinien być przeźroczysty).
P-27061
DejaVu
» 2011-01-25 22:17:40
C/C++
//(...)
A co robisz w tym fragmencie? Może zmieniasz wartość zmiennej col?
P-27065
« 1 » 2 3
  Strona 1 z 3 Następna strona