の座標を指定して、次のコードを使用して線をレンダリングしますdata
。
データの作成とアップロード:
nPoints = 3 # let's use three points as an example, in reality this would be 1000
data = [x1y1 x2y2 x3y3]
# upload data
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, mode)
線を引く:
# draw line
stride = 0
offset_to_first_vertex = 0
glVertexPointer(2, GL_FLOAT, stride, offset_to_first_vertex)
offset_to_first_vertex = 0
glDrawArrays(GL_LINE_STRIP, offset_to_first_vertex, nPoints)
2 点目の y 座標を更新します。
offset = 12
glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(new_data), new_data)
2 番目と 3 番目のポイントなど、複数のポイントの y 座標を同時に更新したい場合は、さらに複雑になります。
offset = 12
glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(new_data), new_data)
offset = 20
glBufferSubData(GL_ARRAY_BUFFER, offset, sizeof(new_data), new_data)
呼び出しglBufferSubData
は非常にコストがかかるため、1 回の呼び出しですべての値を同時に上書きすることをお勧めします。stride
残念ながら、 に値を渡すことはできませんglBufferSubData
。つまり、メモリの連続した部分を上書きすることしかできません。
メモリ内のデータを別の方法で再編成する必要があるのではないかと考えていました。
data = [x1x2x3y1y2y3]
このようにして、 の 1 回の呼び出しで複数の値を上書きできますglBufferSubData
。ただし、これを行うと、ポイントをglVertexPointer
andでレンダリングできなくなりglDrawArrays
ます。
したがって、私の質問: 私のラインの複数の単一座標を更新する最良の方法は何ですか? メモリ内のデータをどのようにレイアウトすればよいですか? どうすれば線を引くことができますか?
EDIT1:おそらく x 値を追跡し、対応する x/y ペアを上書きすることで複数のポイントを更新できます。でも、できればこれは避けたいですよね。
EDIT2: 1 つの行を 2 つの VBO でレンダリングする方法はありますか? 1 つの VBO が x 値を保持し、別の VBO が y 値を保持しているとします。それは可能ではないようです。