Лист спрайтов с OpenGL и SDL - PullRequest
1 голос
/ 24 июня 2011

Я работал в новой игре и, наконец, дошел до того, что начал кодировать движение своего главного героя, но у меня есть сомнения относительно того, как это сделать.

Ранее я делал две игры в Allegro, поэтому спрайт-листы довольно просты в реализации, потому что я устанавливаю кадр и положение на изображении и сохраняю каждый кадр в другом растровом изображении, но я знаю, что это делается с помощью OpenGL это не обязательно и стоит немного дороже.

Итак, я думал о том, как сохранить мою таблицу спрайтов и использовать ее в своей программе, и у меня есть только одна идея.

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

Это лучший способ сделать это?

Заранее спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

Вы на правильном пути.

Что нужно учитывать:

  • оставьте достаточно мертвого пространства вокруг каждого спрайта, чтобы видеокарта не смешивалась в текселях от соседних спрайтов в небольших масштабах.
  • Установите минимальную / минимальную фильтрацию текстуры соответствующим образом. GL_NEAREST в порядке, если вы собираетесь выглядеть блочно.
  • Если вы хотите проявить фантазию и сохранить немного памяти текстур, нет причин, по которым спрайты должны быть размещены в регулярной сетке. Меньшие спрайты могут быть упакованы ближе в текстуре.
  • если ваши спрайты визуализируются из 3D-моделей, вы можете вывести карты нормалей и смещений из модели в другую текстуру, а затем объединить их в фрагментный шейдер для некоторого удивительного освещения и самозатенения.
1 голос
/ 24 июня 2011

У вас правильная идея, если у вас есть куча спрайтов, гораздо лучше просто поместить их все в одну большую текстуру. Просто нарисуйте свои спрайты в виде текстурированных четырехугольников, чьи координаты текстуры указывают в рамку спрайта. Вы можете сделать несколько оптимизаций, но большинство из них вращаются вокруг попыток извлечь максимум из вашей памяти текстур и упаковать спрайты вместе с проблемами смешения.

0 голосов
/ 24 июня 2011

Я знаю, что делать это с OpenGL это не нужно и стоит немного дороже.

Почему бы и нет? Нет никаких недостатков в том, чтобы поместить много спрайтов в одну текстуру. Все, что вам нужно сделать, - это изменить координаты текстуры, чтобы выделить рассматриваемый регион из текстуры.

...