我正在使用一个网格,其大致表示为
{
vertices: [{
x: number,
y: number,
z: number
}, ...],
faces: [{
verticeIndices: [number, number, number]
}, ...]
}
现在给定一个顶点,我想知道这个顶点是否被面包围。问题是我什至不知道从哪里开始。看起来这将是非常简单的事情(因为当可视化网格时,很容易知道顶点是否被面包围),但我不知道如何表达这一点。
这是一个 2D 示例图片:
很容易看出涂成绿色的顶点没有被面包围 - 如果我们连接左下角的两个顶点,那么中间那些旁边的顶点就会变成红色。
在这个 2D 情况下(可能更简单?)我想象的唯一方法是:
- 查找所有相邻的面。
- 求该顶点上每个面的角度。
- 如果加起来等于 360,则全部覆盖,否则不覆盖。
但我认为这在 3D 环境下工作时并不成立...有没有一种简单的方法可以找出顶点是否被 3D 面包围?
最佳答案
我刚刚找到了一个可能的答案,但我想看看是否有更简单的方法:
还有另一种方法可以在 2D 中找到缩放到 3D 的内容:
- 查找目标顶点的相邻顶点。
- 制作仅包含这些顶点(且不包含目标顶点)的图表
- 查看该图是否有循环。
如果所有相邻顶点形成一个循环,则意味着该顶点被包围(如果我没有错并且我错过了边缘情况)
看起来应该扩展到 3D。
如果有人有其他更好的想法,我将保留这个问题。
关于3d - 查找未被面包围的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61885976/