我想将我的多边形细节算法实现到我的3d引擎中。我得到的是以下内容:
1。具有多个多边形数量的实体,例如:
House:
1. -Entity1: 10000 polygons viewrange[0,100]
2. -Entity1: 5000 polygons viewrange[100,300]
3. -Entity1: 800 polygons viewrange[300,1000]
4. -Entity1: 100 polygons viewrange[1000,infinity]
通常,我会创建一个新的VAO,包括每个实体的VBO,但是有更聪明的方法来实现吗?我可以只使用一个VAO并通过更改索引缓冲区来调整细节级别吗?
我创建了一个例子。我目前正在处理地形网格,需要对它们应用LoD:
在OpenGL中实现LoD的最佳方法是什么?我需要多个VAO还是一个VAO?
答案 0 :(得分:2)
您可以将数据和索引信息存储在一个VAO中。如果将所有索引添加到一个缓冲区中,则可以通过在draw命令中指定起始索引和索引量来调整要绘制的级别。
对于您的示例,您将创建一个包含30个索引的索引缓冲区,其中索引0-5用于级别1,6-29用于级别2.然后可以通过调用绘制级别1:
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
和第2级通过调用:
glDrawElements(GL_TRIANGLES, 24, GL_UNSIGNED_INT, (void*)(6 * sizeof(GLuint)));
请注意,此方法要求您始终拥有存储中的所有级别。根据您的需要,这可能不是您想要的。