openvdb resampleToMatch()



我想降低openvdb网格的体素密度。受这个答案的启发,我尝试了以下代码:

const auto dim = grid->evalActiveVoxelDim().asVec3i();
std::cout << dim.x() << " " << dim.y() << " " << dim.z() << std::endl;
T::Ptr dest = T::create();
dest->setTransform(openvdb::math::Transform::createLinearTransform(1.0f));
openvdb::tools::resampleToMatch<openvdb::tools::BoxSampler>(*grid, *dest);
const auto dd = dest->evalActiveVoxelDim().asVec3i();
std::cout << dd.x() << " " << dd.y() << " " << dd.z() << std::endl;

我尝试的网格打印输出如下:

86 93 82
8 8 6

我不明白这意味着什么。在缩放1.0的情况下,我期望得到相同的体素密度。原始网格是否包含我需要考虑的一些缩放?

此外,有没有一种方法可以在多线程的情况下执行此操作?

我意识到缩放1.0不是中性的,因为网格可以从任意的体素缩放开始,可以用voxelSize((查询。

因此,对网格进行重新采样,使体素变大一倍,可能会看起来像这样:

T::Ptr dest = T::create();
dest->setTransform(openvdb::math::Transform::createLinearTransform(grid->voxelSize().x() * 2));
openvdb::tools::resampleToMatch<openvdb::tools::BoxSampler>(*grid, *dest);

我相信默认情况下它是多线程的,但在操作结束时有一个长的单线程通道。

相关内容

  • 没有找到相关文章

最新更新