- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,如何使用openvdb找到最近点?
二、如果ClosestSurfacePoint
这样做的正确方法是什么?如何使用?
我阅读了有关使用 OpenVDB 实现更快 NNS 的 ICP 的论文。
( http://www.pmavridis.com/research/efficient_sparse_icp/ )
作者说他通过使用 openvdb for NNS 在速度上取得了进步。
还有一些人以类似的方式取得了同样的成就。
所以,我想亲自尝试一下。
经过多次尝试,终于编译成功了。
不过,我有点困惑。
在我看来(在阅读了很多文档包括在线食谱之后)采样器似乎做到了这一点
所以,我尝试了这些示例。
GridType::ConstAccessor accessor = grid.getConstAccessor();
GridType::ValueType v0 = openvdb::tools::PointSampler::sample(accessor, ijk);
GridType::ValueType v1 = openvdb::tools::BoxSampler::sample(accessor, ijk);
GridType::ValueType v2 = openvdb::tools::QuadraticSampler::sample(accessor, ijk);
我做了下面描述的事情
对象:在网格中找到最接近查询点(ijk)的点
但是,这些示例显示 0 或 1。
如果找到完全相同的位置,则返回 1。如果不是,则为 0。
可能,这个点采样器不是我要找的。
换个方式试试。
其他候选人是
ClosestSurfacePoint, ClosestPointProjector.
我尝试了下面写的代码它类似于 betajippity 的作品 https://github.com/betajippity/Ariel/blob/master/src/grid/levelset.cpp
但由于 vector 而出错
std::vector<openvdb::Vec3s> positions = {
{ 1, 1, 1 },
{ 1, 2, 1 },
{ 2, 1, 1 },
{ 2, 2, 1 },
{ 100, 100, 100 },
{ 100, 101, 100 }
};
myPointList pointlist(positions);
const float voxelSize(1.0);
openvdb::math::Transform::Ptr transform(openvdb::math::Transform::createLinearTransform(voxelSize));
openvdb::tools::PointIndexGrid::Ptr vdbgrid =
openvdb::tools::createPointIndexGrid<openvdb::tools::PointIndexGrid>(pointlist, *transform);
openvdb::FloatGrid vdbgrid;
openvdb::util::NullInterrupter n;
std::vector<float> distances;
openvdb::tools::ClosestSurfacePoint<openvdb::tools::PointIndexGrid> csp;
csp.initialize(*vdbgrid, 0.0f, &n);
最后一行
csp.initialize(*vdbgrid, 0.0f, &n);
导致调试断言失败。
File: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\vector
Line: 72
Expression: vector iterator not dereferencable
我不知道如何处理这些事情。
因为我不能修改openvdb的里面。我刚刚调用了函数,它出错了:(
如果您对此有任何想法,请提供帮助。
同样,问题是..
如何使用 openvdb 找到最近点?
如果ClosestSurfacePoint
这样做的正确方法是什么?如何使用?
非常感谢您。
最佳答案
OpenVDB 积分开发者的回答。
这是个好问题 我会尝试回答这个问题。
简而言之,是和否。OpenVDB Points 是进行最近邻搜索的理想基础数据结构,因为它已经在空间上进行了组织,
但是我们还没有提供任何高级 API 来为您做这件事,所以您必须自己编写大部分算法。
由于网格的空间性质,进行最近邻搜索相对简单且速度非常快,您可以在其中搜索“最大半径”,该搜索不会太大,因为您可以调整体素的大小以匹配该半径并最大化性能。
执行任意距离的最近邻搜索更具挑战性,我建议您在不编写支持框架(例如 kd 树)的情况下很难从数据结构中获得不错的性能.
虽然我们已经尝试过最近邻算法,因此,如果我的总结没有打扰您,我们很乐意在这里为您指明有关实现的正确方向。 :)
谢谢,丹
关于c++ - 如何使用 OpenVDB 进行最近点查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40650434/
有什么好的方法可以在 OpenVDB 中对体素网格进行下采样吗? 例如,我有 8x8x8 的网格,体素大小为 - 1.0,我想获得 4x4x4 的网格,体素大小为 - 2.0:新网格的每个体素都是原始
首先,如何使用openvdb找到最近点? 二、如果ClosestSurfacePoint这样做的正确方法是什么?如何使用? 我阅读了有关使用 OpenVDB 实现更快 NNS 的 ICP 的论文。 (
因为我不想重新发明轮子,所以我正在寻找一个好的数据结构,它可以帮助我为 3D 渲染引擎提供一个真正基本的 3D 编辑器,我基本上是在寻找一个能够存储必要的数据,在我的情况下仅限于: 几何 局部和全局坐
我有一个由 4 个 (x,y,z) 点定义的四边形(就像一个有边的平面)。我有一个 OpenVDB 网格。我想用值 1 填充四边形内的所有体素(包括边缘)。如果不手动设置四边形(有限平面)的每个体素,
我有一个 openvdb 网格,我想使用仿函数和 openvdb::tools::foreach 对其进行迭代。 //the grid I am iterating on Grid G; //the
我刚刚安装了 OpenVDB,我正在尝试编译来自 here 的基本示例(Ubuntu 14.04 + QtCreator 3.4.0 + GCC_64)。前两个例子工作得很好,但第三个例子不行——一旦
我正在尝试在 Visual Studio 2015 中编译一个我正在制作的 DLL,它充当 C 兼容的包装器,围绕 OpenVDB 的某些功能,使其可用于现有的 C 项目。但是,当我构建时,出现以下链
我是一名优秀的程序员,十分优秀!