c - OpenGL 2.1 中的顶点缓冲区对象

标签 c opengl vbo

(我指定 2.1 是因为我的笔记本电脑不会超过该版本。我可能会这样做,因为 3.x 和更高版本强制引入了着色器?)。

感谢维基百科:http://en.wikipedia.org/wiki/Vertex_Buffer_Object我开始明白使用 VBO 是多么简单(我仍然对 IBO 不满意?)。到目前为止,我所了解的是使用它们的主要原因是由于数据现在存储在视频内存中而获得的性能提升。

我想知道的是我应该如何在实际环境中使用它们。例如,我看到的所有内容都是设置一个顶点缓冲区对象并绘制一个三角形或一个立方体等。如果我想绘制 2 个或更多怎么办?我是否为每个要绘制的实体设置一个新的 VBO?或者我是否神奇地附加到我早期设置的一些静态 VBO?

最佳答案

视情况而定,因为问题非常广泛。

为顶点属性使用一个 VBO,为每个模型/对象/实体/网格使用一个 VBO 是一种直接的方法。您可能会受益于将所有模型存储在单个 VBO 中,因此您不必经常绑定(bind)缓冲区,但是当这些模型不是那么静态时,这会带来其他问题。此外,您可以为每个对象使用多个 VBO,一个用于动态数据,一个用于静态数据,或者一个用于几何数据(位置...),一个用于 Material 相关数据(texCoords...)。

每个对象使用一个 VBO 可能有它的(缺点)优势,以及使用一个巨大的 VBO 可能不是一个好主意。这仅取决于具体应用以及这些概念与它的契合程度。但一开始,直接的每个对象一个 VBO 方法并不是一个坏主意。只是不要每个三角形使用一个 VBO ;)

关于c - OpenGL 2.1 中的顶点缓冲区对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6983979/

相关文章:

opengl - GL_TEXTURE_3D - mipmap 尺寸

c++ - 无法使用FBO绘制多个元素

android - 渲染图像的随机消失部分

在 C 中计算 0's and 1' 的二维数组的高度

Python 对象未使用 C API 完全初始化

python - 渲染灰色纹理而不是颜色

c++ - 为什么我的二十面体画不出来?

c - 如何在C代码中解析带空格的文件夹路径

c - Doxygen:\static 命令忽略 C 成员函数

opengl - 将顶点缓冲区对象用于基于图 block 的游戏和纹理图集