Arkusze sprite z obiektami buforowymi i modułami cieniującymi


9

Jaki jest „najlepszy” sposób obsługi arkuszy sprite z modułami cieniującymi i buforami? W trybie natychmiastowym łatwo jest modyfikować tekstorysy sprite'a, gdy jest on rysowany, ale nie wiem, jak to zrobić w nowoczesnym opengl. Czy powinienem przechowywać wszystkie texcoordy w buforze i zmieniać wskaźnik dla każdego duszka, czy jest lepszy sposób?

Odpowiedzi:


11

Zawsze możesz powtórzyć długi bufor „wierzchołek; texcoord”. I po prostu użyj indeksów, jak powiedziałeś. Jest to prawdopodobnie najłatwiejsze i trochę podobne do tego, co wiesz.

Jeśli chcesz zaoszczędzić trochę pamięci. Jest to całkiem fajne rozwiązanie, a mianowicie mieć jednego duszka w buforze z jednoczącymi texcoordami i tworzyć macierz transformacji UVs i wysyłać ją do twojego shadera i pomnożyć z nim texcoordy (w shaderze wierzchołków).

Nie musisz tworzyć matryc samodzielnie, jeśli nie masz z tym nic wspólnego. Możesz po prostu używać zwykłych funkcji GL i czytać macierz z glGetFloatvfunkcją. Lubię to:

glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);

Stworzyłem obraz, aby lepiej to opisać. glTranslate ang glScale może wyglądać tak, jakby po prostu poruszały się w oparciu o przestrzeń kosmiczną UV.

spriteheet uvs

Jeśli nie wiesz, jak wysłać macierz do modułu cieniującego, mogę udostępnić ci trochę kodu.

Edycja: Dodano zdjęcie
(źródło, z którego korzystałem: spriteheet : funorb.com )


Wow, dzięki! Idealna odpowiedź. Naprawdę podoba mi się to rozwiązanie i będę się nim zajmować, jak tylko wrócę z pracy. :-) Jeśli utknę, niepokoję cię kilkoma pytaniami.
uggwar 31.01.11

O ile mi wiadomo, wygeneruje to jedno wezwanie do losowania dla każdego duszka. Czy istnieje sposób na grupowanie tych duszków w celu sprawniejszej implementacji?
uggwar,

@uggwar Instancja rysunku?
Notabene
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.