I have a voxel mesh which I tend to to create an ordered vertex container:
Here is what I do:
tbb::concurrent_unordered_set<size_t> nodes_ids;
tbb::parallel_for_each(begin(voxel_ids), end(voxel_ids), [&](size_t e)
{
auto voxelNodes = GetVoxelNodes(e);
nodes_ids.insert(voxelNodes.begin(), voxelNodes.end());
});
std::vector<size_t> ordered_ids;
ordered_ids.reserve(nodes_ids.size());
ordered_ids.insert(ordered_ids.begin(), nodes_ids.begin(), nodes_ids.end());
tbb::parallel_sort(ordered_ids);
Please note:
- Problem is in 3D, so each voxel has 8 nodes;
- Order of voxel container (voxel_ids) is about 10E+5;
- Since many vexels are next to each other, any suggestion for compacting result (nodes_ids)? I mean, instead of using
vector<size_t>, I use something likevector<pair<size_t, size_t> >; Where first element in pair is start of a nodes_id sequence and second element in pair is the last element in the sequence.
Aucun commentaire:
Enregistrer un commentaire