繁体   English   中英

pyopengl从numpy数组动态读取缓冲区

[英]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

glMapBuffer将缓冲区复制到客户端内存并在本地更改值,然后使用glUnmapBuffer将更改推回到GPU。

glBufferSubData

这使您可以更新缓冲区的一小部分,而不是整个对象。

听起来您还想要一些可以自动接受这些更改的类。 我无法确认这是否是一个好主意,但是您可以包装或扩展numpy.array并覆盖内置方法setitem

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM