1、SDF形状直径函数
SDF英文全称是Shape Diameter Function也就是形状直径函数。SDF是一个定义在网格表面的标量函数,它表达了网格表面上相邻各点物体体积直径的测量方法,以基于体积的形状函数为基础,在很大程度上能对相同对象的姿势改变保持无关性并且不同对象的相似部分维持相似值。下面是网格表面一个SDF值的示意图;给定表面网格上的一点,并以它为中心我们使用一个锥沿着内向法线方向(与法线方向相反的方向)发送数条射线,从锥的内部一直到达网格的另一面。一点处的SDF定义为所有射线长度的加权平均值,这属于所有长度中值的一个标准偏差。
2、使用CGAL计算模型的SDF值
CGAL4.5及以上版本提供了一个 Triangulated Surface Mesh Segmentation package(三角曲面网格分割包),这个包里面用提供计算网格表面SDF值的方法并用SDF来做网格分割,但是,我们也可以用SDF进行抽骨架。
3、Assimp
Assimp(Open Asset Import Library)是一个支持读取多种模型资源的开源库,当前最新的版本是3.0版,支持读取obj等许多格式的3D模型
4、使用Assimp将模型数据导入到CGLA AssimpToPolyhedron
要使用CGAL里的sdf_values()函数计算SDF,必须将我们自己定义的网格模型转为CGAL里的多面体类Polyhedron可以识别的模型;这里使用通用的obj模型,并使用Assimp转化到CGAL的多面体类。
#include <