你好。
在过去的一个月里,我一直在从各种来源收集信息,但没有找到适合我的特定问题的想法。所以这里是问题的表述:
给定一个缓冲区几何形式的网格(顶点坐标和顶点索引的 32 位数组 + 附加数组,例如顶点法线、uvs 或切线),计算围绕网格的均匀点网格的有符号距离函数 (SDF)几何学。
更具体地说,我打算在 Maxon 的 Cinema4D 或 Blender 等 3D 引擎中创建类似于 MetaBall 对象的东西。我已经成功地为所有几何图元实现了距离函数,但是任意网格 SDF 需要我实现一种蛮力方法 - 测试每个网格点的每个网格三角形的距离 - 当然,对于复杂的,这会变得非常慢网格。
现在,我回想起来,这些问题中的大多数都需要构建一个树状结构,例如八叉树、KD 树、BSP 树或 AABB 树。然后找了几篇所谓的Fast-Sweeping algorithm (用于求解 Eikonal 方程),它首先需要用 0 填充位于边界上的网格点(在我的情况下为网格,或最接近网格),其余网格点为大值(无穷大),然后求解非-迭代线性双曲边值问题(Gauss-Seidel)。我还在 CGAL library 中找到了网格 SDF 方法的开源实现.或者,我也考虑过使用一些着色器库(如 GLSL),也许尝试使用 GPU 构建树,但我从未在 JS 或 TS 项目中使用过着色器。
我一直坚持的步骤不仅仅是选择最好的选择,而且实际上实际上至少有效地使用了这些方法中的一种。例如:
我想过结合多种方法,但这似乎非常耗时。我还考虑过使用 CGAL 库,或者可能出于我的项目的目的对其进行重构,但我发现由于库内的所有依赖关系,很难理解 C++ 代码。
你们中有人做过类似的事情吗?你会推荐什么?
谢谢你的所有见解。
最佳答案
我使用由三(四)个主要步骤概述的方法解决了这个问题:
要更详细地了解我的计算时间实现,请随时阅读我的博客文章:
https://mshgrid.com/blog/
感谢您的点赞和评论:)。
关于typescript - 计算三角形网格的 SDF 的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58100765/