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 glGetFloatv
funkcją. 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.
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 )