Как использовать современный OpenGL для 2D игр?

9

Я нашел множество "современных" учебных пособий по OpenGL (3.0+) для 3D, но я почти ничего не нашел, когда искал информацию о том, как использовать его для разработки 2D-игр. Как я могу начать использовать OpenGL для 2D gamedev?

В частности, мне интересно получить ответы на следующие темы:

  • Как мне настроить мои различные матрицы для ортогональной проекции?
  • Шейдеры так же интенсивно используются в 2D приложениях, как и в 3D? Если да, то каково их назначение в настройке 2D?
  • Как мне справиться с огромным количеством текстур, очевидно необходимых для 2D-игры?

Я прошу прощения за относительно широкий вопрос, но я потратил много времени на поиск и нашел очень мало полезной информации, которая применима к современному OpenGL.

Алексис Кинг
источник

Ответы:

11
  • Как мне настроить мои различные матрицы для ортогональной проекции?

Ваша цель 2D, верно? Так что вам не нужно никаких проекций. Проекция - это процесс уплотнения трехмерного мира в двухмерную плоскость. Установите шейдер так, чтобы он по умолчанию принимал координату Z каждой вершины, 0.0и вы должны быть установлены.

Вы можете использовать масштабную матрицу для координат X и Y, хотя. Масштабирование так , -10.0чтобы 10.0становится -1.0в 1.0. Для справки, матрица для этого:

0.1   0.0   0.0
0.0   0.1   0.0
0.0   0.0   1.0
  • Шейдеры так же интенсивно используются в 2D приложениях, как и в 3D? Если да, то каково их назначение в настройке 2D?

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

Еще один способ выразить это: все, для чего они используются в 3D. Это просто применяется по-другому, и не так хорошо документировано. Хотя люди, играющие в 2D-игры, вероятно, не попадут в ваше дело, если у вас нет реалистичных эффектов, поэтому они также не требуются.

Хотя вам все равно понадобится знать основы шейдеров для рендеринга спрайта.

  • Как мне справиться с огромным количеством текстур, очевидно необходимых для 2D-игры?

Так же, как вы делаете в 3D. Куча текстурных объектов, PBO и атласа текстур или несколько. Вероятно, несколько структур / классов, а также головные боли. Я думаю, что это будет называться «Управление активами», или что-то подобное.

  • Как я могу начать с 2D-игры?

Там, вероятно, есть несколько уроков. Хотя, поскольку 3D-версия более распространена, я бы сказал, что нужно изучить OpenGL для 3D, а затем применить то, что вы узнали, к его 2D-аналогу. 3D и 2D очень похожи, 2D просто не отслеживает координату Z.

Вольфганг Скайлер
источник
5
Для 2D вы все равно можете использовать ортогональную проекцию и другие координаты Z для Z-буферизации , в противном случае вам придется самостоятельно выполнять алгоритм рисования и рисовать в правильном порядке.
congusbongus
@congusbongus на самом деле, если вы спрайт с прозрачностью, вам, скорее всего, придется самостоятельно выполнять алгоритм художника ...
Panda Pajama