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

[SFML] Straszna predkosc i problem z zapelnianiem obrazka

Ostatnio zmodyfikowano 2012-07-26 18:09
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
[SFML] Straszna predkosc i problem z zapelnianiem obrazka
» 2012-07-26 15:54:07
Siema ziomki :p. Juz chyba każdy wie że sie zajmuje teraz tym cholernym kodowaniem grafy. Tyle juz tych tematow zrobilem ze Heyah :). No ale przejdzmy do rzeczy. Zeby wszystko bylo razem (zeby odrazu otrzymać odp) chce wam zadac 2 pytania.
1: Dobra juz wiem jak odczytac i wyswietlic grafike. Moze nie zbyt mi to wychodzi ale jakos dziala :d Otoż kiedy chce poruszyc tym obiektem program poprostu tak sie tnie ze masakra. Chodzi baaardzo wolno. Mam tylko 1 taki obiekt i odrazu mowie ze nie wczytuje go co petle :D Nie wiem o co w tym chodzi. Przecież tablica pixeli jak kazda normalna.

2: Druga rzecz to że nie umiem sobie poradzic z double bufferingiem. Stworzylem sobie funkcje ktora czysci caly obrazek (wypelnia) danym kolorem. To akurat dziala. Jako że okno w SFML nie jest tak jak w Allegro - bitmapa to nie mozna na nim rysowac. Jest kilka problemow. Stworzylem sobie bufor (sf::Image) i to jego czyszcze dlatego ze w klasie sf::Sprite nie ma metody SetPixel. Musialem oczywiscie zrobic 1 Sprite'a bo oczywiscie obiektu typu sf::Image nie da sie wyświetlic (!!!!!!!!)... Podam wam kod petli glownej. Mysle ze to wam wystarczy. Ale jesli chcielbyscie zobaczyć jakies inne funkcje lub caly kod to jesli to pomoze to dam wam go :)

Edit:
Sorki nie dokaczylem drugiego. Jak juz tak czyszcze to i tak jesli po czyszczeniu wyswietlam ten obrazek to go nie widac. A tu macie kod Petli glownej:
C/C++
while( app.IsOpened() )
{
    while( app.GetEvent( ev ) )
    {
        if( ev.Type == sf::Event::Closed ) app.Close();
       
    }
    const sf::Input & in = app.GetInput();
    if( in.IsKeyDown( sf::Key::Right ) ) bmp1.x++;
   
    app.Clear( sf::Color( 255, 0, 0 ) );
   
    app.Draw( bufor );
    bmp1.BlitOn( img );
   
    app.Display();
}

Edit x2:
O kurde drugi problem rozwiazany. Dopiero teraz zauwazylem ze najpierw wyswietlam bufor a pozniej maluje na nim ten obrazek. Problem 1 dalej nie rozwiazany
P-61161
DejaVu
» 2012-07-26 15:56:12
Frazy, które należy wpisać w wyszukiwarkę google:

http://cpp0x.pl/kursy/Kurs-SFML-C++/Okno-renderujace-grafike/331
P-61162
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-07-26 15:59:55
Jak napisalem w edicie u gory juz rozwiazalem problem nr 2.
I to nawet zanim przeczytalem twoj post :P
P-61163
ison
» 2012-07-26 16:05:26
nie musisz robić ręcznie podwójnego buforowania bo to już masz automatycznie
P-61165
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-07-26 16:08:32
ison powiedz mi kurde jak na zwyklym oknie wyswietlic tablice pixeli to zrobie tak jak mowisz :)

Edit:
Jest jeszcze mozliwosc ale trza by bylo uzyc metody LoadFromMemory ale to odczytuje tylko Uint(?) i nie mam pojecia jak to skonwertowac
P-61166
ison
» 2012-07-26 16:15:36
Ty wyświetlasz osobno każdy piksel?
Pierwsze co to przesiądź się na sfml 2.0, im szybciej zmienisz tym mniej potem będziesz miał roboty z przepisywaniem kodu.
Tak jak już sam wspomniałeś najpierw zbuduj sobie bitmapę a potem użyj loadFromMemory
LoadFromMemory ale to odczytuje tylko Uint(?)
 do loadFromMemory przekazujesz ciąg bajtów tak jakbyś wczytywał normalną bitmapę z dysku, najłatwiej Ci będzie zbudować .bmp

do modyfikacji bitmapy per-pixel masz metody 'update', wykonuj je jak najrzadziej, raczej nie będą się nadawać do real-time
P-61168
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2012-07-26 16:19:54
Ison nie rozumiem cie z tym zbudowaniem. Moglbys jakos jasniej opisac co trzeba zrobic. Moze pseudokod albo cos w tym stylu

Edit:
Tak wyswietlam osobno pixele petla. Tak z ciekawosci jak mozna to inaczej zrobic?

Edit x2:
Chyba juz rozumiem. Chodzi ci zebym wczytal tablice pixeli poczym zapisal do obiektu (tzn. cos jak BITMAPINFOHEADER) czy co? Jestem jeszcze zielony w tych tematach. Prosze o cierpliwosc jako że cięzej mi bedzie zrozumiec poniewaz jestem jeszcze mlody ;/ (a podobno trza sie cieszyc z mlodosci :PP)
P-61169
ison
» 2012-07-26 16:26:21
Ison nie rozumiem cie z tym zbudowaniem
loadFromMemory to po prostu ładowanie bitmap tylko, że ze zmiennej zamiast z pliku.
Tak jak masz każdy plik .bmp zbudowany z ciągu bajtów tak samo musisz go sobie 'zbudować' w programie. Ale nie wiem po co Ci to.
http://en.wikipedia.org/wiki/BMP_file_format

Tak wyswietlam osobno pixele petla. Tak z ciekawosci jak mozna to inaczej zrobic?
karty graficzne nie są 'wydajnościowo przystosowane' do tego typu operacji, teksturę powinieneś modyfikować najrzadziej jak się da
P-61170
« 1 » 2
  Strona 1 z 2 Następna strona