8

色データ(rgb)のnumpy配列を画面に描画するモジュールをPythonで作成しようとしています。現時点では、次のような 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 配列です。代わりに何を渡すことができますか (おそらくメモリへのポインタですか?)

4

2 に答える 2

2

急速に変化する numpy 配列をすばやくレンダリングしたい場合は、glumpyを検討することを検討してください。純粋な pyopengl ソリューションを使用する場合、それがどのように機能するかにも興味があります。

編集: Glumpy を使用して常に更新されている numpy 配列を表示する方法の例については、こちらの回答を参照してください。

于 2012-12-18T03:05:28.100 に答える
1

glBufferData は、毎回新しいバッファを作成するため、バッファ全体を更新するためのものです。

あなたが望むのは次のいずれかです:

glMapBuffer / glUnmapBuffer .

glMapBuffer はバッファをクライアント メモリにコピーし、値をローカルで変更してから、glUnmapBuffer を使用して変更を GPU にプッシュします。

glBufferSubData

これにより、バッファ全体ではなく、小さなセクションを更新できます。

これらの変更を自動的に取得するクラスも必要なようです。これが良いアイデアかどうかは確認できませんが、numpy.array をラップまたは拡張して、組み込みメソッドsetitemをオーバーライドできます。

于 2013-02-19T07:56:01.580 に答える