すべてのフレームを変更しているPygletを使ってメッシュを作りたいと思います。したがって、私は非常に頻繁に頂点を更新する必要があり、私はVBOがここに行く最速の方法であると思っていました。ポイントの例の下。これは正しい方法ですか?私は、glBindBuffer呼び出しの数を最小限に抑える必要があると読んでいますが、ここではすべてのフレームと呼ばれています。 GL_DYNAMIC_DRAWも有効ですが、GL_STATIC_DRAWに変更してもまだ動作しています。 (setup_initial_points
を参照)のみglBufferSubData
でそれを更新し作成して、一度VBOを埋める - これはあなたがアップデートで毎回glBufferData
を呼び出す必要はありません高速計算VBOとPygletでデータを更新するには
import pyglet
import numpy as np
from pyglet.gl import *
from ctypes import pointer, sizeof
vbo_id = GLuint()
glGenBuffers(1, pointer(vbo_id))
window = pyglet.window.Window(width=800, height=800)
glClearColor(0.2, 0.4, 0.5, 1.0)
glEnableClientState(GL_VERTEX_ARRAY)
c = 0
def update(dt):
global c
c+=1
data = (GLfloat*4)(*[500+c, 100+c,300+c,200+c])
glBindBuffer(GL_ARRAY_BUFFER, vbo_id)
glBufferData(GL_ARRAY_BUFFER, sizeof(data), 0, GL_DYNAMIC_DRAW)
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(data), data)
pyglet.clock.schedule(update)
glPointSize(10)
@window.event
def on_draw():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(0, 0, 0)
glVertexPointer(2, GL_FLOAT, 0, 0)
glDrawArrays(GL_POINTS, 0, 2)
pyglet.app.run()
これは*非常に役に立ちます。あなたの助けが大いにありがとう! – apfz
私は確かに私が評判を得たとき、ちょっとユーザーとしてちょっと新しいだろう! :D。 – apfz
この行には 'glBufferData(GL_ARRAY_BUFFER、sizeof(data)、0、GL_DYNAMIC_DRAW)'の間違いがあります。 私は、第3引数は 'data'を意味すると思います – mofr