簡體   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