可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
What is the PyOpenGL equivalent of
#define BUFFER_OFFSET(i) (reinterpret_cast(i)) glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_SHORT, BUFFER_OFFSET(offset))
If the offset is 0, then
glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_SHORT, None)
works, but I can not figure out how to specify a non-zero offset into a buffer object.
回答1:
You're supposed to pass a ctypes void pointer, which can constructed by :
ctypes.c_void_p(offset)
There seems to be a more PyOpenGL specific option using a VBO class, and gotcha with some versions of PyOpenGL according to this.
回答2:
You can use OpenGL.arrays.vbo.VBO class for that:
from OpenGL.arrays import vbo # data for your buffer buf = vbo.VBO( [ 1,2,3,4,5,...], target = GL_ELEMENT_ARRAY_BUFFER ) # calls glBindBuffer buf.bind() # starts reading at 14-th byte glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_SHORT, buf + 14)