管理 OpenGL VBO 和颜色
Posted
技术标签:
【中文标题】管理 OpenGL VBO 和颜色【英文标题】:Managing OpenGL VBO's and color 【发布时间】:2009-11-21 07:03:45 【问题描述】:我正在创建一个使用 VBO 进行绘图的应用程序。该应用程序绘制多种颜色的线段。因此,我为每种颜色创建了一个顶点和索引数组,并按颜色将段排序到适当的数组中。
但是,我希望用户能够设置任何线段的颜色。因此,我的潜在颜色数量几乎是无限的(显然不是,但也可能如此)。我猜想生成 2,000 个 VBO 来保存 1,000 个顶点和索引数组以支持 1,000 种颜色并不是一件好事。
显然,每次绘制新颜色的顶点数组时,可以生成有限数量的 VBO 并复制新数据,但这似乎非常低效。
对处理这种情况有什么建议吗?
【问题讨论】:
【参考方案1】:好吧,考虑到您并没有准确地说出 vbo 中的内容(位置?颜色?)或最终绘制的方式(固定功能?程序?),这并不是一件容易的事。
无论如何,这里有一些你要记住的事实:
您不必创建许多 vbo。 VBO(就像IBO一样)是用于存储的,它可以存储任意数量的数据集。这得益于各种 Draw 函数的“firstIndex/firstVertex”参数和gl*Pointer
的其他偏移量
不必为每个顶点指定颜色。如果您将其存储在 VBO 中,则将其取出并使用常量颜色(如何做到这一点取决于您的绘图方法。对于程序,通过统一而不是属性指定颜色)
到这里,我希望这已经足够你开始了。
【讨论】:
目前 VBO 只是顶点和索引数据。但我明白你关于只使用一些并将颜色数据存储在里面的观点。 嗯,颜色可以是顶点数据。不要混淆顶点数据和位置数据(如果这就是你的意思)。我的意思是让颜色脱离 VBO。 哎呀 - 忘了回答“如何”的问题 - 绘图是通过 glDrawElements 完成的。 我的问题是关于着色器的更多信息。在这两种情况下,世界是非常不同的。以上是关于管理 OpenGL VBO 和颜色的主要内容,如果未能解决你的问题,请参考以下文章