Apus Temat założony przez niniejszego użytkownika |
[SFML 2.0] Wyświetlanie tablicy pikseli na ekran. » 2013-03-13 20:18:23 Mam dwuwymiarową tablicę typu int o rozmiarach okna, w pętli zamieniam liczby na odpowiadające im kolory, które wstawiam do sf::Image za pomocą setPixel(). Potem zawartość sf::Image kopiuję do sf::Texture funkcją loadFromImage() i wyświetlam w oknie. Przy oknie o rozmiarach 512x512 pikseli to wszystko dzieje się w niecałą sekundę. I tu pojawia się problem, bo to miało być wyświetlanie terenu w grze. Nawet jeśli kopiowałbym z sf::Image do sf::Texture tylko przy przesunięciu widoku lub modyfikacji terenu, to gra zacinała by się co chwilę na około sekundę. A więc pytanie, czy da się to zrobić szybciej przy użyciu SFML? Jest jakiś inny sposób wyświetlenia tablicy pikseli na ekran? Czy jest sens rysować każdy piksel jako sf::Sprite? |
|
pekfos |
» 2013-03-13 20:28:33 A jaki jest sens budować mapę z pojedynczych pikseli (pomijając, że robisz to ekstremalnie nieefektywnie)? Już lepiej było by trzymać mapę w formacie bmp (lub innym bezstratnym formacie), potem tylko wczytać i odpowiednio wyświetlić. |
|
Apus Temat założony przez niniejszego użytkownika |
» 2013-03-13 20:33:01 Chcę modyfikować pojedyncze piksele mapy w czasie działania programu, więc nie widzę innego wyjścia niż budować mapę z pojedynczych pikseli. |
|
akwes |
» 2013-03-13 20:42:46 Spoko, na obrazku bmp też możesz przecież edytować pojedyncze piksele. |
|
pekfos |
» 2013-03-13 20:47:32 Zbuduj mapę, a potem tylko ją modyfikuj. Jak będziesz w pętli budować mapę, to gra będzie robić za pokaz slajdów. |
|
Apus Temat założony przez niniejszego użytkownika |
» 2013-03-13 20:51:01 Tylko, że ja mam coś takiego: struct PixelDef { sf::Color Color; };
PixelDef PixelDefs[] = { { sf::Color( 0, 0, 127, 255 ) }, { sf::Color( 72, 36, 0, 255 ) }, { sf::Color( 0, 200, 0, 255 ) }, { sf::Color( 64, 64, 64, 255 ) } };
a w pętli wywołuję to: void UpdateScreen( sf::Image & ScreenImg, sf::Image & MapImg, sf::IntRect & View ) { for( int x = 0; x < View.width; x++ ) { for( int y = 0; y < View.height; y++ ) { ScreenImg.setPixel( x, y, PixelDefs[ MapImg.getPixel(( View.left + x ),( View.top + y ) ).r ].Color ); } } }
a potem ScreenT.loadFromImage( ScreenImg ); Window.clear(); Window.draw( ScreenS ); Window.display();
Mam edytować bitmapę, wczytywać ją jako sf::Texture i wyświetlać? Jeżeli będę edytował mapę w pętli to i tak będę miał co najmniej półsekundowe ścinki przy przesyłaniu sf::Image do sf::Texture. A zamierzam, żeby gra działała na fullscreen, czyli kilka razy wiecej pikseli niż w oknie 512x512. |
|
pekfos |
» 2013-03-13 21:20:08 Co chcesz osiągnąć? |
|
Apus Temat założony przez niniejszego użytkownika |
» 2013-03-13 21:21:35 Chcę osiągnąć mapę kafelkową z kafelkami wielkości pikseli, edytowaną w czasie rzeczywistym. |
|
« 1 » 2 3 |