我会玩弄,找到一个适合您的缓冲区大小,并尽可能将您的垂直数据组合到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上不断切换事物的代价是昂贵的。试验和错误是游戏的名称(游戏正在编程)。