CN103426197A - 一种基于活性边表和辅助数组的逆画家消隐算法 - Google Patents
一种基于活性边表和辅助数组的逆画家消隐算法 Download PDFInfo
- Publication number
- CN103426197A CN103426197A CN2012101574466A CN201210157446A CN103426197A CN 103426197 A CN103426197 A CN 103426197A CN 2012101574466 A CN2012101574466 A CN 2012101574466A CN 201210157446 A CN201210157446 A CN 201210157446A CN 103426197 A CN103426197 A CN 103426197A
- Authority
- CN
- China
- Prior art keywords
- active edge
- edge table
- auxiliary array
- side table
- depth
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Controls And Circuits For Display Device (AREA)
Abstract
本发明提供一种基于活性边表和辅助数组的逆画家消隐算法,其包含以下步骤:S1初始化工作,初始化一个屏幕像素标志辅助数组,一个扫描线辅助数组;S2若检测到某一精灵发生深度改变事件时,更新活性边表,无此事件全部不更新边表;S3采用逆画家算法,从最近视角扫描精灵,刷新到屏幕中,即按活性边表深度由浅到深的顺序遍历活性边表中每个精灵节点;S4当活性边表中所有节点遍历完毕后,当前帧中图像绘制结束。本发明用活性边表来取得频繁的深度排序处理,用辅助矩阵来避免无效的图像运算。
Description
技术领域
本发明涉及计算机图形学领域中的图像消隐技术,主要涉及一种基于活性边表和辅助数组的逆画家消隐算法,其主要用于提高手机等手持终端设备中游戏及大量窗口图形程序中的消隐处理的效率。
背景技术
随着手机的迅猛发展,手机娱乐已经成为一种不可阻挡的趋势。而手机游戏在整个领域占有相当大的比重。而说到游戏,对于开发人员不得不面对的一个问题就是图像处理,因为有个游戏运行时,消耗在图像处理上的处理器运算时间往往占到整个运算时间的50%以上,游戏中图像的处理的效率的高低直接影响游戏整体效果。而目前的手机游戏由于发展时间相对较短,目前的相关的图像处理技术(主要是硬件方面)和系统还无法达到PC游戏的水准。而且由于目前手机等手持终端设备在硬件上还存在很多限制,例如:由于处理器及内存的限制,目前主流手机无法处理大量的负责的数据运算。另外由于手机等手持自身的特点:设备的屏幕尺寸相对较小,按键数量、操作性等。
基于以上因素的考虑,目前游戏依然以资源占用和运算量较少的2D游戏为主,而游戏中对于消除隐藏面的处理一般采用简化处理,较多的采用画家算法或列表优先算法。画家算法原理简单,其关键是如何对场景中的物体按深度排序。它的缺点是只能处理互不相交的面,不过由于主要应用在2D图像处理,因此基本涉及到深度问题,因此这个致命的缺陷就避免了。但是还有一个问题是当一个场景存在大量遮挡物体时中就会出现大量的冗余运算,严重运算影响效率。而对于处理器处理速度相对较低的手机等手持设备,这个缺陷有可能是致命的。
发明内容
本发明要解决的技术问题是为了克服现有技术的缺陷,本发明提供了一种基于活性边表和辅助数组的逆画家消隐算法,用活性边表(特别是哈希表,Hashtable)来取得频繁的深度排序处理,用辅助矩阵来避免无效的图像运算。
本发明是通过下述技术方案来解决上述技术问题的:一种基于活性边表和辅助数组的逆画家消隐算法,其特征在于,其包含以下步骤:
S1初始化工作,初始化一个屏幕像素标志辅助数组和一个扫描线辅助数组,初始化场景中所有精灵位置,并以其深度坐标填充到活性边表中,将每个精灵的深度信息填充到活性边表中;
S2若检测到某一精灵发生深度改变事件时,更新活性边表,无此事件全部不更新边表,处理完当前帧内所有逻辑事件后,精灵深度活性边表及为当前精灵位置的最新状态;
S3采用逆画家算法,从最近视角扫描精灵,刷新到屏幕中,即按活性边表深度由浅到深的顺序遍历活性边表中每个精灵节点,将其绘制到屏幕中,并且在绘制每个精灵时同步更新辅助数组;
S4当活性边表中所有节点遍历完毕后,当前帧中图像绘制结束。
本发明的积极进步效果在于:本发明用活性边表(特别是哈希表,Hashtable)来取得频繁的深度排序处理,用辅助矩阵来避免无效的图像运算。
附图说明
图1是本发明方法中的活性边表初始化示意图;
图2是本发明方法中辅助矩阵M的数据示意图;
图3是本发明方法中扫描线辅助数组L的数据示意图;
图4是本发明方法的简要流程示意图。
具体实施方式
下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。
首先前提假设如下:为便于表述,以240*320屏幕尺寸为例,游戏场景中所有物体都以“精灵”代替(游戏场景中主要涉及到大量的人物、建筑、装饰等),场景的深度由纵坐标表示,屏幕最下方为视点最近区,最上方为视点可见最远区。每个精灵自身在数据上不存在深度(全部2D表示),其先后顺序都有一个基准纵坐标标识,并用此坐标关联到场景中,用以表示物体的先后顺序,并作为消隐的关键依据。
如图4所示,一种基于活性边表和辅助数组的逆画家消隐算法包括如下步骤:
S1初始化工作。初始化一个屏幕像素标志辅助数组M(大小屏幕宽*高),一个扫描线辅助数组L(大小屏幕宽,其作用介绍见S3),初始化场景(或显示区域)中所有精灵位置,并以其深度(即纵坐标)坐标填充到活性边表中,将每个精灵的深度信息填充到活性边表AET中,数据形式如图1;
S2若检测到某一精灵发生深度改变事件时,更新活性边表(需要执行的操作为:一次删除,一次插入),无此事件全部不更新边表。处理完当前帧内所有逻辑事件后,精灵深度活性边表及为当前精灵位置的最新状态;
S3采用逆画家算法,从最近视角扫描精灵,刷新到屏幕中,即按活性边表深度由浅到深的顺序遍历活性边表AET中每个精灵节点,将其绘制到屏幕Buffer中。并且在绘制每个精灵时同步更新辅助数组M,此步骤是本算法对大量重叠绘制有效提高效率的关键,一个绘制图像结合辅助数组刷新到屏幕中其效率较简单的绘制处理在效率上有显而易见的提升(辅助数组中数据及为正在绘制的图像的当前扫描线的下一个绘制起始点),尤其在场景中存在大量的精灵时,越在底层的精灵其运算量越少。而此处的关键是如何高效的更新辅助数组M(更新后对应屏幕buffer的辅助数组的数据形式如图2所示)。对此问题处理的好坏直接影响本算法的效率,目前本算法的解决方案仍然是以空间换时间为主导思想,用S1中申请的扫描线辅助数组L来负责更新。扫描线辅助数组L中数据在初始化时用从1到屏幕宽度的整数值的倒序填充(如图3所示),利用此数组解决了当前扫描行中对应单元反复的遍历加1操作,只需要进行简单的内存复制命令就可以高效的更新辅助数组。
S4当活性边表中所有节点遍历完毕后,当前帧中图像绘制结束。
基于活性边表的逆画家消隐算法具体实施方式及效率分析,下面结合附图描述一种优选的实施例:
基于活性边表的逆画家消隐算法()
{
辅助数组M置0
while(活性边表中还有未绘制的精灵)
{
for(该精灵所覆盖的每个象素(x,y)){
if(第一个颜色或透明色后第一个颜色)
一位置指针sp指向此位置
else if(第一个透明色或当前扫描线结束)
更新辅助数组M:memcpy(sp,Start_P,*Start_P)
if((x,y)!=0)//非透明色{
获取该象素的在辅助数组M中值V;
if(V==0){
把精灵在(x,y)处的颜色值存入帧缓存的(x,y)处
扫描线数组指针Start_P-=1;
}else{此处是绘制消隐面时效率提高的部分
x+=V;
Start_P+=V;
}
}else{
Start_P=0
}
}
}
}
效率分析:
由上所示可以看出本算法在处理图像数据时比简单的绘制增加了辅助数组的判断和更新。单从一张图片的绘制上来讲,其效率无疑是降低了。但是当当前屏幕中存在大量的图像物体,并且出现大面积的重叠时(尤其是多层次的窗口重叠或网游中大量的角色出现在屏幕中)其程序中代码x+=V这一步操作带来的运算量节省是不言而喻的。
以240*320的屏幕进行计算,屏幕中重叠存在10个精灵或窗口,每个精灵和窗口的平均面积以50*100计算,普通的画家算法(列表优先算法)的对屏幕Buffer赋值的运算量为240*320+50*100*10=126800次。而逆画家算法通过判断辅助矩阵的值后在作出操作,对屏幕buffer中每个位置仅操作一次,不会出现对同一个位置重复操作(这也正是本算法解决大量物体消隐面处理的高效之处),因此其赋值操作只有240*320=76800次。
另外,本算法采用活性边表替代通常用到的精灵排序来进行消隐处理,在精灵移动个数明显少于总数时有一定的运算优势。以场景中100个精灵为例:普通算法若有一个精灵位置发生改变时通过排序进行再调整,最优时间复杂度O(n),即为100。若采用活性边表每个精灵深度坐标改变时调整活性边表只需要一个插入和删除操作(当然还有一些遍历时间,也正是因为此原因才采用活性边表来减少遍历时间)。
效率总结:
经过以上分析可以看出,本算法基于空间换时间的思想,在处理大量窗口重叠和大量精灵出现在屏幕中有明显的优势。当然如果重叠程度不高,本算法的效率反而没有简单处理高效。因此需要酌情使用,但此算法提供一种较为有效处理复杂屏幕信息的方法。
以上所述并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种基于活性边表和辅助数组的逆画家消隐算法,其特征在于,其包含以下步骤:
S1初始化工作,初始化一个屏幕像素标志辅助数组和一个扫描线辅助数组,初始化场景中所有精灵位置,并以其深度坐标填充到活性边表中,将每个精灵的深度信息填充到活性边表中;
S2若检测到某一精灵发生深度改变事件时,更新活性边表,无此事件全部不更新边表,处理完当前帧内所有逻辑事件后,精灵深度活性边表及为当前精灵位置的最新状态;
S3采用逆画家算法,从最近视角扫描精灵,刷新到屏幕中,即按活性边表深度由浅到深的顺序遍历活性边表中每个精灵节点,将其绘制到屏幕中,并且在绘制每个精灵时同步更新辅助数组;
S4当活性边表中所有节点遍历完毕后,当前帧中图像绘制结束。
2.根据权利要求1所述的基于活性边表和辅助数组的逆画家消隐算法,其特征在于,所述基于活性边表和辅助数组的逆画家消隐算法是处理大量图形图像数据的消隐运算。
3.根据权利要求1所述的基于活性边表和辅助数组的逆画家消隐算法,其特征在于,所述基于活性边表和辅助数组的逆画家消隐算法应用到对图形图像运行有较高要求的程序中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101574466A CN103426197A (zh) | 2012-05-17 | 2012-05-17 | 一种基于活性边表和辅助数组的逆画家消隐算法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012101574466A CN103426197A (zh) | 2012-05-17 | 2012-05-17 | 一种基于活性边表和辅助数组的逆画家消隐算法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103426197A true CN103426197A (zh) | 2013-12-04 |
Family
ID=49650886
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012101574466A Pending CN103426197A (zh) | 2012-05-17 | 2012-05-17 | 一种基于活性边表和辅助数组的逆画家消隐算法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103426197A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105719331A (zh) * | 2016-01-15 | 2016-06-29 | 网易(杭州)网络有限公司 | 精灵绘制方法、装置及游戏系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5850232A (en) * | 1996-04-25 | 1998-12-15 | Microsoft Corporation | Method and system for flipping images in a window using overlays |
CN101213540A (zh) * | 2005-07-01 | 2008-07-02 | 微软公司 | 在交互式媒体环境中呈现和合成多个应用程序 |
CN100501662C (zh) * | 2002-09-04 | 2009-06-17 | 索尼株式会社 | 屏幕显示处理装置和屏幕显示处理方法 |
-
2012
- 2012-05-17 CN CN2012101574466A patent/CN103426197A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5850232A (en) * | 1996-04-25 | 1998-12-15 | Microsoft Corporation | Method and system for flipping images in a window using overlays |
CN100501662C (zh) * | 2002-09-04 | 2009-06-17 | 索尼株式会社 | 屏幕显示处理装置和屏幕显示处理方法 |
CN101213540A (zh) * | 2005-07-01 | 2008-07-02 | 微软公司 | 在交互式媒体环境中呈现和合成多个应用程序 |
Non-Patent Citations (1)
Title |
---|
生滨 等: "z缓冲区消隐算法的改进", 《计算机工程与应用》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105719331A (zh) * | 2016-01-15 | 2016-06-29 | 网易(杭州)网络有限公司 | 精灵绘制方法、装置及游戏系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8352879B2 (en) | Method for swapping display contents between multiple screens | |
CN111986159B (zh) | 太阳能电池片的电极缺陷检测方法、设备及存储介质 | |
CN102810043A (zh) | 一种移动终端天气信息显示的方法、系统及信息终端 | |
CN112927147B (zh) | 显示模组的显示数据修正方法及装置、计算机设备及介质 | |
WO2016133730A1 (en) | Systems and methods for reducing memory bandwidth using low quality tiles | |
US9529463B1 (en) | Method and device for reducing latency for rendering and displaying stylus strokes | |
WO2018000372A1 (zh) | 画面显示的方法和终端 | |
US8984424B2 (en) | Layout of user interface elements | |
CN111078035A (zh) | 一种基于HTML5 Canvas的绘图方法 | |
CN112596843A (zh) | 图像处理方法、装置、电子设备及计算机可读存储介质 | |
US20130300763A1 (en) | Rendering Changed Portions of Composited Images | |
CN103020888A (zh) | 图像平移更新显示方法和系统 | |
CN113126862A (zh) | 截屏方法、装置、电子设备以及可读存储介质 | |
JP5282092B2 (ja) | 二次元ベクター画像のマルチサンプルレンダリング | |
CN103631824B (zh) | 一种网页显示方法及装置 | |
US6914608B2 (en) | Screen display processing apparatus, screen display processing method and computer program | |
CN110765384A (zh) | 客户端的分辨率适配方法、存储介质及终端 | |
CN101833744A (zh) | 高效绘制图形的方法及装置 | |
CN106774846A (zh) | 交互投影方法及装置 | |
CN112035035B (zh) | 一种可擦除顶层局部区域笔画的橡皮擦实现方法及系统 | |
CN103426197A (zh) | 一种基于活性边表和辅助数组的逆画家消隐算法 | |
CN107194952B (zh) | 一种面向屏幕视频编码的屏幕滚动检测方法 | |
CN102402362A (zh) | 提高电子墨水屏输入速度的方法 | |
CN115079869B (zh) | 一种电子白板的渲染方法及装置 | |
CN112465931B (zh) | 图像文本抹除方法、相关设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20131204 |
|
WD01 | Invention patent application deemed withdrawn after publication |