0

我正在使用 PyOpenGL 来实现一个小型 2D 游戏引擎。我对实现 Sprite 类的方式犹豫不决。

我已经将所有场景(平铺地图)保存在 VBO 中,并且所有纹理都保存在同一个大纹理中。所有精灵的图像也在这个纹理中。所以我想,为了性能,我应该在 VBO 中包含精灵,比如说从位置 sprite_start_position 开始。

第一个问题是:由于一个精灵可以有多个姿势(图像),是否更好:

  • 在精灵的 VBO 中只设置一个条目,并根据姿态修改此条目中的纹理坐标,使用glBufferSubData
  • 在 VBO 中设置与姿态一样多的条目,但仅绘制当前的glDrawArrays
  • 其他 ?

第二个与精灵位置类似。我必须吗 :

  • 更改 VBO 中右侧条目的位置glBufferSubData
  • glTranslate之前使用一些glDrawArrays(GL_QUADS, sprite_start_position, 1)
  • 其他 ?

我对 OpenGL 比较陌生,我仍然对这个 API 感到有些迷茫......

4

1 回答 1

1

您真的不必担心基于精灵的简单 2D 游戏的性能。您的显卡每秒能够渲染数万或数十万个三角形(或更多!),这比您可能需要的要多得多

因此,您选择使用哪种方法来更新精灵并不重要。但是,如果您想要动画精灵,我建议您查看 3D 纹理。它们允许您在动画帧之间进行插值,这使您的动画看起来更好!

作为旁注,您提到 using glTranslatewhich 是 OpenGL 1.x/2.x 中的一个函数,该函数已从 API 的更高版本中删除。我建议您尝试使用“现代 OpenGL”(即 OpenGL 3.x/4.x)。您可以在网上找到大量有关差异的信息。也就是说,如果您有特定的原因,仍然可以使用旧版本的 API,并且如果您执行类似的功能glTranslate将继续工作。

于 2013-09-30T00:10:33.200 回答