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

[SFML 1.6] SetBlendMode, łączenie kolorów dwóch Sprite'ów

Ostatnio zmodyfikowano 2012-12-29 21:01
Autor Wiadomość
Wasilek
Temat założony przez niniejszego użytkownika
[SFML 1.6] SetBlendMode, łączenie kolorów dwóch Sprite'ów
» 2012-12-29 15:04:58
Mam pytanie dotyczące tego jak dokładnie działa funkcja SetBlendMode. Znaczy się nie rozumiem gdzie dokładnie ma ona swoje zastosowanie.

Chciałbym połączyć kolory z jednego Sprite'a (czarne pole - sf::Color(0,0,0,255)) połączyły się z kilkoma innymi Sprite'ami (obrazek światła).

SetBlendMode działa mi jedynie w przypadku gdy narzucam na obiekt Image nowe obrazki. A z jak mi się zdaje ... nie jest to najoptymalniejsze rozwiązanie ;)

Na razie odpowiedzi nie ma .... więc dodam, że głównie chodzi mi o to, które kolory są łączone, albo "Kiedy kolory są łączone?" :)
P-72284
ison
» 2012-12-29 16:45:48
BlendMode to sposób zapisu nowego koloru pixela na już istniejący.

Alpha blend mode to alpha*nowy_kolor+(1.0-alpha)*stary_kolor (przy alpha będącym z zakresu 0.0-1.0)
Additive blend mode to nowy_kolor+stary_kolor
Subtractive blend mode to stary_kolor-nowy_kolor
P-72295
Wasilek
Temat założony przez niniejszego użytkownika
» 2012-12-29 18:10:25
Czyli, kiedy ten pixel jest zapisywany na już istniejącym ? Wtedy gdy korzystam z renderwindow.Draw() ?
P-72301
ison
» 2012-12-29 18:22:12
Tak. Jak używasz Draw to rysujesz jakieś pixele na już istniejących pixelach i blendmode decyduje o tym co ma się stać. Tyczy się to backbuffera dla sf::Window jak i FBO (którego to chyba nie ma w SFML 1.6).
Jak interesuje Cię oświetlenie to pewnie najbardziej przyda Ci się multiply blend mode.
P-72305
Wasilek
Temat założony przez niniejszego użytkownika
» 2012-12-29 18:51:35
Czyli jednak jest tak jak podejrzewałem ... a raczej ... jak chciałem to zrobić :D

Aktualnie mam jednego Sprite'a wypełnionego w całości na czarno i zależnie od tego ile ustawie - teksturę światła (w środku sf::Color(255,255,255,255) i czym dalej od środka tym mniej kanału alfa - sf::Color(255,255,255,0)). No i problem w tym, że mimo to, że ustawiam dla każdego Sprite'a "Multiply" to nie ma tego efektu co ja oczekują (zniknięcie ciemności na danym obszarze - widoczność tekstury mapy).
P-72313
ison
» 2012-12-29 19:03:53
Teksturę światła zrób taką, że w centrum będzie kolor biały a im dalej tym ciemniejszy. Najpierw wyrenderuj całą scenę normalnie, a potem teksturę światła z multiply blend mode (tekstura światła musi obejmować cały ekran).
P-72315
Wasilek
Temat założony przez niniejszego użytkownika
» 2012-12-29 20:38:21
Chyba nie do końca zrozumiałem ... :<

Renderuję całą scenę -> Nakładam na nią czarnego sprite'a -> Nakładam na to światła

Problem raczej w tym, że nie da się najpierw połączyć tego sprite'a ze światłami a dopiero potem ze sceną ... albo ja przynajmniej nie mam pojęcia jak to zrobić. (samo oświetlenie już miałem wcześniej, ale nie byłem zadowolony z optymalizacji)

P-72334
ison
» 2012-12-29 20:52:55
Wyrenderuj scenę na ekran, a wszystkie światła do FBO    . Na koniec wyświetl teksturę z FBO z multiply blending mode.
P-72335
« 1 » 2
  Strona 1 z 2 Następna strona