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

标签 3d geometry mesh

我正在使用一个网格,其大致表示为

{
   vertices: [{
      x: number,
      y: number,
      z: number
   }, ...],
   faces: [{
      verticeIndices: [number, number, number]
   }, ...]
}

现在给定一个顶点,我想知道这个顶点是否被面包围。问题是我什至不知道从哪里开始。看起来这将是非常简单的事情(因为当可视化网格时,很容易知道顶点是否被面包围),但我不知道如何表达这一点。

这是一个 2D 示例图片:

enter image description here

很容易看出涂成绿色的顶点没有被面包围 - 如果我们连接左下角的两个顶点,那么中间那些旁边的顶点就会变成红色。

在这个 2D 情况下(可能更简单?)我想象的唯一方法是:

  1. 查找所有相邻的面。
  2. 求该顶点上每个面的角度。
  3. 如果加起来等于 360,则全部覆盖,否则不覆盖。

但我认为这在 3D 环境下工作时并不成立...有没有一种简单的方法可以找出顶点是否被 3D 面包围?

最佳答案

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

还有另一种方法可以在 2D 中找到缩放到 3D 的内容:

  1. 查找目标顶点的相邻顶点。
  2. 制作仅包含这些顶点(且不包含目标顶点)的图表
  3. 查看该图是否有循环。

如果所有相邻顶点形成一个循环,则意味着该顶点被包围(如果我没有错并且我错过了边缘情况)

看起来应该扩展到 3D。

如果有人有其他更好的想法,我将保留这个问题。

关于3d - 查找未被面包围的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61885976/

相关文章:

Python 3.3 - 从规则间隔的顶点创建 3D 网格作为 Wavefront obj 文件

mesh - 用于测试从 3d 实体中提取属性的程序的网格源(STL 文件)?

python - 在 3D 图上绘制两个 2D 图

python - 如果可能的话,如何在 Python 中进行飞行路径投影?

java - jMonkeyEngine 在网格内应用 Material ?

javascript - 在 Canvas 中绘制值的百分比。数学-Javascript

java - 获取线和形状的交点

opencv - 调整代码以检测多个圆圈,而不是OPENCV中的一个圆圈

python - 对形成闭环的边进行排序

c++ - 我如何在 3d 中绘制一个简单的 spaceship 形状?