给每个网格一组顶点和三角形。有谁知道一种算法,或一个寻找的地方(我先尝试谷歌,但没有找到一个好的开始的地方)在所述网格上执行布尔运算,并为生成的网格获取一组顶点和三角形?特别令人感兴趣的是减法和联合。
给每个网格一组顶点和三角形。有谁知道一种算法,或一个寻找的地方(我先尝试谷歌,但没有找到一个好的开始的地方)在所述网格上执行布尔运算,并为生成的网格获取一组顶点和三角形?特别令人感兴趣的是减法和联合。
Answers:
我认为这是构造固体几何(CSG)。希望您可以在这里找到一些帮助。
http://www.alsprogrammingresource.com/csg.html
http://createuniverses.blogspot.com/2009/09/qtcsg-constructive-solid-geometry.html
http://www.nigels.com/cn/research/
还要在Google中搜索“构造实体几何”作为开始。
高温超导
我认为,只要我们考虑一下就可以解决。
显然,您将要创建两个几何相交的面(三角形)。然后剩下三个网格:刚隔离的相交点,几何1和几何2。
然后,只需删除不需要的内容即可!
我认为涵盖了,是吗?困难的部分显然是创建相交面。为此,迭代一个面的每个面,并检查该面是否为另一面的一部分;如果完全在内部,则将面复制为相交网格的一部分。如果部分在内部,则需要沿相交线分割三角形;我认为DirectX和OpenGL都具有辅助功能,或者只是一些3D平面数学(矢量)。我在微积分3中学习过这种东西(或者是2?),但是如果您不知道,也许可以在math.stackexchange.com上询问。然后,当然如果脸在外面,则什么也不做。遍历两个网格的所有面后,将剩下相交网格。
值得注意的是,您的大多数操作都可以通过取反和并集来表示,其中某些几何图形的取反就是法线翻转的那个几何图形。因此,如果您可以正确地合并,则其他操作应遵循以下步骤:
桑德(Sander)有一些相当不错的博客文章,讨论了CSG实现:http : //sandervanrossen.blogspot.com/search/label/CSG
这是一个非常棘手的主题,至少如果您要健壮地做到这一点(浮点会带来一些严重的困难)。
我将向您指出有关该主题的计算几何/计算机图形学文献,尤其是这些近期的论文:
http://homes.cs.washington.edu/~gilbo/repofiles/booleans2009.pdf