Поэтому недавно я решил создать игру и использовать для этого новые версии OpenGL (примечание: игра 2D).

Пока у меня есть VBO для каждого класса, который можно рисовать. Я сделал это, чтобы избежать VBO для 1 экземпляра класса (6 * 3 элемента). Теперь, как вы знаете, раньше вы рендерили VBO, вы привязываете текстуру. Теперь проблема в том, что я начал реализовывать анимацию, затем я понял, что анимация невозможна таким образом, я не могу визуализировать VBO, который может содержать 5 черепах с разной текстурой для каждой черепахи (разные текстуры для каждой анимации ключевой кадр).

Подведем итог: * Один VBO содержит несколько черепах. Одна черепаха решает атаковать. Начните анимацию, переключившись на текстуру атаки. Оказывать. Все черепахи в VBO атакуют. *

Вот вопрос:

  • Есть ли способ переключать текстуры внутри шейдеров?
  • если это невозможно, что я могу сделать?
0
Amit Assaraf 28 Июл 2013 в 00:27
« Один VBO содержит несколько черепах » Вам приходило в голову, что, возможно, это ваша проблема? 2D-игры, вообще говоря, имеют довольно эфемерные сеточные данные. Вам придется часто менять данные вершин, так что вы должны просто принять это. Это означает, что каждому объекту нужны собственные данные о вершинах.
 – 
Nicol Bolas
28 Июл 2013 в 00:57
Так что вы говорите? Использовать один VBO для одной черепахи?
 – 
Amit Assaraf
28 Июл 2013 в 01:05
Сколько у вас буферных объектов, совершенно неважно. Что вам нужно сделать, так это прекратить использование каждой черепахой одних и тех же данных вершин , как если бы каждая черепаха была клоном другой. Они могут совместно использовать хранилище для своих данных вершин, но не могут совместно использовать сами вершины.
 – 
Nicol Bolas
28 Июл 2013 в 01:08
Они этого не делают. Все, что у них есть, - это один и тот же FloatBuffer и один и тот же идентификатор текстуры.
 – 
Amit Assaraf
28 Июл 2013 в 02:06
VBO содержит 6 * 3 элементов для КАЖДОЙ черепахи.
 – 
Amit Assaraf
28 Июл 2013 в 02:06

1 ответ

Лучший ответ

Нашел собственное решение:

Для каждого объекта, который может иметь анимацию, создайте таблицу спрайтов, а затем измените только координаты ST вместо повторной привязки текстуры для следующего кадра.

1
Amit Assaraf 28 Июл 2013 в 02:09
Я слышал об этом, но чувствовал, что таблицы спрайтов также хорошо справляются со своей задачей, и без ограничения на количество кадров ... (так что в значительной степени они лучше и с ними легче работать)
 – 
Amit Assaraf
28 Июл 2013 в 09:12