2D спрайт анимация с использованием спрайт листов и OpenGL - PullRequest
2 голосов
/ 31 января 2012

Я пытаюсь разработать простую 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.

Какой самый удобный способ действовать в этом случае? Я не предоставил никакого кода, потому что сначала я хотел бы оценить несколько возможностей.

1 Ответ

1 голос
/ 31 января 2012

Я думаю, что я бы сделал это так же, как вы описали в первую очередь. Измените координаты в текстуре, чтобы показать интересующую вас часть. Я не уверен, насколько это будет дорого, но изменение VBO (с использованием шейдера) должно быть чрезвычайно эффективным и совсем не дорогим. Принимая во внимание правило «поздно оптимизировать», было бы чрезвычайно легко повторить его позже. Если вы сделали это хорошо разработанным способом, то это.

Но я думаю, что быстрее изменить S-координаты текстуры, чем переключаться между несколькими различными текстурами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...