【问题标题】:Draw large number (10M) of 2d polygons with opengl用opengl绘制大量(10M)二维多边形
【发布时间】:2014-10-31 22:50:48
【问题描述】:

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

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

另一个想法是将多边形分成组,每个组将紧密连接(接触),然后为每个组构造一个大多边形。可以使用某种程度的细节算法来缩小点而不改变形状。不确定这些算法的速度有多快,以及我是否需要针对不同的规模级别进行预先计算。

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

为了澄清,我们需要在 OpenGL 2.1 上进行这项工作。

【问题讨论】:

  • 查看实例化渲染。
  • @ColonelThirtyTwo 我不能真正使用实例化渲染,因为大多数矩形的大小不同。我们坚持使用不支持它的 opengl 2.1。
  • 您可以通过实例化渲染更改顶点着色器中矩形的大小。
  • @Cyber​​Snoopy:你认为这会爆发什么“图形内存限制”?甚至假设确实如此:您不需要将所有内容都放入 VBO 并通过一次调用进行绘制。在减少数据量的情况下使用更多的绘图调用也将起作用。
  • 帧之间的内容有变化吗?还是用户只能平移和缩放的静态内容?

标签: opengl graphics 2d cad


【解决方案1】:

您的目标是 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 交换数据。

【讨论】:

  • 并且一些驱动程序将能够根据需要选择性地上传到 GPU
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 2023-03-27
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多