问题标签 [openvdb]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - OpenVDB中网格上的转换和CSG操作
OpenVDB 看起来真的很神奇,节点的寻址真的很聪明。有些操作我不明白,特别是CSG操作。这是一个示例代码。它接受两个参数作为输入:
- 一个只有一个网格的 vdb 输入文件,表示从三角形网格开始创建的水平集,
- 存储操作结果的 vdb 输出。
该算法应该接受输入,
- 在 gridA 中创建 deepCopy
- 在 gridB 中创建 deepCopy
- 沿 M_PI/4.0f 的 Y 轴旋转 gridB
- 在 gridA 和 gridB 之间执行 csgUnion
- 将所有网格保存在 vdb 输出文件中。
我正在尝试使用 VDB 网格作为数据容器来代替经典八叉树算法,用于在碰撞中需要高度详细信息的物理模拟。
我理解世界坐标和网格坐标之间转换的概念,我不明白的是如何在树内执行数据的转换,比如平移或旋转水平集,就像一个刚性对象。在这个例子中,我认为我只是在改变世界和格子之间的转换。
这是结果(水平集和体积相同):Initial Grid Trasformed 网格,似乎执行了旋转...没有最终结果?
你有什么建议吗?
附:一个例子和一个链接到我正在使用的LINK REMOVED(对不起,它是 133MB ......)
c++ - 如何填充给定平面内的 OpenVDB 体素?
我有一个由 4 个 (x,y,z) 点定义的四边形(就像一个有边的平面)。我有一个 OpenVDB 网格。我想用值 1 填充我的四边形(包括边缘)内的所有体素。如果不手动设置四边形(有限平面)的每个体素,这样的事情可能吗?
c++ - 如何使用 openvdb(并行)foreach 访问多个网格?
我有一个 openvdb 网格,我想使用仿函数和 openvdb::tools::foreach 对其进行迭代。
如果只涉及 GI 的操作可以简单地调用
尽管我需要根据迭代步骤的计算值访问和修改其他网格,但在每个体素(迭代)处。
我的初始解决方案涉及向函子提供附加网格的访问器:
访问器在构造时提供给 Functor,此外并行的每个线程都提供了 functor 的副本:
不幸的是,这个解决方案不起作用,因为:
- 访问器不能是 const 才能被访问
- 但是 Functor::operator() 必须是一个 const 方法才能被 tools::foreach 使用
第二个肮脏的解决方案是将 Functor 访问器副本声明为可变的。由于 openvdb 断言失败(很可能是内存泄漏),此解决方案在 Debug 中不起作用。
有解决问题的方法吗?例如不需要 operator() 为 const 的 tools::foreach。
opengl - openvdb 查看器和 opengl
我正在尝试使用 OpenVDB 和查看器,我只想使用查看器查看 openvdb 文件。某些查看器的函数使用 opengl 函数并返回 opengl 错误。
下面是执行ovovdb 查看器及其错误消息。
这是 openvdb 查看器的 RenderModules 中显示错误消息的功能。我添加了一些用于调试的行。
我知道opengl错误#1281表示大小的值无效。但是,顶点的大小不是负值,其他参数对我来说也很好。
我错过了什么?
c++ - 如何在仅数据结构模式下构建 OpenVDB?
我想使用 OpenVDB 作为数据结构。我不想要任何测试或样本或 zlib。如何将 OpenVDB 配置为仅构建为数据结构?
c++ - 如何使用 OpenVDB 进行最近点查询?
首先,如何使用 openvdb 找到最近点?
其次,如果ClosestSurfacePoint
是正确的方法,如何使用它?
我阅读了有关使用 OpenVDB 实现更快 NNS 的 ICP 的论文。
(http://www.pmavridis.com/research/efficient_sparse_icp/)
作者说他通过使用openvdb for NNS获得了进步。
而其他一些人也以类似的方式实现了同样的目标。
所以,我想自己尝试一下。
经过几次尝试,我终于编译成功了。
但是,我有点困惑。
在我看来(在阅读了包括在线食谱在内的大量文档之后)采样器似乎可以做到这一点
所以,我尝试了这些例子。
我做了如下所述的事情
对象:在网格中找到离查询点最近的点(ijk)
- 创建点(或加载点)并转换为 vec3d 格式
- 制作点索引网格。
- 设置查询点(ijk)
- 设置索引网格的访问器
- 点采样器()的函数调用
但是,这些示例显示 0 或 1。
如果找到完全相同的位置,则返回 1。如果没有,则返回 0。
可能,这个点采样器不是我要找的。
换个方式试试。
其他候选人是
我尝试了下面写的代码,它类似于 betajippity 的工作 https://github.com/betajippity/Ariel/blob/master/src/grid/levelset.cpp
但由于矢量而出错
最后一行
导致调试断言失败。
我不知道如何处理这些事情。
因为我无法修改openvdb的内部。我刚刚调用了函数,它出错了:(
如果您对此有任何想法,请提供帮助。
再次,问题是..
如何使用openvdb找到最近的点?
如果ClosestSurfacePoint
是正确的方法,如何使用它?
我真的很感谢你提前。
graphics - 从点云创建 LevelSet
我对 OpenVDB 相当陌生。如果这个查询听起来微不足道,请提前道歉。
我想从一组无组织的数据点构造一个隐式曲面。我想知道如何使用 OpenVDB 来做到这一点。
我目前的做法如下:(这里)
- 计算矩形网格上到任意数据集的距离函数。
- 找到梯度流算法的初始曲面
- 求解水平集函数的时间相关 PDE
我想提一下,我只是为上述三个步骤使用了一个简单的常规网格。
从代码示例创建和编写网格的示例与我想要的非常相似,只是我想用点云中的级别集替换球体的级别集。
有没有一种方法可以从tools
命名空间中的实用程序构建一个级别集以从点云构建一个级别集?我认为 ParticlesToLevelSet 类似于我想做的事情。有人可以分享一个例子吗?
c++ - 计算与边界场的距离,遍历体素并访问其邻居
我正在从事一个涉及从封闭对象中提取中心线的项目。在实现中心线提取算法之前,我必须执行以下处理步骤。我是 openvdb 的新手,因此需要一些帮助。
- 体素化网格。
- 计算每个体素与边界场的距离。
- 迭代体素。
- 访问一个体素的 26 个邻居。
我的尝试
第 1 步和第 2 步 - 为了完成第 1 步和第 2 步,我执行以下操作。a) 读取波前 obj。我为此编写了一个自定义函数,用于填充 Vec3s、Vec3I 和 Vec4I 的向量。b) 将数据传递给以下函数以计算与边界场的距离。
/li>
我是否使用正确的 api 函数来计算与边界场的距离?如果是这样,我不理解第 5 个(float exBandWidth)和第 6 个(float inBandWdth)参数。关于这些的一些指示会有所帮助。
现在我与边界字段有距离我使用值迭代器在网格上进行迭代,如下所示
/li>
我的第一个问题是我做这一步对吗??如果是这样,我还想为每个体素访问 26 个邻居。怎么做 ??
c++ - 在 OpenVDB 中跨平面窄带水平集的插值
我知道 OpenVDB 的稀疏点云体素值插值,但我仍在学习。
我有一个三角形,我发现它相交的窄带水平的体素集。我将该级别集中的点分配给一个点组,并将值分配给该级别集中的几个点。
可以说,然后我想为该级别集中的其他点插入值。我是否必须先将这些点提取到一个单独的网格中,或者是否有某种操作只能在该水平集组中的点之间进行插值?
我问的主要原因是因为我已经为点的不同属性维护了几个网格,并且为每个三角形面创建一个单独的网格对象似乎过度。