【发布时间】:2013-10-05 17:01:47
【问题描述】:
我正在使用 PyOpenGL 来实现一个小型 2D 游戏引擎。我对实现 Sprite 类的方式犹豫不决。
我已经将所有场景(平铺地图)保存在 VBO 中,并且所有纹理都保存在同一个大纹理中。所有精灵的图像也在这个纹理中。所以我想,为了性能,我应该在 VBO 中包含精灵,比如说从 sprite_start_position 位置。
第一个问题是:既然一个精灵可以有多个姿势(图像),是否更好:
- 在 VBO 中只为精灵设置一个条目,并根据姿态修改此条目中的纹理坐标,使用
glBufferSubData - 在 VBO 中设置与立场一样多的条目,但仅使用
glDrawArrays绘制当前条目 - 其他?
第二个与精灵位置类似。我必须:
- 用
glBufferSubData更改VBO中右侧条目的位置 - 在
glDrawArrays(GL_QUADS, sprite_start_position, 1)之前使用一些glTranslate - 其他?
我对 OpenGL 比较陌生,我仍然对这个 API 感到有些迷茫......
【问题讨论】:
-
最快的方法是使用现有的游戏库 xD
-
主要是为了学习,所以不想。
-
信不信由你,您可以使用矩阵解决所有这些问题。您可以像定位
glMatrixMode (GL_MODELVIEW)一样变换纹理矩阵glMatrixMode (GL_TEXTURE)。这也是我使用着色器解决问题的方法,而不是每帧都在顶点缓冲区内更改精灵的顶点或纹理坐标数据,只需为纹理坐标和位置提供适当的变换矩阵。 -
感谢您的回答。我会检查的。
-
我真的不明白为什么这篇文章基于意见而被搁置:如果我要求“最好的方式”,那将是主观的。我故意要求“最快的方式”,因为它是客观的(如果需要,你可以用基准来衡量它)。此外,我询问了两种技巧,正是为了避免过于公开的讨论。
标签: python opengl vbo pyopengl