#python #opengl #pyglet
#python #opengl #pyglet
Вопрос:
Я пытаюсь пакетно отрисовывать примитивы с помощью 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:
Третьим параметром pyglet.graphics.Batch.add
является pyglet.graphics.Group
объект. Если вы не связываете пакет с группой, этот параметр может быть None
. Смотрите Пакетный рендеринг:
def update(dt):
#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)
)