2013-11-16 4 views
0

OpenGL Я пытался некоторое время, чтобы создать простой 2D движок с современной OpenGL, с современной OpenGL я имею в виду, я не собираюсь использовать это:Создание 2D игры с современной

glBegin(); glEnd(); glVertex2i(); glOrtho(); 

и т.д. , Я использую GLSL.

И у меня возникли некоторые проблемы. Вот некоторые вопросы

  • Я пытаюсь создать 2D системы координат без использования старых методов, как glOrtho() и glViewport(), я знаю, что я должен использовать матрицу здесь и там, но как? Как создать систему координат?
  • Как использовать texCoords в GLSL для загрузки текстуры в 2D-пространстве.
  • Если кто-то может объяснить или указать источник на то, как установить размер текстуры, прямо сейчас я должен использовать позицию от -1 до 1, но хочу сказать, что размер 16 * 16 для пример.
  • Есть ли способ распечатать ошибки из GLSL? Когда у меня есть ошибка, она просто печатает. Не удалось найти форму. Потому что местоположение == -1
  • Как использовать и создать матрицу для перемещения, масштабирования и вращения в 2D пространство.
  • Могу ли я использовать Matrix2f вместо Matrix4f?

Пожалуйста, если вы можете, разместить код в Java Спасибо

+0

glViewport не устарел и должен использоваться также в современном OpenGL. На самом деле важно назвать это так, чтобы OpenGL знал, как сопоставить координаты NDC с координатами окна. – datenwolf

ответ

0

Отказ от ответственности: У меня нет большого опыта работы с современной OpenGL, но я работал с последними DirectX'es. Большинство общих концепций должны быть одинаковыми.

Как создать систему координат?

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

Рассмотрим входной поток, состоящий из 2D векторов. Таким образом, ротация, масштабирование и перевод осуществляются с помощью 3D-матриц. Но выходные векторы должны быть 4D. Псевдокод:

input = getInputVertex(); 
transformed = view * world * vec3(input, 1.0f); 
output = vec4(transformed, 1.0f); 

Где «мир» - это мировая матрица спрайтов, а «вид» - это матрица камеры.

Смежные вопросы