シミュレートしたい水面があります。表面に雨粒を追加するには、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 点を描くことに集中しましょう。