【问题标题】:How can I offset / thicken / solidify a 3D mesh in Python?如何在 Python 中偏移/加厚/固化 3D 网格?
【发布时间】:2020-08-14 02:47:47
【问题描述】:

我正在寻找一种方法,通过 Python 脚本将 TIN(不规则三角网)网格(例如景观)偏移一致的距离。过去我打电话给Blender's Solidify modifier via the API,效果很好,但我想找到一个不需要 Blender 作为依赖项的替代方案。

目前,我正在遍历每个三角形,制作每个顶点的副本,并将它们沿其父三角形的表面法线移动一定距离。在多个三角形中出现相同顶点的情况下,我计算每个法线的偏移量并使用平均值。然后我再次将顶点连接在一起以制作偏移网格。

这似乎适用于小偏移,但网格中的尖锐特征会产生自相交。

是否有提供更好方法的特定算法或库?

到目前为止,除了 Blender,我发现:

但我没有找到太多关于 Python 的内容,例如在Open3DTrimesh

【问题讨论】:

    标签: python 3d mesh


    【解决方案1】:

    我认为偏移的简单解决方法是沿着平均法线移动顶点,而不是沿着每个法线的平均值移动它。 (好吧,在这句话中很难看出区别;))

    手工操作

    我的意思是,当您获得锐利的几何图形时,相邻法线的平均值不再是长度 1,因此最终您不会将顶点偏移所需的距离。 我认为您应该计算相邻法线的总和,然后对这些向量进行归一化以获得每个顶点的法线。如果您有超过 3 个三角形连接到每个顶点(这是一般情况),您还需要通过三角形的连接角对相邻法线进行加权总和 ...

    或使用 python 模块

    您也可以pymadcad 有一个功能完全符合我所说的:

    from madcad import *
    
    surface = Mesh([points, ...], [triangles, ...])
    my_thick_mesh = thicken(surface, distance)
    

    3 function关于这个问题:

    • inflateoffsets 给出所需的偏移向量

    • inflate 偏移网格表面

    • 加厚

      创建一个信封
      • 原始曲面

      • 偏移曲面

      • 侧面

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 1970-01-01
      • 2011-10-24
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2015-03-12
      相关资源
      最近更新 更多