CloudCompare 源码学习-height ramp

一、下载源码

首先,下载源码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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值