用缩放绘制大量点/线

时间:2009-12-29 02:15:15

标签: opengl graphics zoom lines points

我需要显示包含数千个节点的图形,以便用户可以滚动和缩放以查看它。节点需要表现得像无量纲点,边缘就像一维线。也就是说,放大,表示节点的圆圈移动得更远但每个都保持相同的大小,连接它们的线条变长但不厚。如果可能的话,缩放应该是“连续的”和“无限的”。

使用哪些API和算法来解决此问题? (例如,CAD或GIS应用程序)

使用GDI +,我无法接近可接受的性能。我的实现可能很幼稚,但是,我猜我还需要OpenGL或DirectX。

4 个答案:

答案 0 :(得分:2)

您需要将线条和可见点的绘制与表示点的位置的缩放分开。这样,当场景缩放时,您实际上只是缩放您的位置,然后使用相同的线和可见点方法渲染,而不管缩放级别。

上次我看,Direct3D不会为你提供任何开箱即用的功能。您需要自己实现line和point基元。更重要的是,您需要对矢量和矩阵有很强的理解,才能在Direct3D中执行所需的转换。没有太多使用OpenGL。

GDI +可能会很慢,但你可以通过非常小心地只显示当前可见的那些点来获得不错的表现。如果我在你的位置,我肯定会花更多的时间来提高渲染算法的性能并坚持使用GDI +。

此外,将场景完全渲染到内存中的位图(与可见窗口大小相同),然后简单地一次渲染此位图,将比将每个点和线单独渲染到可见窗口上提供更好的性能。

答案 1 :(得分:1)

我相信ROOT提供了所有要求的功能,虽然它是一个很大的包,需要学习很多......

答案 2 :(得分:1)

ZedGraph将执行您所描述的大部分内容(以固定大小显示线条和点,缩放等)。我建议您查看代码项目教程,看看它的功能是否适合您的需求。我发现它易于实现,高度灵活,而且.dll大约是300k。

希望这有帮助,安德鲁

答案 3 :(得分:0)

我最近发布了一个Java库,用于加速3d中的绘图(http://code.google.com/p/jzy3d/)。

有一个三维散点图的例子,其中3d点是无量纲的。添加链接网络节点的所有行应该是小菜一碟。

有一些工具可以用鼠标缩放/缩放3D场景,所以也许你几乎无事可做。

此致 马丁