我正在对多边形物体执行快速且肮脏的自动变形例程。如果它是一棵树,并且我的轴位于树的中心,那么我想通过弯曲轴来弯曲身体。我将使用一种简单的影响算法来确定顶点xyz位移。

在折弯的凹面,如何检查相互重叠或穿过的多边形,如何修复这些多边形?

,谢谢!



评论

您能否添加一个示例网格及其变形方式?如果您实际上是在移动顶点,而不是在移动单个多边形,那么我不确定为什么它们会通过简单的弯曲操作相互穿过。凹面的多边形不应该缩一些吗?

@MartinBüttner听起来,当偏移量超过曲率半径时,他/她将遇到与制作偏移量曲线类似的问题。例如看看内部的绿色曲线,它们与红色的偏移太远了。

在我看来,主题线是关于重新计算法线,而身体是关于自相交。

抱歉,我的主题和身体不连贯。这是因为我不确定要使用的确切术语。我认为Simon F已按我的意图解释了我的问题;我需要弄清楚偏移量超过曲率半径的情况。我会暂时上传一个草图。

嗯,是的,除了弯曲得太厉害,您真的无能为力。

#1 楼

如果您有一个定向的三角形网格(例如,一个非定向的表面将是Moebius地带),则可以通过查看三角形的有符号区域来检查三角形的反转。当顶点按CCW顺序排列时,有符号区域为正;如果按CW顺序排列,则符号区域为负。如果您的三角形顶点均按CCW排序,则所有具有负面积的三角形都将反转。取决于变形技术的固定方式,我不知道您的情况。

检查自相交的过程更多。实际上,您应该对网格本身进行碰撞检测。碰撞检测速度很快,但需要实现适当的数据结构,例如AABB树,以缩小三角形-三角形相交测试的数量。碰撞检测通常使用非常低多边形的网格来执行。在某些计算机游戏中,唯一考虑碰撞的是逼近网格的边界体积层次结构(球体,AABB等),而不是网格本身。

一旦检测到碰撞,就会有几个常见的应对方法,例如施加弹跳力。