【问题标题】:Pyglet update batch dataPyglet 更新批处理数据
【发布时间】:2017-05-21 02:50:49
【问题描述】:

我正在使用 Pyglet 批量绘制数百个四边形。我想在游戏运行时更新顶点的位置和四边形的颜色值。我怎样才能做到这一点?我浏览了很多 Pyglet 文档,我能找到的最接近的是:

    'c4f/static'

    'c4f/dynamic'

我的批处理用法如下所示:

    self.batch.add(4, GL_QUADS, self.texture, 
      ('v3f/dynamic', self.verticies), ('c4f/dynamic', ((1.0,1.0,1.0,1.0)*4))

    ...
    def on_draw(self):
      self.batch.draw()

【问题讨论】:

  • 您需要遍历self.batach.add()生成的顶点,方法是将返回对象放在一个变量中。 x = self.batch.add(...) 然后做for index in range(len(x.vertices)): x.vertices[index] = New_Value
  • 太好了,成功了。谢谢!

标签: python opengl draw pyglet


【解决方案1】:

Pyglets batch.add 返回一个您可以操作的顶点对象。
将您的代码切换为如下所示:

v = self.batch.add(4, GL_QUADS, self.texture, ('v3f/dynamic', self.verticies), ('c4f/dynamic', ((1.0,1.0,1.0,1.0)*4))

...
def on_draw(self):
    for index in range(len(v.vertices)):
        v.vertices[index] = v.vertices[index] +1
    self.batch.draw()

这是一个如何操作它的粗略示例,最终您希望介入您的 range() 调用并更新 x,y 对。

【讨论】:

  • 有没有办法从批次中删除一个四边形?
  • @lilcutthroat 你应该可以做到v.delete() IIRC。如果还有其他情况,您可能需要重新创建批次。但根据the docs Call VertexList.delete to remove a vertex list from the batch. 应该是要走的路。 (我通常将所有顶点保存在字典中,一旦完成batch.add,我就会将返回值添加到self.objects[ID] = batch.add(...),以保持“状态”并处理对象后缀。
  • @lilcutthroat 不客气 :) 祝你的项目好运!
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 2021-04-06
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 2012-04-21
  • 2017-05-20
相关资源
最近更新 更多