使用 VBO 在 OpenGL 中渲染人群

Posted

技术标签:

【中文标题】使用 VBO 在 OpenGL 中渲染人群【英文标题】:rendering crowds in OpenGL with VBOs 【发布时间】:2014-12-02 02:04:06 【问题描述】:

我正在尝试在 OpenGL 中渲染大量相同网格的副本。我知道我可以使用带有索引缓冲区的小顶点缓冲区,但是每个副本都有自己的转换矩阵。我想将每个矩阵传递到我的着色器中,但属于同一副本的顶点将使用相同的矩阵。因此,矩阵缓冲区将比顶点缓冲区短。

网格有 4 个顶点,所以我需要以某种方式每四个顶点发送一个新矩阵。有什么想法吗?

【问题讨论】:

【参考方案1】:

您可以使用实例化渲染:https://www.opengl.org/sdk/docs/man/html/glDrawArraysInstanced.xhtml

https://www.opengl.org/sdk/docs/man3/xhtml/glDrawElementsInstanced.xml

您可以创建一个 VBO,其中填充了每个索引的所有转换矩阵。

将除数设置为四,以便矩阵在发送四个顶点后发生变化:

https://www.opengl.org/sdk/docs/man3/xhtml/glVertexAttribDivisor.xml

您可以使用顶点着色器中的 gl_instanceId 来确定正在渲染的实例,并且可以通过这种方式生成转换矩阵,而不是将每个转换矩阵都发送到着色器。

【讨论】:

glDrawElementsInstanced 正是我想要的,谢谢!

以上是关于使用 VBO 在 OpenGL 中渲染人群的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 使用单个 VBO 渲染多个对象,并使用另一个 VBO 更新对象的矩阵

使用 VBO 渲染顶点的问题 - OpenGL

Open GL:多线程 glFlushMappedBufferRange?

opengl交错vbo不渲染到屏幕

如何使用 OpenGL 3.x VBO 渲染动态世界?

OpenGL 在渲染帧之前崩溃 - VBO