一种平面剪裁中GPU几何图元起始标记管理方法与流程

文档序号:20909559发布日期:2020-05-29 12:57阅读:140来源:国知局
一种平面剪裁中GPU几何图元起始标记管理方法与流程

本发明属于计算机图形处理领域,具体涉及一种平面剪裁中gpu几何图元起始标记管理方法。



背景技术:

gpu中涉及十种应用级几何图元,分别为点、线、线带、线环、三角形、三角形带、三角形扇、四边形、四边形带以及多边形。在对这十种几何图元进行几何处理阶段,需要经过图元装配、平面剪裁、三维剪裁、视窗变化、背面消隐及光栅化等过程。

在图元装配过程中进行顶点到各种图元类型组装时,需要对每种图元中的起始顶点进行标记。在平面剪裁时,需要根据图元顶点与平面的关系进行裁剪。而在光栅化阶段,除去点图元以外的其它九种图元,都有可能要进行直线的点画操作。

然而,在平面裁剪时,裁剪会导致每种图元的起始标记发生变化,例如图元顶点起始标记的丢失、变更。而图元起始标记的变化会使得在光栅化阶段进行直线点画操作时图元内部线段不连续,以及不同图元间点画不独立。



技术实现要素:

为了解决现有技术中存在的上述问题,本发明提供了一种平面剪裁中gpu几何图元起始标记管理方法。本发明要解决的技术问题通过以下技术方案实现:

本发明实施例提供了一种平面剪裁中gpu几何图元起始标记管理方法,包括步骤:

根据几何图元中第一图元顶点的第一起始标记设置第一裁剪标记;

根据平面裁剪时若干所述第一图元顶点形成的基本图元与裁剪平面的相交关系判断所述基本图元中每条第一线段与所述裁剪平面的关系;

根据每条所述第一线段与所述裁剪平面的关系更新所述第一裁剪标记为第二裁剪标记或保留所述第一裁剪标记;

判断所述基本图元中所有所述第一线段是否均处理完成,若是,则根据所述第二裁剪标记设置裁剪所述基本图元后得到的几何图元中图元顶点的起始标记信息,若否,则继续判断所述基本图元中每条所述第一线段与所述裁剪平面的关系。

在本发明的一个实施例中,根据几何图元中第一图元顶点的第一起始标记设置第一裁剪标记,包括:

获取所述第一图元顶点的图元顶点包,并记录所述第一图元顶点的数量;

检测所述图元顶点包中的所述第一起始标记和第二起始标记;

根据所述第一起始标记设置所述第一裁剪标记。

在本发明的一个实施例中,根据所述第一起始标记设置第一裁剪标记之后,还包括:

判断所述第一图元顶点的数量与所述基本图元的顶点数量的关系:

若所述第一图元顶点的数量小于所述基本图元的顶点数量,则继续获取所述第一图元顶点的图元顶点包;

若第一图元顶点的数量等于所述基本图元的顶点数量,则判断平面裁剪时若干所述第一图元顶点形成的基本图元与裁剪平面的关系。

在本发明的一个实施例中,根据平面裁剪时若干所述第一图元顶点形成的基本图元与裁剪平面的相交关系判断所述基本图元中每条第一线段与所述裁剪平面的关系之前,还包括:

依次判断每个所述第一图元顶点与所述裁剪平面的关系;

将所述基本图元对应的所有所述第一图元顶点与所述裁剪平面的关系进行组合判断,得到所述基本图元与所述裁剪平面的关系。

在本发明的一个实施例中,根据每条所述第一线段与所述裁剪平面的关系更新所述第一裁剪标记为第二裁剪标记或保留所述第一裁剪标记,包括:

若所述第一线段与所述裁剪平面的关系为保留,则保留所述第一裁剪标记;

若所述第一线段与所述裁剪平面的关系为丢弃且所述第一线段的所述图元顶点包中存在所述第一起始标记时,则将所述第一裁剪标记更新为所述第二裁剪标记;

若所述第一线段与所述裁剪平面的关系为相交且所述第一线段的所述图元顶点包中存在所述第一起始标记时,则更新所述第一裁剪标记为所述第二裁剪标记,并且当交点为裁剪后第二线段的起点时将所述第一线段的起点包头信息赋值给所述交点,当交点为所述第二线段的终点时将所述第一线段的终点包头信息赋值给所述交点。

在本发明的一个实施例中,根据所述第二裁剪标记设置裁剪所述基本图元后得到的几何图元中第二图元顶点的起始标记信息,包括:

根据所述第二裁剪标记,将裁剪后的几何图元中首个第二图元顶点的起始标记信息设为第一起始标记,并将所述第二裁剪标记更新为第一裁剪标记。

在本发明的一个实施例中,判断平面裁剪时若干所述第一图元顶点形成的基本图元与裁剪平面的关系之后,还包括:

根据所述基本图元与所述裁剪平面的丢弃关系且所述基本图元的图元顶点包中存在所述第一起始标记,将所述第一裁剪标记更新为第二裁剪标记,并根据所述第二裁剪标记返回步骤根据几何图元中第一图元顶点的第一起始标记设置第一裁剪标记。

在本发明的一个实施例中,判断平面裁剪时若干所述第一图元顶点形成的基本图元与裁剪平面的关系之后,还包括:

根据所述基本图元与所述裁剪平面的保留关系,保留所述第一裁剪标记并根据所述第一裁剪标记输出所述基本图元。

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

本发明的起始标记管理方法通过设置裁剪标记,并根据平面裁剪过程中基本图元与裁剪平面的关系实时更新裁剪标记,进而在平面裁剪后对图元顶点的起始标记进行更新,解决了因平面裁剪造成的图元顶点起始标记的丢失、变更等问题,进而使得光栅化阶段进行直线点画操作时图元内部线段的连续性,以及不同图元间点画的独立性。

附图说明

图1为本发明实施例提供的一种平面剪裁中gpu几何图元起始标记管理方法的流程示意图;

图2为本发明实施例提供的另一种平面剪裁中gpu几何图元起始标记管理方法的流程示意图;

图3为本发明实施例提供的一种图元顶点与裁剪平面关系的示意图;

图4为本发明实施例提供的一种基本图元与裁剪平面关系的示意图。

具体实施方式

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

实施例一

请参见图1和图2,图1为本发明实施例提供的一种平面剪裁中gpu几何图元起始标记管理方法的流程示意图,图2为本发明实施例提供的另一种平面剪裁中gpu几何图元起始标记管理方法的流程示意图。该平面剪裁中gpu几何图元起始标记管理方法包括步骤:

s1、根据几何图元中第一图元顶点的第一起始标记设置第一裁剪标记。

该步骤具体包括以下步骤:

s11、变量初始化。

具体地,设置currentnum用来记录接收的第一图元顶点的数量,并且初始化currentnum为0。

s12、获取第一图元顶点的图元顶点包,并记录第一图元顶点的数量。

具体地,一个图元顶点对应一个图元顶点包,当读取一个第一图元顶点包,currentnum值加1,也就是当前第一图元顶点的个数加1,即currentnum++。

s13、检测图元顶点包中的第一起始标记和第二起始标记,即解析包头中的起始标记信息psflag。

具体地,每个图元顶点包均包括该图元顶点的起始标记信息、坐标信息、颜色信息、纹理坐标信息和边界标记信息等;其中,起始标记信息是指该图元顶点是否为几何图元的起点。本实施例中,起始标记信息包括第一起始标记和第二起始标记,第一起始标记表示图元顶点为几何图元的起点,第二起始标记表示图元顶点不是几何图元的起点;例如起始标记信息用psflag表示,第一起始标记可以表示为psflag=1,第二起始标记可以表示为psflag=0。以一条线段为例,线段的一个点为起点,则psflag=1,线段的另一个点为终点,则psflag=0。

s14、根据第一起始标记设置第一裁剪标记。

裁剪标记信息是指在平面裁剪中,该几何图元的起始顶点是否被裁剪掉。若完全保留该几何图元,则用第一裁剪标记表示;若该几何图元被完全裁剪掉或者部分被裁剪掉,且该几何图元中包含起始顶点(即该几何图元的图元顶点包中存在第一起始标记)时,则用第二裁剪标记表示;若该几何图元被完全裁剪掉或者部分被裁剪掉,但是该几何图元中不包含起始顶点,此时不需要对裁剪标记信息进行设置。本实施例中,裁剪标记信息用psflagclipped表示,第一裁剪标记用psflagclipped=0表示,第二裁剪标记用psflagclipped=1表示。以一条线段为例,在平面裁剪中,若该线段被完全保留,则psflagclipped=0,若该线段被部分裁剪掉或者完全裁剪掉且psflag=1时,则psflagclipped=1。

需要说明的是,裁剪标记信息psflagclipped是在平面裁剪过程中引入的变量,表示当前几何图元中的起始顶点是否被裁剪掉。

在一个具体实施例中,当获取得到第一图元顶点对应的图元顶点包后,解析该图元顶点包,当检测到图元顶点包中psflag=1时,表明该图元顶点为起点,此时,设置psflagclipped=0;当检测到该图元顶点包中psflag=0时,表明该图元顶点不是起点,此时无需设置psflagclipped,直接进行下一步。

s15、根据第二起始标记判断第一图元顶点的数量与基本图元的顶点数量的关系。该步骤是为了判断当前基本图元是否接收完成。

该步骤可以在根据第一起始标记设置第一裁剪标记之后进行,也可以在检测到起始标记信息为第二起始标记后进行。也就是说,当psflag=1时,在设置psflagclipped=0之后,直接进入该步骤;当psflag=0时,直接进入该步骤。

具体地,几何图元包括点、线、线带、线环、三角形、三角形带、三角形扇、四边形、四边形带以及多边形这十种图元,而基本图元包括点、线、三角形这三种几何图元。

由于在平面裁剪时是以将几何图元划分为基本图元进行裁剪的,例如,将线带划分为线段进行裁剪,将三角形带划分为三角形进行裁剪,将四边形带划分为三角形进行裁剪,因此,在接收图元顶点时,需要将该几何图元所对应的一个基本图元的全部图元顶点均接收,以形成一个完整的基本图元。若第一图元顶点的数量小于基本图元对应的图元顶点数量,表明所获取的第一图元顶点还不能形成一个基本图元,则继续获取第一图元顶点;若第一图元顶点的数量等于基本图元对应的图元顶点数量,表明所获取的第一图元顶点能形成一个基本图元,则进入下一步骤。

例如,将四边形带划分为若干三角形进行裁剪,则在接收图元顶点命令时,需接收至少三个图元顶点,使得其中三个图元顶点能形成一个完整的三角形。如果只接收到两个图元顶点,表明不能形成一个三角形,则继续获取下一个图元顶点,如果接收到三个能形成三角形的图元顶点,则进入下一步骤。

在一个具体实施例中,判断currentnum值与当前所处理的基本图元对应的图元顶点数量之间的关系,若currentnum小于当前所处理的基本图元对应的图元顶点数量,则返回步骤继续s12,继续获取第一图元顶点;若currentnum等于当前所处理的基本图元对应的图元顶点数量,则转到下一步。

s2、判断平面裁剪时若干第一图元顶点形成的基本图元与裁剪平面的关系。

s21、依次判断每个第一图元顶点与裁剪平面的关系。

具体地,将每个第一图元顶点坐标依次代入裁剪平面的平面方程式中,得到该第一图元顶点与裁剪平面关系。例如,请参见图3,图3为本发明实施例提供的一种图元顶点与裁剪平面关系的示意图;图3中,图元顶点pt的坐标为(x,y,z,w),其中,x、y、z分别为三维坐标,w为透视化因子;若该点在平面plana内,则ax+by+cz+dw=0;若该点在平面plana上即点p1,则ax+by+cz+dw>0;若该点在平面plana下即点p2,则ax+by+cz+dw<0。

s22、将基本图元对应的所有第一图元顶点与裁剪平面的关系进行组合判断,得到基本图元与所述裁剪平面的关系。

具体地,组合判断是指:在一个基本图元中,首先将两个第一图元顶点组合,判断两个第一图元顶点所形成的线段与裁剪平面的关系,然后,将该基本图元所对应的线段进行组合,判断该基本图元与裁剪平面的关系。进一步地,基本图元与裁剪平面的关系包括三种:丢弃、保留、相交。其中,丢弃是指完全丢弃,表明该基本图元完全被裁剪掉;保留是指完全保留,表明该基本图元没有被裁剪;相交是指该基本图元一部分被裁剪掉,一部分保留。

请参见图4,图4为本发明实施例提供的一种基本图元与裁剪平面关系的示意图。以三个第一图元顶点形成的基本图元为三角形、裁剪保留裁剪平面plana以上的图元顶点为例,若三角形的三个顶点均在裁剪平面之上即t1,或者均在裁剪平面内即t2,则该三角形与裁剪平面的关系为完全保留;若三角形的三个顶点均在裁剪平面之下即t3,则该三角形与裁剪平面的关系为完全丢弃;若三角形的两个顶点在裁剪平面之上、一个顶点在裁剪平面之下即t4,或者,一个顶点在裁剪平面之上、两个顶点在裁剪平面之下,则该三角形与裁剪平面的关系为相交。而对于点图元,若点图元在裁剪平面上或者在裁剪平面之上,则点图元与裁剪平面的关系为保留,此时,直接输出该点图元;若点图元在裁剪平面之下,则点图元与裁剪平面的关系为丢弃,此时,将该点图元进行丢弃。

s3、根据基本图元与所述裁剪平面的丢弃关系,将第一裁剪标记更新为第二裁剪标记,并根据第二裁剪标记返回步骤根据几何图元中第一图元顶点的第一起始标记设置第一裁剪标记。

若基本图元与裁剪平面的关系为丢弃,表明该基本图元完全被裁剪掉,此时,若该基本图元的图元顶点包中包含第一起始标记,则将第一裁剪标记更新为第二裁剪标记,然后返回步骤s1,继续获取下一个图元顶点;若此时该基本图元的裁剪标记为第二裁剪标记,则根据第二裁剪标记返回步骤s1,继续获取下一个图元顶点。在一个具体实施例中,基本图元与裁剪平面的关系为丢弃且psflag=1时,若当前psflagclipped值为0,则修改psflagclipped值为1,然后返回步骤s1直接获取下一个图元顶点,若当前psflagclipped值为1,则直接返回步骤s1直接获取下一个图元顶点。

s4、根据基本图元与所述裁剪平面的保留关系,保留第一裁剪标记并根据第一裁剪标记输出所述基本图元。

基本图元与裁剪平面的关系为保留,表明该基本图元完全保留,则对第一裁剪标记不作更改,然后根据第一裁剪标记进入基本图元输出控制的步骤,输出基本图元。在一个具体实施例中,基本图元与裁剪平面的关系为保留,则保持psflagclipped值为0,然后进入基本图元输出控制的步骤。

s5、根据基本图元与裁剪平面的相交关系判断基本图元中每条第一线段与裁剪平面的关系,并根据每条第一线段与所述裁剪平面的关系更新第一裁剪标记为第二裁剪标记或保留第一裁剪标记,根据所述第二裁剪标记设置裁剪所述基本图元后得到的几何图元中第二图元顶点的起始标记信息。

s51、根据基本图元与裁剪平面的相交关系判断基本图元中每条第一线段与裁剪平面的关系,并根据每条第一线段与所述裁剪平面的关系更新第一裁剪标记为第二裁剪标记或保留第一裁剪标记。

基本图元与裁剪平面的关系为相交,则依次判断该基本图元中每条第一线段与裁剪平面的关系,然后根据每条第一线段与裁剪平面的关系对第一裁剪标记进行更新或者保留。

具体地,基本图元与裁剪平面的关系为相交表明该基本图元部分被裁剪掉、部分保留,这种情况下基本图元不包含点图元,只有直线和三角形这两种图元。对直线和三角形这两种图元,均以线段为单位进行裁剪;也就是说,对直线而言,判断该直线所处的线段与裁剪平面的关系,对三角形而言,判断三角形中的三条线段与裁剪平面的关系。

进一步地,若第一线段与裁剪平面的关系为保留,表明该线段被完全保留,则不更新第一裁剪标记,然后判断当前基本图元是否处理完成(基本图元中所有第一线段是否均处理完成),若是,则进入下一步骤进行基本图元输出控制,输出基本图元,若否,则继续判断基本图元中下一条第一线段与裁剪平面的关系,对下一条第一线段进行裁剪并更新或保留第一裁剪标记。

在一个具体实施例中,若第一线段与裁剪平面的关系为保留,保持psflagclipped值为0,然后判断当前基本图元是否处理完成。

若第一线段与裁剪平面的关系为丢弃,表明该线段被完全裁剪掉,此时,当该第一线段的图元顶点包中存在第一起始标记时,则将第一裁剪标记更新为第二裁剪标记,然后判断当前基本图元是否处理完成,若是,则进入下一步骤进行基本图元输出控制,输出基本图元,若否,则继续判断基本图元中下一条第一线段与裁剪平面的关系,对下一条第一线段进行裁剪并更新或保留第一裁剪标记。

在一个具体实施例中,第一线段与裁剪平面的关系为丢弃且psflag=1时,将psflagclipped=0更新为psflagclipped=1,然后判断当前基本图元是否处理完成。

若第一线段与裁剪平面的关系为相交,表明该线段部分被裁剪掉、部分保留下来,此时,当该第一线段的图元顶点包中存在第一起始标记时,则更新第一裁剪标记为第二裁剪标记,并按照相交的关系对第一线段进行裁剪得到第二线段,然后计算交点的坐标。具体地,当交点为第二线段的起点时,将当前第一线段的原始起点包头信息(该起点包头信息中,其起始标记信息为第一起始标记,即psflag=1)赋值给该交点;当交点为第二线段的终点时,将当前第一线段的原始终点包头信息赋值该交点。之后,对交点组装,与原基本图元中保留的图元顶点共同组装形成新的几何图元,该几何图元即为对基本图元进行裁剪得到的图元。接着,判断当前基本图元是否处理完成,若是,则进入下一步骤进行基本图元输出控制,输出基本图元,若否,则继续判断基本图元中下一条第一线段与裁剪平面的关系,对下一条第一线段进行裁剪并更新或保留第一裁剪标记。

在一个具体实施例中,第一线段与裁剪平面的关系为相交且psflag=1时,则更新psflagclipped=0为psflagclipped=1,然后进行后续的步骤。

s52、根据所述第二裁剪标记设置裁剪所述基本图元后得到的几何图元中第二图元顶点的起始标记信息。

具体地,当基本图元与裁剪平面为相交时,基本图元经过裁剪,得到了裁剪后的几何图元,裁剪后的几何图元具有多个第二图元顶点,将多个第二图元顶点按照起点至终点的顺序依次输出。在输出时,检测裁剪标记信息,当检测到第二裁剪标记时,则表明该几何图元为基本图元的起始顶点被裁剪后得到的,该几何图元的第二图元顶点输出阵列的第一个顶点为起点,因此,将输出阵列中的第一个第二图元顶点的起始标记信息设为第一起始标记,并将第二裁剪标记更新为第一裁剪标记。然后输出当前输出阵列中的所有第二图元顶点。

在一个具体实施例中,在第二图元顶点输出时,需根据基本图元的起始顶点是否被裁剪掉(即根据psflagclipped的值)来更新各个第二图元顶点的起始标记;若psflagclipped值为1,表明基本图元的起始顶点已被裁剪掉,则将当前第二图元顶点输出阵列中的第一个起始标记信息置为1(即psflag为1),输出阵列中的其他顶点起始标记不做修改,同时将该几何图元中所有的起始顶点的裁剪标记信息更新为0,即设置该几何图元中所有的起始顶点的psflagclipped值为0。然后输出当前输出队列中的所有第二图元顶点。例如,一个三角形被裁减后得到一个四边形,则在该四边形的顶点输出时,将输出的第一个顶点的psflag设为1,其他三个顶点不做修改,同时将四个顶点的psflagclipped值设为0。

在一个具体实施例中,基本图元与裁剪平面的保留、丢弃、相交的判断顺序可以为任意的,即可以先判断基本图元是否保留,再判断是否丢弃关系,最后判断是否相交;也可以先判断基本图元是否丢弃,再判断是否保留,最后判断是否相交;也可以先判断基本图元是否保留,再判断是否相交,最后判断是否丢弃;本实施例不作进一步限制。

请参见图2,图2中提供平了一种合理的基本图元与裁剪平面的关系的判断顺序。当然,本发明实施例中的基本图元与裁剪平面的保留、丢弃、相交的判断顺序并不限于图2中所示的顺序。

图2中,首先判断基本图元是否被完全裁剪掉,若是,则基本图元与裁剪平面的关系为丢弃,此时,若该基本图元中包含起始顶点,则根据丢弃的关系设置psflagclipped值,并进行后续操作;若否,则判断基本图元是否被完全保留,若基本图元被完全保留,进入输出当前基本图元的步骤;若基本图元未被完全保留,则基本图元部分被保留、部分被裁剪掉,即基本图元与裁剪平面的关系为相交,此时,以基本图元中的第一线段为单位进行裁剪。

以基本图元中的第一线段为单位进行裁剪时,首先判断该第一线段是否完全保留,若是,则判断当前基本图元是否处理完成,若否,则判断该第一线段是否完全丢弃;若第一线段完全丢弃,则判断当前基本图元是否处理完成,若第一线段未被完全丢弃,则第一线段与裁剪平面为相交,则判断交点是否为新的起点,若交点为新的起点(裁剪后得到的第二线段的起点),则将当前第一线段的原始起点包头信息赋值该交点,若交点不为新的起点,表明交点为新的终点,则将当前第一线段的原始终点包头信息赋值该交点。给交点赋值后,判断当前基本图元是否处理完成,若处理完成,则进入步骤s3,若未处理完成,则继续处理下一条线段,即继续对下一条第一线段进行裁剪并更新或保留第一裁剪标记。

本实施例的起始标记管理方法通过设置裁剪标记,并根据平面裁剪过程中基本图元与裁剪平面的关系实时更新裁剪标记,进而在平面裁剪后对图元顶点的起始标记进行更新,实现了对gpu几何图元中顶点起始标记的管理,解决了因平面裁剪造成的图元顶点起始标记的丢失、变更等问题,进而使得光栅化阶段进行直线点画操作时图元内部线段的连续性,以及不同图元间点画的独立性。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

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