首页 新闻 搜索 专区 学院

如何提高类似AutoCAD软件的图元重绘速度

0
悬赏园豆:100 [待解决问题]

      我正在开发一款类似AutocAD的软件,但是在元素比较多的情况下,元素重绘的速度很慢。

      因为是矢量图,一旦鼠标滚动或者放缩,所有的图元必须重新计算新的窗口坐标,并且在新的位置重绘出来。

      为了提高速度,我使用了空间索引技术,可以排除一些不在可视区域内的元素,并且当元素很小的时候,可以忽略,不显示,但是即使是这样,元素很多且都需要显示的情况下,重绘的速度还是很慢。

      有什么方法可以提高重绘的速度吗?

      有谁知道AutoCAD是怎么处理的吗?

      AutoCAD在元素很多的情况下,依然很流畅。

  大家知道还有没有一些提高重绘的方法?

tangshuji的主页 tangshuji | 初学一级 | 园豆:102
提问于:2014-12-02 10:46
< >
分享
所有回答(2)
0

这个是我的话,悬赏一千万。

爱编程的大叔 | 园豆:30698 (高人七级) | 2014-12-02 10:55

问题确实有点难度,不过真正能回答的,也不是来获取豆豆的。

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-02 11:29

@tangshuji: 

这已经不是有点难度的问题。

类似于有人在知乎上问,10万元可以开发一个类似微信的APP吗?

回答是可以,也不可以。难度不在功能实现,难度在并发、内存控制、响应、安全。

银行的网站10万就可以开发出来,后面那100,000,000是功能之外的东西。

12306花了几个亿,还是渣渣的响应。

我还经常收到有人想做一个类似淘宝的商城需求,当然,他还会谨慎地问,你看我这儿有8千,够吗?

详细我就不吐槽了,你有能力开发出媲美Autocad的软件的话,随随便便可以在中国找家公司,开价1千万年薪。

所以....

支持(0) 反对(0) 爱编程的大叔 | 园豆:30698 (高人七级) | 2014-12-02 11:34

@爱编程的大叔:我也尝试过一些方法,但是收效甚微。我就是期待有做过类似的人,能指点一二,或者能够给点相关的意见,得到得点启发或者灵感。

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-02 11:54

@tangshuji: 好吧,你的水平确实比较高。

梦想还是要有的,万一实现了呢?

看一万本有关C++和Windows编程的书,学习有关图像处理方面的算法,熟悉各种指针操作,

到AutoDesk公司工作十年,到微软Windows部门工作十年,到Adobe公司再工作十年。

再找一个疯投,给个10亿8亿美刀,多娶几个老婆,多生几个孩子,你做不完的事情,可以让孩子接下去做,这样也表示是你做的了。反正有你的基因在。

 

如果你只是要AUTOCAD的功能,你可以参考一下圆方的做法。

当然你如果非要学习倪光南他老人家,骗几亿国家科技基金,开发一个国产CAD,那也行。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30698 (高人七级) | 2014-12-02 12:03

@爱编程的大叔:我的水平就一般,不然,也不会来了这里提问了,不过这个问题实在纠结得很久了。国产的不是有中望CAD和浩辰CAD了嘛。

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-02 12:11

@爱编程的大叔: 还有一点,不是C++和Windows编程的问题,现在只考虑二维的CAD,至于图像图形算法,在3D应用中比较实用。

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-02 12:12

@爱编程的大叔: AutoCAD当然是不可超越的,也不需要它那么强大,只需要看图流畅就行了。即使降低图形质量也行。

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-02 12:17

@tangshuji: 想做类似淘宝商城的人,也这么跟我说的,要不再加点,你看2万够不?

本来已经不想再回答你了。

人贵有自知之明,你这事这样问根本没有可能从技术上回答你。

你希望高手(比如做DOOM引擎的)直接发给你一个引擎还是咋的?

要不然也只能告诉你,认真检查代码,优化再优化,优化再优化,

优化再优化。不能优化的时候,说明你知识遇到瓶颈了,进修去。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30698 (高人七级) | 2014-12-02 12:35

@爱编程的大叔: 我在segmentfault上也问了这个问题,有一个人就列举了几个方法。

1.设定重绘边界,剔除边界外的元素

2.剔除完全被其他元素遮挡的元素

3.缓存已绘制的元素

4.使用 GPU 加速绘制

5.缓存元素的位图, 将多个元素编组缓存位图效果更好。

在CSDN上也问了,有一个人回复如下:

利用CPU空闲时间对视图做缓冲。因为用户经常要做的是上下左右平移和缩小。所以可以将这些地方先渲染好,然后再直接载入。

还有一些人提到LOD,也就是细节分层显示技术。(我已经使用了退化来处理基本看不见的元素)

你看,这些回复在一般的绘图程序中是可以提高性能的。

但是,我差不多都已经采用了这些技术。效果仍然不明显。

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-02 13:39

@爱编程的大叔: 还有有的人说使用多线程提高并发速度,这个也使用了,效果也有。虽然他们有的回答,可能不太适合,但是即使是浏览器的引擎,也是从这些方法来优化的。不然呢?有的CAD软件,元素很多的时候,放缩的时候是使用图片来放大,然后再计算数据,百度地图不都是这样的吗?

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-02 13:42

@tangshuji: 你好,我最近也遇到了类似的问题,能否把你用的上述那些方法告知一下具体,能否发一下代码,邮箱xszhubin@163.com

1.设定重绘边界,剔除边界外的元素

2.剔除完全被其他元素遮挡的元素

3.缓存已绘制的元素

4.使用 GPU 加速绘制

5.缓存元素的位图, 将多个元素编组缓存位图效果更好。

6.使用多线程提高并发速度,

支持(0) 反对(0) xszhubin | 园豆:200 (初学一级) | 2015-05-05 17:19
0

你用什么语言开发的?没有用指针的话,效率就不行

ChuckLu | 园豆:514 (小虾三级) | 2014-12-04 08:47

C++开发的,使用了智能指针,虽然比原生指针效率是低了点,但是应该不足以影响这么大。

支持(0) 反对(0) tangshuji | 园豆:102 (初学一级) | 2014-12-04 09:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册