我會玩弄,找到一個適合您的緩衝區大小,並儘可能將您的垂直數據組合到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上不斷切換事物的代價是昂貴的。試驗和錯誤是遊戲的名稱(遊戲正在編程)。