【发布时间】:2019-10-23 08:48:43
【问题描述】:
我的程序不断收到大量 PCL 点云格式的点,即pcl::PointCloud<pcl::PointXYZI>::Ptr,实际上是std::vector< pcl::PointXYZI, Eigen::aligned_allocator< pcl::PointXYZI > >。
我想在收到点后立即在 OpenGL 中实时绘制点。我知道如何以传统方式绘画。每次我收到一组新的点时,我都会将它们一个接一个地复制到我的顶点向量中(我使用的是 Qt,所以它是 QVector<QVector3D>),同时构造颜色向量也是 QVector<QVector3D>。将这两个向量复制到 VBO 后,我可以在一次绘制调用中将它们全部绘制出来。但是,点的数量通常太大(每帧大约 100k 点,频率为 10Hz),从原始 PCL 格式复制到我的 Qt 矢量和构建颜色矢量似乎是对时间和计算能力的极大浪费。
有没有办法绕过复制直接画点呢?我能想到的解决方案可能是因为PCL点云格式是std::vector,所以可以直接将它用于draw call,就像我得到vector指针并直接复制到VBO中一样。但是这样一来,如何构造颜色向量呢?如果所有点都是相同的颜色,有没有一种方法可以为所有点分配颜色而不为每个顶点构造颜色向量?我猜可能是通过片段着色器?
【问题讨论】:
-
为什么不直接将新点复制到向量中?
标签: c++ qt opengl optimization point-cloud-library