Я пытаюсь разработать простую 2D игру-файтинг с использованием OpenGL, и я застрял на анимации персонажей. Основная идея состоит в том, чтобы иметь четырехугольник, состоящий из двух треугольников, и менять структуру этого квадрата каждый кадр или около того. Я использую спрайт-лист для хранения фреймов, и сейчас я пытаюсь найти наиболее удобный способ их циклического перемещения. Координаты вершин и координаты текстуры хранятся в буфере вершинных объектов в памяти графического процессора с помощью параметра GL_STATIC_DRAW
.
Первая идея состояла в том, чтобы загрузить лист спрайта, используя внешнюю библиотеку, такую как SOIL
, в одну текстуру OpenGL (glGenTextures(1, &texture);
), а затем изменять координаты текстуры четырехугольника, передаваемого вершинному шейдеру в каждом кадре, поэтому что если бы анимация длилась четыре кадра, я бы изменил координату S текстуры на 0.0
, 0.25
, 0.5
и 0.75
и обратно на 0.0
. Но это означает, что мне приходится часто менять мой VBO, и я подумал, что это может быть довольно дорого.
Другая идея состоит в том, чтобы выделить массив текстур, используя glGenTextures(nFrames, &textureArray[0]);
, а затем сохранить один кадр для каждого положения массива и использовать glBindTexture(GL_TEXTURE_2D, textureArray[currFrame]);
, чтобы применять различные текстуры без необходимости изменять мой VBO. Но так как я не хочу разбивать лист спрайтов на несколько изображений, я не могу придумать, как это сделать, используя такие библиотеки, как SOIL
.
Какой самый удобный способ действовать в этом случае? Я не предоставил никакого кода, потому что сначала я хотел бы оценить несколько возможностей.