OpenGL:纹理基元 + 高帧率

Posted

技术标签:

【中文标题】OpenGL:纹理基元 + 高帧率【英文标题】:OpenGL: Textured Primitives + High Framerate 【发布时间】:2010-03-20 02:50:15 【问题描述】:

短版:在 OpenGL 中高效渲染大量独立的纹理映射、带光照的 2D/3D 图元(圆形、矩形等)的最佳实践是什么?

例如:使用广告牌四边形/三角形、点精灵或任何其他技术的典型粒子系统,并进行混合。

alt text http://www.codingthewheel.com/image.axd?picture=lucent1.jpg

因为看了this thread on the messiness of OpenGL versioning/deprecation之后我开始怀疑了。

我的具体问题不是在 OpenGL 中显示基元的 ABC,而是如何在弃用后(或弃用前)的 OpenGL 中以一种与各种商品硬件兼容的方式有效地做到这一点并且以一种不会破坏或本身不会被弃用的方式,五年后。

谢谢!

【问题讨论】:

您的目标是 OpenGL 1.5 及之前或 2.0 及更高版本? 【参考方案1】:

我仍在尝试自己处理弃用后的 OpenGL 世界。

据我了解,指定几何图形的推荐方法是顶点缓冲区对象 (VBO) 或顶点数组。 VBO 是首选,因为顶点数据存在于 GPU 的内存中。

此外,您必须使用着色器,因为所有固定管道功能都已弃用。

这些东西都适用于 OpenGL 2.1 及更高版本(似乎还有 OpenGL ES 2.0)。

【讨论】:

谢谢。带有我自己印象的凝胶;固定管道已经过时,即使弃用可能没有真正“起作用”。与 nVidia 等人有政治关系。我不明白。 答案是正确的。一个提示,如果你可以用函数式表达你的粒子效果,那么通过巧妙地设置统一值,就可以不必重新上传顶点数据。例如包括时间戳和 Mat4(用于粒子发射器位置和旋转)作为制服。然后在顶点数据中包含一个整数索引。然后着色器可以根据它拥有的数据计算单个粒子的位置。不会对所有东西都有效,但会使效果在 CPU 时间上变得非常便宜。

以上是关于OpenGL:纹理基元 + 高帧率的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenGL ES iOS 中绘制多个纹理时帧率下降

OpenGL ES

为啥OpenGL中没有圆形或椭圆基元?

无法在 OpenGL 中绘制三角形,但其他基元渲染良好

VBO 何时比“简单”的 OpenGL 基元 (glBegin()) 更快?

OpenGL 帧率