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

使用opengl绘制大量(10M)二维多边形,opengl,graphics,2d,cad,Opengl,Graphics,2d,Cad,我正在开发一个CAD软件,它需要显示包含10M多个2d多边形的电路蓝图。每个多边形都很简单,95%的多边形只是矩形,其他多边形的顶点不到10个 为了展示整个设计,我需要创建一个巨大的顶点缓冲区,这肯定会增加图形内存限制。然而,由于大多数多边形在这个比例下看不清楚,我考虑使用一些预筛选算法来最小化要绘制的多边形。但是如果我这样做,那么许多多边形(每个都不会大于一个像素)将消失,那么最终的图像将是错误的 另一个想法是将多边形分成多个组,每个组都是强连接(接触)的,然后为每个组构造一个大多边形。在不改

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

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

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

有没有标准的方法来处理这个问题?我敢肯定它已经解决了很多次


为了澄清,我们需要在OpenGL 2.1上实现这一点。

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

当然,10米三角形不是很多;一些专业人员使用的程序中,一个帧以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都有至少512MB的内存,这非常适合。但是,即使您的GPU没有足够的可用内存,OpenGL的内存模型也是抽象的,数据也会根据需要在GPU之间交换。

查看实例渲染。@ColonelThirtyTwo我不能真正使用实例渲染,因为大多数矩形的大小都不同。我们坚持使用opengl 2.1,但它无论如何都不支持。您可以使用实例化渲染更改顶点着色器中矩形的大小。@CyberSnoopy:您认为这会增加多少“图形内存限制”?甚至假设它是这样的:你不需要把所有的东西都放进VBO,只需一次调用就可以画图。在减少数据量的情况下使用更多的draw调用也会起作用。帧之间的内容会发生变化吗?或者是静态内容,用户只能平移和缩放?一些驱动程序可以根据需要选择性地上传到GPU