我使用PyOpenGL来实现一个小的2D游戏引擎。我在执行Sprite类的方式上犹豫不决。最快的方法来实现精灵
我已经将所有的场景(平铺地图)保存在VBO中,并且所有纹理都保持相同的大纹理。所有精灵的图像也都在这个纹理中。所以我认为,为了表现,我应该把这个精灵包含在VBO中,比如从位置sprite_start_position开始。
的第一个问题是:因为一个精灵可以有几个立场(图像),是它更好地:
- 设置只有一个VBO的精灵条目,该条目修改纹理COORDS相应的姿态,用
glBufferSubData
- 因为有立场的VBO设置尽可能多的条目,但仅绘制了当前与
glDrawArrays
- 其他?
第二个是与精灵位置相似。我必须:
- 变化的VBO与
glBufferSubData
- 权项的位置之前
glDrawArrays(GL_QUADS, sprite_start_position, 1)
- 其他使用一些
glTranslate
?
我是比较新的OpenGL和我还是觉得有点这个API中输了...
最快的方法是使用现有的游戏库xD – user2246674
它主要用于学习目的,所以我不想。 – Fred
相信与否,您可以使用矩阵解决所有这些问题。您可以像定位'glMatrixMode(GL_MODELVIEW)'一样来变换纹理矩阵'glMatrixMode(GL_TEXTURE)'。这就是我如何使用着色器来处理问题,而不是每帧改变顶点缓冲区内精灵的顶点或纹理坐标数据,只需为纹理坐标和位置提供适当的变换矩阵即可。 –