如何使用顶点的测地距离平滑骨骼顶点权重?

时间:2012-06-06 17:00:33

标签: c++ algorithm

我正在研究一种方法来实现骨骼顶点权重的平滑(关节变形的皮肤权重),并且在使用由用户设置的参数距离内的顶点之间的测地(表面)距离的方法上显示为空。登记/> 到目前为止,有人提到可能使用Dijkstra算法来获得近似测地距离 - 但它对某些类型的网格拓扑有局限性。 我在这个问题上特别发现的唯一论文(所谓的“骨 - 顶点权重平滑”)在蒙皮网格上使用拉普拉斯平滑权重,但它只考虑每个顶点的单环相邻顶点不满足我的需要包括最远距离的顶点(最短的测地距离):

L(Wi) = 1/m * Sum(j from 0 to m-1)(Wj - Wi)

其中顶点ij与顶点i有关,m是邻居顶点数,W是权重顶点。

我想象的是改进的拉普拉斯平滑,其中使用了发现在参数距离内的所有顶点,但距离也需要是一个因子。也许只是将权重影响乘以参数距离减去当前顶点与总和中使用的距离之间的距离。这样的事情,也许是:

Wmj = Wj * (maxDistance - Dji)

L(Wi) = 1/m * Sum(j from 0 to m-1)(Wmj - Wi)

使Wj平滑的影响因其顶点距离(Dji)而减小(衰减)。当然,maxDistance处的顶点不会产生影响,可能需要在m中忽略。

这会有用吗?

1 个答案:

答案 0 :(得分:2)

我想到的第一个想法就是投射。首先获得表示起点和终点之间的欧氏距离的线(穿过网格)。然后将其投影到网格上。但我意识到在某些情况下不会起作用。为了其他人的利益,一个这样的情况是,如果起点是深坑的一侧,而目标是在另一侧,则最短距离将围绕边缘,而不是直通。这对你来说仍然是足够的,这取决于你正在使用的网格类型,所以如果这对你来说足够好,我可以在这些方面详细说明一个更完整的方法。

那么我的想法是细分然后使用搜索。我将使用自适应细分,即分割边缘,直到所有边缘都小于某个阈值。从那时起,您可以使用Dijkstra,或A *或任何其他数量的搜索方法。这解决了瘦三角形的问题,因为边缘将被细分直到它们很小,因此不会有长而细的边缘。