我正在寻找一种通过 Python 脚本将 TIN(不规则三角网)网格(例如景观)偏移一致距离的方法。过去我通过 API 调用 Blender 的 Solidify 修改器,效果很好,但我想找到一个不需要 Blender 作为依赖项的替代方案。
目前,我正在迭代每个三角形,制作每个顶点的副本,并将它们沿着父三角形的表面法线移动设定的距离。当相同的顶点出现在多个三角形中时,我计算每个法线的偏移并使用平均值。然后我再次将顶点连接在一起以制作偏移网格。
这似乎适用于小偏移,但网格中的尖锐特征可能会产生自相交。
是否有特定的算法或库提供更好的方法?
到目前为止,除了 Blender 之外,我还发现:
我认为偏移的简单解决方法是沿着平均法线移动顶点,而不是沿着每个法线的平均值移动顶点。(好吧,在这句话中很难看出区别;))
我的意思是,当你获得尖锐的几何图形时,相邻法线的平均值不再是长度 1,因此最终你不会将顶点偏移所需的距离。我认为你应该计算相邻法线的总和,然后对这些向量进行归一化以获得每个顶点的法线。如果每个顶点连接的三角形超过 3 个(这是一般情况),您还需要根据三角形的连接角度对相邻法线进行加权和...
你也可以pymadcad 有一个函数,完全按照我说的做:
from madcad import *
surface = Mesh([points, ...], [triangles, ...])
my_thick_mesh = thicken(surface, distance)
Run Code Online (Sandbox Code Playgroud)
关于这个问题有3个函数:
inflateoffsets给出所需的偏移向量
inflate偏移网格表面
加厚创建一个信封
原始表面
偏置曲面
侧面
| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |