婚纱网站建设 最开始,网站开发js不更新,网站自然排名优化,网站建设制作报价方案对于Mesh#xff0c;我们通常分为结构化网格和非结构化网格。理解很简单#xff0c;除了四边形和六面体是结构化网格#xff0c;其它都是非结构化网格
最近在学习网格算法#xff0c;本人关心的主要是3D网格相关的算法#xff0c;总结了一下主要包括#xff1a;网格生成…对于Mesh我们通常分为结构化网格和非结构化网格。理解很简单除了四边形和六面体是结构化网格其它都是非结构化网格
最近在学习网格算法本人关心的主要是3D网格相关的算法总结了一下主要包括网格生成网格平滑网格参数化网格重新剖分网格简化网格修复网格变形其他算法细分布尔操作偏置抽壳雕刻曲面切割等。从开源的算法库入手分别用了CGALVTKMeshLabGTS四个开源库的算法功能先小小的做个总结。
CGALThe Computational Geometry Algorithms Library计算几何算法库
官方的介绍
CGAL是高效、可靠的C几何算法库。CGAL可用于多个需要几何计算的领域例如地理信息系统GIS计算机辅助设计CAD分子生物学医学影像计算机图形学和机器人学。
该算法库提供几何相关的数据结构和算法例如三角网格化Voronoi图多边形和多面体的布尔运算点集处理曲面整理曲面网格和体积网格生成几何处理Alpha形状凸壳算法KD树等。
在CGAL4.9的手册里面可以了解到CGAL包含
算数和代数计算
组合算法矩阵的单调排序线性和二次方程求解
几何内核2D3D和dD
凸壳算法2D3D和dD
多边形2D多边形2D多边形布尔操作2D多边形分解二维多边形Minkowski和2D线段简化2D可视化计算
复合单元和多面体3D多面体面半边数据结构曲面网格复合映射线性复合单元多面体3D布尔操作多面体凸壳分解多面体3DMinkowski和
曲线整理2D整理2D曲线交点2D快速近似2D包络线3D包络面
三角剖分和Delaunay剖分2D剖分2D剖分数据结构2D周期剖分3D剖分3D剖分数据结构ND剖分2D Alpha形状3D Alpha形状
Voronoi图2D分割Delaunay图L无限分割Delaunay图2D Apollonius图2DVoronoi图适配器
网格生成2D整合剖分和网格3D曲面网格生成3D表面曲面网格化3D网格生成
形状重建泊松曲面重建尺度空间曲面重建高级点集曲面重建优化传输曲面重建
几何处理多边形网格处理3D曲面细分方法三角化曲面网格分割三角化曲面网格简化三角化曲面网格变形三角化曲面网格参数化三角化曲面网格最短路径三角化曲面网格骨架三角化曲面网格的脊和中心采样点曲面的局部微分特性的估计点集的处理点集形状检测2D流线分布
空间搜索和排序2D最近邻搜索区间空间隔列表dD空间搜索dD分割树dD同向盒的相交序列3D快速相交和距离计算空间排序
几何优化体积包围盒内切区域优化距离PCA
插值2D曲面函数插值广义质心坐标
运动数据结构运动数据结构运动框架
支持库STL扩展Boost图形库求解器SolversBoost属性映射Cone-Based Spanners,Handles and Circulators几何对象生成器分析工具和hash映射IO流
可视化GeomviewQt图形可视化框架CGAL Ipelets。
从CGAL官方手册提供的功能可以看出CGAL能够提供网格生成网格剖分网格简化网格变形网格布尔运算网格曲面参数化的功能但是缺少网格修复的功能可能有但是本人没有发现。
GTSthe GNU Triangulated Surface LibraryGNU三角网格化曲面库
官方介绍
GTS表示the GNU Triangulated Surface Library它提供一系列开源、有用的函数用于处理包含连接三角面片的3D曲面网格。
它的代码是基于面向对象的方法用C实现的。需要注意的是GTS最初的目的是为科研人员提供简单高效的处理3D曲面网格的函数库。
该算法库的主要特点
简单的面向对象的数据结构快速获取拓扑特性
2D动态Delaunay剖分和约束Delaunay剖分
稳定的几何预测用于快速自适应浮点计算
稳定的曲面布尔操作
曲面修复和简化
基于视角的动态连续LOD
基于视角LOD的预处理
包围盒树和KD树用于高效点的定位和交点检测
图操作图的遍历和分解
矩阵计算
快速生成三角面
从官方提供的信息可以看出GTS能够提供网格简化三角面片剖分3D曲面网格的布尔运算网格修复的处理但是功能都相对较为简单不能处理复杂的网格和体数据网格。
另外需要注意的是GTS是为GNU开发的基本数据结构是基于Glib这就使得在windows平台下编译和使用非常困难所以不推荐使用。
VTKVisualization toolkit可视化工具
官方介绍
VTK是开源免费的软件系统可用于3D计算机图形学图像处理和可视化。VTK包含C类库和一些集成接口层如Tcl/TkJava和Python。VTK支持标量矢量纹理和体数据的可视化算法也提供一些高级模型算法例如隐式函数建模多边形消减网格平滑裁剪轮廓提取Delaunay剖分等。VTK包含一个广泛信息可视化框架和一系列3D交互工具。VTK支持并行处理和多种GUI工具数据的集成如Qt和tk。VTK具有跨平台特性。
VTK官方提供了丰富的文档和丰富的例子教程。VTK虽然是3D可视化工具但是提供了大量图像和网格处理算法易于使用。但是个人感觉VTK存在的问题是效率太低为了满足跨平台特性和易用性VTK选择的数据结构包含几乎所有的数据信息导致计算效率较低。并且VTK提供的算法大部分是传统通用的算法没有进行效率上的优化能够实现功能但是效率是问题。另外由于历史的问题VTK的可视化一直只支持OpengGL1.2左右的版本在VTK7.0之后才逐渐升级到OpenGL2.0这对于OpenGL已经发布到4.5且停止更新的前提下VTK的渲染效率也存在一些问题。为了满足管线框架VTK的源代码比较难懂对于新手来说很难进行扩展所以使用要慎重个人意见。
MeshLab/VCG library
MeshLab官方介绍
MeshLab是一个开源易用和扩展的系统可用于处理和编辑非结构化3D三角面片网格。
该系统的主要目的是处理一般3D扫描的生成的非简单非结构化模型。该系统提供了网格编辑清除检查诊断渲染和转换工具。
该系统基于VCG算法库VCG算法库是ISTI-CNR的可视化计算实验室开发可处理所有网格处理核心任务。MeshLab系统开始于2005年最初是由比萨大学计算机科学系FGT课程中一些动手能力强的学生自愿开发的第一版的代码量约为15k行。在接下来的几年中FGT的学生继续完善这个工作并提供了越来越多的功能特性。
特点
交互拾取和删除网格的任意部分包括较大的网格模型。
网格的绘制交互拾取平滑和上色
多种输入输出格式第一个支持U3D格式的开源工具
网格清除
删除重复顶点未引用顶点空面片
删除小的孤立组件
调整法矢不一致和法矢翻转
清除非流形面片
自动填补孔洞
重新剖分
高质量边界的塌陷简化包括纹理坐标限制的情况
点集的网格重建MC和泊松重建
曲面细分loop和bufferfly
特征保持的平滑和光顺
手动填补孔洞
着色和检测
高斯和均值曲线
扩展边界测地线距离
非流形边和非流形顶点
自相交面片
环境光遮蔽
交互式网格画刷画刷颜色画刷选择平滑
测量工具显示网格上点之间的线性测量。
切片工具导出SVG格式的平面切片
3D扫描工具
基于ICP的范围映射校正工具将网格变换到相同的索引空间
融合多个泊松重建的网格
基于渲染的OpenGL Shader
高质量的超大渲染打印16K x 16K
可扩展插件架构可以简答快速添加新的处理着色和输入输入格式的功能。
VCG Library官方介绍 VCG是The Visualization and Computer Graphics Library的缩写是一个开源易用的C模板库用于三角网格和四边形网格的操作处理和显示。
该算法库包含超过100K行代码基于GPL协议 该算法库是意大利国家研究委员会中可视化计算实验室多款工具软件的基础算法例如metro和MeshLab.
VCG算法库专注于三角网格处理功能提供广泛且最先进的网格处理功能。例如
高质量网格简化功能用于处理面片错误和边界塌陷
高效的空间数组结构均匀网格hash网格kd树
高级网格平滑和光顺算法
曲面计算
纹理坐标优化
Hausdorff距离计算
测地线路径
网格修复能力
等值面提取和高级网格重建算法
泊松圆盘采样和其他点的采样工具
曲面细分
从官方提供的文档可以看出MeshLab软件依赖于VCG算法库VCG算法库提供网格检测网格修复功能这是CGAL所不具备的功能。另外作为完整的软件,MeshLab提供完成的可视化和交互功能提供多种OpenGL Shader还提供了用于快速开发的插件框架这是其他网格处理工具所不具备的功能也是MeshLab所独有的优势。
综上所述要实现原定的功能没有一个现有的开源算法库能够满足所有的功能还是需要了解不同的算法库了解基本原理才是关键。
另外本次只是比较了现有的4个开源算法库现有的开源算法库还有OpenMeshPCL等有机会再学习介绍。