私は現在ボクセルエンジン(たとえばMinecraftなど)を構築しており、openglを使用しています。
エンジンの現在の設計は次のようになります。
クラスマップ->チャンクの2D配列が含まれています(std::vectorのstd::vector)
クラスチャンク->ブロックの3D配列が含まれています(std :: vectorも使用)
class Block->には、ブロックの頂点が含まれています。(立方体、12個の三角形から構築);
私がやりたいのは、すべてのチャンクに、チャンク内のすべてのブロックを描画するdraw()関数を持たせることです。glGenBuffers()を使用してチャンクごとにバッファーを作成すると思いました。私が読んだチュートリアルから、最初にglVertexArrayを使用して頂点配列を作成し、それをバインドするよりも、ターゲットGL_ARRAY_BUFFERを使用してバッファーをバインドし、データを入力する必要があります。
これまで、glGenBuffers()を使用してチャンク内に作成されたバッファーを使用して、複数のブロックを含む単一のチャンクをレンダリングすることができましたが、メイン関数では、チャンク内でdraw()関数を呼び出すよりも、glVertexArrayを作成してバインドします。 glDrawArrays()を使用して、チャンクのバッファと描画をバインドします。
私の質問は、チャンクごとにVBOを作成するのは正しいですか?チャンクごとにglVertexArrayも作成する必要がありますか?または、すべてのチャンクに1つを使用し、毎回別のVBOをバインドする必要がありますか?
チュートリアルとopenglwikiを通じてVAOとVBOについてもっと勉強しようとしましたが、これまでのところ、それがどのように機能し、どのように適切に使用されるべきかを完全には理解していませんでした。