Моя программа продолжает получать большое количество точек в формате облака точек PCL, то есть pcl::PointCloud<pcl::PointXYZI>::Ptr
, что на самом деле std::vector< pcl::PointXYZI, Eigen::aligned_allocator< pcl::PointXYZI > >
.
Я хочу рисовать точки в OpenGL в режиме реального времени, как толькокак я их получил. Я умею рисовать традиционным способом. Каждый раз, когда я получаю новый набор точек, я копирую их один за другим в свой вектор вершин (я использую Qt, поэтому он равен QVector<QVector3D>
) и в то же время создаю цветовой вектор, который также равен QVector<QVector3D>
. После копирования двух векторов в VBO, я могу нарисовать их все за один вызов. Однако количество точек, как правило, слишком велико (около 100 тыс. Точек на кадр с частотой 10 Гц), и копирование из необработанного формата PCL в мой вектор Qt и построение цветового вектора представляются большой тратой времени и вычислительной мощности.
Есть ли способ обойти копирование и напрямую нарисовать точки? Решение, о котором я могу подумать, может заключаться в том, что формат облака точек PCL - std :: vector, возможно, можно напрямую использовать его для вызова отрисовки, например, я получаю указатель вектора и напрямую копирую в VBO. Но таким образом, как я могу построить цветовой вектор? Если все точки имеют одинаковый цвет, есть ли способ, которым я могу назначить цвет для всех точек, не создавая цветовой вектор для каждой вершины? Наверное, через фрагментный шейдер, наверное?