首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenGL中,我可以在VBO之前设置VBO吗?

在OpenGL中,我可以在VBO之前设置VBO吗?
EN

Stack Overflow用户
提问于 2019-08-20 13:31:24
回答 1查看 479关注 0票数 2

我有一个Sphere类,它生成VBO来创建给定的输入半径和一些更多的参数。

每个Sphere共享相同的内存布局(假设顶点indice 0=顶点,1=颜色)。

我可能弄错了,但如果一个人正确理解,状态就是VAO储存的东西。但是我不知道VAO是提醒哪个VBO是绑定的还是使用当前绑定的VBO。但我认为它在修改VBO绑定时使用了VBO绑定(因此它意味着为每个Sphere呈现重新配置VAO )

问题#1

所有的球体都可以储存在VAO上吗?为多个VBO共享一个VAO。

问题2

我们能独立于VBO之外建立VAO吗?我想说的是,甚至在创建VBO之前,没有VBO绑定,例如,在静态函数中,甚至在创建球之前。

问题#3

这个问题可能没有意义,而且是特定案例,但是我应该对每个球使用一个VAO和一个VBO,还是为所有的球共享一个VAO (如果可能的话)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-20 13:46:15

使用separate attribute format API,可以很容易地独立于任何特定的源缓冲区对象设置VAO。顶点格式信息(组件类型、计数等)都可以是没有缓冲区对象的glVertexAttribFormat。您甚至可以设置属性索引和缓冲区绑定点之间的关系,以便从单个缓冲区绑定中读取交错属性。所有这些都没有绑定缓冲区对象。

现在,在数据的末尾,当呈现(通过glBindVertexBuffer(s))时,您必须将缓冲区对象附加到VAO。VAO将存储最后一次设置的缓冲区。但实际上你应该忽略这一点。对待一个VAO就好像它只是顶点格式的状态一样,缓冲区绑定是您在使用它呈现之前所做的事情。

是的,让一个VAO和多个潜在缓冲区以这种顶点格式读取(或者更好的是,只有一个缓冲区中包含多个网格数据,它们都共享相同的顶点格式,并且网格选择是通过glDrawElementsBaseVertex完成的)是正确的方法。

说到这里,你也应该记住,所有的球都是相同的网格。它们可能出现在不同的位置,不同的大小,但这只是一个提供一个单位球的不同转换的问题。使用多个球面网格的唯一原因是,如果需要不同的球面分辨率(更多的多边形和更少的多边形)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57574878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档