Skocz do zawartości

[Teoria] Operacje na dowolnych figurach


Czarny Ass

Rekomendowane odpowiedzi

Pragnę się was poradzić w pewnej kwestii.

Chcę zrobić w moim projekcie obraz, z rozłożonymi na całości figurami, żadna się nie może pokrywać, dowolne kształty, kolory, położenia, wielkości.

Zastanawiam się nad optymalnym tworzeniem tego. Na przykładzie dwóch figur postaram się wam zobrazować problem, który polega na wycinaniu fragmentów figur do innych.

Opcje są takie:

Usunięcie niepotrzebnego fragmentu figury i wklejenie go do tej odpowiedniej.

figury001.pngfigury002.pngfigury003.png

Dodawanie, usuwanie, przesuwanie wierzchołków figur.

figury004x.pngfigury005.png

Ta opcja wydaje się bardziej skomplikowana, bo karty graficzne (operując na prymitywach) muszą mieć ściśle określoną kolejność pojawiania się wierzchołków, co oznacza, że muszę - przykładowo - tworząc 2gi w kolejności wierzchołek (zgodnie lub przeciwnie do kierunku wskazówek zegara) ustawić 3ci na pozycję poprzedniego, drugiego wierzchołka, 4ci z 3ciego itp.

Poza tym porównywanie figur i tym podobne operacje też nie byłyby łatwe.

 

Trzecia opcja - siatka współrzędnych. (do niej nie robiłem już obrazka ;D)

Teoretycznie, mogłoby to wciąż operować na wierzchołkach (opcja druga), z tą różnicą, że byłoby prościej. (no i minimalne ograniczenia co do dowolności figur by się pojawiły)

 

Czwarta i ostatnia - siatka pól (najprostsza opcja)

Niestety bardzo ograniczona, jeśli operować na dużych polach, jeśli na małych, wciąż banalna, ale wtedy niestety nieoptymalna. Raczej odpada, chyba, że ktoś wymyśli optymalne rozwiązanie na to, co wydaje mi się być niemożliwe.

 

A więc co polecacie?

Odnośnik do komentarza
Udostępnij na innych stronach

Niestety, ale zmiany będą dokonywane w pętli gry, czyli dynamiczne. :(

Był pomysł, by na mapie bitowej w niskich rozdzielczościach wszystko robić, a następnie grafika byłaby skalowana, przetwarzana itd.

 

Grafy chyba odrzucę, bo roboty masa, a efektów pracy nie będzie widać, jak się okaże, że powstała figura z 1000000 wierzchołków i co gorsza, co druga taka jest i na wszystkich gra musi coś robić.

 

Odpada też raczej pełnowymiarowa bitmapa, bo wymiary całego obrazu gry, będą kolosalne.

 

Siatka współrzędnych - raczej też cięższy orzech do zgryzienia, tak jak opcja z wierzchołkami - do przemyślenia.

Mała bitmapa - do przemyślenia.

Mapa pól (większych od piksela) - do przemyślenia. (mogłaby powstać hybryda tej i poprzedniej opcji)

 

Ale ostatnia opcja też odpada, bo w większości wypadków siatka pól = bitmapa o niskiej rozdzielczości, z tym, że może być zrobiona na różne sposoby, raczej mniej optymalne. ;|

 

EDIT:

W zasadzie to mapa pól, mogłaby być na heksach, jak już - innej opcji nie ma.

Siatka współrzędnych, operowałaby na wierzchołkach i najprawdopodobniej też odpada, inne opcje są podobne pod względem możliwości, a być może minimalnie optymalniejsze i przede wszystkim prostsze.

 

Czyli teraz dylemat, małe bitmapy vs heksy. (w heksach odległość przeciwległych wierzchołków jest zawsze taka sama, to samo z krawędziami. Tylko pytanie, czy takie ficzery coś w ogóle dadzą? Zaraz dodam rysunek z tym. ;P

 

EDIT2:

figury006.png

figury007.png

To jest na bitmapie o niskiej rozdzielczości robione.

Odnośnik do komentarza
Udostępnij na innych stronach

oxkcr.jpg

 

Jak skończe shader rekoloryzacji do palety Game Boya, zajme sie Twoim problemem :)

BTW. Ma być to w GMie, czy czym innym użyte? Normalnie w OpenGLu czy DirectX, aby renderować prymitywy, możesz podać tablice/bufor z indeksami wierzchołków, dzięki czemu masz jeden bufor na wszystkie kształty i zmieniasz jedynie bufor indeksów, dodając, usuwając, zmieniając kolejność tylko w indeksach do rysowania :)

W GMie to nie przejdzie, niestety.

Odnośnik do komentarza
Udostępnij na innych stronach

To nie jest w GM. ;)

 

Chyba zostanę przy bitmapach o niskich rozdzielczościach, ale pokombinuję może jeszcze z bitmapami o wysokich rozdzielczościach i z grafami, by spróbować zrobić je optymalnie. Tylko czy w ogóle to możliwe? Na prostych figurach owszem, ale na bardzo skomplikowanych to może nie przejść. ;(

Odnośnik do komentarza
Udostępnij na innych stronach

jeśli nie GM, to zabawa boforem indeksów jest najszybszą opcją.

Odnośnik do komentarza
Udostępnij na innych stronach

No ja nie wiem, tutaj mam po prostu małą bitmapę, którą, sprawdzam, powiększam, przetwarzam i już jest.

A ta "zabawa" buforem indeksów nie będzie zbyt szybka, nie ze względu na sam bufor indeksów, a resztę operacji, potrzebnych do działania. Będę zmieniał ilość, położenie, kolejność wierzchołków. Nadal to chyba nie będzie bardziej optymalne.

 

EDIT:

Dobra, będzie bardziej optymalne. Przecie, zmieniając położenie wierzchołków, zmieniam to we wszystkich figurach, w których jest używany, tak samo ze wszystkim innym. :D

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...