pcl+vtk(十)八叉树可视化显示"/>
pcl+vtk(十)八叉树可视化显示
一、八叉树简单介绍
八叉树(Octree)是一种空间划分结构,是一种二叉树的扩展,每个节点可以最多有8个子节点。
二、八叉树在VTK中的使用
1.直接加载ply文件显示八叉树
vtkSmartPointer<vtkPLYReader> PLYReader = vtkSmartPointer<vtkPLYReader>::New();QString fileName = QFileDialog::getOpenFileName(this, "Open PLY", ".", "Open PCD files(*.ply)");if(fileName == "") return;PLYReader->SetFileName(fileName.toStdString().c_str());PLYReader->Update();//八叉树vtkSmartPointer<vtkOctreePointLocator> octree = vtkSmartPointer<vtkOctreePointLocator>::New();octree->SetMaximumPointsPerRegion(5);octree->SetDataSet(PLYReader->GetOutput());octree->BuildLocator();//数据vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New();octree->GenerateRepresentation(0, polydata);//映射vtkSmartPointer<vtkPolyDataMapper> octreeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();octreeMapper->SetInputData(polydata);//演员vtkSmartPointer<vtkActor> octreeActor = vtkSmartPointer<vtkActor>::New();octreeActor->SetMapper(octreeMapper);octreeActor->GetProperty()->SetInterpolationToFlat();// 设置对象的着色插值方法。octreeActor->GetProperty()->SetRepresentationToWireframe();// 控制对象的曲面几何图形表达。octreeActor->GetProperty()->SetColor((float)233/255,(float)233/255,(float)233/255);octree->GenerateRepresentation(7, polydata);//创建八叉树区域边界的多数据表示。renderer->AddActor(octreeActor);renderer->ResetCamera();ui->vtk_widget->GetRenderWindow()->Render();
2.根据点云数据显示八叉树
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);QString fileName = QFileDialog::getOpenFileName(this, "Open PointCloud", ".", "Open PCD files(*.pcd)");if(fileName == "") return;pcl::io::loadPCDFile<pcl::PointXYZ>(fileName.toStdString(), *cloud);vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();for (int i = 0; i<cloud->size(); i++){points->InsertNextPoint(cloud->at(i).x, cloud->at(i).y, cloud->at(i).z);}//数据vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();;polyData->SetPoints(points);//八叉树vtkSmartPointer<vtkOctreePointLocator> octree = vtkSmartPointer<vtkOctreePointLocator>::New();octree->SetMaximumPointsPerRegion(5);octree->SetDataSet(polyData);octree->BuildLocator();//映射vtkSmartPointer<vtkPolyDataMapper> mapperpointCloud_points = vtkSmartPointer<vtkPolyDataMapper>::New();mapperpointCloud_points->SetInputData(polyData);//演员vtkSmartPointer<vtkActor> octreeActor = vtkSmartPointer<vtkActor>::New();octreeActor->GetProperty()->SetInterpolationToFlat();// 设置对象的着色插值方法。octreeActor->GetProperty()->SetRepresentationToWireframe();// 控制对象的曲面几何图形表达。octreeActor->GetProperty()->SetColor((float)200/255,(float)200/255,(float)200/255);octreeActor->SetMapper(mapperpointCloud_points);octree->GenerateRepresentation(8, polyData);//创建八叉树区域边界的多数据表示。renderer->AddActor(octreeActor);renderer->ResetCamera();ui->vtk_widget->GetRenderWindow()->Render();
更多推荐
pcl+vtk(十)八叉树可视化显示
发布评论