使用 OpenGL 绘制数百万个顶点的时间序列

drawing time series of millions of vertices using OpenGL

我正在开发一个数据可视化应用程序,我需要在其中绘制大约 20 个不同的时间序列并以 2D 方式叠加,每个时间序列都包含几百万个数据点。我需要能够左右缩放和平移数据以查看它,并且需要能够将光标放在数据上以测量时间间隔和检查数据点。非常重要的是,当一直缩小时,我可以轻松地发现数据中的异常值并放大以查看它们。因此,平均数据可能会出现问题。

我在 linux 上使用标准 GUI 框架实现了一个天真的实现,它太慢而不实用。我正在考虑使用 OpenGL(在 Radeon RX480 GPU 上测试),并使用正交投影。我四处搜索,似乎画线带的 VBO 可能有用,但我不知道这是否是最好的解决方案(会给我最好的帧率)。

将由数百万个顶点组成的数据集发送到GPU的最佳方式是什么,假设数据不会改变,并且每次用户与之交互时都会重新绘制(pan/zoom/click 就可以了)?

在现代 OpenGL(版本 3/4 核心配置文件)中,VBO 是将几何/非图像数据传输到 GPU 的标准方式,所以是的,您几乎肯定会最终使用 VBO。

备选方案是统一缓冲区或纹理缓冲区对象,但对于您描述的应用程序,我看不到使用它们有任何性能优势——甚至可能更糟——并且会使代码复杂化。

最大的加速将来自将所有数据点存储在 GPU 上,而不是像 2D GUI 那样在每一帧上复制。所以做最简单的事情,然后担心速度。

如果您是 OpenGL 的新手,我推荐这本书 "OpenGL SuperBible" 第 6 或第 7 版。有很多不错的在线 OpenGL 指南和参考资料,只要确保避免使用为 OpenGL 1/2 编写的旧版指南和参考资料即可。

希望这对您有所帮助。