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