一、下载源码
首先,下载源码https://github.com/CloudCompare/CloudCompare
CC_CORE
CC_CORE 被作为独立代码库脱离了 CloudCompare 仓库,它的项目地址是 https://github.com/CloudCompare/CCCoreLib ,在 CloudCompare 项目下的 /libs/qCC_db/extern/CCCoreLib 目录作为 git 子模块引入。需要单独下载
该部分实现了很多点云处理相关数据结构和算法,例如数据结构 CCVector、DgmOctree 和Neighbourhood等,还有用来描述三维模型的各种 cloud、mesh 和 polyline 类型,算法方面提供了常用的点云算法。
QCC_DB
该模块在 /libs/qCC_db 目录下。
这部分实现了 cloud、mesh 和 polyline 等模型数据在内存中存储和管理功能。
这些模型类全都继承自 ccHObject 类型,ccHobject 又继承了 ccDrawableObject、ccSeriallzableObject 和 ccObject,分别提供绘制、序列化和元信息查询的接口。
如ccPointCloud类就在该目录下
QCC_IO
该模块在 /libs/qCC_io 目录下。
这部分规范了文件输入输出的接口,使用 FileIOFilter 作为基类,派生实现不同类型的模型文件的加载和保存。
源码中已经实现了几个常见的文件类型的 FileIOFilter,如果想要实现自己的模型文件的加载和保存,可以以插件的形式添加到到 CloudCompare 中,继承 FileIOFilter 类并实现对应的接口,最后再调用注册函数启用。
QCC_GL 和 CC_FBO
这俩模块在 /libs/qCC_glWindow 和 /libs/CCFbo 目录下。
这部分实现了模型数据的渲染,底层用的是 OpenGL,实现比较复杂。如果需要拓展新类型的模型或者是自定义渲染效果就需要关注这个模块。
参考:作者:懂的都懂你细细品 https://www.bilibili.com/read/cv26504771/
二、高度渲染
(1)功能定义和使用
可对点云X,Y,Z任一坐标分量,按变化趋势渲染成彩色图
有三种模式
查找源码:
(2)第一种,就是普通的颜色映射
bool ccPointCloud::setRGBColorByHeight(unsigned char heightDim, ccColorScale::Shared colorScale)
{
if (!colorScale || heightDim > 2) //X=0, Y=1, Z=2
{
ccLog::Error("[ccPointCloud::setRGBColorByHeight] Invalid parameter!");
return false;
}
//allocate colors if necessary
if (!hasColors())
if (!resizeTheRGBTable(false))
return false;
enableTempColor(false);
assert(m_rgbaColors);
double minHeight = getOwnBB().minCorner().u[heightDim];
double height = getOwnBB().getDiagVec().u[heightDim];
if (CCCoreLib::LessThanEpsilon(std::abs(height))) //flat cloud!
{
const ccColor::Rgb& col = colorScale->getColorByIndex(0);
return setColor(col);
}
unsigned count = size();
fo