基于gpu的颜色渐变线型地图符号绘制方法_3

文档序号:9930045阅读:来源:国知局
br>[0069]uniform int 11比611了7?6[]\^乂_0^_服]]\?從(_1?0¥_服]]\1];//每一个0611的渐变模式
[0070]uniform vec4uf4CellColorl[MAX_C0L_NUM*MAX_R0W_NUM];//左上角颜色
[0071]uniform vec4uf4CellColor2[MAX_C0L_NUM*MAX_R0W_NUM];//左下角颜色
[0072]uniform vec4uf4CellColor3[MAX_C0L_NUM*MAX_R0W_NUM];//右上角颜色
[0073]uniform vec4uf4CellColor4[MAX_C0L_NUM*MAX_R0W_NUM];//右下角颜色
[0074]……
[0075](3)在Shader 中定义函数getColByU 获取 u_Percent,定义函数getRowByV 获取 v_Percent:
[0076]void getColByU(f1at u,out int col,out float colU){
[0077]对u除以整个符号的宽度值得到的结果进行取整;
[0078]获取当前像素在符号中的相对U值;
[0079]遍历符号颜色结构表中的每一列,判断U值是否在该列;
[0080]找到所在的列,返回结果;
[0081]}
[0082]void getRowByV(int col,float v,out int row,out float rowV){
[0083]遍历符号颜色结构表中的每一行,判断当前像素所在的行;
[0084]找到所在的行,返回结果;
[0085]}
[0086](4)在Shader中定义函数getCe I IColorByUV进行渐变颜色的计算:
[0087]vec4getCellColorByUV(f1at u,float v){
[0088]调用函数getC0lByU(U,C0l,C0lU)获取当前像素所在的列;
[0089 ]调用函数ge tRowBy V (col ,v, row,rowV)获取当前所在的行;
[0090]根据计算得到的行和列,得到当前像素在符号颜色结构表中的位置;
[0091]判断当前像素所在颜色结构表中单元的绘制模式;
[0092]如果绘制模式是纯色填充,直接返回单元的颜色;
[0093]如果绘制模式是横向渐变,获取左右两边的颜色,计算并返回渐变色;
[0094]如果绘制模式是纵向渐变,获取上下两边的颜色,计算并返回渐变色;
[0095]}
[0096]在确定像素颜色的Shader main函数中,首先调用getCellColorByUV,再在其中调用getColByU获取u_Percent,调用函数getRowByV获取v_Percent,利用两个比例值在getCellColorByUV中进行渐变的颜色计算。uf4Cel IColorl,uf4CellColor2,uf4CellColor3,uf4CellColor4四个角的颜色表,可以在具体程序实现的过程中灵活运用,按照渐变模式制定用那几个颜色表。
【主权项】
1.基于GRJ的颜色渐变线型地图符号绘制方法,其特征是,该方法包括下列步骤: 步骤I初始化需要绘制的线状要素的点集序列,根据线宽生成需要绘制的三角形几何三角网:确定需要绘制的渐变颜色线的线宽参数,遍历线状要素中的每一个顶点,按照半个最大线宽向两边扩展,同时生成相应的三角形集合,并为每个三角形的每个顶点赋予沿线走向的长度值U值和垂直于线走向的长度值V值,即U-V值,最终得到最后一个顶点的U值作为整条线最大的U值MaxU ; 步骤2确定需要沿线重复填充的符号单元的颜色结构表:将需要填充的符号单元按照纵向-横向的结构进行分解,用列优先的二维数组和相应的符号单元属性来结构化映射一个符号单元,对这个二维数组中的每一个单元确定渐变的模式,并对单元的四个角分别设置渐变的起始颜色和终止颜色; 步骤3在着色器中根据颜色渐变函数对线状要素进行逐像素绘制:在着色器中基于传递到着色器里面的顶点U-V值,动态确定每个像素的U-V值,即像素在水平方向上到线起点的距离u’值和像素在垂直方向上到线的上边界的距离V’值,由此确定每一个像素在符号颜色结构表中属于哪一个单元,并根据所属单元的渐变模式以及初始颜色和终止颜色,利用一个确定的颜色渐变函数,确定绘制的颜色。2.根据权利要求1所述的基于GPU的颜色渐变线型地图符号绘制方法,其特征是,所述步骤I中,将V值从O至最大线宽的范围内归一化到O至I的范围内,U值通过每个顶点距离起始点的距离除以最大线宽得到。3.根据权利要求1所述的基于GPU的颜色渐变线型地图符号绘制方法,其特征是,所述步骤2中, A.符号的颜色结构表:将符号单元按照其结构分解为几个列,每一列都包含其相应的行,每一行都包含其相应的四个角的颜色值,由此形成一系列的颜色单元来映射特定的符号; B.颜色结构表的单元属性:对于一个符号单元的颜色结构表,其每一列都包含相应的宽度属性和所包含的行数属性,每一行都包含相应的高度属性,每一列都包含一个布尔值来指明该列是否为背景列,每个单元都包含其对应的颜色渐变模式,整个颜色结构表包含总列数、总宽度和总高度属性。4.根据权利要求1所述的基于GPU的颜色渐变线型地图符号绘制方法,其特征是,所述步骤3中, A.根据U-V值获取当前像素所处的单元:在着色器中根据当前像素的u’值,利用公式U(p)=U’-SLX[U’/SL],计算其在符号颜色结构表中的位置,其中U(p)表示在颜色结构表中的U值,SL表达符号的总宽度,[u’/SL]表示对u’/SL的结果进行取整得到小于u’值的SL的整数倍;然后根据当前像素的V’值,迭代判断其在颜色结构表中所处的具体行,并结合U(p)值确定该像素在符号颜色结构表中所处的具体列;根据得到的具体行和列即可确定当前像素所处的单元; B.颜色渐变模式和颜色渐变函数:根据当前像素所处的单元,获取填充该像素颜色的相关信息,包括单元的渐变模式和颜色渐变函数; B1.对于沿线走向的水平渐变,利用公式Color = ColorTablel [ cel l_p ] + (l_u_Percent) X Co 1rTabl e2[ cel l_p]获得渐变颜色,其中Co 1rTab I el [cel l_p]表不单元左上角的颜色,(>3101^313162[0611_?]表示单元右上角的颜色,11_?61^6111:表示当前像素在符号颜色结构表中的U(P)值所占单元宽度Co lumnWidth的比例,即u_Percent = U (p ) /Columnffidth; B2.对于沿线走向的垂直渐变,利用公式Color = ColorTablel [cel l_p] + ( l_v_Percent) X Co 1rTabl e3[ cel l_p]获得渐变颜色,其中Co 1rTab I el [cel l_p]表不单元左上角的颜色,(^0101^313163[0611_?]表示单元右下角的颜色,¥_?61^6111:表示当前像素在符号颜色结构表中的V ’值所占单元高度Ro wHe i gh t的比例,即v_Percent = v VRowHeight0
【专利摘要】本发明涉及GIS领域和数字地图领域的一种符号化渲染技术,给出了一种基于GPU的颜色渐变线型地图符号的绘制方法,实现了基于该方法的线状矢量要素在颜色上渐变的高效渲染和绘制。该方法包括以下步骤:首先确定需要绘制的线要素坐标序列,初始化线宽大小,根据线宽构造三角化后的线Mesh,将沿线走向的U参数和垂直于线走向的V参数传递给Mesh中的每个顶点。根据需要填充的地图符号单元生成相应的颜色结构表,并将此结构颜色表和U?V参数传递到Shader程序中。利用Shader语言,根据每个顶点上的U?V值,基于指定的颜色渐变函数进行线要素的逐像素绘制,由此实现颜色渐变的矢量线型地图符号绘制。
【IPC分类】G06T11/40, G06T1/20
【公开号】CN105719230
【申请号】CN201610016561
【发明人】乐松山, 温永宁, 陈旻, 闾国年
【申请人】南京师范大学
【公开日】2016年6月29日
【申请日】2016年1月11日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1