vtk 点云切换颜色
需求背景:点云在 2d贴图和深度(depth)渐变着色两种显示方式切换
- 贴图
- 深度值z的渐变色
class PointCloudRenderObject
{
public:
enum RenderMode{ Texture, Depth};
PointCloudRenderObject(vtkScalarBarActor* actor);
//...
void SetRenderMode(int mode);
private:
vtkSmartPointer<vtkFloatArray> m_depthScalars;
vtkSmartPointer<vtkUnsignedCharArray> m_imgScalars;
vtkScalarBarActor* m_bar{nullptr};
vtkSmartPointer<vtkPolyData> m_data;
vtkSmartPointer<vtkActor> m_actor;
};
void PointCloudRenderObject::SetRenderMode(int mode)
{
switch(mode)
{
case Texture:
m_data->GetPointData()->SetScalars(m_imgScalars);
m_actor->GetMapper()->SetScalarModeToDefault();
m_actor->GetMapper()->SetColorModeToDefault();
break;
case Depth:
m_data->GetPointData()->SetScalars(m_depthScalars);
m_actor->GetMapper()->SetScalarRange(m_depthScalars->GetRange());
m_actor->GetMapper()->SetLookupTable(m_bar->GetLookupTable());
m_actor->GetMapper()->SetScalarModeToUsePointData();
m_actor->GetMapper()->SetColorModeToMapScalars();
break;
default:
break;
}
}