私は遊んで、あなたに適したバッファサイズを見つけ、可能であれば頂点データをVBOに結合します。ターゲット ハードウェアが実際にこれを決定するので、さまざまな数値を試してみることをお勧めします。
モデルが実際にレンダリングに使用する必要がある VBO のオフセットを参照するクラスを使用します。たとえば、箱と車があります。
class MeshManager
{
public:
int loadMesh(const Mesh * mesh)
{
//load the mesh
//Add it to some current VBO or manage the creation of VBOs better.
ManagedMesh managedMesh(theVao, theVbo, theOffset, theLength, theType, theIdentifier);
theIdentifier++;
}
private:
std::map<std::string, ManagedMesh> meshMap;
int theIdentifier;
}
class Renderer
{
public:
void render(int meshId, Vector3f translation, Vector3f rotation);
}
int main(int argc, char** argv)
{
MeshManager meshManager;
Model model("mymodel.obj");
const Mesh * meshes = model.getMeshes();
int meshCount = model.getMeshCount();
for(int i=0; i<meshCount; i++)
{
meshManager.loadMesh(mesh);
}
model.freeMeshes();
}
そのようなもの。明らかに、ロードされたメッシュ ID を保存していませんが、全体像は理解できたと思います。私は専門家ではありませんが、これは私がどのように取り組むかについての大まかな例です。また、可能な限りバッチ レンダリングを試みることも忘れないでください。レンダリングを 1) ロードする必要がある VBO 2) ロードする必要があるマテリアルで並べ替えます。GPU のオンとオフを常に交換することはコストがかかります。試行錯誤はゲームの名前です (ゲームはプログラミングです)。