andruplay9 Temat założony przez niniejszego użytkownika |
[SFML] czyszczenie wielkich textur i sprite przez klasy » 2019-09-28 12:16:32 Optymalnej jest stworzyć system do przepisywania kordynatów czy stworzyć wielką texturę lecz rysować na jej części (a potem czyścić całą)? Chdzi mi o naprawdę duże textury np. 10^5X2000. Rysowany obszar jest dość mały (tak maks dwukrotność rozmiaru okna). A drugie czy można stworzyć texturę, sprite w klasie a następnie kazać ją narysować w głównej pętli? np. (mocno uproszczone) class t {public. texture test; }; int main { t tt; window.draw(tt.test); } |
|
pekfos |
» 2019-09-28 12:59:26 Kompletnie nie wiadomo co chcesz osiągnąć, ale co by to nie było, to: stworzyć wielką texturę lecz rysować na jej części (a potem czyścić całą)? Chdzi mi o naprawdę duże textury np. 10^5X2000. |
brzmi jak najgorsze możliwe rozwiązanie. Spróbuj sobie policzyć, ile by to było megabajtów do wyczyszczenia z każdą renderowaną klatką. A drugie czy można stworzyć texturę, sprite w klasie a następnie kazać ją narysować w głównej pętli? |
Dlaczego miałoby nie być możliwe? Tylko pamiętaj, że wczytanie jednej tekstury więcej niż raz to marnowanie czasu i zasobów. Rzadko kiedy jest sens żeby sf::Sprite było obok sf::Texture. |
|
andruplay9 Temat założony przez niniejszego użytkownika |
» 2019-09-28 14:45:59 Kompletnie nie wiadomo co chcesz osiągnąć, ale co by to nie było, to: |
Moje założenie jest proste. Mam mapę po której porusza się postać. Na niej jednak są ruchome elementy (więc wymaga ponownej generacji co parę klatek). Skoro czyszczenie jest tak ciężkie (to nie jest pewne, bo czasem oznacza to tylko 'zapomnieniu' że coś tam było i zastąpieniu tym przez system paroma bajtami kodu). TO da się czyścić tylko obszar danej tekstury? A może się w to nie bawić i robić poprzez zakrycie kolorem(przy oknie to nie działa temu pytam)? I tak przy okazji czy z użyciem oknem+widokiem (window+view) przy większych kordynatach jest ten sam problem? (np. generuje tylko obszar 2000x2000 ale kordynaty to x=10^5 y=5000). A i jeszcze czy da się jakby zapętlać teksturę (czyli część okna (uznajmy lewa)jest wypełniona teksturą a potem program zapętla ją i jakby wyświetla ponownie, tylko by nie jadło to zbytnio zasobów). |
|
pekfos |
» 2019-09-28 18:39:02 Ale w czym miałaby pomóc tekstura 100000x2000? |
|
andruplay9 Temat założony przez niniejszego użytkownika |
» 2019-09-28 18:44:58 By wygenerować całą lokację? No dobra 10^5 może być duże ale 4000 w platformówce to jakieś 20 sekund biegu. Czyli by stworzyć lvl który do przebiegnięcia zajmuje ok. 4-5 min potrzeba teksturę/mapę (bo okno też stanie się takie) 50000x1000. Tak wiem, że są na to triki by stworzyć to przy mniejszej teksturze/oknie, dlatego pytam czy opłaca się nad nimi męczyć. |
|
pekfos |
» 2019-09-28 20:19:31 Nie wiem czy jest jakikolwiek sens męczyć się z wcześniejszym renderowaniem mapy do tekstury. Po prostu wyświetlaj to, co w danym momencie powinno być na ekranie. |
|
andruplay9 Temat założony przez niniejszego użytkownika |
» 2019-10-03 13:42:18 Dobra zrozumiałem (i tak nie chodziło mi o to ale i tak znalazłem odpowiedż. Tak dla informacji, teksturę tworzę tylko po to, by ułatwić detekcję kolizji i aktywację wszelkich eventów, więc mogę ją sfiksować z pozycją postaci i nie ma problemu z rozmiarem. Tak z innej beczki, jaki zasięg ma window+view? Dając przykład tworze postać na której sfiksowana jest kamera (postać zawsze na środku widoku) która porusza się ciągle w prawo. Czy w ten sposób postać może iść w nieskończoność (mam na myśli poruszanie się jako ciągłe rośnięcie kordynatu x)? A i (tak dla pewności) jeśli stworzona tekstura zostanie przesunięta (np lewy wierzchołek ma współrzędne 100,100), a następnie rysując jakiś obiekt i określimy współrzędne (tego obiektu na np 120,120) to te współrzędne są według tesktury czy okna (jak w przykładach 120,120 czy 220,220)?
Wiem pytania wydają się blachę ale za późno się tym zająłem i wymaga to sporych zmian w programie (co najmniej dziesiątek linijek kodu bez szansy na użycie replace :( ), dlatego wole wiedzieć na pewno by potem nie poprawiać.
|
|
pekfos |
» 2019-10-03 18:50:54 Tak z innej beczki, jaki zasięg ma window+view? Dając przykład tworze postać na której sfiksowana jest kamera (postać zawsze na środku widoku) która porusza się ciągle w prawo. Czy w ten sposób postać może iść w nieskończoność (mam na myśli poruszanie się jako ciągłe rośnięcie kordynatu x)? |
SFML używa float, więc nie możesz iść w nieskończoność. Im większe wartości, tym mniejsza precyzja z jaką są przechowywane, więc zanim dobijesz do końca zakresu float, będziesz mieć inne problemy. jeśli stworzona tekstura zostanie przesunięta (np lewy wierzchołek ma współrzędne 100,100) |
Lewy wierzchołek tekstury ma zawsze współrzędne 0,0. |
|
« 1 » 2 |