[英]pyopengl buffer dynamic read from numpy array
我正在尝试在python中编写一个模块,该模块将在屏幕上绘制一个颜色数据(rgb)的numpy数组。 目前,我目前正在使用3维颜色数组,如下所示:
numpy.ones((10,10,3),dtype=np.float32,order='F') # (for 10x10 pure white tiles)
将其绑定到缓冲区,然后使用glVertexAttribArray
将数据广播到图块(点精灵)数组(在本例中为10x10数组),这对于静态图像而言效果很好。
但是我希望能够更改数组中的数据,并使缓冲区能够反映此更改,而不必从头开始进行重建。
目前,我已经使用以下方法构建了缓冲区:
glBufferData(GL_ARRAY_BUFFER, buffer_data.nbytes, buffer_data, GL_DYNAMIC_DRAW)
其中buffer_data是numpy数组。 我可以传递什么(如果有的话)(也许某些指针进入内存?)
如果要快速呈现快速变化的numpy数组,则可以考虑看看glumpy 。 如果您确实选择了纯pyopengl解决方案,那么我也很想知道它是如何工作的。
编辑: 在这里查看我的答案,以获取有关如何使用Glumpy查看不断更新的numpy数组的示例
glBufferData用于更新整个缓冲区,因为每次都会创建一个新缓冲区。
您想要的是:
glMapBuffer将缓冲区复制到客户端内存并在本地更改值,然后使用glUnmapBuffer将更改推回到GPU。
这使您可以更新缓冲区的一小部分,而不是整个对象。
听起来您还想要一些可以自动接受这些更改的类。 我无法确认这是否是一个好主意,但是您可以包装或扩展numpy.array并覆盖内置方法setitem 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.