使用Potree渲染大規模點雲-踩坑記錄


最近在研究點雲渲染 想自己在本地搭建環境跑起來玩玩,不料坑真是多。花了我三天時間折騰,快要放棄的時候,終於搞好了。中間真是走了不少彎路,先是在mac上跑沒成功,覺得是因為環境問題,又去折騰虛擬機,用別人構建好的docker也沒成功。編譯總是出各種錯,改c++源代碼,功夫不負有心人,終於搞好了。
 
---------------- 2020年12月15日更新docker鏡像--------------------------
鑒於有很多小伙伴在搭建環境時,總是遇到各種各樣的問題 ,我覺得很浪費時間。 為此我制作了一個docker鏡像,免去搭建環境的煩惱。
確保本地裝有docker環境
docker pull zt123123/potree-convert-ubuntu:latest
運行容器后,可直接執行PotreeConverter命令
此命令已經軟連接到全局環境了
如果你不想踩坑,直接用鏡像就好了,可以不用往下看了.......
 
 
---------------- 正文開始----------------
//Potree 介紹
//開源初探
//依賴的三方庫
 
//PotreeConverter 安裝過程
 
linux / gcc 4.9
//安裝lastools
lastools (from fork with cmake)
 
cd ~/dev/workspaces/lastools
cd master/LASzip
mkdir build
cd build
 
//安裝沒有cmake要安裝cmake
cmake -DCMAKE_BUILD_TYPE=Release ..//配置cmake
make
 
 
//安裝PotreeConverter
PotreeConverter
 
cd ~/dev/workspaces/PotreeConverter
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得以解決
解決辦法如下
Potree::Point point = reader->getPoint();
writer->write(point);
 
上述辦法我沒試驗成功,我用了另一種方式
我報的錯並不是這個,而是filesystem缺失 反而有 experimental/filesystem
fatal error: 'filesystem' file not found 
我直接魔改源代碼 直接改成了 #include<experimental/filesystem>
記得同時改掉命名空間
namespace fs = std::experimental::filesystem;
 
//編譯成功之后
./PotreeConverter -h //查看相關的參數
 
//此處還有一個隱藏坑
//我們明明編譯好了PotreeConverter工具,但是會報這樣的一個錯,原因是我們的終端字符集編碼的問題
//  what(): locale::facet::_S_create_c_locale name not valid
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++還是要再加強學習一下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM