VBO 通用几何

Posted

技术标签:

【中文标题】VBO 通用几何【英文标题】:VBO General Geometry 【发布时间】:2015-03-20 17:16:44 【问题描述】:

我正在使用 Haskell 制作渲染引擎,并正在优化我的代码以使用 VBO。我想稍微抽象一下几何的类型,因为数量很多,并且想把它粘在一个函数和几个参数中。

例如,如果我有一组几何图形,它是顶点和法线对的列表,即[(Vertex, Normal)]。我将步幅设置为 6,在描述符中,将每个的大小设置为 3,然后将法线的偏移设置为 3。

现在,如果我只想做一个顶点列表,即 [Vertex],我可以将步幅的大小设置为 3,将法线的大小设置为 0,但仍然设置指针和所有内容吗?

【问题讨论】:

【参考方案1】:

从OpenGL documentation 到glVertexAttribPointer

尺寸 指定每个通用顶点属性的组件数。必须 为 1, 2, 3, 4。此外,接受符号常量 GL_BGRA 通过 glVertexAttribPointer。初始值为 4。

因此,您不能调用指向大小为零的对象的指针。为了不使用法线,您必须使用不同的 VBO。

【讨论】:

为什么要使用不同的 VBO?缓冲区对象只是完全在用户控制之下的内存。没有什么可以阻止在同一个 VBO 中拥有多个具有不同顶点格式的对象。 好的,很酷。我知道那时我可以抽象出多少。谢谢!是的,我将使用相同的 VBO。所有的绑定和东西都应该是一样的,我认为只是偏移量和东西不同。谢谢你们! @Gentatsu 如果我正确理解您要做什么,那么您的 VBO 存储应该没有问题。但是如果没有法线,您必须跳过glVertexAttribPointer() 调用法线。并确保您没有启用相应的属性。 是的,这就是我从答案中得到的。它位于相当复杂的代码链中,所以我不想过多地玩弄它,以防万一我失去了原来的位置,无论如何不得不再次回滚。很高兴知道我的立场,并做一点,而不是直接潜入。谢谢!

以上是关于VBO 通用几何的主要内容,如果未能解决你的问题,请参考以下文章

如何管理和组织动态和静态几何

为不同的 VBO 使用 OpenGL VAO

使用索引几何增强多边形

GLSL 几何着色器的性能出乎意料地变慢

VBO 与即时模式性能

OpenGL - 错误地创建多个 VBO