带有附加数据的 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 顶点数组对象是存储顶点缓冲区名称和索引,还是只存储索引?