使用Potree渲染大规模点云-踩坑记录


最近在研究点云渲染 想自己在本地搭建环境跑起来玩玩,不料坑真是多。花了我三天时间折腾,快要放弃的时候,终于搞好了。中间真是走了不少弯路,先是在mac上跑没成功,觉得是因为环境问题,又去折腾虚拟机,用别人构建好的docker也没成功。编译总是出各种错,改c++源代码,功夫不负有心人,终于搞好了。   ---------------- 2020年12月15日更新docker镜像-------------------------- 鉴于有很多小伙伴在搭建环境时,总是遇到各种各样的问题 ,我觉得很浪费时间。 为此我制作了一个docker镜像,免去搭建环境的烦恼。 确保本地装有docker环境
docker pull zt123123/potree-convert-ubuntu:latest
运行容器后,可直接执行PotreeConverter命令 此命令已经软连接到全局环境了 如果你不想踩坑,直接用镜像就好了,可以不用往下看了.......     ---------------- 正文开始---------------- //Potree 介绍 //开源初探 https://blog.csdn.net/jz_x/article/details/78899357 //依赖的三方库 https://www.cnblogs.com/wema/p/7052980.html   //PotreeConverter 安装过程 https://github.com/potree/PotreeConverter   linux / gcc 4.9 //安装lastools lastools (from fork with cmake)   cd ~/dev/workspaces/lastools git clone https://github.com/m-schuetz/LAStools.git master cd master/LASzip mkdir build cd build   //安装没有cmake要安装cmake cmake -DCMAKE_BUILD_TYPE=Release ..//配置cmake make     //安装PotreeConverter PotreeConverter   cd ~/dev/workspaces/PotreeConverter git clone https://github.com/potree/PotreeConverter.git master cd master (这里有个坑,默认分支是develop, 记得切换成master,否则后续cmake 会提示没有cmake.list清单文件。我猜想这里可能是在开发当中,还没来得及加上。后续如果有的话,就不用切换分支了) mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release -DLASZIP_INCLUDE_DIRS=~/dev/workspaces/lastools/master/LASzip/dll -DLASZIP_LIBRARY=~/dev/workspaces/lastools/master/LASzip/build/src/liblaszip.so .. make   //这个步骤有几个坑: //1.如果你是Mac OS 的电脑,你的电脑在编译lastools的时候,生成的文件叫liblaszip.dylib,而不是liblaszip.so,要不然会提示文件不存在   //2.cmake完成之后,进行到最后一步make的时候,会报一个致命错误 //    fatal error: 'experimental/filesystem' file not found #260   //3. 路径要写成绝对路径(巨坑!!!) ~/dev/workspaces 替换成相应的 /Users/xxx/dev/workspaces   //google一把,最后发现在github的issues里面人家早就发现这个问题了,人家早就列出了这个问题,也是醉了 //问题出在如果我们cmake的时候不指定gcc的路径,那么,cmake默认使用将是苹果公司的gcc版本,里面会缺少这个库 //解决的办法   cmake -DCMAKE_C_COMPILER=/usr/local/Cellar/gcc/8.1.0/bin/gcc-8 -DCMAKE_CXX_COMPILER=/usr/local/Cellar/gcc/8.1.0/bin/g++-8 -DCMAKE_BUILD_TYPE=Release -DLASZIP_INCLUDE_DIRS=/Users/hejinlong/Desktop/LAStools/master/LASzip/dll -DLASZIP_LIBRARY=/Users/hejinlong/Desktop/LAStools/master/LASzip/build/src/liblaszip.dylib ..   //根据自己的gcc版本而定   4. 编译的时候可能还会遇到一个错误  ‘Potree::Point&’ from an rvalue of type ‘Potree::Point’ writer->write(reader->getPoint());  原谅我太菜 c++不是很熟, 不然这个问题一眼就能看出来 再次goole得以解决 详情见  https://github.com/potree/PotreeConverter/issues/382 解决办法如下 Potree::Point point = reader->getPoint(); writer->write(point);   上述办法我没试验成功,我用了另一种方式
我报的错并不是这个,而是filesystem缺失 反而有 experimental/filesystem fatal error: 'filesystem' file not found  我直接魔改源代码 直接改成了 #include 记得同时改掉命名空间 namespace fs = std::experimental::filesystem;   //编译成功之后 ./PotreeConverter -h //查看相关的参数   //此处还有一个隐藏坑 //我们明明编译好了PotreeConverter工具,但是会报这样的一个错,原因是我们的终端字符集编码的问题 //  what(): locale::facet::_S_create_c_locale name not valid //解决的办法:https://github.com/potree/PotreeConverter/issues/281 export LC_ALL="zh_CN.GBK"     //实例:把las文件导出成为n个100kb大小的las文件 ./PotreeConverter /Users/hejinlong/Desktop/las/a.las -o /Users/hejinlong/Desktop/las/change -p leida --output-format LAS   分割好las之后就可以导入potree项目使用 https://github.com/potree/potree   效果截图:(嘻嘻 小伙伴看出来这是哪里了吗)

最后还是不得不对于这次踩坑总觉一下 1. 遇到问题还是要耐心,坚持就是胜利 2. 遇到技术问题还是要多google 3. c++还是要再加强学习一下