实现精灵的最快方法

时间:2013-09-29 22:15:14

标签: python opengl vbo pyopengl

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

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

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

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

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

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

我对OpenGL比较陌生,我觉得这个API还有点遗失......

1 个答案:

答案 0 :(得分:1)

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

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

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