Meshlab源码初探

来源:互联网 发布:数据散修txt下载 编辑:程序博客网 时间:2024/04/27 21:51

Meshlab源码初探

作者:徐景周

 

一、概述

    MeshLab是一个开源的、便携式的、开扩展的系统,用于处理和编辑非结构化的三角网格。这个系统的目的是对在3D扫描生成的的非结构模型处理时起到帮助,提供一组工具用于编辑、清理、修复、检查、渲染和转换这种格式的网格。MeshlabVCGlib都是意大利国立研究院的作品。

 

二、软件环境

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

    第三方源码库目录。因为vcglibmeshlab中文件会使用到它们,所以在编译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部分,都是通过MeshlabStdDialogMeshLabXMLStdDialog二个类生成的。

    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_RunTimemainwindow_Init文件中),以及各种Actions(Render部分的生成,在rendermodeactions文件中)MenusToolbarsDialog逻辑等。

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++开发,封装了IOOpenGL等功能。核心功能如下:

  • 提供 Meshtriangular meshtetrahedral mesh,三角网格或四面体网格)数据结构的定义,该数据结构支持对 Mesh数据的快速访问(拓扑信息、空间查询等)以及高效执行网格上算法。
  • Mesh数据结构基础上,实现大量高效的网格算法,如网格修补、平滑、变形、曲率计算、细分、泊松盘采样、等值面计算等。
  • IO 支持,读写 PLYOBJSTL3DSOFFDXF等格式网格文件。
  • UI 支持,如 OpenGL网格显示,Trackball交互等。

 

五、架构


框架图


 

用例图

 


插件类图

 


启动事件图

 


参考文献 

1. 源码编译, http://wenku.baidu.com/link?url=AJ0j28wFNoXiOhWcoHaLP6W7Uxgapjy6IXut73eR1o6omACaQK8q6Z3mCb1moDnL9Dp9-jCGn5-QSWFxPi5y3lHd3gOZlxSpJwxCk9wAckO


 

0 0
原创粉丝点击