Skocz do zawartości
Czarny Ass

[Teoria] Operacje na dowolnych figurach

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?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

To m być dynamiczne? Bo jak nie to możesz po prostu zrobić tablicę 2D i w niej przechowywać 'pixele' na takiej samej zasadzie jak bitmapa.

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
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ść. ;(

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Udostępnij tego posta


Odnośnik do posta
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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×