C++: Meshlab1.3.3源码+VS2010+QT4.8.4编译说明

      为了学习其中的某些算法,在老师指导下最近编译了Meshlab的源码。为了实验室以后的师弟师妹们能顺利编译,老师让我写了个简要的《Meshlab源码编译说明》(不过这里面大部分内容也是整理的网友分享的经验),现在在这里也分享给大家,希望对遇到同样问题的朋友能有所帮助,共同提高。(注:相关内容版权归原始作者所有。)               _By_Li

 

目录

1软件环境

2编译过程

2.1修改文件

2.2编译

3注意事项

4 其他编译过程(问题)参考

5 部分源码分析

1 软件环境

1.1. VS2010。

1.2. QT4.8.4(下载地址:http://download.qt.io/archive/qt/4.8/4.8.4/

1.3. qt-vs-addin-1.1.11(下载地址:http://download.qt.io/official_releases/vsaddin/qt-vs-addin-1.1.11-opensource.exe.mirrorlist

1.4. meshlab v1.3.3(下载地址:https://sourceforge.net/projects/meshlab/files/meshlab/MeshLab%20v1.3.3/)。

 

2 编译过程

2.1 修改文件:

2.1.1打开..\MeshLabSrc_AllInc_v133\meshlab\src\external\OpenCTM-1.0.3\lib路径下的openctm.h添加一句:#define OPENCTM_BUILD。

2.1.2打开..\MeshLabSrc_AllInc_v133\meshlab\src\external\lib3ds-1.3.0\lib3ds路径下的types.h添加一句:#define LIB3DS_EXPORTS。

2.1.3打开..\MeshLabSrc_AllInc_v133\meshlab\src\meshlabplugins\io_3ds路径下io_3ds.pro文件,需要添加一行“win32-msvc2010:LIBS+=../../external/lib/win32-msvc2010/3ds.lib”。

2.1.4打开..\MeshLabSrc_AllInc_v133\meshlab\src\meshlabplugins\filter_csgfilter_csg.pro,将“win32-msvc2010:INCLUDEPATH+=../../external/inc/win32-msvc2008/mpir-2.2.1_x64”中的2008改为2010,以及“win32-msvc2010:LIBS+=../../external/lib/win32-msvc2008/mpirxx.lib../../external/lib/win32-msvc2008/mpir.lib”同上。

2.2 编译:

2.2.1安装好QT及qt-vs-addin之后打开VS2010,选择open Qt Project file(.pro)项,打开src\external文件夹下的external.pro,生成解决方案。

2.2.2完成2.2.1后选择open Qt Project file(.pro)项打开..\MeshLabSrc_AllInc_v133\meshlab\src下的meshlab_full.pro(全部)或者meshlab_mini.pro(子集,速度快一些)。按F7对所有项目进行生成。

2.2.3进行完2.2.2后出现两个报错:

1)如果出现LINK1104找不到..\MeshLabSrc_AllInc_v133\meshlab\src\distrib下的common.lib报错,可尝试再次编译(F7)。否则,在VS中配置属性-->链接器-->输入-->附加依赖项加入库名(×××.lib)。在里面填上lib文件所在的路径后再次生成“meshlab”这一个项目,此时会出现找不到某.obj文件,然后把刚刚添加的库文件路径删掉再次生成即可。

2filter_csg项目出现error C1083: 无法打开包括文件:“mpirxx.h”。此问题经查需要通过QT编译external.pro生成所需项。

3 注意事项

3.1在解压meshlab原文件时,一定不要用360解压软件(不知什么原因解压后存在文件丢失现象,导致我白白忙活了一天多的时间。。),推荐“2345好压”。加压过程中出现下图中现象选择“全部跳过”

 

 

4 其他编译过程(问题)参考

4.1. https://blog.csdn.net/u014055044/article/details/51398523?locationNum=4&fps=1

4.2. https://blog.csdn.net/Linear_Luo/article/details/52383243

4.3. http://www.xuebuyuan.com/1006226.html

5 部分源码分析

5.1 meshlab

主目录。采用QT开发的的网格处理系统,它的核心使用了vcglib。下面是meshlab主要的源码目录结构:

5.1.1 common

 

      基础文件目录。主要包括插件参数/脚本解析,插件接口定义,插件管理,mesh管理基类等。

5.1.2 external

    第三方源码库目录。因为vcglib和meshlab中文件会使用到它们,所以在编译meshlab工程时,需先编译这个目录中工程(将生成lib文件复制到distrib目录),编译细节可参见注意事顶段落。

例如:

lib3ds-xx

         Autodesk 3D Studio文件C语言库.

muparser_xx

         Fast mathematical expressions parserlibrary.

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 alocal minimum ofa function that is expressed as the sum of squares of nonlinearfunctions.通用的非线性最小二乘算法库.

 

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 higherdimensions.研究解决凸包问题.

5.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文件。

5.1.4     sampleplugins

      扩展插件示例源码的目录。

5.1.5     meshlab

      主程序目录。例如:程序入口(MainWindow的实现,分别在mainwindow_RunTime和mainwindow_Init文件中),以及各种Actions(Render部分的生成,在rendermodeactions文件中)、Menus、Toolbars、Dialog逻辑等。

5.1.6     meshlabserver

      批量处理工具目录,减少手工工作量。采用meshlabserver(命令行方式) +mlx文件(filterscript)的方式,可以自动化Meshlab工作。

5.1.7     distrib

      发布目录,编译后生成的文件存放在此。

5.2 vcglib

     meshlab的核心库。下面是vcglib主要的源码目录结构:

5.2.1      vcg

         整个库的核心,定义了所有的算法和数据结构。

5.2.2      wrap

         包含一些针对特定需求/上下文/库的VCG概念的封装。例如:很多格式的网格数据的导入和导出,用OpenGL渲染三角形网格的代码等。

5.2.3      eigenLib

        线性代数库,VCGLib中的高级矩阵操作基于这个库。

 

vcglib采用标准C++开发,封装了IO,OpenGL等功能。核心功能如下:

提供 Mesh(triangularmesh,tetrahedral mesh,三角网格或四面体网格)数据结构的定义,该数据结构支持对 Mesh数据的快速访问(拓扑信息、空间查询等)以及高效执行网格上算法;

在 Mesh数据结构基础上,实现大量高效的网格算法,如网格修补、平滑、变形、曲率计算、细分、泊松盘采样、等值面计算等;

 IO支持,读写 PLY、OBJ、STL、3DS、OFF、DXF等格式网格文件;

UI 支持,如 OpenGL网格显示,Trackball交互等。

 

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值