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

SFML - oświetlenie

Ostatnio zmodyfikowano 2014-07-28 13:15
Autor Wiadomość
ggerek
Temat założony przez niniejszego użytkownika
SFML - oświetlenie
» 2014-07-26 13:11:20
Chciałby w mojej grze uzyskać efekt podobny do tego screena :
Oświetlenie
Oświetlenie


Do głowy przyszło mi kilka pomysłów :
1. Rysowanie tylko tego co jest wokół gracza,a resztę pozostawić czarną ( jeśli tak zrobię to nie będzie efektu światła)
2. Znalazłem w internecie coś takiego jak FBO, ale za nic nie mogę nic o tym znaleźć
Jest jakiś lepszy sposób ? Z tych dwóch najlepszy wydaje mi się ten drugi, ale nie wiem jak on działa.
Oświetlenie nie musi być "kwadratowe" jak na screenie, nawet lepiej gdyby było w miarę realistyczne. (coś w stylu latarki, ale bez kółka tylko z trójkątem w jedną stronę)

P-114420
pekfos
» 2014-07-26 13:43:26
Wiele jest sposobów, często zbyt złożonych by je tu opisywać.
Frazy, które należy wpisać w wyszukiwarkę google:
P-114421
ggerek
Temat założony przez niniejszego użytkownika
» 2014-07-26 14:37:48
Dzięki za zainteresowanie, ale ja nie potrzebuje cieni. Wystarczy mi trójkątne światło z latarki.
Mógłbym prosić o prosty spis punktów w skrócie co należny zrobić ?
P-114423
pekfos
» 2014-07-26 14:45:44
Narysować biały trójkąt na osobnej czarnej teksturze, a potem wyświetlić ją z BlendMultiply.
P-114424
ggerek
Temat założony przez niniejszego użytkownika
» 2014-07-28 10:46:30
Próbuję to zrobić tak :
C/C++
class Latarka
{
public:
    int x;
    int y;
    CircleShape swiatlo;
    RectangleShape czern;
    BlendMode blendmode = BlendMultiply;
    Latarka()
        : czern( Vector2f( 1440, 900 ) )
         , swiatlo( 96, 3 )
    {
        czern.setFillColor( sf::Color( 0, 0, 0 ) );
        swiatlo.setFillColor( sf::Color( 255, 255, 255 ) );
    }
    int swiecenie( Latarka & latarka, Gracz & gracz );
};

C/C++
latarka.czern.setPosition( 0, 0 ); // nakładam czerń na cały ekran
latarka.swiatlo.setPosition( latarka.x, latarka.y );
okno.draw( latarka.czern );
okno.draw( latarka.swiatlo, latarka.blendmode );

Ustawiając
BlendMode blendmode = BlendMultiply;
 trójkąta nie widać
P-114514
pekfos
» 2014-07-28 11:06:13
Narysować biały trójkąt na osobnej czarnej teksturze, a potem wyświetlić ją z BlendMultiply.
P-114516
unkn9wn
» 2014-07-28 11:13:06
stwórz sf::RenderTexture, czarną, przezroczystą [oczywiście funkcją clear()]
to na niej narysuj światło z sf::BlendAdd.
wywołujesz ją, jak zdjęcie funkcją - display()
i bierzesz do sprite'a   
sprite.setTexture(renderTextura.getTexture());

teraz możesz rysować na ekranie
P-114519
ggerek
Temat założony przez niniejszego użytkownika
» 2014-07-28 12:14:18
Zrobiłem bardziej na wzór tego co napisał Pekfos :
C/C++
int Latarka::swiecenie( Latarka & latarka, Gracz & gracz )
{
    latarka.x = gracz.x;
    latarka.y = gracz.y / 2;
    latarka.swiatlo.setFillColor( sf::Color( 255, 255, 255 ) );
    latarka.czern.create( 1440, 900 );
    latarka.czern.clear();
    latarka.oswietlenie.setTexture( latarka.czern.getTexture() );
   
}

C/C++
class Latarka
{
public:
    int x;
    int y;
    //enum
    // {
    //     prawo,lewo,gora,dol
    // };
    CircleShape swiatlo;
    RenderTexture czern;
    BlendMode blendmode = BlendMultiply;
    Sprite oswietlenie;
    Latarka()
        : swiatlo( 96, 3 )
    {
    }
    int swiecenie( Latarka & latarka, Gracz & gracz );
};

C/C++
int Grafika::rysowanie_mapy( RenderWindow & okno, Latarka & latarka, System & system, Mapa & mapaA, Zdarzenia & zdarzenie )
{
    latarka.czern.display();
    latarka.czern.draw( latarka.swiatlo );
    // mapa
    for( int i = 0; i != 30; i++ )
    for( int j = 0; j != 30; j++ )
    {
        mapaA.kafelek[ i * 30 + j ]->wyglad.setPosition( mapaA.kafelek[ i * 30 + j ]->x - system.kamerax, mapaA.kafelek[ i * 30 + j ]->y - system.kameray );
        okno.draw( mapaA.kafelek[ i * 30 + j ]->wyglad );
    }
    // swiatlo
    okno.draw( latarka.oswietlenie, latarka.blendmode );
}
Dzięki wam za pomoc. Mam ostatnie pytanie na temat oświetlenia. Chciałbym zrobić tak aby jasność "światła" malała z odległością.
P-114529
« 1 » 2
  Strona 1 z 2 Następna strona