带有附加数据的 OpenGL 索引缓冲区对象

Posted

技术标签:

【中文标题】带有附加数据的 OpenGL 索引缓冲区对象【英文标题】:OpenGL index buffer object with additional data 【发布时间】:2010-04-08 09:28:00 【问题描述】:

我有一大组线条,我使用 glMultiDrawArrays(GL_LINE_STRIP, ...); 从顶点缓冲区对象渲染它们

这很好用。现在我有很多顶点对,我也必须可视化。每对由两条不同线上的两个顶点组成,顶点之间的距离很小。但是,我希望能够在距离小于某个值的所有顶点对之间画一条线。

我喜欢的是具有以下结构的缓冲区对象:

i1, j1, r1,
i2, j2, r2,
i3, j3, r3,
...

其中 i 和 j 是指向顶点的索引,而 r 是这些顶点之间的距离。因此,每个顶点对都存储为 (i, j, r) 元组。然后我喜欢有一个(顶点)着色器,它只绘制以 r

所以我的问题是,实现这一目标的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我猜经典的做法是将额外数据存储在纹理中,然后在着色器中进行查找。但如果它真的是固定的,您可以将距离本身存储为分配给顶点的纹理坐标,并直接使用它。我认为无论你如何解决它,你都必须将它与每个顶点一起存储(着色器通常不喜欢使用对)。

这是假设您没有为多行重复使用顶点。

编辑: 好的,所以,既然你正在重用顶点,我想你需要聪明一点。如果它是最多两条(或固定数量)行的一部分(如线条),您可以进行两次调用,第一次调用使用第一个纹理坐标,依此类推。我看看能不能想出别的办法。

【讨论】:

每个顶点存储的问题是每个顶点都可以是多对的一部分,因此我必须为每个顶点存储可变数量的数据。

以上是关于带有附加数据的 OpenGL 索引缓冲区对象的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL索引缓冲区对象元素顺序绘制不正确

OpenGL 顶点数组对象是存储顶点缓冲区名称和索引,还是只存储索引?

OpenGL顶点缓冲区对象的动态打包数据

在 OpenGL 中为索引缓冲区对象使用结构会导致段错误

如何在带有 Qt 的 OpenGL 中使用顶点缓冲区对象绘制矩形?

初识OpenGL (-)EBO元素缓冲对象