如何在2D游戏中使用现代OpenGL?


9

我已经找到了很多有关3D的“现代” OpenGL(3.0+)教程,但是在寻找有关如何将其用于2D游戏开发的信息时,却几乎找不到。如何开始将OpenGL用于2D gamedev?

具体来说,我对获取以下主题的答案感兴趣:

  • 我应该如何为正交投影设置各种矩阵?
  • 着色器在2D应用程序中使用的程度与在3D应用程序中一样吗?如果是这样,它们在2D设置中的目的是什么?
  • 我应该如何处理2D游戏显然需要的大量纹理?

对于这个相对广泛的问题,我深表歉意,但是我花了很长时间进行搜索,但发现很少有适用于现代OpenGL的有用信息。

Answers:


11
  • 我应该如何设置正交投影的各种矩阵?

您的目标是2D,对不对?因此,您不需要任何投影。投影是将3D世界浓缩为2D平面的动作。设置着色器,以便将每个顶点的Z坐标默认为,0.0并且应该设置您。

不过,您可以将比例矩阵用于X和Y坐标。缩放这么-10.010.0变得-1.01.0。为了参考起见,这样做的矩阵是:

0.1   0.0   0.0
0.0   0.1   0.0
0.0   0.0   1.0
  • 着色器在2D应用程序中使用的程度与在3D应用程序中一样吗?如果是这样,它们在2D设置中的目的是什么?

他们可以。它们仍然可以用于Per-Pixel照明,为对象提供一些虚假的深度。它们还可以用于纹理效果,水效果,图像生成……您甚至可以使用它们进行一些技巧上的物理计算。

另一种表示方法是:将它们用于3D的所有内容。它只是以不同的方式应用,并且没有得到很好的记录。如果您没有栩栩如生的效果,尽管玩2D游戏的人可能不会遇到麻烦,所以也不是必需的。

虽然您将需要了解着色器的基本知识才能以任何方式渲染精灵。

  • 我应该如何处理2D游戏显然需要的大量纹理?

就像在3D中一样。一堆纹理对象,PBO和一个或多个纹理图集。可能有几个结构/类别,以及头痛。我认为这将称为“资产管理”或类似的名称。

  • 如何开始使用2D gamedev?

那里可能有一些教程。不过,由于3D版本更为常见,我想说的是学习OpenGL的3D知识,然后将学到的知识应用到2D的对应版本中。3D和2D非常相似,而2D只是不跟踪Z坐标。


5
对于2D,您仍然可以使用正交投影和不同的Z坐标进行Z缓冲,否则,您必须自己执行画家的算法并以正确的顺序绘制。
congusbongus

@congusbongus实际上,如果使用透明性进行拼接,则很有可能必须自己完成画家的算法……
Panda Pajama
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.