使用现代opengl创建2D游戏

时间:2013-11-16 17:49:47

标签: java opengl 2d lwjgl

我已经尝试了一段时间来创建一个带有现代opengl的简单2D引擎,现代opengl我的意思是我不打算使用它:

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

等 我正在使用GLSL。

我遇到了一些问题。这是一些问题

  • 我正在尝试创建一个2D坐标系而不使用像glOrtho()和glViewport()之类的旧方法,我知道我应该在这里和那里使用矩阵但是如何?如何创建坐标系?
  • 如何在GLSL中使用texCoords在2D空间中加载纹理。
  • 如果有人可以解释或指向如何设置纹理大小的来源,那么我现在要使用从-1到1的位置,但我想说大小是16 * 16例。
  • 有什么方法可以打印出来自GLSL的错误吗?当我有错误时,它只是打印出来找不到制服。因为位置是== -1
  • 如何使用和创建矩阵以在 2D 空间中移动,缩放和旋转。
  • 我可以使用Matrix2f代替Matrix4f吗?

如果可以的话,请在 Java 谢谢

中发布代码

1 个答案:

答案 0 :(得分:0)

免责声明:我对现代OpenGL没有太多经验,但我使用过最近的DirectX'。大多数一般概念在这里应该是相同的。

  

如何创建坐标系?

现在没有固定的功能管道,因此必须在顶点着色器内手动进行所有坐标转换。它消耗一个顶点然后产生一个转换到屏幕空间。在2D图形的情况下,甚至不需要打扰投影矩阵。

考虑由2D向量组成的输入流。因此,使用3D矩阵实现旋转,缩放和平移。但输出向量应为4D。伪代码:

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

'世界'是精灵的世界矩阵,'视图'是相机矩阵。