// for density visualization
for (iter = aVolume->tree().beginNode(); iter; ++iter)
{
// read value (density) from a node;
openvdb::Coord nodeCoord = iter.getCoord();
float fDensity = aVolume->tree().getValue(nodeCoord);
// draw AABB
openvdb::CoordBBox bbox = iter.getBoundingBox();
const openvdb::Vec3d min(bbox.min().x() - 0.5, bbox.min().y() - 0.5, bbox.min().z() - 0.5);
const openvdb::Vec3d max(bbox.max().x() + 0.5, bbox.max().y() + 0.5, bbox.max().z() + 0.5);
openvdb::Vec3d Vertex1 = aVolume->indexToWorld(min);
openvdb::Vec3d Vertex8 = aVolume->indexToWorld(max);
DrawCube(Vertex1,Vertex8,Color(fDensity, 0, 0));
}
// volume to mesh
openvdb::tools::VolumeToMesh mesher(
MyVolume->getGridClass() == openvdb::GRID_LEVEL_SET ? 0.0 : 0.01);
mesher(*MyVolume);
Then I store points quads and etc. following the function "MeshOp" in RenderModules.h of OpenVDB
// Mesh to volume
MyVolume_new = openvdb::tools::meshToUnsignedDistanceField<FloatGrid>(MyVolume->transform(), points, triangles, quads, 1.0);