我想在OpenGL中渲染不同的模型。每个模型都有不同的顶点和索引。
使用vbo渲染这些模型时,我应该遵循的最佳做法是什么?我应该为每个模型制作一个VBO来呈现它吗?我已经读过,使用几个小的VBO将是一个很大的性能打击以及使用几个大的VBO。
例如:我旁边有一个方框和一个车,其中方框是8个顶点,车是2000个顶点,这是完全不同的数字。我有不同的模型,它们有时也会消失,这意味着应该从服务器端缓冲区中删除这些模型。我怎么能这样做?
也许有人可以引导我发表一篇文章,清除这种困惑,并展示一种处理我的情况的好方法。
答案 0 :(得分:3)
我会玩并找到一个适合你的缓冲区大小,如果可能的话,将你的vert数据合并到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上和在GPU上交换东西都是昂贵的。试验和错误是游戏的名称(正在编程的游戏)。