1

シミュレートしたい水面があります。表面に雨粒を追加するには、1 つの点だけを描画する必要があります。

私はコードを持っています(OpenGL 2.0で):

float rainDrop[3] = { pos }; 
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, rainDrop);
glDrawArrays(GL_POINTS, 0, 1);
glDisableVertexAttribArray(0);

このコードを OpenGL 3.* に移植するには? もちろん効率的に。

私の考えは、単純なバッファー (1 つの要素を持つ) を使用してマップし、この単一のポイントを描画することです。

float rainDrop[3] = { pos }; 
glBindVertexArray(vaoID);
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferSubData(GL_ARRAY_BUFFER, 0, 3*sizeof(float), rainDrop);
glDrawArrays(GL_POINTS, 0, 1);
glBindVertexArray(0);

しかし、おそらく別のオプションは、1 つの静的バッファーを持ち、頂点シェーダーの均一な値を変更することでしょうか?

「アルゴリズム」を変更したくないので、この 1 点を描くことに集中しましょう。

4

1 に答える 1

0

通常、VBO で頂点座標を指定します。少数のプリミティブを描画する場合、どのオプションを選択しても大きな違いはありません。パフォーマンスの違いは、他のレンダリング操作と比較して些細なはずです...

于 2013-09-16T18:16:13.190 に答える