使用opengl绘制大量(10M)的二维多边形



我正在开发一个CAD软件,该软件需要显示包含超过10M个2d多边形的电路蓝图。每个多边形都很简单,其中95%只是矩形,其他多边形的顶点不到10个。

为了展示整个设计,我需要创建一个巨大的顶点缓冲区,这肯定会破坏图形内存限制。然而,由于大多数多边形在这个比例下看不清楚,我正在考虑使用一些预筛选算法来最小化要绘制的多边形。但如果我这样做,那么多多边形(每个多边形都不会大于一个像素)就会消失,那么最终的图像就会出错。

另一种想法是将多边形分为多组,每组都将强连接(触摸),然后为每组构建一个大多边形。在不改变形状的情况下,可以使用某种程度的细节算法来收缩点。不确定这些算法有多快,以及我是否需要为不同的规模级别进行预计算。

有什么标准的方法来处理这个问题吗?我确信它已经解决了很多次。。。

为了澄清这一点,我们需要在OpenGL 2.1上完成这项工作。

您的目标是OpenGL-2.1,因此客户端顶点阵列可用。这实际上意味着:你根本不需要上传任何东西到GPU,数据是根据需要从你的程序地址空间提取的。

当然,1000万个三角形并不多;一些职业使用的程序中,一个帧最终得到1G个三角形。所需的数据量很容易计算:

  10M  # number of primitives
* 4    # number of vertices in a quad
* 4B   # sizeof GLfloat
* 2    # number of elements in a 2D vector
= 320MB

这不是很多。现在你能买到的大多数GPU都有至少512MiB的内存,这很适合。然而,即使你的GPU没有那么多可用内存,OpenGL的内存模型也是抽象的,数据可以根据需要在GPU之间交换。

最新更新