一种基于UML的三角形光栅化扫描结构及光栅化扫描方法与流程

文档序号:17332486发布日期:2019-04-05 22:10阅读:209来源:国知局
一种基于UML的三角形光栅化扫描结构及光栅化扫描方法与流程

本发明涉及计算机图形扫描技术领域,具体涉及一种基于uml的三角形光栅化扫描结构及光栅化扫描方法。



背景技术:

随着图形化应用的不断增加,早期单靠cpu(中央处理器,centralprocessingunit)进行图形绘制的解决方案已经难以满足技术增长的图形处理需求,因而图形处理器(graphicprocessingunit,gpu)应运而生。从1999年nvidia发布第一款gpu产品至今,gpu技术的发展主要经历了固定功能流水线阶段、分离染色器架构阶段和统一染色器架构阶段,其图形处理能力不断提升,应用领域也从最初的图形绘制逐步扩展到通用计算领域。gpu具有流水线高速、并行的特征和灵活的可编程能力,为图形处理和通用并行计算提供了良好的运行平台。

目前,我国gpu芯片研制能力薄弱,各领域显示控制系统中大量采用国外进口的商用gpu芯片。尤其是在军用领域中,国外进口商用gpu芯片存在安全性、可靠性、保障性等方面的隐患,无法满足军用环境的需求;而且,出于政治、军事、经济等原因,国外对我国实行技术“封锁”和产品“垄断”,难以获得gpu芯片的底层技术资料,如寄存器资料、详细内部微架构、核心软件源码等,导致gpu功能、性能无法充分发挥,且移植性较差;上述问题严重制约了我国显示系统的独立研制和自主发展,突破图形处理器关键技术、研制图形处理器芯片迫在眉睫。

目前,用于gpu三角形光栅化扫描的结构是通过zigzag算法实现的,但是利用zigzag算法所实现的用于gpu三角形光栅化扫描的结构,y轴的步进过于依赖x轴双向扫描的结束位置,增加了三角形光栅化的复杂度,影响三角形光栅化扫描结构的扫描性能和速度。



技术实现要素:

为了解决现有技术中存在的上述问题,本发明提供了一种基于uml的三角形光栅化扫描结构及光栅化扫描方法。

本发明的一个实施例提供了一种基于uml的三角形光栅化扫描结构,包括:

数据获取模块,用于获取三角形数据信息;

三角形扫描模块,通过第一连接口连接所述数据获取模块,用于根据所述三角形数据信息对所述三角形进行扫描,并根据扫描结果获取有效坐标数据;

三角形光栅化模块,通过第二连接口连接所述三角形扫描模块,用于根据所述有效坐标数据对扫描后的三角形进行光栅化。

在本发明的一个实施例中,所述三角形扫描模块包括:

初始化单元,通过第一连接口连接所述数据获取单元,用于根据所述三角形数据信息获取x轴起始坐标、y轴检测范围;

y轴步进单元,连接所述初始化单元,用于对x轴进行使能标识,并根据所述y轴检测范围使检测元素沿第一方向进行步进;

若干x轴扫描单元,分别连接所述y轴步进单元,用于根据所述使能标识和所述x轴起始坐标,使步进后的检测元素沿x轴进行扫描。

在本发明的一个实施例中,所述第二连接口包括若干子连接口,每个所述x轴扫描单元通过对应的一个子连接口与所述三角形光栅化模块连接。

在本发明的一个实施例中,所述x轴扫描单元包括:

第二方向扫描单元,通过与门连接所述y轴步进单元,用于根据对所述使能标识和所述x轴起始坐标,使步进后的检测元素沿第二方向进行扫描;

第三方向扫描单元,通过与门连接所述y轴步进单元,用于根据对所述使能标识和所述x轴起始坐标,使步进后的检测元素沿第三方向进行扫描。

在本发明的一个实施例中,所述第二方向扫描单元还用于通过与门向所述y轴步进单元提供所述检测元素的第一完成标记。

在本发明的一个实施例中,所述第三方向扫描单元还用于通过与门向所述y轴步进单元提供所述检测元素的第二完成标记。

在本发明的一个实施例中,所述数据获取模块为fifo。

在本发明还提供一种基于uml的三角形光栅化扫描方法,包括:

获取三角形数据信息;

根据所述三角形数据信息对所述三角形进行扫描,并根据扫描结果获取有效坐标数据;

根据所述有效坐标数据对扫描后的三角形进行光栅化。

在本发明的一个实施例中,根据所述三角形数据信息对所述三角形进行扫描,包括:

根据所述三角形数据信息获取x轴起始坐标、y轴检测范围;

对x轴进行使能标识,并根据所述y轴检测范围使检测元素沿第一方向进行步进;

根据所述使能标识和所述x轴起始坐标,使步进后的检测元素沿x轴进行扫描。

在本发明的一个实施例中,根据所述使能标识和所述x轴起始坐标,使控制步进后的检测元素沿x轴进行扫描,包括:

根据对所述使能标识和所述x轴起始坐标,使步进后的检测元素沿第二方向进行扫描;

根据对所述使能标识和所述x轴起始坐标,使控制步进后的检测元素沿第三方向进行扫描。

与现有技术相比,本发明的有益效果:

本发明提供的基于uml的三角形光栅化扫描结构,集成有数据获取单元、三角形扫描模块和三角形光栅化模块,数据获取单元、三角形扫描模块和三角形光栅化模块之间的数据传输通过uml(unifiedmodelinglanguage,统一建模语言)的端口实现,使得x轴扫描与y轴步进能够并行执行,降低了三角形光栅化的复杂度,改善了三角形光栅化扫描结构的扫描性能和速度。

附图说明

图1为本发明实施例提供的一种基于uml的三角形光栅化扫描结构的示意图;

图2为本发明实施例提供的一种三角形的结构示意图;

图3为本发明实施例提供的另一种基于uml的三角形光栅化扫描结构的示意图;

图4为本发明实施例提供的又一种基于uml的三角形光栅化扫描结构的示意图;

图5为本发明实施例提供的基于uml的三角形光栅化扫描方法的示意图。

具体实施方式

下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。

实施例一

请参见图1,图1为本发明实施例提供的一种基于uml的三角形光栅化扫描结构的示意图。本发明实施例提供的一种基于uml的三角形光栅化扫描结构,该光栅化扫描结构包括:

数据获取模块,用于获取三角形数据信息。

具体地,请参见图2,三角形数据信息为三角形三个点的坐标,可以分别记为v0(x0,y0)、v1(x1,y1)和v2(x2,y2),其中,用于光栅化扫描的三角形可以为锐角三角形、直角三角形和钝角三角形。

优选地,数据获取单元为fifo(firstinputfirstoutput,先进先出存储器),fifo可以实现对三角形数据信息进行缓存,并且能够对三角形数据信息进行写数据和读数据操作,从而将三角形数据信息传输至初始化单元。

三角形扫描模块,通过第一连接口连接数据获取模块,用于根据三角形数据信息对三角形进行扫描,并根据扫描结果获取有效坐标数据;

具体地,请参见图3,第一连接口用于实现数据获取模块和三角形扫描模块之间的通信,第一连接口包括第一接口和第一端口,其中,第一接口为通过uml设计的triangle2fifovertexif,第一端口为通过uml设计的triangle2fifovertexport,在数据获取单元可以通过get_fifo_busy_status()函数获取数据获取单元的当前状态,之后通过read_fifo_vertex_data()读取数据获取单元内的三角形数据信息,通过triangle2fifovertexif和triangle2fifovertexport向三角形扫描模块发送三角形数据信息,通过triangle2fifovertexif可以使数据获取模块成为数据接受者,通过triangle2fifovertexport可以使三角形扫描模块成为主动发起者,即通过triangle2fifovertexif和triangle2fifovertexport可以实现三角形扫描模块主动向数据获取模块获取三角形数据信息。

进一步地,请参见图4,三角形扫描模块包括初始化单元、y轴步进单元和若干x轴扫描单元:

初始化单元,通过第一连接口连接数据获取单元,用于根据三角形数据信息获取x轴起始坐标、y轴检测范围;

其中,初始化单元通过第一连接口主动向数据获取模块获取三角形数据信息,以使初始化单元根据三角形数据信息获取x轴起始坐标、y轴检测范围,通过第一连接口实现初始化单元主动向数据获取模块获取三角形数据信息的作用,从而简化了传递过程,提高了三角形数据信息传递的速率。

具体地,初始化单元用于读取三角形数据信息中的有效数据,并对读取的有效数据进行数据初始化操作,从而确定x轴起始坐标和y轴检测范围;

进一步地,将三角形y轴的最小坐标记为ymin,则ymin=(y0,y1,y2),即ymin为y0、y1和y2中的最小值,三角形y轴的最大坐标为ymax,则ymax=(y0,y1,y2),即ymax为y0、y1和y2中的最大值,则y轴检测范围记为[ymin,ymax]。

进一步地,x轴起始坐标(将x轴起始坐标记为x_scan_start)是用于对三角形的x轴进行扫描时的起始坐标,确定三角形光栅化的x轴起始坐标分为以下情况:

情况1,当y0≠y1≠y2,此时若ymin=y0,则x_scan_start=x0,若ymin=y1,则x_scan_start=x1,ymin=y2,则x_scan_start=x2;

情况2,当y0=y1≠y2,此时若ymin=y0=y1,则需要判断x0与x1的大小,若x1>x0,则x_scan_start=x0,若x1<x0,则x_scan_start=x1,若ymin=y2,则x_scan_start=x2;

情况3,当y0≠y1=y2,此时若ymin=y1=y2,则需要判断x1与x2的大小,若x2>x1,则x_scan_start=x1,若x2<x1,则x_scan_start=x2,若ymin=y0,则x_scan_start=x0;

情况4,当y0=y2≠y1,此时若ymin=y0=y2,则需要判断x0与x2的大小,若x2>x0,则x_scan_start=x0,若x2<x0,则x_scan_start=x2,若ymin=y1,则x_scan_start=x1。

x轴起始坐标为检测元素每次在y轴沿第一方向按设定距离步进后,沿x轴扫描的起始坐标开始对三角形进行扫描。

y轴步进单元,连接初始化单元,用于对x轴进行使能标识,并根据y轴检测范围,使检测元素沿第一方向进行步进;

其中,检测元素为像素。

具体地,y轴步进单元能够控制检测元素在y轴检测范围沿第一方向进行步进,y轴步进单元还用于接收x轴扫描单元在y轴检测范围内的某个y坐标下,x轴扫描单元沿x轴的扫描结束时所输出的完成标记信号,当y轴步进单元接收到该完成标记信号后,便会控制检测元素沿第一方向步进设定距离,以对下一个y坐标所对应的x轴进行扫描,直至超出y轴检测范围,则扫描结束。y轴步进单元根据所接收的完成标记信号共同控制若干x轴扫描单元,以使所有的x轴扫描单元能够实现并行执行。y轴步进单元内部设置有寄存器,该寄存器用于标识每一行x轴扫描的使能位(enable),使能位用于判断每一行x轴是否使能,若使能,则x轴扫描单元开始对本行进行扫描,若不使能,则y轴步进单元控制检测元素沿第一方向继续步进,其中,若某一行的x轴的坐标包含有三角形的坐标数据,则说明该x轴使能,若未包含有三角形的坐标数据,则说明该x轴使能。

进一步地,完成标记信号包括第一完成标记和第二完成标记。

优选地,y轴步进的起始坐标设置为ymin,第一方向为y轴正向,即y轴步进单元控制检测元素从ymin开始沿第一方向步进,直至其超出ymax。

优选地,y轴步进单元为y-axisfsm(finitestatemachine,有限状态机)单元,fsm由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。

若干x轴扫描单元,分别连接y轴步进单元,用于根据x轴的使能标识和x轴起始坐标,使步进后的检测元素沿x轴进行扫描。

其中,每个x轴扫描单元均包括一个第二方向扫描单元和一个第三方向扫描单元,每个第二方向扫描单元均通过与门连接y轴步进单元,第二方向扫描单元用于根据对x轴的使能标识和x轴起始坐标,使检测元素沿第二方向进行扫描;每个第三方向扫描单元均通过与门连接所述y轴步进单元,用于根据对x轴的使能标识和x轴起始坐标,使检测元素沿第三方向进行扫描。第二方向扫描单元和一个第三方向扫描单元可以并行执行。在每次沿y轴步进后,x轴扫描单元首先会检测每个x轴是否使能,若使能,则第二方向扫描单元和第三方向扫描单元开始进行扫描,直至扫描结束后,第二方向扫描单元会输出一个第一完成标记至y轴步进单元,第一完成标记表示第二方向扫描单元对应的x轴沿第二方向的扫描结束,第三方向扫描单元会输出一个第二完成标记至y轴步进单元,第二完成标记表示第三方向扫描单元对应的x轴沿第三方向的扫描结束,从而使得y轴步进单元获取每一行x轴扫描的情况。y轴步进单元根据第一完成标记和第二完成标记更新使能位,并重新分配资源至x轴扫描单元,使其继续x轴的扫描,直到y轴步进跳出y轴检测范围,至此三角形光栅化扫描结束。

y轴步进单元向若干x轴扫描单元分配资源,以使若干x轴扫描单元能够并行执行扫描动作,并且每个x轴扫描单元中的第二方向扫描单元和第三方向扫描单元可以实现并行执行扫描动作。同时,通过y轴步进单元对每个x轴扫描单元分配的硬件资源,可以实现检测元素在不同y坐标下沿x轴的扫描,如坐标y1~yn均属于[ymin,ymax],则根据y轴步进单元的控制可以实现坐标y1~yn所对应的x轴的扫描同时进行,从而使得x轴扫描与y轴步能够并行执行,降低了三角形光栅化的复杂度,改善了三角形光栅化扫描结构的扫描性能和速度。

在每一行的x轴扫描数据后,第二方向扫描单元和第三方向扫描单元会输出有效坐标数据,以便于对扫描到的坐标进行存储和记录。其中,有效坐标数据为检测元素部分位于三角形中或全部位于初始化后的三角形所对应的坐标,这种坐标数据即为有效坐标数据。

优选地,第二方向为x轴正向,所述第三方向为x轴负向。

例如,x轴扫描单元的数量为4个。

三角形光栅化模块(ragmentrasterizingprocess),通过第二连接口连接三角形扫描模块,用于根据有效坐标数据对扫描后的三角形进行光栅化。

其中,第二连接口包括若干子连接口,每个x轴扫描单元通过对应的一个子连接口与三角形光栅化模块连接。

具体地,请参见图3,第二连接口用于实现x轴扫描单元和三角形光栅化模块之间的通信,每个子连接口包括一个第二接口和一个第二端口,其中,第二端口为通过uml设计的triangle2rasterzing[n]prot,通过triangle2rasterzing[n]prot可以使三角形扫描模块成为主动发起者,即使得x轴扫描单元主动向三角形光栅化模块传送有效坐标数据信息,第二接口为通过uml设计的triangle2rasterzingif,将triangle2rasterzingif的接口函数为send_rasterzing_fragment_data(),使得三角形光栅化模块成为数据接受者,即通过triangle2rasterzing[n]prot和triangle2rasterzingif将x轴扫描单元获取的有效坐标数据主动传输至三角形光栅化模块。

进一步地,triangle2rasterzing[n]prot中的[n]代表子连接口的排序,如子连接口的数量为4,triangle2rasterzing[4]prot则为第四个子连接口的第二端口,n=1,2,3…,triangle2rasterzing[n]prot包括triangle2rasterzing[1]prot、triangle2rasterzing[2]prot至triangle2rasterzing[n]prot,且每一个第二端口对应一个第一接口。

其中,x轴扫描单元通过第二连接口主动将有效坐标数据传输至三角形光栅化模块,从而使得三角形光栅化模块根据有效坐标数据对三角形进行光栅化,且每个x轴扫描单元之间互相独立,互不干扰,且所有x轴扫描单元的有效坐标数据传输至三角形光栅化模块时不受先后顺序的影响,可以实现有效坐标数据的并行传递,通过第二连接口实现x轴扫描单元主动将有效坐标数据传输至三角形光栅化模块的作用,从而简化了传递过程,提高了三角形数据信息传递的速率。

本实施例的三角形光栅化扫描结构基于uml,uml是一种定义良好、易于表达,功能强大且普遍适用的建模语言。它融入了软件工程领域的新思想,新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持需求分析开始的软件开发全过程。uml提出了一套it专业人员期待多年的统一的标准建模符号。通过使用uml,这些人员能够阅读和交流系统架构和设计规划。

本发明实施例的三角形光栅化扫描结构基于uml,而uml统一了各种方法应对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效的消除了各种建模语言之间不必要的差异。uml实际上是一种通用的建模语言,可以为许多面向对象建模方法的用户广泛使用。

本发明实施例的三角形光栅化扫描结构基于uml,而uml建模能力比其它面向对象建模方法更强,uml不仅适合于一般系统的开发,而且对并行、分布式系统的建模尤为适宜。

本发明实施例提供的基于uml三角形光栅化扫描结构,集成有数据获取单元、三角形扫描模块和三角形光栅化模块,数据获取单元、三角形扫描模块和三角形光栅化模块之间的数据传输通过uml(unifiedmodelinglanguage,统一建模语言)的端口实现,使得x轴扫描与y轴步进能够并行执行,降低了三角形光栅化的复杂度,改善了三角形光栅化扫描结构的扫描性能和速度。

本发明实施例提供的基于uml三角形光栅化扫描结构,实现了三角形光栅化过程中扫描范围的界定以及有效坐标数据的输出,解决zigzag算法三角形扫描过程中x轴扫描与y轴步进不能并行执行的问题。

本发明实施例的y轴步进单元实现了gpu的三角形的光栅化步进,同时能够为x轴扫描单元分配资源,用于第二方向扫描单元和第三方向扫描单元控制检测元素沿x轴的扫描,满足了gpu三角形光栅化扫描的要求,同时提高了gpu三角形光栅化扫描的性能,加快了三角形光栅化扫描的速度。

需要说明的是,本实施例将第一方向设置为y轴正向,同样的按照本实施例的结构将第一方向设置为y轴负向,也可以实现gpu三角形光栅化扫描结构,再次不在赘述,熟悉本领域技术的人员显然可以容易地想到将第一方向设置为y轴负向,从而实现gpu三角形光栅化扫描结构,而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,不脱离本发明范畴所做出的改进和修改都应该在本发明的保护范围之内。

实施例二

请参见图5,图5为本发明实施例提供的基于uml的三角形光栅化扫描方法的示意图。本发明实施例在上述实施例的基础上提供一种基于uml的三角形光栅化扫描方法的示意图,该三角形光栅化扫描方法包括:

步骤一、获取三角形数据信息;

具体地,请参见图2,三角形数据信息为三角形三个点的坐标,可以分别记为v0(x0,y0)、v1(x1,y1)和v2(x2,y2),其中,用于光栅化扫描的三角形可以为锐角三角形、直角三角形和钝角三角形。

进一步地,获取三角形数据信息之后,根据三角形数据信息判断三角形的面积是否为0,若为0,则不对三角形进行扫描,若不为0,则根据三角形数据信息对三角形进行扫描。

步骤二、根据三角形数据信息对三角形进行扫描,并根据扫描结果获取有效坐标数据;

在一个实施例中,根据三角形数据信息获取x轴起始坐标、y轴检测范围;

具体地,将三角形y轴的最小坐标记为ymin,则ymin=(y0,y1,y2),即ymin为y0、y1和y2中的最小值,三角形y轴的最大坐标为ymax,则ymax=(y0,y1,y2),即ymax为y0、y1和y2中的最大值,则y轴检测范围记为[ymin,ymax]。

进一步地,x轴起始坐标(将x轴起始坐标记为x_scan_start)是用于对三角形的x轴进行扫描时的起始坐标,确定三角形光栅化的x轴起始坐标分为以下情况:

情况1,当y0≠y1≠y2,此时若ymin=y0,则x_scan_start=x0,若ymin=y1,则x_scan_start=x1,ymin=y2,则x_scan_start=x2;

情况2,当y0=y1≠y2,此时若ymin=y0=y1,则需要判断x0与x1的大小,若x1>x0,则x_scan_start=x0,若x1<x0,则x_scan_start=x1,若ymin=y2,则x_scan_start=x2;

情况3,当y0≠y1=y2,此时若ymin=y1=y2,则需要判断x1与x2的大小,若x2>x1,则x_scan_start=x1,若x2<x1,则x_scan_start=x2,若ymin=y0,则x_scan_start=x0;

情况4,当y0=y2≠y1,此时若ymin=y0=y2,则需要判断x0与x2的大小,若x2>x0,则x_scan_start=x0,若x2<x0,则x_scan_start=x2,若ymin=y1,则x_scan_start=x1。

x轴起始坐标为检测元素每次在y轴沿第一方向按设定距离步进后,沿x轴扫描的起始坐标开始对三角形进行扫描。

在一个实施例中,对x轴进行使能标识,并根据所述y轴检测范围,使检测元素沿第一方向进行步进;

其中,检测元素可以为片元(stile),也可以为像素。

具体地,首先将y轴步进的起始坐标设置为ymin,标识每一行x轴扫描的使能位(enable),通过使能位判断每一行x轴的是否使能,若使能,则x轴扫描单元开始对本行进行扫描,若不使能,则检测元素沿第一方向步进按设定距离进行步进,其中,若某一行的x轴的坐标包含有三角形的坐标数据,则说明该x轴使能,若未包含有三角形的坐标数据,则说明该x轴使能。

优选地,第一方向为y轴的正向。

优选地,设定距离为一个片元大小或一个像素大小。

在一个实施例中,根据x轴的使能标识和x轴起始坐标控制步进后的检测元素沿x轴的扫描;

具体地,若检测出某一行x轴的使能位为使能时,则需要对该行x轴的坐标进行扫描;

进一步,根据对x轴的使能标识和x轴起始坐标,使步进后的检测元素沿第二方向进行扫描,根据对x轴的使能标识和x轴起始坐标,使步进后的检测元素沿第三方向进行扫描,即检测出某一行x轴的使能位为使能时,则需要对该行x轴的坐标沿第二方向按设定距离进行扫描,在第二方向的扫描结束后,则对该行x轴的坐标沿第三方向按设定距离进行扫描,在完成该行x轴的坐标的扫描后,则检测元素沿第一方向按照设定距离进行步进,进行下一行的x轴的扫描,并判断步进后的y坐标是否处于y轴检测范围,若属于y轴检测范围,则判断该行x轴的使能位,若使能,则按照上述方法对x轴进行扫描,直至超出y轴检测范围,则扫描结束,若不属于y轴检测范围,则结束扫描。

优选地,第二方向为x轴正向,所述第三方向为x轴负向。

本发明实施例提供的基于uml的三角形光栅化扫描方法,其x轴扫描与y轴步进能够并行执行,降低了三角形光栅化的复杂度,改善了三角形光栅化扫描结构的扫描性能和速度。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1