- 依赖库(以下版本均经过测试)
osg3.4.1,osg3.6.4,作为主要的渲染引擎;
qt5.13.0,qt5.7.1,作为嵌入的显示界面;
opencv3.4.0,opencv3.4.7,
glog, 记录程序运行中的日志;
liblas1.8.1,用于las点云文件的读写;
pcl1.8.1,基本点云库,点云读写以及基本点云数据格式及其他操作;
boost1.67.0,用于基本的文件操作。
- 开发平台
VS2015,VS2017建立工程,将文件添加到工程中,编译即可。可以尝试以下操作
- 可以直接用文本编辑器打开.vcxproj文件,修改
<VCProjectVersion>14.0</VCProjectVersion>
14.0对应vs2015,或其他合适版本 - 工具集版本为
ToolsVersion="14.0"
14.0对应vs2015 - 修改平台为
<PlatformToolset>v140</PlatformToolset>
v140对应vs2015 <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
Windows版本修改
强烈建议Release下运行。在PointCloudRoamInQt文件夹下,找到Configuration.yaml样例文件,将待漫游的点云路径和轨迹文件配置好,命令行运行编译生成的exe,参数为.yaml文件路径。
- 轨迹文件格式
3
366351.445104 3451455.032898 17.689400
366342.848100 3451626.105997 16.927400
366333.584099 3451805.588922 17.924399
第一行为轨迹点个数,后续每行记录分别为漫游轨迹点的xyz,z值可修改以改变漫游视点高低。
2. yaml文件
在冒号后有一个空格,切记。
1、一开始的代码版本是直接基于OSG和VS2015的,后面将代码迁移到了VS2017和Qt上。
2、将代码和多线程显示结合到了一起。
3、和P2M中的点云漫游代码进行了对比,发现其核心计算旋转角度的部分是一样的,然而在漫游的中途总是会出现视角转换了角度。
4、搞了好久一直没有搞清楚为什么中途会发生变化,以为是四元数计算的时候出现了问题,但是后面发现是因为轨迹文件中最后一样出现了
空行,没有xyz,但是会被自动读取进去。导致两个节点之间的旋转角度计算出现归零错误,后面将这行删掉之后就可以了。
5、代码的注释已经写了大部分。
6、采用yaml进行参数配置已经完成,后面本项目可能会考虑要对点云读取进行加速的操作吧。
其中涉及到的四元数是根据https://github.com/Krasjet/quaternion
提供的资料学习的,感觉讲的挺好的,公式推导挺详细的,参数写的也比较仔细
- 点云读取加速,maybe内存映射的方式。
- Debug下还有一个错误,估计是哪个指针或者dll的问题。
- 做小角开个小框显示当前漫游位置轨迹。