Meshlab源码初探
来源:互联网 发布:数据散修txt下载 编辑:程序博客网 时间:2024/04/27 21:51
Meshlab源码初探
作者:徐景周
一、概述
MeshLab是一个开源的、便携式的、开扩展的系统,用于处理和编辑非结构化的三角网格。这个系统的目的是对在3D扫描生成的的非结构模型处理时起到帮助,提供一组工具用于编辑、清理、修复、检查、渲染和转换这种格式的网格。Meshlab和VCGlib都是意大利国立研究院的作品。
二、软件环境
2.1 VS2010
2.2 Meshlab 1.3.3
下载:https://sourceforge.net/projects/meshlab/files/meshlab/
最新源码:https://github.com/cnr-isti-vclab/meshlab
2.3 QT 5.2.1 (建议安装到D盘,目录默认。如:D:\Qt\Qt5.2.1)
2.4 QT VS Add-in 1.2.3
下载:https://www.qt.io/download-open-source/
三、 注意事项
3.1 源码编译
http://wenku.baidu.com/link?url=AJ0j28wFNoXiOhWcoHaLP6W7Uxgapjy6IXut73eR1o6omACaQK8q6Z3mCb1moDnL9Dp9-jCGn5-QSWFxPi5y3lHd3gOZlxSpJwxCk9wAckO
3.2 filter_csg插件源码中,引用了源码中没有的第三方库。例如:mpir.lib
3.3 decorate_background插件源码中,图片丢失:”/textures/cubemaps/uffizi.jpg”.
3.4 filter_clean插件源码中存在着文件,依赖于另一个插件源码:edit_pickpoints.
3.5 通过vcg::CallBackPos等函数,可在MeshLab和VCGLab间回调。
四、 源码分析
4.1 meshlab
主目录。采用QT开发的的网格处理系统,它的核心使用了vcglib。
下面是meshlab主要的源码目录结构:
4.1.1 common
基础文件目录。主要包括插件参数/脚本解析,插件接口定义,插件管理,mesh管理基类等。
4.1.2 external
第三方源码库目录。因为vcglib和meshlab中文件会使用到它们,所以在编译meshlab工程时,需先编译这个目录中工程(将生成lib文件复制到distrib目录),编译细节可参见注意事项一节。
例如:
- lib3ds-xx
Autodesk 3D Studio文件C语言库.
- muparser_xx
Fast mathematical expressions parser library.
- OpenCTM-xx
Library for compression of 3D triangle meshes.
- bzip2-xx
File compression program that uses the Burrows–Wheeler algorithm.
- jhead-xx
Extract and manipulate JPEG EXIFinformation of photos.
- levmar-xx
The Levenberg-Marquardt algorithm is an iterative technique that finds a local minimum ofa function that is expressed as the sum of squares of nonlinear functions. 通用的非线性最小二乘算法库.
- structuresynth-xx
Structure Synthgenerates 3D structures by specifying a design grammar.
- glew-xx
The OpenGL Extension Wrangler Library.
- qhull -xx
Qhullcomputes the convex hull, Delaunay triangulation, Voronoi diagram, halfspaceintersection about a point, furthest-site Delaunay triangulation, andfurthest-site Voronoi diagram. It runs in 2-d, 3-d, 4-d, and higher dimensions.研究解决凸包问题.
4.1.3 meshlabplugins
插件目录。 meshlab中插件的加载有二种方式:一种是遍历插件目录中的dll文件,进行加载。另一种是遍历插件目录中的xml文件(例如:filter_measure.xml),通过判断是否存在与xml文件同名的dll文件和xml文件中是否包含javascript,进行不同方式的加载。其中,插件中的对话框等UI部分,都是通过MeshlabStdDialog和MeshLabXMLStdDialog二个类生成的。
MeshLab对其功能的扩展是通过插件来实现的,通过实现不同的接口,可以将插件放在不同的菜单下或工具栏上。例如:MeshFilterInterface接口,用于实现Filter菜单下的插件。
例如:
- filter_meshing
Mesh网格处理:缩放、移动、旋转,细分面,删除重复顶点等。
- filter_select
提供多种选择和删除方式。
- filter_layer
Mesh层操作。例如:删除/复制/重命名Mesh层、合并Mesh层等。
- io_base
导入/导出一些3D文件。例如:STL,PLY, OBJ等。
- decorate_base
绘制坐标轴、顶点、边角、边框、网格、标签、特征柱状图等。
- edit_manipulators
鼠标和键盘键进行操作:缩放、平移和旋转。
- edit_align
Mesh间拼接。
- edit_hole
Mesh中补洞。
- edit_measure
Mesh中测量选定距离。
- render_gdp
着色器:遍历加载与处理.gdp文件。
- render_rfx
着色器:遍历加载与处理.rfx文件。
4.1.4 sampleplugins
扩展插件示例源码的目录。
4.1.5 meshlab
主程序目录。例如:程序入口(MainWindow的实现,分别在mainwindow_RunTime和mainwindow_Init文件中),以及各种Actions(Render部分的生成,在rendermodeactions文件中)、Menus、Toolbars、Dialog逻辑等。
4.1.6 meshlabserver
批量处理工具目录,减少手工工作量。采用meshlabserver(命令行方式) +mlx文件(filterscript)的方式,可以自动化Meshlab工作。
4.1.7 distrib
发布目录,编译后生成的文件存放在此。
4.2 vcglib
meshlab的核心库。
下面是vcglib主要的源码目录结构:
4.2.1 vcg
整个库的核心,定义了所有的算法和数据结构。
4.2.2 wrap
包含一些针对特定需求/上下文/库的VCG概念的封装。例如:很多格式的网格数据的导入和导出,用OpenGL渲染三角形网格的代码等。
4.2.3 eigenLib
线性代数库,VCGLib中的高级矩阵操作基于这个库。
vcglib采用标准C++开发,封装了IO,OpenGL等功能。核心功能如下:
- 提供 Mesh(triangular mesh,tetrahedral mesh,三角网格或四面体网格)数据结构的定义,该数据结构支持对 Mesh数据的快速访问(拓扑信息、空间查询等)以及高效执行网格上算法。
- 在 Mesh数据结构基础上,实现大量高效的网格算法,如网格修补、平滑、变形、曲率计算、细分、泊松盘采样、等值面计算等。
- IO 支持,读写 PLY、OBJ、STL、3DS、OFF、DXF等格式网格文件。
- UI 支持,如 OpenGL网格显示,Trackball交互等。
五、架构
框架图
用例图
插件类图
启动事件图
参考文献
1. 源码编译, http://wenku.baidu.com/link?url=AJ0j28wFNoXiOhWcoHaLP6W7Uxgapjy6IXut73eR1o6omACaQK8q6Z3mCb1moDnL9Dp9-jCGn5-QSWFxPi5y3lHd3gOZlxSpJwxCk9wAckO
- Meshlab源码初探
- Meshlab源码初探
- Meshlab源码初探
- meshlab
- MeshLab源码编译 vs2010+win7 64bit
- 编译MeshLab(3)—VS2010编译MeshLab源码之编译meshlab_mini.pro
- 编译MeshLab(4)—VS2010编译MeshLab源码之编译meshlab_full.pro
- Compiling Meshlab
- MeshLab学习
- MeshLab 编译
- Meshlab简介
- MeshLab 编译
- Launcher源码初探
- Launcher源码初探
- Launcher源码初探
- ibatis源码浅析- 初探
- Launcher源码初探
- Launcher源码初探 转载
- 如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)
- (已解决)win10系统cortana小娜无法连接网络,其他程序可正常联网
- 栈、队列(自定义队列)、数组
- leecode 解题总结:79. Word Search
- redis类型说明及应用场景
- Meshlab源码初探
- UVA-11882 bfs + dfs + 剪枝
- 9 * 9 数独游戏小程序 (DFS)
- 1.九宫格闪动效果
- Ruby on Rails学习笔记(6)--Ruby中的变量
- NGUI的流光shader解决方案(一)(支持UITexture和使用图集的UISprite)
- MySQL支持的数据类型
- 蓝桥杯 Basic-2 01字串
- Android Fragment 真正的完全解析(上)