MeshLab配置和编译

MeshLab配置和编译

MeshLab(http://sourceforge.net/p/meshlab)是一个用QT开发的、开源的、功能比较强大的可扩展的网格处理系统,致力于辅助清理、适配、编辑和显示非结构化的3D三角形网格。尤其适合于处理3D扫描得到的网格。它的核心是使用VCG库(一个C++的3D网格处理库,http://sourceforge.net/projects/vcg/),MeshLab和VCGlib都是意大利国立大学http://www.isti.cnr.it/可视计算实验室http://vcg.isti.cnr.it/发布的。


自行编译MeshLab时首先要配置好所需的工具和环境。

在Windows环境下首先需要安装QT4.8.3以上的版本和QTcreator。

 本文使用QT4.8.4,QTcreator和VS2010的编译器来进行编译。

编译的步骤如下:

1.通过SVN从下面的网站获得源码,并分别Meshlab中的src和vcglib中的vcg和wrap文件夹复制到同一个文件夹(这里命名为meshlabsrc)作为编译文件夹中,另外再拷贝一份vcg文件夹到Meshlab中的src之中。

Meshlab的SVN地址:svn checkout svn://svn.code.sf.net/p/meshlab/code/trunk meshlab-code

VCG的SVN地址:svn checkout svn://svn.code.sf.net/p/vcg/code/trunk vcg-code

这里使用TortoiseSVN下载:

2.由于VCG最新的源码已经有所修改,所以有些地方不兼容,尤其是vcg文件夹中的math文件夹内容complex文件夹中的algorithms文件夹中的内容已经发生了变化,编译mashlab时会报如下错误:

所以需要从http://sourceforge.net/projects/meshlab/files/meshlab/下载1.3.2版本的源代码包,将其中的vcglib解压出来,并将vcg文件夹中的math文件夹和algorithms文件夹分别都复制一份并替换到步骤1中meshlabsrc文件夹下对应的文件夹中的文件。

3.然后打开meshlabsrc\src\external路径下的openctm.h添加一句:

#define OPENCTM_BUILD
打开meshlabplugins\io_3ds路径下的types.h添加一句:
#define LIB3DS_EXPORTS
不做这样的修改编译时会给出dll链接不一致的警告,后面链接时会报错:
编译io_3ds库时也会出现问题,会报错说有些函数没有找到相关引用,打开对应的io_3ds.pro文件
另外还需要打开对应的io_3ds.pro文件,需要添加一行“win32-msvc2010:LIBS+= ../../external/lib/win32-msvc2010/3ds.lib”,
 
4.用QTcreator打开external.pro文件对项目进行编译,得到MeshLab所需的外部库文件的静态链接库。

5.将编译后的win32-msvc2010文件夹复制到路径meshlabsrc\src\external\lib中。

6.然后打开src文件夹中的meshlab_mini.pro或者meshlab_full.pro进行编译生成相应的可执行文件和库文件。需要注意的是用QTcreator打开这两个项目工程文件时会需要配置一下,debug和release的路径都要选择到meshlabsrc\src一级,否则容易出现找不到某些库文件的错误。建议先编译meshlab_mini.pro看是否有错误,因为这样编译时间短,如果没有问题则可以编译meshlab_full.pro。为了测试和执行可执行文件,需要将QT安装目录下相关的动态库文件拷贝到meshlabsrc\src\distrib之中。debug版本需要的库文件有:

QtCored4.dll QtGuid4.dll QtHelpd4.dll QtNetworkd4.dll QtOpenGLd4.dll QtScriptd4.dll QtXmld4.dll QtXmlPatternsd4.dll,release版本也需要对应的库文件。

 编译filter_creator项目时会报错如下:

filter_create.cpp(137) : error C2039: “Annulus”: 不是“vcg::tri”的成员

filter_create.cpp(137) : error C2065: “Annulus”: 未声明的标识符

filter_create.cpp(137) : error C2275: “CMeshO”: 将此类型用作表达式非法

应该是vcglib的问题,所以出现报错之后仅生成了部分插件,如下图所示:

 

其余插件只能一个一个地跳过编译了。

 

另外编译filter_csg库时也会出现“无法解析的外部符号 ___gmpz_clear”等错误,检查发现filter_csg.pro中存在bug,需要将“win32-msvc2010:INCLUDEPATH+=../../external/inc/win32-msvc2008/mpir-2.2.1_x64”修改为:“win32-msvc2010:INCLUDEPATH+=../../external/inc/win32-msvc2010/mpir-2.2.1_x64”以及

“win32-msvc2010:LIBS+=../../external/lib/win32-msvc2008/mpirxx.lib../../external/lib/win32-msvc2008/mpir.lib”修改为:

“win32-msvc2010:LIBS+=../../external/lib/win32-msvc2010/mpirxx.lib../../external/lib/win32-msvc2010/mpir.lib”

但是该文件夹下没有相应的库文件,因此需要自己去下载并编译相关的库文件。

 

另外也可以直接使用QT的minGW来从http://sourceforge.net/projects/meshlab/files/meshlab/下载对应版本的源代码包,如1.3.2版本对应为MeshLabSrc_AllInc_v132.tgz进行编译,可以参考如下相关文章:

在vs2005下编译meshlab 版本v1.2.2

http://hi.baidu.com/zhujianzhai/item/efc9059cda5b77c8b72531eb

meshlab编译和调试

http://blog.csdn.net/tjh666/article/details/8501237

用VS2008编译Meshlab v1.3.0

http://blog.csdn.net/charlievv/article/details/6630894

Meshlab在 Windows下的编译

http://blog.csdn.net/jingwenlai_scut/article/details/1408268

其他相关开发文章:

VCGLib中邻接关系的实现

http://www.cnblogs.com/youthlion/archive/2012/04/21/2461025.html

如何使用MeshLab & Netfabb 修复你的模型

http://site.douban.com/112017/widget/notes/1521190/note/143128177/

Meshlab中添加external支持库

http://blog.csdn.net/fightingbull/article/details/8143796

Meshlab中IO插件编写_使用自已添加的external支持库

http://blog.csdn.net/fightingbull/article/details/8144415

MeshLab和VCG的开发环境配置

http://blog.csdn.net/fightingbull/article/details/8100877

MeshLab中Filters菜单下插件的编写

http://blog.csdn.net/fightingbull/article/details/8103463

Qt插件机制的学习

http://blog.csdn.net/jingwenlai_scut/article/details/5412584

你可能感兴趣的:(Windows编程)