如何使用opengl批量绘制pyglet中的基元?

问题描述 投票:1回答:1

我正在尝试用pyglet批量绘制基元,但我甚至无法得到一个简单的例子。

我能够单独绘制东西,但我的理解是最佳实践是将元素分批。

这是一些非常基本的代码,但它不起作用。我收到错误:AttributeError:'tuple'对象没有属性'parent'

import numpy as np
import pyglet

WIDTH = 640
HEIGHT = 480

game_window = pyglet.window.Window(width=WIDTH, height=HEIGHT)
batch = pyglet.graphics.Batch()

def update(dt):
    global t
    batch = pyglet.graphics.Batch()
    batch.add(2, pyglet.gl.GL_LINES, ('v2f', (100,100,200,200)),
              ('c3B', (255,0,0) * 2))
    batch.add(2, pyglet.gl.GL_LINES, ('v2f', (400,400,50,50)),
              ('c3B', (255,0,0) * 2))

@game_window.event
def on_draw():
    game_window.clear()
    batch.draw()

if __name__ == '__main__':
    pyglet.clock.schedule_interval(update, 1/120)
    pyglet.app.run()

我觉得我必须遗漏一些明显的东西。

python opengl pyglet
1个回答
2
投票

pyglet.graphics.Batch.add的第3个参数是pyglet.graphics.Group对象。如果未将批次关联到组,则此参数可以是None。见Batched rendering。 您还可以使用global statement在函数batch中更改全局变量update的值:

def update(dt):

    global batch                           # <---- add batch

    #batch = pyglet.graphics.Batch()         <---- delete 

    batch.add(2, pyglet.gl.GL_LINES, None, # <---- add None
        ('v2f', (100,100,200,200)),
        ('c3B', (255,0,0) * 2)
    )
    batch.add(2, pyglet.gl.GL_LINES, None, # <---- add None
        ('v2f', (400,400,50,50)),
        ('c3B', (255,0,0) * 2)
    )
© www.soinside.com 2019 - 2024. All rights reserved.