我需要显示一个包含数千个节点的图形,以便用户可以滚动和缩放来查看它。节点的行为需要像无量纲的点,而边需要像一维线一样。也就是说,放大时,表示节点的圆将移动得更远,但每个圆的大小保持不变,并且连接它们的线变长但不变粗。如果可能,缩放应该是“连续的”和“无限的”。
使用什么API和算法来解决这个问题?(例如,在CAD或GIS应用程序中)
使用GDI+时,我无法获得接近可接受的性能。我的实现可能很幼稚,但我仍然猜测我需要OpenGL或DirectX。
发布于 2009-12-29 10:35:54
您需要将直线和可见点的绘制与表示这些点的位置的缩放分开。这样,当场景被缩放时,你实际上只需要缩放你的位置,然后渲染,然后使用相同的线和可见点方法,而不考虑缩放级别。
据我所知,Direct3D不会为您提供任何开箱即用的功能。您需要自己实现线和点基元。更重要的是,您需要对向量和矩阵有深入的了解,才能在Direct3D中执行所需的转换。我没怎么用过OpenGL。
GDI+可能很慢,但是通过非常小心地只显示那些当前可见的点,您实际上可以获得不错的性能。如果我处在你的位置,我肯定会花更多的时间来提高你的渲染算法的性能,并坚持使用GDI+更久一点。
此外,将场景完全渲染为内存中的位图(大小与可见窗口相同),然后只需一次渲染此位图,与将每个点和线分别渲染到可见窗口上相比,将提供更好的性能。
发布于 2009-12-30 01:46:56
我相信ROOT提供了所有需要的功能,尽管它是一个很大的包,有很多东西需要学习……
发布于 2009-12-30 01:56:48
ZedGraph将执行您所描述的大部分操作(以固定大小显示线条和点,缩放等)。我建议你查看codeproject教程,看看它的功能是否适合你的需求。我发现它很容易实现,非常灵活,.dll大约是300k。
希望这对你有帮助,安德鲁
https://stackoverflow.com/questions/1972585
复制相似问题