使用TextureMesh完成三维贴图(超全)

时间:2024-05-19 14:43:40

此博客建立在之前完成的项目上,之前的项目生成了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文件夹中应该包含如下文件

     使用TextureMesh完成三维贴图(超全)

1.可以使用以下三种方法将稠密点云构建为面

                  使用TextureMesh完成三维贴图(超全)

       使用方法参考: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文件夹中就出现了此文件)。

使用TextureMesh完成三维贴图(超全)

3.这样输出的mesh.ply就是构建成面的文件了。用meshlab打开效果如下:

使用TextureMesh完成三维贴图(超全)

4. 因为后面的Texturemesh需要ANN.dll

    下载ann_1.1.2.zip,百度搜索全名。或者点链接http://www.cs.umd.edu/~mount/ANN/

使用TextureMesh完成三维贴图(超全)


   解压后打开ann_1.1.2\MS_Win32下的Ann.sln(使用VS2013打开)。

   注意编译时选择64位编译Debug,因为后面的Texturemesh编译使用的时64位依赖库。

使用TextureMesh完成三维贴图(超全)

  编译时会报错编码问题。解决方案为修改每个项目的编码方式为Unicode编码,如下:

使用TextureMesh完成三维贴图(超全)

  重新编译后会有个错误:

  error C4430: 缺少类型说明符 - 假定为 int。注意:  C++ 不支持默认 int。暂时不做处理。因为我们用不到这个错误的项目。

  找到\ann_1.1.2\MS_Win32\bin里面的ANN.dll文件。复制粘贴到之前做好项目的bin中。

5.因为后面的Texturemesh还需要opencv支持。所以下载opencv安装:下载内容如下

使用TextureMesh完成三维贴图(超全)

  打开之后安装为如下内容:

使用TextureMesh完成三维贴图(超全)

  找到XXX\opencv\build\x64\vc14\bin中的opencv_world341d.dll,将它复制到之前项目的bin中。

  然后使用CMake编译(这一步可以暂时省略):

使用TextureMesh完成三维贴图(超全)  

6.然后将TextureMesh-0.2.1的压缩包解压(自行百度下载)。完成后目录为:

使用TextureMesh完成三维贴图(超全)

  然后在VS2013中创建新项目,命名为TextureMesh。将目录中的.h以及.cpp文件使用添加现有项的方式到新建的项目中。使用  x64位Debug编译。

 使用TextureMesh完成三维贴图(超全)

   编译过程处理错误:

   遇到找不到ANN/ANN.h的问题解决:

  使用TextureMesh完成三维贴图(超全)

  errorC4996: use _CRT_SECURE_NO_WARNINGS. 的问题解决:

  使用TextureMesh完成三维贴图(超全)

  然后编译出现一堆引入错误,解决办法如下:

  使用TextureMesh完成三维贴图(超全)


使用TextureMesh完成三维贴图(超全)

使用TextureMesh完成三维贴图(超全)

7.编译过后,将texturemesh.exe复制粘贴到之前的项目的bin目录****意是x64的)

  使用TextureMesh完成三维贴图(超全)

 注: 然后将之前项目的\bin\pmvs\models里面的mesh.ply文件使用meshlab修改编码方式。输出替换原来的mesh.ply(将二进制转换勾掉,不选)。

8.然后在Cygwin中运行:./TextureMesh.exe pmvs/

 使用TextureMesh完成三维贴图(超全)

  在之前项目的\bin\pmvs\models里面生成了output的几个文件。其中的output.obj就是贴图之后的文件。使用meshlab打开    如图:

使用TextureMesh完成三维贴图(超全)


9. 最后一步。使用ViewMesh现实贴图后的文件。类似于meshlab的功能。

新建VS2013项目。命名为ViewMesh,将解压后的.h .cpp按照之前的方式添加进去。然后用x64位debug编译。

使用TextureMesh完成三维贴图(超全)

编译出错处理方式:添加opengl的依赖,自行百度下载opengl包。

使用TextureMesh完成三维贴图(超全)

使用TextureMesh完成三维贴图(超全)

 errorC2065: “M_PI”: 未声明的标识符,解决办法:

使用TextureMesh完成三维贴图(超全)

10.由于大量的项目需要opencv的支持。所以我把opencv的支持添加到了系统变量里了。

使用TextureMesh完成三维贴图(超全)

11.至此。ViewMesh应该编译成功了。

   将下载的opengl中的\opengl\freeglut\bin\x64中的freeglut.dll放入之前项目的bin中。

  将编译好的ViewMesh中的。。\ViewMesh-0.1.3.tar\ViewMesh\x64\Debug中的ViewMesh.exe同样放入之前项目的bin中。

12.解决运行程序时怎么查看需要依赖库的方法(网上百度搜到的)。

使用TextureMesh完成三维贴图(超全)