我正在开发一种CAD软件,需要显示包含超过10M 2d多边形的电路蓝图。每个多边形都很简单,其中95%只是矩形,有些则少于10个顶点。
为了展示整个设计,我需要创建一个巨大的顶点缓冲区,这肯定会炸毁图形内存限制。然而,由于大多数多边形在那个尺度上看不清楚,我正在考虑使用一些预筛选算法来最小化要绘制的多边形。但如果我这样做,那么多个多边形(每个多边形都不会大于一个像素)就会消失,那么最终的图像就会出错。
另一个想法是将多边形分成多个组,每个组将强烈连接(触摸),然后为每个组构建一个大的多边形。可以使用某种程度的细节算法来缩小点而不改变形状。不确定这些算法有多快,如果我需要预先计算不同的比例级别。
有没有标准的方法来处理这个问题?我很确定它已经解决了很多次......
为了澄清,我们需要在OpenGL 2.1上完成这项工作。
答案 0 :(得分:2)
您定位OpenGL-2.1,因此可以使用客户端顶点数组。这实际上意味着:您根本不需要将任何内容上传到GPU,数据将根据您的程序地址空间提取。
当然,10M三角形不是很多;一些专业使用程序,其中单个框架以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交换。