Вы всегда можете повторить буфер loong "vertex; texcoord". И просто используйте индексы, как вы сказали. Вероятно, это наиболее просто и похоже на то, что вы знаете.
Если вы хотите сэкономить память. Существует довольно изящное решение, и оно состоит в том, чтобы иметь один спрайт в буфере с unite texcoords и создать матрицу преобразования UVs и отправить ее в ваш шейдер и умножить с ней texcoords (в вершинном шейдере).
Вам не нужно создавать матрицы самостоятельно, если вас это не устраивает. Вы можете просто использовать обычные функции GL, а затем читать матрицу с glGetFloatv
функцией. Нравится:
glGetFloatv (GL_MODELVIEW_MATRIX ,&g_TexCoordMat);
Я создал изображение, чтобы описать его лучше. glTranslate и glScale выглядят так, как будто они просто движутся с ультрафиолетовым пространством.
Если вы не знаете, как отправить матрицу в шейдер, я могу поделиться с вами кодом.
Редактировать: Добавлен рисунок
(источник для спрайт-листа, который я использовал: funorb.com )