一种基于金字塔四叉树的纹理映射方法

文档序号:6420237阅读:245来源:国知局
专利名称:一种基于金字塔四叉树的纹理映射方法
技术领域
本发明涉及一般的图像数据处理或产生,尤其涉及一种基于金字塔四叉树的纹理映射方法。
背景技术
在绘制系统中,纹理映射可以不通过增加物体的复杂性,而使得场景细节显得更加丰富,使得场景更真实。对于大规模地形的绘制,需要一个好的纹理映射方式,实现纹理的实时映射,解决大规模地形场景的实时漫游的技术问题,包括解决纹理数据的存储和传输问题,纹理走样问题,提高绘制画面的质量。
David Cline采用纹理四叉树来表示大规模纹理,可参考[Cline 1998]DavidCline and Parris K.Egbert,“Interactive Display Of Very Large Textures,”inProceedings of IEEE Visualization′98,October 1998,pp.343-350,每个纹理采用固定分辨率表示,不同层次的纹理表示覆盖的区域不同,在几何绘制时,需要根据绘制的多边形的大小选取四叉树中合适的纹理。若没有合适的纹理,则暂选取粗糙的纹理,并把该纹理插入一个队列,进行统一的调度。这样,虽然利用了视域的连贯性,但是可能无法满足当前所需要的显示精度,影响显示质量。并且对每一个纹理结点,没有采用Mipmap的方式,由于多边形不可能刚好对应于纹理四叉树中的某个层次,从而导致纹理走样现象。在数据的调度上,该方法也没有利用四叉树父子结点之间的重复信息,来进行数据的累进调度。
Dollner在地形绘制中采用几何和纹理的多分辨绘制,可参考[Dollner2000]Jurgen Dollner,Konstantin Baumann,and Klaus Hinrichs,“Texturing Techniques forTerrain Visualization”,IEEE Visualization 2000,207-234,Oct.2000,在几何上采用离散的层次细节树,同样对纹理也建立层次树,在绘制时,根据屏幕的显示要求,选取不同层次的几何和纹理进行绘制。
Blow在高细节的地形绘制中也采用纹理四叉树,可参考[Blow2000]Jonathan Blow,“Terrain Rendering at High Levels of Detail”,Proceedings of the2000 Game Developers Conference,Mar.2000,并结合几何的二叉树表示,进行纹理的选择。该方法需要基于每个三角形的几何选取所需要的纹理,有可能会在多个纹理之间切换,而导致系统性能的下降。

发明内容
针对现有技术的不足,本发明的目的在于提供一种基于金字塔四叉树的纹理映射方法。本方法可以将纹理数据实时地映射到相应的地形上,提高大规模地形漫游时的显示画面质量,而且还能利用硬件的金字塔反走样技术,解决大纹理映射时产生走样现象的问题。
为达到上述目的,本发明采用的技术方案如下包括以下四个步骤1)纹理的金字塔四叉树表示将纹理图像数据表示成纹理四叉树,把纹理四叉树的每个结点表示的纹理数据组织成纹理金字塔,建立了纹理图像数据的纹理金字塔四叉树表示;2)纹理金字塔四叉树结点的压缩利用纹理图像相邻的纹理象素之间的连贯性,对纹理金字塔进行压缩,使得纹理数据的传输和存储量减少;3)纹理金字塔四叉树结点的选取对于每个地形网格根据三角形在屏幕上的投影面积来确定相应的纹理金字塔四叉树结点;4)纹理金字塔四叉树结点的装载对于已经选取而且不在纹理内存中的纹理金字塔四叉树结点数据按照一定的策略从硬盘或系统内存中装载到纹理内存,完成地形场景的绘制。
纹理金字塔四叉树结点的压缩就是将原纹理金字塔四叉树结点存储的数据进行变换,减少数据的存储量,同时保证变换后的纹理数据可以使用逆变换得到原数据。
本发明与背景技术相比,其优点在于本发明采用纹理金字塔四叉树映射方法,可以有效地利用有限的纹理内存,减少纹理数据的传输量,实现从硬盘到系统内存,再从系统内存到纹理内存的数据调度,能有效地提高大规模地形带纹理绘制的画面质量,并且能利用硬件的金字塔反走样技术,解决大纹理映射产生走样现象的问题。


下面结合附图和实施例对本发明作进一步说明。
图1是本发明方法的流程图;图2是纹理四叉树表示;图3是纹理金字塔表示;图4是纹理的降低分辨率过程表示;图5是纹理的提高分辨率过程表示;图6是纹理的区域矢量化表示。
具体实施例方式
如图1所示,本发明提出的一种基于金字塔四叉树的纹理映射方法,包括纹理的金字塔四叉树表示、纹理金字塔四叉树结点的压缩、纹理金字塔四叉树结点的选取和纹理金字塔四叉树结点的装载四个步骤。流程如图1所表示首先读取纹理数据,将纹理数据表示成纹理的金字塔四叉树,然后对纹理金字塔四叉树结点进行压缩;对于每个地形网络选取相应的纹理金字塔四叉树结点,把不在纹理内存中的纹理结点数据装载入纹理内存,最后完成带纹理的地形场景的绘制。
现具体介绍本方法的四个步骤1)纹理的金字塔四叉树表示对于大规模纹理图象,其图象大小可以定义为2n×2n,其中n为正整数。首先将大规模纹理图象表示成纹理四叉树。纹理四叉树的构建过程如下纹理四叉树的根结点对应覆盖整个地形方形区域,其大小为2n×2n,它的四个子结点分别表示它的四分之一地域,其大小均为2n-1×2n-1,而这四个子结点的分辨率与根结点相同,根结点是四个子结点的父结点。对这四个子结点进行同样的操作,每个结点均产生四个子结点,该过程不断进行,直到原始纹理的最精细分辨率,即结点的大小为1×1。因此在纹理四叉树中,父子结点覆盖的地形区域重叠,每个结点与其四个子结点覆盖的地域相同。图2给出了最初三层的四叉树结点,图2a表示了原始纹理图象(0,0),由它进行四叉树剖分,如图2b有四个子结点(0,0),(0,1),(1,0),(1,1),这四个子结点和图2a覆盖的区域是相同的;对每个子结点再进行剖分,就得到了图2c。
对于以上面方法产生的纹理四叉树的每个结点存储的纹理,再组织成纹理金字塔。
纹理金字塔的组织方式如下假设纹理四叉树结点纹理图象大小为固定大小2m×2m,m为非负整数。纹理从原始图象开始,不断地从高分辨率图象中取多个象素求其纹理颜色值的平均,生成低分辨率图象的一个象素,构成分辨率从高到低的一组图象。原始分辨率图象及各级低分辨图象被存储到多个表中。这样该纹理四叉树结点存储着同一纹理图象,分辨率为1×1到2m×2m的纹理数据的纹理金字塔。如图3所示的纹理金字塔,图象的分辨率为8×8,4×4,2×2,1×1,分辨率不断下降,纹理图象越来越模糊。
按照如上方法,就可以实现纹理图象的纹理的金字塔四叉树表示。
1)纹理金字塔四叉树结点的压缩对于大规模纹理数据的处理,减少纹理的存储量是很重要的。由步骤1所表示的纹理金字塔数据量是原纹理数据的16/9倍。
由于纹理图象相邻的纹理象素之间具有某种连贯性,所以可以对纹理金字塔进行压缩有效地减少数据冗余,使得纹理的表示更为紧凑。
假设纹理金字塔四叉树结点存储分辨率为1×1到2m×2m的一系列纹理数据。对这些纹理数据,分辨率为1×1到32×32的数据不进行压缩,对64×64到2m×2m的纹理数据进行矢量化压缩,压缩的方法如下所述如图4所示,gm(i,j)为原始纹理图象,分辨率为2m×2m,fm(i,j)是gm通过一滤波算子生成的结果图象。然后对滤波产生的图象进行重新采样,采样频率是原来的1/2,产生下一层次的图象gm-1(i,j),这个变换过程是降低分辨率的过程。通过对图象gm(i,j)不断执行该过程,一直到最后所生成分辨率为1×1的图象g0,这一系列的g(i,j)组成纹理金字塔。迭代过程可以用以下式子表示gl-1=REDUCE(gl)其中层数0<l≤m,m是纹理金字塔总的层数,REDUCE为降低分辨率的过程。图4给出这个过程的一个图示,gm执行了两次降低分辨率的过程,从gm变成gm-1,又由gm-1变成gm-2,分辨率变成了原图的1/4。
如图5所示,这个操作的逆过程为提高分辨率的过程EXPAND,对M×N的图象作用生成2M×2N的图象。图5给出了一个提高分辩率的过程,gm执行了两次提高分辨率的过程,从gm变成gm+1,又由gm+1变成gm+2,分辨率提高到原图的4倍。但是在执行REDUCE变换将高分辨率图象降为低分辨图象过程中有部分纹理细节损失,用EXP AND函数生成的纹理很难完全恢复到原有的信息,它与原有的高一级分辨率纹理之间存在误差,它们之间的误差定义为Ll=gl-EXPAND(gl-1)其中0<1<m,最后一层1×1的图象g0,由于没有粗糙分辨率的图象,记L0=g0。
假设该纹理金字塔四叉树结点在上述操作之前存储的纹理金字塔为(g0,g1,…,gm),在执行了上述操作之后存储的纹理金字塔可表示为(g0,g1,g2,g3,g4,g5,L6,…,Lm)。
本发明进一步对误差图象lk进行压缩编码,可以采用任何图象压缩方法。我们使用LBG矢量化压缩方法对误差图象lk进行压缩编码。LBG算法是一个常用的方法,可参考[Linde1980]Y.Linde,A.Buzo,and R.M.Gray,“An Algorithmfor Vector Quantizer Design”.IEEE Transactions on Communications,1702--710,1980,该方法可以应用于多维数据,LBG矢量化算法从初始的码本出发,初始的编码值是所有需要编码的数据平均值,这个编码值加减一个微小扰动分裂成两个初始的编码值,再对原始数据集进行训练生成新的编码值,采用这种迭代方式,每一次的编码数据增加一倍,直到编码个数达到所指定的个数。
取一定大小的图象子区域进行矢量量化,这些图象子区域使用相同的编码索引。如图6所示,选取4×4的图象子区域编码512×512的RGB纹理,子区域的各象素RGB共有4×4×3=48bytes。采用256个不同取值的编码本,取同一码值的子区域各象素使用同一个索引值,每个索引值用1byte表示,则总共需要的索引值为512×512/(4×4),可以达到48∶1的压缩率。由于还需要记录编码本的信息,总共需要4×4×256个RGB的值,实际的压缩率为27.4∶1,这是对单一纹理的压缩值。对于最精细分辨率为512×512的纹理金字塔,每个象素用RGB表示,需占用纹理空间为512×512×3×4/3=1024K,通过对金字塔纹理进行逐层递归矢量化,就可以有效地压缩所需要的纹理空间,为了防止累进压缩时误差的累积,本发明计算误差图象的方法是,将EXPAND恢复的图象与正确的纹理图象对应象素作差运算。当纹理分辨率小于32×32时,矢量化压缩方法无效,因此,本方法对纹理金字塔中分辨率为32×32到1×1的纹理不进行矢量化。这样压缩后纹理的数据总量为74K,压缩率可达到13.8∶1。
在图象解码时,对于层次多分辨率的纹理,当需要导入高一层分辨率的纹理数据gk,可以通过低一层的纹理数据gk-1拉伸到图象fk,在通过gk=fk+codebook(index)来恢复数据。codebook是指误差图象lk矢量量化后的颜色值。
2)纹理金字塔四叉树结点的选取在进行地形三角形网格绘制时,需要根据地形三角形网格在屏幕上的投影面积来确定纹理分辨率,然后确定相应的纹理金字塔四叉树结点。为了能保证纹理映射的质量,按照金字塔绘制的策略,所取的屏幕象素和纹理象素的比例接近1∶1。通过公式计算屏幕空间的半径为rs=λ×rcosφd,]]>其中 w是视域广角的象素个数,r为物体空间的包围球半径,d为视点到包围体的最近距离,φ为法向与视点到顶点方向的夹角。
为了提高纹理映射的效率,当相近区域的地形三角形网格在屏幕空间的象素和纹理象素比例相近时,可以使用同一纹理四叉树结点进行映射。这些地形三角形网格称为同一族地形三角形网格,它们在屏幕空间的最大半径通过下式rs=λ×rcos(max(0,φ-v))d]]>进行计算。计算地形三角形网格在纹理空间的半径rt,可用以下式子rt2=Area(T)/Area(Q)×rQ2。其中Area(T)为地形三角形T的面积,Area(Q)为纹理金字塔四叉树结点Q覆盖区域的面积,rQ为纹理金字塔四叉树结点的象素分辨率。当rt≤rs并且2rt>rs时,该纹理金字塔四叉树结点刚好是所需要的纹理,否则需要往上遍历父结点(若rt>rs),或者往下遍历子结点(若2rt<rs),寻找合适的纹理金字塔四叉树结点。
3)纹理金字塔四叉树结点的装载为了保证实时获取纹理,纹理金字塔四叉树的根结点始终保存在纹理内存中。在纹理映射的过程中,当地形三角形网格所选的纹理金字塔四叉树结点不在纹理内存时,向上搜索纹理金字塔四叉树得到其在纹理内存中的父结点,进行纹理映射,而把该结点放到一数据调度队列,从硬盘和系统内存调度数据。当纹理数据从硬盘装载到内存中时,需要对压缩的纹理进行解码。当装载数据超出规定的存储空间时,需要释放内存和纹理内存中原存储的部分数据,在系统内存中的数据采用最近最少使用策略,即根据上一次数据调度数据使用的时间最早的先释放,而对纹理内存中的数据,使用改进的最近最少使用策略,纹理金字塔四叉树结点的优先级由下式给出pd=f/(l+1)其中,f是纹理金字塔四叉树结点最近一次调用的帧序号,l是纹理金字塔四叉树结点的层数,pd越小的纹理结点的数据最先剔除。
在实施时,系统内存和纹理内存开辟固定大小的容量,纹理内存大小设为总的图形硬件支持大小的1/2,而系统内存开辟大小为总的1/3。
权利要求
1.一种基于金字塔四叉树的纹理映射方法,其特征在于包括以下四个步骤1)纹理的金字塔四叉树表示将纹理图像数据表示成纹理四叉树,把纹理四叉树的每个结点表示的纹理数据组织成纹理金字塔,建立了纹理图像数据的纹理金字塔四叉树表示;2)纹理金字塔四叉树结点的压缩利用纹理图像相邻的纹理象素之间的连贯性,对纹理金字塔进行压缩,使得纹理数据的传输和存储量减少;3)纹理金字塔四叉树结点的选取对于每个地形网格根据三角形在屏幕上的投影面积来确定相应的纹理金字塔四叉树结点;4)纹理金字塔四叉树结点的装载对于已经选取而且不在纹理内存中的纹理金字塔四叉树结点数据按照一定的策略从硬盘或系统内存中装载到纹理内存,完成地形场景的绘制。
2.根据权利要求1所述的一种基于金字塔四叉树的纹理映射方法,其特征在于,纹理金字塔四叉树结点的压缩就是将原纹理金字塔四叉树结点存储的数据进行变换,减少数据的存储量,同时保证变换后的纹理数据可以使用逆变换得到原数据。
全文摘要
本发明公开了一种基于金字塔四叉树的纹理映射方法。该方法包括纹理的金字塔四叉树表示、纹理金字塔四叉树结点的压缩、纹理金字塔四叉树结点的选取和纹理金字塔四叉树结点的装载四个步骤。本发明很好地结合了纹理四叉树和纹理金字塔的优点,同时还对纹理数据进行了压缩,可以有效地利用有限的纹理内存,实现大规模地形纹理数据从硬盘到系统内存,再从系统内存到纹理内存的数据调度,由于纹理数据进行了压缩和对系统内存和纹理内存进行最近最少使用的调度方式,减少了各存储之间的传输量。故本方法可以将纹理数据实时地映射到相应的地形上,提高大规模地形漫游时的显示画面质量,而且还能利用硬件的金字塔反走样技术,解决大纹理映射时产生走样现象的问题。
文档编号G06T1/00GK1547162SQ20031010917
公开日2004年11月17日 申请日期2003年12月5日 优先权日2003年12月5日
发明者华炜, 陆艳青, 周栋, 鲍虎军, 华 炜 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1