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?" :) |
|
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 |
|
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() ? |
|
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. |
|
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). |
|
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). |
|
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)
|
|
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. |
|
« 1 » 2 |