Autor Wątek: [C++/ALLEGRO5] 2d Tile Map i Texture Splatting  (Przeczytany 2109 razy)

Offline jerryharpman

  • Użytkownik

# Listopad 21, 2014, 19:48:21
Projektuję sobie własnie taką większą grę. Gra będzie w 2D w widoku z góry.
Mapę do takiej gry najłatwiej zrobić z kafli, no ale tu zaczyna się problem. Tych kafli musiałoby być bardzo dużo a i tak by się powtarzały.
Wpadłem więc na pomysł żeby zrobić Texture Splatting. Przygotowałem tekstury do mieszania i czarno-przezroczystą grafikę do procesu mieszania.
Ustawiłem w Allegro odpowiednio blender, wszystko ładnie wyszło ... dla kafla 400x400 (obrazek aplha w .png 100x100 i skaluje)

I teraz pytanie: jak, gdzie i w czym zapisać sobie taką strukturę mapy ?
1. Mogę przygotować przeskalowane kafle alpha, ale 10000 bitmap (tyle takich kafli by weszło na niedużą mapę) zajmie dość sporo miejsca i każdy miałby do nich dostęp. Da się to jakoś spakować tak żeby program sobie rozpakował i wykorzystał?

2. Odczytanie bitmap po pikselu i zapis do jakiegos własnego pliku jest szybki, ale już budowanie bitmapy z pikseli w Allegro to horror (wyliczyłem że ta mapa to jakieś 44h budowania xD ).

Proszę o jakiś pomysł jak to zrobić, albo wyjaśnienie lub link jak to się robi.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline kapustman

  • Użytkownik

# Listopad 21, 2014, 21:54:08
Z tego co ja wiem, operacje na pikselach w Allegro5 są wolne. Tutaj masz 2 linki na temat rysowania piksel po pikselu : https://www.allegro.cc/forums/thread/611719 , https://www.allegro.cc/forums/thread/612922

Nie lepiej skorzystać z funkcji al_set_target_bitmap(), i na tej bitmapie tworzyć nowe, przy użyciu funkcji np. al_draw_bitmap()?
« Ostatnia zmiana: Listopad 21, 2014, 21:58:37 wysłana przez kapustman »

Offline Jerry_Harpman

  • Użytkownik

# Listopad 22, 2014, 09:42:31
No do samego rysowania używam tych funkcji. Rysowanie to banał.
Może się źle wyraziłem : mam zapisaną strukturę mapy w programie, ale chce to zapisać do plików.
Albo jeszcze inaczej: chce pliki graficzne jakoś skompresować, albo zapisać je w innej formie a potem odtworzyć.

Jak to działa w grach 3D? Jak taka mapa 3D przechowuje schemat "malowania terenu" teksturami?
W edytorach takiej mapy zwykle jest podgląd na całą mapę i maluje się pędzlem (no ok, tu wchodzi kaflowanie mapy i rysowanie na czarno dla każdej tekstury... ale gdzie to jest zapisane w plikach? w jaki sposób?)


PS. Wrócę do domu to sprawdzę jeszcze jedną rzecz: przecież allegro posiada funkcje blokady bitmapy (al_lock_bitmap). Wtedy teoretycznie al_put_pixel powinno być szybkie.
Jest też funkcja, chyba al_register_bitmap_saver i _loader. umożliwiają one podpięcie włąsnych funkcji zapisu/odczytu.
Ale nadal czekam na jakieś sugestie, może ktoś z was już to robił?
« Ostatnia zmiana: Listopad 22, 2014, 10:16:39 wysłana przez Jerry_Harpman »

Offline gregorspl

  • Użytkownik

  • +1
# Listopad 22, 2014, 14:33:33
Co do pierwszego pytania to istnieje dla Allegro coś takiego jak Grabber.
Tu uzyskasz więcej informacji :
http://www.binboy.org/tworzenie-gier/tutorials/522/show/grabber.html

A ja jakoś nie wypowiem się jak to z tym grabberem wygląda bo nie bawiłem się nim, ale myślę, że Tobie jakoś to pomoże ;)

Offline Jerry_Harpman

  • Użytkownik

# Listopad 22, 2014, 14:58:09
Genialne ! Już nie pierwszy raz szukałem jak robić pliki .dat ale mnie internety chyba nie lubią :)
Dzięki za Grabbera, to rozwiązuje cały mój problem i kilka innych też.

Za jakiś czas projekt ukaże się na warsztacie, więc będzie widać namacalne efekty.
Dzięki ! :)

Offline kapustman

  • Użytkownik

# Listopad 22, 2014, 18:01:24
Jest też coś takiego jak al_save_bitmap_f().https://www.allegro.cc/manual/5/al_save_bitmap_f

Offline Jerry_Harpman

  • Użytkownik

# Listopad 24, 2014, 11:18:00
Dla zainteresowanych tematem : używając al_lock_bitmap() w 1 sekundę buduje się ok 100 bitmap o rozmiarze 400x400 operacją al_put_pixel();