很长一段时间以来,我都在努力解决这个问题,但什么也没有得到。我正在开发一个简单的3d建模器,它使用半边缘数据结构。
假设我有非流形几何,其中两个三角形共享一个共同的顶点,如下图所示。我想再加上另一个三角形,使三个三角形共享一个共同的顶点。一旦我们添加了新的三角形,我们就需要重新排列公共顶点周围的半边。在2d,这种排序是通过顺时针方向从公共顶点排序半边来完成的,如这 post中所解释的那样。
然而,在3d中,这变成了一场噩梦。如果相同的三个三角形具有共同的顶点,但在三维空间中具有任意的方向,且不共面。怎么才能把半边分类呢?
我试着用普通的顶点法来构造一个平面,然后把顶点周围的所有半边投影到那个平面上。之后,我们可以按顺时针方向对它们进行排序。但我发现这种方法有很多问题。现在我已经没有主意了。
发布于 2020-09-22 10:19:48
如果把它们投影到顶点法线的平面上并不能完成工作,我不知道会发生什么。在3D中,没有任何明确的方法可以做到这一点。假设你在那里的新三角形与现有的两个三角形垂直?在这种情况下你希望得到什么答案?
我想,您可以尝试“投票”,方法是将新三角形的正常值与现有三角形的每一个法线相加。正点是保持当前方向的一种投票,消极点是用来翻转它的一种投票。也许按三角形的区域来衡量选票,或者在那个顶点的角度。当然,你必须决定如何断线,这可能只会给你类似的问题,在平面上的共同顶点法线。
如果您正在构建一个与现有三角形共享边的新三角形,这将更有意义。然后你可以从它加入的三角形中复制这个方向。我不知道你在做什么样的3D建模操作会产生这种情况,但是如果有任何方法你可以通过构建公共边而不是公共顶点来完成它,你可能会有一个更好的时间。
https://computergraphics.stackexchange.com/questions/10246
复制相似问题