此博客建立在之前完成的项目上,之前的项目生成了TextureMesh所需要的输入option-0000.ply,mesh.ply。
如果之前的项目没有做,参考链接:
https://blog.****.net/qq_42666483/article/details/80997718 (Bundler)
https://blog.****.net/qq_42666483/article/details/81002401 (CMVS-PMVS)
在得到稠密点云option-0000.ply之后,models文件夹中应该包含如下文件
1.可以使用以下三种方法将稠密点云构建为面
使用方法参考:http://www.cs.jhu.edu/~misha/Code/PoissonRecon/Version9.01/
2.我们暂且使用PosissonRecon.exe将稠密点云构建为面,PosissonRecon源码通过VS2015编译通过,使用VS2013会系统错误。将编译好的PosissonRecon.exe放置到之前完成好的项目的bin目录下。定位到bin,然后通过Cygwin编译:
输入:
./PoissonRecon.exe --in ./pmvs/models/option-0000.ply --out./pmvs/models/mesh.ply
(注意是输出mesh.ply,因为后面会使用这个名字的文件。所以名字定为mesh,这样在pmvs的models文件夹中就出现了此文件)。
3.这样输出的mesh.ply就是构建成面的文件了。用meshlab打开效果如下:
4. 因为后面的Texturemesh需要ANN.dll
下载ann_1.1.2.zip,百度搜索全名。或者点链接http://www.cs.umd.edu/~mount/ANN/
解压后打开ann_1.1.2\MS_Win32下的Ann.sln(使用VS2013打开)。
注意编译时选择64位编译Debug,因为后面的Texturemesh编译使用的时64位依赖库。
编译时会报错编码问题。解决方案为修改每个项目的编码方式为Unicode编码,如下:
重新编译后会有个错误:
error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int。暂时不做处理。因为我们用不到这个错误的项目。
找到\ann_1.1.2\MS_Win32\bin里面的ANN.dll文件。复制粘贴到之前做好项目的bin中。
5.因为后面的Texturemesh还需要opencv支持。所以下载opencv安装:下载内容如下
打开之后安装为如下内容:
找到XXX\opencv\build\x64\vc14\bin中的opencv_world341d.dll,将它复制到之前项目的bin中。
然后使用CMake编译(这一步可以暂时省略):
6.然后将TextureMesh-0.2.1的压缩包解压(自行百度下载)。完成后目录为:
然后在VS2013中创建新项目,命名为TextureMesh。将目录中的.h以及.cpp文件使用添加现有项的方式到新建的项目中。使用 x64位Debug编译。
编译过程处理错误:
遇到找不到ANN/ANN.h的问题解决:
errorC4996: use _CRT_SECURE_NO_WARNINGS. 的问题解决:
然后编译出现一堆引入错误,解决办法如下:
7.编译过后,将texturemesh.exe复制粘贴到之前的项目的bin目录****意是x64的)
注: 然后将之前项目的\bin\pmvs\models里面的mesh.ply文件使用meshlab修改编码方式。输出替换原来的mesh.ply(将二进制转换勾掉,不选)。
8.然后在Cygwin中运行:./TextureMesh.exe pmvs/
在之前项目的\bin\pmvs\models里面生成了output的几个文件。其中的output.obj就是贴图之后的文件。使用meshlab打开 如图:
9. 最后一步。使用ViewMesh现实贴图后的文件。类似于meshlab的功能。
新建VS2013项目。命名为ViewMesh,将解压后的.h .cpp按照之前的方式添加进去。然后用x64位debug编译。
编译出错处理方式:添加opengl的依赖,自行百度下载opengl包。
errorC2065: “M_PI”: 未声明的标识符,解决办法:
10.由于大量的项目需要opencv的支持。所以我把opencv的支持添加到了系统变量里了。
11.至此。ViewMesh应该编译成功了。
将下载的opengl中的\opengl\freeglut\bin\x64中的freeglut.dll放入之前项目的bin中。
将编译好的ViewMesh中的。。\ViewMesh-0.1.3.tar\ViewMesh\x64\Debug中的ViewMesh.exe同样放入之前项目的bin中。
12.解决运行程序时怎么查看需要依赖库的方法(网上百度搜到的)。