Как пакетно нарисовать примитивы в pyglet с помощью opengl? - PullRequest
1 голос
/ 31 марта 2019

Я пытаюсь пакетно нарисовать примитивы с помощью 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()

Мне кажется, что я упускаю что-то очевидное.

1 Ответ

2 голосов
/ 31 марта 2019

Третий параметр pyglet.graphics.Batch.add является объектом pyglet.graphics.Group.Если вы не связываете пакет с группой, этот параметр может быть None.См. Пакетный рендеринг .
Далее вы должны использовать оператор global , чтобы изменить значение глобальной переменной 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)
    )
...