点云显示函数

简单的显示方法:
//*******************************************************
//点云数据的简单显示代码
pcl::visualization::CloudViewer viewer(“Simple Cloud Viewer”);
viewer.showCloud(cl_model); //cl_model是需要显示的点云,定义为pcl::PointCloud::Ptr cl_model(new pcl::PointCloud);
while (!viewer.wasStopped())
{
}
//*******************************************************
//另一种点云显示方式
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer(“PointsCloud Recognition”));
viewer->addPointCloud(cl_model, “model_cloud”);
viewer->addCoordinateSystem(1.0);
viewer->initCameraParameters();
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}
//同一窗口显示多个不同的点云对象
boost::shared_ptr viewportsVis(
pcl::PointCloud::ConstPtr cloud1, pcl::PointCloud::ConstPtr cloud2)
{
// ——————————————————–
// —–Open 3D viewer and add point cloud and normals—–
// ——————————————————–
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer(“3D Viewer”));
viewer->initCameraParameters();

int v1(0);
viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);//创建左边的窗口
viewer->setBackgroundColor(0, 0, 0, v1);//设置左边窗口的背景
viewer->addText("Radius: 0.1", 10, 10, "v1 text", v1);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color1(cloud1, 255, 0, 0);
viewer->addPointCloud<pcl::PointXYZ>(cloud1, single_color1, "sample cloud1", v1);

int v2(0);
viewer->createViewPort(0.5, 0.0, 1.0, 1.0, v2);//创建右边的窗口
viewer->setBackgroundColor(0.0, 0.0, 0.0, v2);
viewer->addText("Radius: 0.1", 10, 10, "v2 text", v2);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> single_color(cloud2, 0, 255, 0);
viewer->addPointCloud<pcl::PointXYZ>(cloud2, single_color, "sample cloud2", v2);

viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud1");
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud2");
viewer->addCoordinateSystem(1.0);

//viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals1, 10, 0.05, "normals1", v1);
//viewer->addPointCloudNormals<pcl::PointXYZRGB, pcl::Normal>(cloud, normals2, 10, 0.05, "normals2", v2);

return (viewer);

}

// ————–
// —–Help—–
// ————–
void
printUsage(const char* progName)
{
std::cout << “\n\nUsage: ” << progName << ” [options]\n\n”
<< “Options:\n”
<< “——————————————-\n”
<< “-h this help\n”
<< “-s Simple visualisation example\n”
<< “-r RGB colour visualisation example\n”
<< “-c Custom colour visualisation example\n”
<< “-n Normals visualisation example\n”
<< “-a Shapes visualisation example\n”
<< “-v Viewports example\n”
<< “-i Interaction Customization example\n”
<< “\n\n”;
}

boost::shared_ptr simpleVis(pcl::PointCloud::ConstPtr cloud)
{
// ——————————————–
// —–Open 3D viewer and add point cloud—–
// ——————————————–
//创建可视化对象viewer
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer(“3D Viewer”));
//设置背景为黑色
viewer->setBackgroundColor(0, 0, 0);
//将要显示的点云添加到可视化对象中。
viewer->addPointCloud(cloud, “sample cloud”);
//渲染点云
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, “sample cloud”);
//添加坐标轴
viewer->addCoordinateSystem(1.0);
//初始化相机
viewer->initCameraParameters();
return (viewer);
}

boost::shared_ptr rgbVis(pcl::PointCloud::ConstPtr cloud)
{
// ——————————————–
// —–Open 3D viewer and add point cloud—–
// ——————————————–
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer(“3D Viewer”));
viewer->setBackgroundColor(0, 0, 0);
pcl::visualization::PointCloudColorHandlerRGBField rgb(cloud);
viewer->addPointCloud(cloud, rgb, “sample cloud”);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, “sample cloud”);
viewer->addCoordinateSystem(1.0);
viewer->initCameraParameters();
return (viewer);
}

//
boost::shared_ptr customColourVis(pcl::PointCloud::ConstPtr cloud)
{
// ——————————————–
// —–Open 3D viewer and add point cloud—–
// ——————————————–
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer(“3D Viewer”));
viewer->setBackgroundColor(0, 0, 0);
pcl::visualization::PointCloudColorHandlerCustom single_color(cloud, 0, 255, 0);
viewer->addPointCloud(cloud, single_color, “sample cloud”);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, “sample cloud”);
viewer->addCoordinateSystem(1.0);
viewer->initCameraParameters();
return (viewer);
}

//法线显示
boost::shared_ptr normalsVis(
pcl::PointCloud::ConstPtr cloud, pcl::PointCloud::ConstPtr normals)
{
// ——————————————————–
// —–Open 3D viewer and add point cloud and normals—–
// ——————————————————–
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer(“3D Viewer”));
viewer->setBackgroundColor(0, 0, 0);
pcl::visualization::PointCloudColorHandlerRGBField rgb(cloud);
viewer->addPointCloud(cloud, rgb, “sample cloud”);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, “sample cloud”);
viewer->addPointCloudNormals

OpenGL点云显示是一种用于渲染和可视化大量离散点的技术。点云是由许多离散的点组成的数据集,每个点都有其在三维空间中的坐标和其他属性。点云显示可以在三维空间中准确绘制这些点,以创建真实感或抽象感的图像。 要在OpenGL中显示点云,首先要将点云数据加载到程序中。这可以通过读取点云文件(如PLY或XYZ)或从其他源获得数据来完成。一旦数据被加载,就可以将点云的点坐标传递给OpenGL的顶点数组中。 接下来,可以使用OpenGL的绘制函数来渲染点云。最简单的方法是使用GL_POINTS模式,它可以将每个点作为一个单独的顶点进行渲染。使用glDrawArrays或glDrawElements函数,可以根据点的数量和顶点数组的索引来绘制点云。 为了实现更高级的点云显示效果,还可以利用OpenGL的着色器程序。着色器程序可以通过修改点的颜色、大小和形状等属性来定制点云的渲染效果。在顶点着色器中,可以根据点的位置和其他属性计算每个点的最终位置和颜色。在片段着色器中,可以对每个点的颜色进行进一步的处理。 此外,还可以使用OpenGL的缓冲区对象来优化点云的渲染性能。通过将点云数据存储在显存中,并在渲染时使用顶点缓冲区和索引缓冲区,可以提高数据的读取速度和渲染效率。 总而言之,OpenGL点云显示是一种强大的技术,可以用于可视化各种类型的离散点数据。通过合理利用OpenGL的功能和特性,可以实现高效、逼真和具有交互性的点云显示效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值