最近在研究點雲渲染 想自己在本地搭建環境跑起來玩玩,不料坑真是多。花了我三天時間折騰,快要放棄的時候,終於搞好了。中間真是走了不少彎路,先是在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
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得以解決
解決辦法如下
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++還是要再加強學習一下