我正在使用PyOpenGL来实现一个小型2D游戏引擎。我对实现Sprite类的方式犹豫不决。
我已经将所有场景(平铺地图)保存在VBO中,并且所有纹理都保持在相同的大纹理中。所有精灵的图像也都在这个纹理中。所以我想,为了提高性能,我应该在VBO中包含精灵,比如从sprite_start_position位置开始。
第一个问题是:由于精灵可以有多个姿势(图像),最好是:
glBufferSubData
glDrawArrays
第二个与精灵位置相似。我必须:
glBufferSubData
glTranslate
glDrawArrays(GL_QUADS, sprite_start_position, 1)
我对OpenGL比较陌生,我觉得这个API还有点遗失......
答案 0 :(得分:1)
你真的不应该担心简单的基于精灵的2D游戏的性能。你的显卡每秒能够渲染数十或数十万个三角形(或更多!),这比你可能需要的方式更多。
因此,选择用于更新精灵的方法并不重要。如果你想拥有动画精灵,我建议你看看3D纹理。它们允许您在动画帧之间进行插值,这使您的动画看起来更好!
作为旁注,您提到使用glTranslate
这是OpenGL 1.x / 2.x中的一个函数,该函数已从API的更高版本中删除。我建议你尝试使用“现代OpenGL”(即OpenGL 3.x / 4.x)。您可以在线找到有关差异的大量信息。也就是说,如果您有特定的理由,可以使用旧版本的API,如果您执行glTranslate
之类的功能将继续工作。