C++/OpenGL を使用して 2D の壁を作成するという単純な概念をいじっています。各壁は 4 つの頂点で表され、水平または垂直に伸び、色も付いています。衝突すると壁が連結します。壁で形成された周囲は、単純な長方形で塗りつぶされます。
私の考えは、多くの壁の頂点データを単一の VBO に保存することです。または、属性ごとに複数の場合、VAO に配置しますか? 1 つの VBO にインターリーブし、VAO 経由でアクセスしますか? とにかく、1 つのオブジェクトに多くの壁があります。保存しているものがスペースを使い果たした場合は、別の VBO (または私が使用しているもの) を作成して、別の壁のグループを保存します。また、スペースを節約するために、直角などで交わる壁が頂点を共有するようにしたいと考えました。
ただし、壁は可変であるため、頂点はいつでも追加、移動、または削除できます。これには、VBO 内の空きブロックを追跡し、必要に応じてそれらに壁データを割り当てる必要があります。また、複数の VBO がある場合、頂点を共有する 2 つの壁が同じ VBO にある必要があり、あらゆる種類の頭痛の種になる可能性があります。しかし同時に、すべての単一の壁に VBO を作成したくありません。これは、せいぜい非常に単純な 4 つの頂点にすぎません。
元の画像に発生するいくつかの変更の例:
この状況は通常どのように処理されますか? VBO を使用するには、独自のメモリ割り当てスキームをローリングする必要がありますか、それともそれほど多くの作業を必要としない適切に高速なソリューションはありますか?