I'm new to OpenVDB and confused why levelSetRebuild() is not working for me.
I'm creating a level set cube, converting it to a fog volume, then converting it back to a level set. The second level set is empty. What am I missing here? MRE follows:
#include <iostream>
#include <openvdb/openvdb.h>
#include <openvdb/tools/LevelSetPlatonic.h>
#include <openvdb/tools/LevelSetRebuild.h>
#include <openvdb/tools/LevelSetUtil.h>
int main()
{
auto obj1 = openvdb::tools::createLevelSetCube<openvdb::FloatGrid>(50.f, {});
openvdb::tools::sdfToFogVolume<openvdb::FloatGrid>(*obj1);
auto obj2 = openvdb::tools::levelSetRebuild<openvdb::FloatGrid>(*obj1);
std::cout << "Active voxels: " << obj2->activeVoxelCount() << std::endl;
}
Output is:
Active voxels: 0
I have solved the problem. levelSetRebuild(), if being constructed from a fog volume (i.e., not a level set or signed distance field), should be passed an additional parameter of 0.01. Fixed MRE:
Output is
Active voxels: 8958352