免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5648 | 回复: 21
打印 上一主题 下一主题

[算法] 其实, 我也不会脏矩形, 不知道论坛有没人贡献一份代码出来 [复制链接]

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-24 11:31 |只看该作者 |倒序浏览
真的没有时间写一份代码...

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
2 [报告]
发表于 2012-11-24 20:09 |只看该作者
本帖最后由 captivated 于 2012-11-24 20:09 编辑


http://blog.codingnow.com/cloud/DirtyRect


update:

    LZ, 度娘狗狗都要会用才行呀.

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
3 [报告]
发表于 2012-11-24 20:38 |只看该作者
回复 2# captivated
他写的代码我看不懂啊,...   

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
4 [报告]
发表于 2012-11-24 21:38 |只看该作者
你到底想实现什么功能?

如果是“有许多区域是脏的,我要逐个更新”这个,你可以考虑用region,我可以教你算法。

如果是“只有在单个长方形区域里面的内容,才会更新”这个,我可以教你clip算法。分为光栅clip和矢量clip两部分。看你用的什么样的引擎。

如果是“只有在某个多边形内部才会更新”这个,我可以给你一个gpc的源代码——不好意思,没法教你,因为我自己还没有看懂。GPC的意思是“通用多边形裁剪”,用处你懂的。

你得说明这个“脏矩形”到底是想实现啥功能= =

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
5 [报告]
发表于 2012-11-24 21:47 |只看该作者
starwing83 发表于 2012-11-24 21:38
你到底想实现什么功能?

如果是“有许多区域是脏的,我要逐个更新”这个,你可以考虑用region,我可以教 ...

就是云风说的那个啊,

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
6 [报告]
发表于 2012-11-24 22:08 |只看该作者
本帖最后由 starwing83 于 2012-11-24 22:14 编辑

哦,就是把屏幕分成几个小块,然后仅仅绘制对应小块的技术?

何必呢。任意的脏矩形绘制不好么?而且根本就不难啊……

一块矩形脏了,将其加入脏矩形的数组,然后在绘制的时候,利用这个数组进行裁切嘛……矢量引擎里面,通常是对顶点进行裁切,因为顶点被裁,所以剩下所有顶点肯定能被绘制,因此不必每画一个点就判断,提高了效率。光栅绘制的话,恐怕就很麻烦了。基本上要各个情况各个分析,比如说画直线怎么个裁剪法儿,画矩形怎么个裁剪法儿等等了……但是也不难。

分屏幕的技术,在光栅时代应该没啥问题。进入矢量绘图时代以后,已经失去其时代意义了。

更新:屏幕分块的话还要一个作用。就是在屏幕上有大量物体的时候,少量物体的移动不会导致全部物体的重绘。这一点其实也不太需要屏幕分块了。移动的时候采用非常经典的AABB算法即可划分出需要重绘的块。然后 根据这些块的extents决定哪些物体必须重绘。

其实说白了,非确定性的离散算法,已经比确定性的划分算法要好了。搞过比赛的都知道这个。

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
7 [报告]
发表于 2012-11-24 22:10 |只看该作者
starwing83 发表于 2012-11-24 22:08
哦,就是把屏幕分成几个小块,然后仅仅绘制对应小块的技术?

何必呢。任意的脏矩形绘制不好么?而且根本 ...

2D 游戏啊,大哥

Flash 内部还用的脏矩形技术呢...

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
8 [报告]
发表于 2012-11-24 22:14 |只看该作者
回复 7# __BlueGuy__

Flash代码之渣你又不是没有看过= =
   

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
9 [报告]
发表于 2012-11-24 22:19 |只看该作者
starwing83 发表于 2012-11-24 22:14
回复 7# __BlueGuy__

Flash代码之渣你又不是没有看过= =

你能写个比云风那个更好理解的代码吗 ?
他写的代码真心难看.

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
10 [报告]
发表于 2012-11-24 22:20 |只看该作者
回复 7# __BlueGuy__


    2D也能矢量绘图啊你不知道?

顶点源,顶点变换器,光栅器,像素变换器,像素排序,扫描线。

这些都是2D的矢量绘制技术啊。

在这里的几乎每一个部分,都支持矢量裁剪。后三个部分支持光栅裁剪。

云风这个的优势是:划分为块以后,小对象,不动的对象效率会很高。

缺点是:一个对象如果太大以至于横挎几个块,会导致重复绘制(当然实际上是不会真的重复绘制的,会做裁剪判断的,但是重复调用是跑不掉的)。另外对象的移动会导致它在块中相对位置变化,对于移动频繁的游戏这个开销是很沉重的。

我以前(大概两年以前吧)就写过这个算法,当时是公司项目,Game2D,用作飞机游戏的底层引擎,不过失败了= =原因就不提了,有自己的原因在里面吧。

现在如果让我重写的话,我不会再用脏矩形。在绘制之初就过滤一遍对象,然后直接令对象重绘,可能会更好一点。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP