配置 VAO 以处理具有多个网格的 VBO
Posted
技术标签:
【中文标题】配置 VAO 以处理具有多个网格的 VBO【英文标题】:Configuring VAO to handle a VBO with multiple meshes 【发布时间】:2015-07-13 15:34:28 【问题描述】:我正在尝试使用单个 VAO 来表示包含多个网格的单个 VBO。现在我有:
glVertexArrayElementBuffer ( vertexArray, buffer );
glVertexArrayVertexBuffer ( vertexArray, positionLocation, buffer, 0, 3 * sizeof ( float ) );
glVertexArrayVertexBuffer ( vertexArray, normalLocation, buffer, (objectVertexBytes + objectIndexBytes), 3 * sizeof ( float ) ); // Issue 2
更多来源:http://pastebin.com/PDuk3fDu
我认为我的问题主要在于 sn-p 的最后一行。
我认为我可以在同一个 VBO 中填充两个不同的网格?如果我在设置缓冲源时只能设置看似一个的状态,这怎么可能?
我遇到了这个麻烦,因为我读到为每个 VBO 设置一个 VAO 效率非常低,因为绑定是一件相对昂贵的事情。我还读到在同一个 VBO 中存储具有相似需求的网格是个好主意。
【问题讨论】:
为什么我被否决了? 【参考方案1】:不要将索引缓冲区与顶点数据(读取:属性)缓冲区 VBO 混合。
总结:
VBO 1
Mesh 1 indices + Mesh 2 indices
(Of course you could separate out Mesh 1 and Mesh 2 here if you'd like)
VBO 2
Mesh 1 Attributes (Vertex, Normal, etc.)
Mesh 2 Attributes (Vertex, Normal, etc.)
【讨论】:
不确定我是否理解您的术语。 “顶点VBO”和“属性VBO”有什么区别?以上是关于配置 VAO 以处理具有多个网格的 VBO的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上使用具有多个 VBO 和 IBO(多个对象)OpenGLES 2 的 VAO 进行绘制
配置VAO和VBO时,顶点数据数组是不是应该使用相同的方法? (OpenGL)[重复]
两个不同的对象 OpenGL。 VAO VBO IBO 网格变形问题