CN101739703A - 用于对三角形进行栅格化的方法和系统 - Google Patents
用于对三角形进行栅格化的方法和系统 Download PDFInfo
- Publication number
- CN101739703A CN101739703A CN200810175480A CN200810175480A CN101739703A CN 101739703 A CN101739703 A CN 101739703A CN 200810175480 A CN200810175480 A CN 200810175480A CN 200810175480 A CN200810175480 A CN 200810175480A CN 101739703 A CN101739703 A CN 101739703A
- Authority
- CN
- China
- Prior art keywords
- mutton
- longest edge
- described leg
- axis
- leg
- 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.)
- Granted
Links
Images
Landscapes
- Image Generation (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了一种用于对三角形进行栅格化的方法及系统。其中,该方法包括:确定需要进行栅格化的三角形的最长边,并构造该三角形的最长边的八方向链码;沿特定方向、以特定步长移动该三角形的最长边,确定该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的起始端点和终止端点,并利用起始端点和终止端点、以及该三角形的最长边的八方向链码获取该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码;以及根据该三角形的最长边的八方向链码、和该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码,描画该三角形的像素。通过本发明,可以提高对三角形进行栅格化的效率。
Description
技术领域
本发明涉及图像图形处理领域,更具体地涉及一种用于对三角形进行栅格化的方法和系统。
背景技术
栅格化是计算机图形学中将图元扫描变换成显示像素的一种技术,是将矢量图形格式表示的图像变换成栅格图像以用于显示器或打印机等的输出的过程。对图元进行栅格化的过程主要包括两个步骤:首先,确定显示平面上哪些像素是由图元覆盖的;其次,将图元的属性(颜色、深度、以及纹理等)赋给每个像素。
三角形具有一些好的属性,比如:凸性质、几何变换之后保持在同一个平面中、容易裁剪、容易转换为二维图像等,所以是三维图形中的一种重要图元。三角形栅格化方法是图元栅格化领域中比较重要的分支。传统的三角形栅格化方法常常需要将三角形分割成上下两个部分,当碰到裁剪时还需要将三角形分割成若干个子三角形。这些条件使得传统的栅格化架构变得非常复杂,增加了实现难度,浪费了软件及硬件资源。
发明内容
鉴于以上所述的问题,本发明提出了一种新颖的用于对三角形进行栅格化的方法和系统,以通过简单的栅格化架构来实现图像的栅格化。
根据本发明实施的用于对三角形进行栅格化的方法,包括以下步骤:确定需要进行栅格化的三角形的最长边,并构造该三角形的最长边的八方向链码;沿特定方向、以特定步长移动该三角形的最长边,确定移动后三角形的最长边与该三角形的另外两边的交点之间的线段的起始端点和终止端点,并利用起始端点和终止端点、以及该三角形的最长边的八方向链码获取该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码;以及根据该三角形的最长边的八方向链码、和该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码,描画该三角形的像素。
根据本发明实施例的用于对三角形进行栅格化的系统,包括:链码构造单元,用于确定需要进行栅格化的三角形的最长边,并构造该三角形的最长边的八方向链码;链码获取单元,用于沿特定方向、以特定步长移动该三角形的最长边,确定移动后三角形的最长边与该三角形的另外两边的交点之间的线段的起始端点和终止端点,并利用起始端点和终止端点、以及该三角形的最长边的八方向链码获取该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码;以及像素描画单元,用于根据该三角形的最长边的八方向链码、和/或该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码,描画该三角形的相应像素。
在本发明中,扫描可以沿着三角形的最长边进行,并且不需要进行三角形分割,所以对三角形进行格栅化的效率很高。
附图说明
图1示出了八方向链码的概念示意图;
图2示出了从起始端点(0,1)到终止端点(10,7)的三角形一条边的链码;
图3示出了根据本发明实施例的主方向的概念示意图;
图4示出了根据本发明实施例的用于对三角形进行栅格化的方法的概括流程图;
图5示出了根据本发明实施例的用于对三角形进行栅格化的方法的详细流程图;
图6示出了根据本发明实施例的最长边在主方向的三角形的示例;
图7示出了根据本发明实施例的最长边不在主方向的三角形的示例;
图8示出了根据本发明实施例的在Y轴的负方向移动三角形的最长边的示例;
图9示出了根据本发明实施例的在X轴的负方向移动三角形的最长边的示例;
图10示出了根据本发明实施例的裁剪出了具有七个顶点的七边形的三角形的示例;
图11示出了根据本发明实施例的裁剪三角形得出具有五个顶点的五边形的示例;
图12示出了根据本发明实施例的移动裁剪得出的五边形的最长边的示例;
图13示出了对从三角形裁剪得出的多边形进行栅格化的过程的详细流程图;以及
图14示出了根据本发明实施例的用于对三角形进行栅格化的系统的框图。
具体实施方式
链码是描述物体边界的一个好工具。给定一个起始像素,链码可以逐步找到物体边界的下一个像素。八方向链码有八个可能的方向,但是每一步只存在一个方向。如果扫描能沿着三角形的最长边进行,并且不需要进行三角形分割,那么三角形的栅格化效率将会很高。
在本发明的实施例中,使用如下的坐标系统:原点在左下方,X轴向右,Y轴向上。图1示出了八方向链码的概念。如图1所示,从起始像素102开始,存在八个可能的方向来寻找物体边界的终止像素104。这八个方向按逆时针方向从0到7进行标记。然而,如果以从左往右或者从下往上的顺序寻找终止像素,则只有链码元素7、0、1、2和3需要用到。图2示出了从起始端点(0,1)到终止端点(10,7)的三角形一条边的链码。在本发明的实施例中,定义主方向为与X轴的交角的绝对值不大于45度的线所在的方向,如图3所示。
图4示出了根据本发明实施例的用于对三角形进行栅格化的方法的概括流程图。如图4所示,用于对三角形进行栅格化的方法大体包括以下步骤:S402,确定需要进行栅格化的三角形的最长边,并构造该三角形的最长边的八方向链码;S404,沿特定方向、以特定步长移动该三角形的最长边,确定该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的起始端点和终止端点,并利用起始端点和终止端点、以及该三角形的最长边的八方向链码获取该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码;以及S406,根据该三角形的最长边的八方向链码、和该移动后三角形的最长边与该三角形的另外两边的交点之间的线段的八方向链码,描画该三角形的像素。
当然,在构造出三角形的最长边的八方向链码之后,也可以先根据三角形的最长边的八方向链码描画三角形的最长边,再获取三角形的最长边与三角形的另外两边的交点之间的线段的八方向链码并描画该线段,接着获取进一步移动后的线段的八方向链码并描画相应线段,直到三角形的最长边移出该三角形为止。
图5示出了根据本发明实施例的用于对三角形进行栅格化的方法的详细流程图。如图5所示,用于对三角形进行栅格化的方法具体包括以下步骤:
S502,通过计算三角形的输入顶点(x0,y0)、(x1,y1)和(x2,y2)之间的伪欧氏距离,寻找三角形的最长边E。该过程可以通过以下程序段实现:
l01=(x1-x0)2+(y1-y0)2,
l02=(x2-x0)2+(y2-y0)2,
l12=(x2-x1)2+(y2-y1)2.
lmax=l01;
if(l02>lmax)lmax=l02;
if(l03>lmax)lmax=l03;
S504,构造三角形的最长边E(Vs,Ve)的链码。其中,Vs(xs,ys)是三角形的最长边的起始顶点,Ve(xe,ye)是三角形的最长边的终止顶点。在三角形的最长边在主方向内的情况下(见图6中的602),设xe大于xs;在三角形的最长边不在主方向内的情况下,(见图7中的702),设ye大于ys。
为了在移动三角形的最长边时,三角形的最长边能够覆盖三角形内所有的像素(见图6中的608,图7中的708),需要对三角形的最长边的链码进行延长(见图6中的604,图7中的704)。当三角形的最长边在主方向内时,其链码在xmin到xmax(见图6中的606)之间构造,否则其链码在ymin到ymax(见图7中的706)之间构造。xmin、xmax、ymin和ymax的值可以通过在(x0,y0)、(x1,y1)以及(x2,y2)中寻找最大最小值获得。
然后,可以通过以下方法获得E的链码:如果三角形的最长边在主方向内,则首先将xmin和xmax取整数,使其位于像素的中心。然后根据(xs,ys)和(xe,ye)所确定的边的线性方程来确定取整后的xmin所对应的Y值。从取整后的xmin开始,每次在X方向步进1个单位,直到取整后的xmax,依次计算Y方向的差值并取整,如果为0,链码值为0,如果为1,链码值为1,如果为-1,链码值为7。如果三角形的最长边不在主方向内,则首先将ymin和ymax取整数,使其位于像素的中心。然后根据(xs,ys)和(xe,ye)所确定的边的线性方程来确定取整后的ymin所对应的X值。从取整后的ymin开始,每次在Y方向步进1个单位,直到取整后的ymax,依次计算X方向的差值并取整,如果为0,链码值为2,如果为1,链码值为1,如果为-1,链码值为3。该过程可以通过以下程序段实现:
if(abs(xe-xs)>=abs(ye-ys)){
k=(ye-ys)/(xe-xs);
xss=(int)(xmin+0.5);
xee=(int)(xmax+0.5);
yss=(int)((xss-xs)*k+ys+0.5);
xii=xss;
yii=yss;
for(xi=xss+1;xi<=xee;xi++){
yi=(int)((xi-xs)*k+ys+0.5);
ydeta=(int)(yi-yii+0.5);
if(ydeta==0)c[i]=0;
else if(ydeta==1)c[i]=1;
else if(ydeta==-1)c[i]=7;
yii=yi;
}
}else{
k=(xe-xs)/(ye-ys);
yss=(int)(ymin+0.5);
yee=(int)(ymax+0.5);
xss=(int)((yss-ys)*k+xs+0.5);
yii=yss;
xii=xss;
for(yi=yss+1;yi<=yee;yi++){
xi=(int)((yi-ys)*k+xs+0.5);
xdeta=(int)((xi-xii+0.5);
if(xdeta==0)c[i]=2;
else if(xdeta==1)c[i]=1;
else if(xdeta==-1)c[i]=3;
xii=xi;
}
}
S506,寻找三角形的最长边(也称为移动边)与三角形的另外两条短边的交点之间的线段的起始点和终止点。
在构造了三角形的最长边的链码之后,首先需要从xs到xe,或者从ys到ye画出三角形的最长边的像素。然后,将三角形的最长边进行移动,如果该三角形的最长边在主方向内,则沿Y轴移动(见图6),否则沿X轴移动(见图7)。移动的距离是|Δy|=1或者|Δx|=1。移动的方向(见图8和图9)使用三角形的最长边的边方程来确定。其中,该边方程为e(x,y)=(ys-ye)*x+(xe-xs)*y+(xs*ye-xe*ys)。如果三角形的最长边在主方向内,则计算e(xs,ys+1)和e(x2,y2),并根据e(xs,ys+1)和e(x2,y2)的乘积的正负来确定是沿Y轴的正方向还是沿Y轴的负方向来移动三角形的最长边(在这里,在乘积为负时,沿Y轴的负方向(见图8中的802)移动,反之沿Y轴正方向移动),其中,(x2,y2)表示出了三角形的最长边的所在的两个顶点之外的第三个顶点(见图8中的810,图9中的910)。如果三角形的最长边不在主方向内,则计算e(xs+1,ys)和e(x2,y2),并根据e(xs+1,ys)和e(x2,y2)的乘积的正负来确定是沿X轴的正方向还是沿X轴的负方向来移动三角形的最长边(在这里,在乘积为负时,沿X轴的负方向(见图9中的902)移动,反之沿X轴正方向移动)。其中,该过程可以通过以下程序段实现:
a=ys-ye;
b=xe-xs;
c=xs*ye-xe*ys;
e0=a*xs+b*(ys+1)+c;
e1=a*x2+b*y2+c;
mul=e0*e1;
if(abs(xe-xs)>=abs(ye-ys)){
detay=(mul>0)?1:-1;
}else{
detax=(mul>0)?1:-1;
}
如果三角形的最长边没有移出三角形,则该三角形的最长边将会和三角形的其他两条短边相交。对于由顶点V0(x0,y0)、V1(x1,y1)和V2(x2,y2)所构成的三角形,假定边V0V1为最长边。边V0V1、V0V2以及V1V2的线性方程分别为:
(y-y0)/(y1-y0)=(x-x0)/(x1-x0),
(y-y0)/(y2-y0)=(x-x0)/(x2-x0),
(y-y1)/(y2-y1)=(x-x1)/(x2-x1),
如果V0V1沿着y轴移动Δy(|Δy|=1),则其线性方程变为(y-(y0+Δy))/(y1-y0)=(x-x0)/(x1-x0)。它与V0V2和V1V2相交,分别产生A(见图8中的804,图9中的904)和B(见图8中的806,图9中的906)两个相交点。由此,可以得到:
xA=(x1-x0)(x2-x0)*invA*Δy+x0,
yA=(x1-x0)(y2-y0)*invA*Δy+y0,
xB=(x2-x1)(x0-x1)*invB*Δy+x1,
yB=(x2-x1)(y0-y1)*invB*Δy+y1,
其中,
invA=1/((x2-x0)(y1-y0)-(y2-y0)(x1-x0)),
invB=1/((y0-y1)(x2-x1)-(y2-y1)(x0-x1)).
同样,如果V0V1沿着x轴移动Δx(|Δx|=1),则其线性方程将变成(y-y0)/(y1-y0)=(x-(x0+Δx))/(x1-x0)。因此,可以得到:
xA=(y1-y0)(x2-x0)*invA*Δx+x0,
yA=(y1-y0)(y2-y0)*invA*Δx+y0,
xB=(y0-y1)(x2-x1)*invB*Δx+x1,
yB=(y0-y1)(y2-y1)*invB*Δx+y1。
获得相交点的坐标之后,可以由此计算相交点(起始点和终止点)所处链码的位置(见图9和图10)。实际计算的是链码数组c[]的下标,如果最长边处于主方向内,计算xA和xmin的差值并取整可以获得链码的起始位置,计算xB和xmin的差值并取整可以获得链码的终止位置;如果最长边不处于主方向内,计算yA和ymin的差值并取整可以获得链码的起始位置,计算yB和ymin的差值并取整可以获得链码的终止位置。该过程可以通过以下程序段实现:
invA=1/((x2-xs)*(ye-ys)-(y2-ys)*(xe-xs));
invB=1/((x2-xe)*(ys-ye)-(y2-ye)*(xs-xe));
if(abs(xe-xs)>=abs(ye-ys)){
xA=(xe-xs)*(x2-xs)*invA*detay+xs;
xB=(x2-xe)*(xs-xe)*invB*detay+xe;
cstart=(int)(xA-xmin+0.5);
cend=(int)(xB-xmin+0.5);
}else{
yA=(ye-ys)*(y2-ys)*invA*detax+ys;
yB=(y2-ye)*(ys-ye)*invB*detax+ye;
cstart=(int)(yA-ymin+0.5);
cend=(int)(yB-ymin+0.5);
}
其中,可以通过以下方法来判断三角形的最长边是否移出了三角形:
在沿Y轴的正方向移动三角形的最长边的情况下,通过将三角形移动后的最长边与三角形的最长边的起始顶点和三角形的另外两条短边的交点所在顶点之间的一边的交点的Y轴坐标值与三角形的另外两条短边的交点所在顶点的Y轴坐标值进行比较来判断三角形的最长边是否移出了三角形,在沿Y轴的负方向移动三角形的最长边的情况下,通过将三角形移动后的最长边与三角形的最长边的终止顶点和三角形的另外两条短边的交点所在顶点之间的一边的交点的Y轴坐标值与三角形的另外两条短边的交点所在顶点的Y轴坐标值进行比较来判断三角形的最长边是否移出了三角形。
在沿X轴的正方向移动三角形的最长边的情况下,通过将三角形移动后的最长边与三角形的最长边的起始顶点和三角形的另外两条短边的交点所在顶点之间的一边的交点的X轴坐标值与三角形的另外两条短边的交点所在顶点的X轴坐标值进行比较来判断三角形的最长边是否移出了三角形,在沿X轴的负方向移动三角形的最长边的情况下,通过将三角形移动后的最长边与三角形的最长边的终止顶点和三角形的另外两条短边的交点所在顶点之间的一边的交点的X轴坐标值与三角形的另外两条短边的交点所在顶点的X轴坐标值进行比较来判断三角形的最长边是否移出了三角形。
以上判断过程可以通过以下程序段实现(使用out flag来标记):
if(abs(xe-xs)>=abs(ye-ys)){
yA=(xe-xs)*(y2-ys)*invA*detay+ys;
yB=(x2-xe)*(ys-ye)*invB*detay+ye;
if(detay==1)out_flag=(yA<=y2)?0:1;
if(detay==-1)out_flag=(yB>=y2)?0:1;
}else{
xA=(ye-ys)*(x2-xs)*invA*detax+xs;
xB=(ys-ye)*(x2-xe)*invB*detax+xe;
if(detax==1)out_flag=(xA<=x2)?0:1;
if(detax==-1)out_flag=(xB>=x2)?0:1;
}
S508,根据三角形的最长边与三角形的另外两条短边的交点之间的线段的八方向链码画出相应像素。因为该线段的八方向链码的起始码和终止码都已知,所以可以知道从哪里开始,到哪里结束。其中,该过程可以通过以下程序段实现:
xii=floor(xA+0.5);
yii=floor(yA+0.5);
for(i=cstart;i<=cend;i++){
switch(c[i]){
case 0:{dx=1;dy=0;break;}
case 1:{dx=1;dy=1;break;}
case 2:{dx=0;dy=1;break;}
case 3:{dx=-1;dy=1;break;}
case 4:{dx=-1;dy=0;break;}
case 5:{dx=-1;dy=-1;break;}
case 6:{dx=0;dy=-1;break;}
case 7:{dx=1;dy=-1;break;}
}
xi=xii+dx;
yi=yii+dy;
Draw(xi,yi);
}
当部分三角形在显示窗口(见图10中的1002)之外时,三角形需要裁剪。一个三角形裁剪为一个多边形,此多边形最多具有7个顶点(见图10中的1004)。因此,裁剪得出的多边形的输入顶点数目在3到7之间。
在输入之前,裁剪得出的多边形的顶点需要沿着该多边形的边界按顺时针或者逆时针方向进行排序。首先创建一个包含整个裁剪得出的多边形的边界框(见图11中的1102),(xrmin,yrmin)和(xrmax,yrmax)分别是边界框的最小和最大坐标顶点,可以通过裁剪得出的多边形获得。这样,裁剪得出的多边形的所有顶点都在边界框的边缘上。我们依次按xrmin、yrmax、xrmax和yrmin的顺序沿着这个边界框的边缘对这些顶点进行排序。
裁剪得出的多边形的边长按照三角形的方法进行计算,并找到最长边(见图12中的1202)。
判断移动边是否移出未裁剪三角形的方法在裁剪三角形的情况下应改为判断移动边是否移出当前的相交边(见图12中的1204、1206)。此方法与未裁剪三角形类似,但是顶点需要按顺序处理。定义(xu,yu)为上顶点,它们向上标号,定义(x1,y1)为下顶点,它们向下标号(见图12)。例如,如果有7个顶点,则起始顶点和终止顶点分别标记为0和1,那么第一个(xu,yu)标记为2,第一个(x1,y1)标记为6,第二个(xu,yu)标记为3,第二个(x1,y1)标记为5,其余依次类推。当(xu,yu)和(x1,y1)相同时,此过程停止。
图13示出了沿着最长边对裁剪得出的多边形进行栅格化的流程图,它和未裁剪三角形的类似(见图5),除了裁剪、对裁剪顶点排序、以及判断移出等步骤之外。
图14示出了实现上述方法的系统的示意性框图。如图14所示,该系统包括设置模块(即链码构造单元)、内存、扫描模块(即链码获取单元)、扫描设备(即像素描画单元)。具体地,该系统根据三角形顶点的坐标寻找三角形的最长边。根据这条最长边,构造此边的链码。然后,描画出此边上的像素。在将最长边进行偏移之后,系统计算相交点,并且由此找到交点之间的线段链码的起始和终止码。使用起始码和终止码之间的八方向链码,可以画出偏移边上的像素。当然,该系统也可以实现三角形需要裁剪的情况下的扫描。
综上所述,在本发明中,首先构造三角形最长边的链码,然后每次最长边移动时,将会与其他两条短边相交。相交点可以确定相交点间的线段的链码的起始码和终止码,用来进行栅格化操作。本发明不需要将三角形分割成多个子三角形,所以栅格化效率大大提高。
在将三角形裁剪为多边形(裁剪三角形)的情况下,我们也不需要将裁剪三角形分割为多个子三角形。对此多边形进行栅格化的顺序与三角形类似。
本领域技术人员将理解,还存在可用于实现本发明实施例的更多可选实施方式和改进方式,并且上述实施方式和示例仅是一个或多个实施例的说明。因此,本发明的范围仅由所附权利要求书限制。
Claims (22)
1.一种用于对三角形进行栅格化的方法,其特征在于,包括以下步骤:
确定需要进行栅格化的三角形的最长边,并构造所述三角形的最长边的八方向链码;
沿特定方向、以特定步长移动所述三角形的最长边,确定移动后三角形的最长边与所述三角形的另外两边的交点之间的线段的起始端点和终止端点,并利用所述起始端点和所述终止端点、以及所述三角形的最长边的八方向链码获取所述移动后三角形的最长边与所述三角形的另外两边的交点之间的线段的八方向链码;以及
根据所述三角形的最长边的八方向链码、和所述移动后三角形的最长边与所述三角形的另外两边的交点之间的线段的八方向链码,描画所述三角形的像素。
2.根据权利要求1的用于对三角形进行栅格化的方法,其特征在于,当所述三角形的最长边与X轴之间的夹角的绝对值不大于45°时,沿Y轴移动所述三角形的最长边。
3.根据权利要求1的用于对三角形进行栅格化的方法,其特征在于,当所述三角形的最长边与X轴之间的夹角的绝对值大于45°时,沿X轴移动所述三角形的最长边。
4.根据权利要求2或3的用于对三角形进行栅格化的方法,其特征在于,利用所述三角形的最长边的边方程e(x,y)=(ys-ye)*x+(xe-xs)*y+(xs*ye-xe*ys)来确定沿Y轴或X轴移动所述三角形的最长边的方向,其中,xs和ys是所述三角形的最长边的起始顶点的X轴和Y轴坐标值,xe和ye是所述三角形的最长边的终止顶点的X轴和Y轴坐标值。
5.根据权利要求4的用于对三角形进行栅格化的方法,其特征在于,当所述三角形的最长边与X轴之间的夹角的绝对值不大于45°时,确定沿Y轴移动所述三角形的最长边的方向的过程包括:
分别将由所述三角形的最长边的起始顶点的X轴和Y轴坐标值得出的X轴和Y轴坐标值(xs,ys+1)、以及所述三角形的另外两边的交点所在顶点的X轴和Y轴坐标值(x2,y2)代入所述三角形的最长边的边方程,得出第一代入结果和第二代入结果;
将所述第一代入结果和所述第二代入结果相乘得出第一相乘结果,并在所述第一相乘结果大于0的情况下,沿Y轴的正方向移动所述三角形的最长边,在所述第一相乘结果不大于0的情况下,沿Y轴的负方向移动所述三角形的最长边。
6.根据权利要求4的用于对三角形进行栅格化的方法,其特征在于,当所述三角形的最长边与X轴之间的夹角的绝对值大于45°时,确定沿X轴移动所述三角形的最长边的方向的过程包括:
分别将由所述三角形的最长边的起始顶点的X轴和Y轴坐标值得出的X轴和Y轴坐标值(xs+1,ys)、以及所述三角形的另外两边的交点所在顶点的X轴和Y轴坐标值(x2,y2)代入所述三角形的最长边的边方程,得出第三代入结果和第四代入结果;
将所述第三代入结果和所述第四代入结果相乘得出第二相乘结果,并在所述第二相乘结果大于0的情况下,沿X轴的正方向移动所述三角形的最长边,在所述第二相乘结果不大于0的情况下,沿X轴的负方向移动所述三角形的最长边。
7.根据权利要求5的用于对三角形进行栅格化的方法,其特征在于,在所述三角形的三个顶点的三个X轴坐标值中的最大值和最小值之间构造所述三角形的最长边的八方向链码。
8.根据权利要求6的用于对三角形进行栅格化的方法,其特征在于,在所述三角形的三个顶点的三个Y轴坐标值中的最大值和最小值之间构造所述三角形的最长边的八方向链码。
9.根据权利要求7的用于对三角形进行栅格化的方法,其特征在于,
在沿Y轴的正方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的起始顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的Y轴坐标值与所述三角形的另外两边的交点所在顶点的Y轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形,
在沿Y轴的负方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的终止顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的Y轴坐标值与所述三角形的另外两边的交点所在顶点的Y轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形。
10.根据权利要求8的用于对三角形进行栅格化的方法,其特征在于,
在沿X轴的正方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的起始顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的X轴坐标值与所述三角形的另外两边的交点所在顶点的X轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形,
在沿X轴的负方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的终止顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的X轴坐标值与所述三角形的另外两边的交点所在顶点的X轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形。
11.根据权利要求9的用于对三角形进行栅格化的方法,其特征在于,通过计算所述三角形的三个顶点之间的伪欧氏距离来确定所述三角形的最长边。
12.根据权利要求10的用于对三角形进行栅格化的方法,其特征在于,通过计算所述三角形的三个顶点之间的伪欧氏距离来确定所述三角形的最长边。
13.根据权利要求11的用于对三角形进行栅格化的方法,其特征在于,在所述三角形需要裁剪的情况下,
使用用于对所述三角形进行裁剪的边界框来对裁剪得到的多边形的多个顶点按照顺时针或逆时针的顺序进行排序和编号,并且
利用所述多边形的上顶点和下顶点来判断所述多边形的最长边是否移出了当前的相交边。
14.根据权利要求12的用于对三角形进行栅格化的方法,其特征在于,在所述三角形需要裁剪的情况下,
使用用于对所述三角形进行裁剪的边界框来对裁剪得到的多边形的多个顶点按照顺时针或逆时针的顺序进行排序和编号,并且利用所述多边形的上顶点和下顶点来判断所述多边形的最长边是否移出了当前的相交边。
15.一种用于对三角形进行栅格化的系统,其特征在于,包括:
链码构造单元,用于确定需要进行栅格化的三角形的最长边,并构造所述三角形的最长边的八方向链码;
链码获取单元,用于沿特定方向、以特定步长移动所述三角形的最长边,确定移动后三角形的最长边与所述三角形的另外两边的交点之间的线段的起始端点和终止端点,并利用所述起始端点和所述终止端点、以及所述三角形的最长边的八方向链码获取所述移动后三角形的最长边与所述三角形的另外两边的交点之间的线段的八方向链码;以及
像素描画单元,用于根据所述三角形的最长边的八方向链码、和/或所述移动后三角形的最长边与所述三角形的另外两边的交点之间的线段的八方向链码,描画所述三角形的相应像素。
16.根据权利要求15的用于对三角形进行栅格化的系统,其特征在于,所述链码获取单元
在所述三角形的最长边与X轴之间的夹角的绝对值不大于45°的情况下,沿Y轴移动所述三角形的最长边,
在所述三角形的最长边与X轴之间的夹角的绝对值大于45°的情况下,沿X轴移动所述三角形的最长边。
17.根据权利要求16的用于对三角形进行栅格化的系统,其特征在于,所述链码获取单元利用所述三角形的最长边的边方程e(x,y)=(ys-ye)*x+(xe-xs)*y+(xs*ye-xe*ys)来确定沿Y轴或X轴移动所述三角形的最长边的方向,其中,xs和ys是所述三角形的最长边的起始顶点的X轴和Y轴坐标值,xe和ye是所述三角形的最长边的终止顶点的X轴和Y轴坐标值。
18.根据权利要求17的用于对三角形进行栅格化的系统,其特征在于,所述链码获取单元
在所述三角形的最长边与X轴之间的夹角的绝对值不大于45°的情况下,分别将由所述三角形的最长边的起始顶点的X轴和Y轴坐标值得出的X轴和Y轴坐标值(xs,ys+1)、以及所述三角形的另外两边的交点所在顶点的X轴和Y轴坐标值(x2,y2)代入所述三角形的最长边的边方程,得出第一代入结果和第二代入结果,将所述第一代入结果和所述第二代入结果相乘得出第一相乘结果,并在所述第一相乘结果大于0的情况下,沿Y轴的正方向移动所述三角形的最长边,在所述第一相乘结果不大于0的情况下,沿Y轴的负方向移动所述三角形的最长边;
在所述三角形的最长边与X轴之间的夹角的绝对值大于45°的情况下,分别将由所述三角形的最长边的起始顶点的X轴和Y轴坐标值得出的X轴和Y轴坐标值(xs+1,ys)、以及所述三角形的另外两边的交点所在顶点的X轴和Y轴坐标值(x2,y2)代入所述三角形的最长边的边方程,得出第三代入结果和第四代入结果,将所述第三代入结果和所述第四代入结果相乘得出第二相乘结果,并在所述第二相乘结果大于0的情况下,沿X轴的正方向移动所述三角形的最长边,在所述第二相乘结果不大于0的情况下,沿X轴的负方向移动所述三角形的最长边。
19.根据权利要求18的用于对三角形进行栅格化的系统,其特征在于,所述链码构造单元
在所述三角形的最长边与X轴之间的夹角的绝对值不大于45°的情况下,在所述三角形的三个顶点的三个X轴坐标值中的最大值和最小值之间构造所述三角形的最长边的八方向链码;
在所述三角形的最长边与X轴之间的夹角的绝对值大于45°的情况下,在所述三角形的三个顶点的三个Y轴坐标值中的最大值和最小值之间构造所述三角形的最长边的八方向链码。
20.根据权利要求19的用于对三角形进行栅格化的系统,其特征在于,所述链码获取单元
在所述三角形的最长边与X轴之间的夹角的绝对值不大于45°的情况下,
在沿Y轴的正方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的起始顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的Y轴坐标值与所述三角形的另外两边的交点所在顶点的Y轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形,
在沿Y轴的负方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的终止顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的Y轴坐标值与所述三角形的另外两边的交点所在顶点的Y轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形;
在所述三角形的最长边与X轴之间的夹角的绝对值大于45°的情况下,
在沿X轴的正方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的起始顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的X轴坐标值与所述三角形的另外两边的交点所在顶点的X轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形,
在沿X轴的负方向移动所述三角形的最长边的情况下,通过将所述移动后三角形的最长边与所述三角形的最长边的终止顶点和所述三角形的另外两边的交点所在顶点之间的一边的交点的X轴坐标值与所述三角形的另外两边的交点所在顶点的X轴坐标值进行比较来判断所述三角形的最长边是否移出了所述三角形。
21.根据权利要求15至20中任一项的用于对三角形进行栅格化的系统,其特征在于,所述链码构造单元通过计算所述三角形的三个顶点之间的伪欧氏距离来确定所述三角形的最长边。
22.根据权利要求21的用于对三角形进行栅格化的系统,其特征在于,还包括:顶点编号单元,用于在所述三角形需要裁剪的情况下,使用用于对所述三角形进行裁剪的边界框来对裁剪得到的多边形的多个顶点按照顺时针或逆时针的顺序进行排序和编号;
所述链码构造单元还用于:通过计算所述多边形的多个相邻顶点之间的伪欧氏距离来确定所述多边形的最长边,并在所述多边形的多个顶点的多个Y或X轴坐标值中的最大值和最小值之间构造所述多边形的最长边的八方向链码;
所述链码获取单元还用于:移动所述多边形的最长边,并利用所述移动后多边形的最长边与其他边的交点之间的线段的起始端点和终止端点、以及所述多边形的最长边的八方向链码获取所述移动后多边形的最长边与其他边的交点之间的线段的八方向链码,其中
所述链码获取单元利用所述多边形的上顶点和下顶点来判断所述多边形的最长边是否移出了当前的相交边。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810175480XA CN101739703B (zh) | 2008-11-10 | 2008-11-10 | 用于对三角形进行栅格化的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810175480XA CN101739703B (zh) | 2008-11-10 | 2008-11-10 | 用于对三角形进行栅格化的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101739703A true CN101739703A (zh) | 2010-06-16 |
CN101739703B CN101739703B (zh) | 2012-05-30 |
Family
ID=42463152
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810175480XA Expired - Fee Related CN101739703B (zh) | 2008-11-10 | 2008-11-10 | 用于对三角形进行栅格化的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101739703B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105184849A (zh) * | 2015-03-23 | 2015-12-23 | 大连民族学院 | 基于面片链码的三维网格模型表示方法 |
CN106093882B (zh) * | 2016-06-02 | 2018-08-31 | 华中科技大学 | 环状基于正三角栅格的综合孔径辐射计阵列排布方法 |
CN108761467A (zh) * | 2018-05-25 | 2018-11-06 | 淮阴师范学院 | 一种基于前视声纳的三维水下地图构建方法 |
CN108961347A (zh) * | 2018-06-26 | 2018-12-07 | 北京大学 | 一种基于正三角形网格链码的二维目标边界表达方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5914722A (en) * | 1997-04-14 | 1999-06-22 | Ati Technologies Inc. | Memory efficient method for triangle rasterization |
US6052128A (en) * | 1997-07-23 | 2000-04-18 | International Business Machines Corp. | Method and apparatus for clipping convex polygons on single instruction multiple data computers |
US7301540B1 (en) * | 2003-08-05 | 2007-11-27 | 3D Labs Inc., Ltd. | System and method for rasterization through approximation |
US7843468B2 (en) * | 2006-07-26 | 2010-11-30 | Nvidia Corporation | Accellerated start tile search |
-
2008
- 2008-11-10 CN CN200810175480XA patent/CN101739703B/zh not_active Expired - Fee Related
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105184849A (zh) * | 2015-03-23 | 2015-12-23 | 大连民族学院 | 基于面片链码的三维网格模型表示方法 |
CN106093882B (zh) * | 2016-06-02 | 2018-08-31 | 华中科技大学 | 环状基于正三角栅格的综合孔径辐射计阵列排布方法 |
CN108761467A (zh) * | 2018-05-25 | 2018-11-06 | 淮阴师范学院 | 一种基于前视声纳的三维水下地图构建方法 |
CN108961347A (zh) * | 2018-06-26 | 2018-12-07 | 北京大学 | 一种基于正三角形网格链码的二维目标边界表达方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101739703B (zh) | 2012-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI552109B (zh) | 一種使用誤差項之保守格柵化基元的方法、非暫時性電腦可讀儲存媒體及系統 | |
US6323874B1 (en) | System and method for rendering an image | |
JP4199159B2 (ja) | 描画処理装置、描画処理方法、及び描画処理プログラム | |
US8059119B2 (en) | Method for detecting border tiles or border pixels of a primitive for tile-based rendering | |
US8379025B1 (en) | Methods and apparatus for rendering vector art on graphics hardware | |
EP3070677B1 (en) | Method and apparatus for tile-based rendering | |
EP1881456B1 (en) | Method and system for tile binning using half-plane edge function | |
CN102822870B (zh) | 多个阴影化引擎上3d计算机图形数据的处理 | |
CN101661741A (zh) | 图形光栅扫描中的三角形遍历方法和装置 | |
CN101739703B (zh) | 用于对三角形进行栅格化的方法和系统 | |
US20140015838A1 (en) | Apparatus and method of performing tile binning of bezier curve | |
JP3892016B2 (ja) | 画像処理装置および画像処理方法 | |
WO2003102875A1 (fr) | Dispositif de trace d'un polygone triangulaire et procede de trace d'un polygone triangulaire | |
US8300045B2 (en) | Rasterization engine and three-dimensional graphics system for rasterizing in order adapted to characteristics of polygon | |
CN102004832B (zh) | 基于水平线扫描的三角形光栅化的实现方法 | |
JP6297169B2 (ja) | 描画装置、および描画方法 | |
JP4664169B2 (ja) | 図形描画装置及び図形描画プログラム | |
CN111127589B (zh) | 顾及线宽一致性的矢量地图圆形虚线符号绘制方法 | |
CN111145298B (zh) | 顾及线宽一致性的矢量地图栅栏虚线符号绘制方法 | |
CN100476880C (zh) | 一种产生体积阴影的方法及系统 | |
CN111127297A (zh) | 顾及线宽一致性的矢量地图实线符号绘制方法 | |
CN116611991B (zh) | 一种基于gpu描绘复杂场景的处理方法及系统 | |
CN111145299B (zh) | 顾及线宽一致性的矢量地图实线符号拐角绘制方法 | |
JP2001283242A (ja) | 画像処理装置および画像処理方法 | |
CN111145300B (zh) | 顾及线宽一致性的矢量地图尖角形虚线符号绘制方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120530 Termination date: 20161110 |
|
CF01 | Termination of patent right due to non-payment of annual fee |