矫宇鹏 魏巍 刘尚武
摘要:利用三维模型三角面片的点面信息,对模型进行基于体素的规格化表示,重新构建三维模型。对在同一平面的相邻两个规格化三角面片进行合并,构成新的四边形面片,由此获得由三角面片和四边形面片混合显示的三维模型。分别对三角面片和四边形面片进行分类和编码,探索三角面片与四边形面片混合存储的方法。实验结果表明,该方法能够在规格化三角面片存储方法的基础上,进一步压缩三维模型的存储空间,提高存储效率。
关键词:体素;三角面片;四边形面片;规格化
中图分类号:TP391.41 文献标识码:A DOI:10.3969/j.issn.1003-6970.2016.05.002
本文著录格式:矫宇鹏,魏巍,刘尚武.一种新的三维模型表示与存储方法[J].软件,2016,37(5):07-10
引言
近年来,三维模型应用广泛,对计算机三维模型的表示和存储方法的研究一直是计算机图形领域的研究热点。常用的三维模型表示方法有点云模型,网格模型,面片模型等。对于不同的模型表示方法,存储空间各不相同。对于复杂的三维模型,无论采用何种现有的模型表示方法,其占用的存储空间均比较大,这给三维模型的数据传输和实时处理带来了很大不便。
本文提出了一种基于体素的三维模型表示方法,可将三维模型基于体素大小构建为不同分辨率的面片表示。通过考察规格化为体素内的三角面片之间的关系,探讨了用规格化三角面片和规格化后位于同一平面的两个三角面片构成的四边形来存储三维模型的方法。实验结果表面,这种方法可以有效的压缩三维模型的存储空间。
1.三维模型的重新构建
1.1三角面片信息提取
目前,多数三维模型采用的是三角面片模型构建的方法。该方法建模的模型中一般包括两类表信息,分别是点表信息和面表信息。前者存储了三维模型中所有顶点的三维坐标,后者给出了组成三角面的三维顶点有哪些。三维模型重建需要把模型中的点、面信息提取出来。
1.2基于体素的模型表面面片划分
传统基于三角面片构建的三维模型中,每个三角面片都毫无规律可循。为使其进一步规格化,把所有三角面片划分为基于体素大小的三角面片。
体素,即在空间坐标系中,自定义单位棱长的立方体。每个体素中有8个顶点,任意3个顶点都可以构成一个三角面片,并且总数是一定的。体素的棱长为自定义数值,可以自由控制体素的大小,以便构建不同分辨率的三维模型。由于三角面片的大小形状已知,可以对每个三角面片进行标记,这样更容易寻找三角面片之间的规律,同样对构成三维模型的三角面片也更容易标识和整理。体素的优点在于,能够把不规则的面片划分为已知的规则的三角面片。
1.3三维模型规格化
三维模型规格化定义为:把由不规则三角面片组成的三维模型,沿X、Y和z三个坐标轴方向切分为基于体素的三维模型,即规格化后的三维模型表面是由一系列位于体素顶点构成的三角面片组成。具体规格化步骤如下:
第一步:分层。对三维模型进行分层处理,每层的宽度即为体素的棱长,可根据实际需要来确定。分层时,首先沿空间坐标轴找出三维模型中三个方向的最边缘的点,并以这三个点作为起点,以体素的棱长作为宽度对模型进行依次切割。切割完成后,得到的是三维模型基于体素的表示。
第二步:取点。原三角面片模型被基于体素的切割划分之后,寻找面片与切割线的交集,并按近似值确定新三角面片的各点信息。最后把得到的三角面片各点信息保存为文本格式。
在模型取点的过程中,为了最大程度还原三维模型的本来面貌,减少失真率,需要不断根据取点的准确性来调整分层的宽度,即体素的大小。图1给出了单层的三角面片。同时,还要保证每个点都能取到,没有任何分割线上的点剩余。按此方法,最终得到一个分层次,基于体素的三角面片构成的三维模型。对Bunnv模型进行了规格化,如图2所示,规格化后的模型中,所有的三角面片都是已知的,如图2所示。
规格化的方法对于三维模型精度的要求可以通过调整体素的大小来解决。由于体素的棱长为自定义数值,其大小可以根据实际需求来设置。最理想的状况是整个模型中体素大小统一。对于模型中难以表达的细节,可以用缩小体素,即用小体素表示。当体素细化到一定程度,显示三维模型时的失真率就会接近最小值。
1.4三角面片合并为四边形
规格化后的三角面片大量存在于同一平面内。为了方便模型的表达,节省三维模型点面信息的存储空间,我们将相邻两个三角面片进行合并。将原本6个点表示的面片,只需4个点即可。三角面片合并为四边形的条件如下:
1)两个三角面片必须相邻;
2)两个三角面片必须在同一平面内。
两个三角面片可以构成一个平面平行四边形。这样可以尽可能的减少点面信息的存储空间。对于不同的三维模型,平面比例越大,则占用的存储空间越小。图3给出了规格化后仅用三角面片表示的三维模型与采用三角面片和四边形面片混合显示的三维模型的对比图。其中混合模型的表示中,绿色区域为三角面片,蓝色区域表示的是四边形。
2.三维模型的数据压缩
2.1压缩前的准备
上述模型的规格化中提到,规格化后的三角面片全部是已知的三角面片。现在,要对这些面片进行分类整理。在体素中,共有8个顶点,任意3个顶点构成一个三角面片,也就是一共有56种三角面片。这56种三角面片就是分类整理的对象。
首先是对连接边的分类。体素中8个顶点,任意两点构成一条连接边。在不考虑重复和方向的情况下,共有13种连接边。其次,以每条连接边为基础,体素中除连接边两点外的任意一点为第三点组成三角面片。最终确定每条连接边下的多个三角面片。在这中间,不同连接边下会有相同的三角面片。对这种重复不予考虑,依旧按照原方法进行分类。