3d 查找未被面包围的顶点

3d 查找未被面包围的顶点,3d,geometry,mesh,3d,Geometry,Mesh,我使用的网格大致表示为 { vertices: [{ x: number, y: number, z: number }, ...], faces: [{ verticeIndices: [number, number, number] }, ...] } 现在给定一个顶点,我想知道这个顶点是否被面包围。问题是我甚至不知道从哪里开始。这看起来很简单(因为在可视化网格时,很容易知道顶点是否被面包围),但我不知道如何表达这一点

我使用的网格大致表示为

{
   vertices: [{
      x: number,
      y: number,
      z: number
   }, ...],
   faces: [{
      verticeIndices: [number, number, number]
   }, ...]
}
现在给定一个顶点,我想知道这个顶点是否被面包围。问题是我甚至不知道从哪里开始。这看起来很简单(因为在可视化网格时,很容易知道顶点是否被面包围),但我不知道如何表达这一点

下面是一张2D的示例图片:

很容易看出绿色画的顶点不是被面部包围的,如果我们把两个顶点连接在左下角,那么中间的一个顶点就会变成红色。 在这种2D情况下(可能更简单?),我想象的唯一方法是:

  • 查找所有相邻面
  • 求该顶点上每个面的角度
  • 如果加起来是360,那么就全部覆盖了,否则就没有了

  • 但我认为在3D中工作时,这并不能真正起作用。。。有没有一种简单的方法可以确定顶点是否被3D中的面包围?

    我刚刚找到了一个可能的答案,但我想看看是否有更简单的方法:

    还有另一种方法可以在二维空间中找到可缩放到三维空间的物体:

  • 查找目标顶点的相邻顶点
  • 创建仅包含这些顶点(且不包含目标顶点)的图形
  • 看看那个图表是否有一个循环
  • 如果所有相邻顶点形成一个循环,则表示该顶点被包围(如果我没有错,并且缺少一个边案例)

    看起来这应该是3D的


    如果有人有更好的想法,我会把这个问题留待讨论。

    如果顶点上相邻的一条边是边界边,则该顶点不被面包围

    边界边仅在一个面上相邻,而内部边在两个面上相邻。(有时超过2个,当出现非折叠时。)

    要使用此信息,您需要访问顶点周围的边

    如果你没有听说过,你可能想看看

    如果不容易访问顶点周围的边,则该方法非常有效