如何使用顶点的测地线距离平滑骨顶点权重
How to smooth bone-vertex weights using geodesic distance of vertices?
我目前正在研究一种实现骨顶点权重(关节变形的蒙皮权重)平滑的方法,并且在用户设置的参数距离内使用顶点之间的测地线(表面)距离的方法上是空的。
到目前为止,有人提到了Dijkstra算法可能用于获取近似测地线距离 - 但它对某些类型的网格拓扑有限制。
我发现的唯一一篇专门关于这个问题的论文(所谓的"骨顶点权重平滑")在蒙皮网格上使用权重的拉普拉斯平滑,但它只考虑每个顶点的单环相邻顶点,这不能满足我包含一定距离的顶点(最短测地线距离)的需求:
L(Wi) = 1/m * Sum(j from 0 to m-1)(Wj - Wi)
其中顶点i
和j
相对于顶点i
考虑,m
是相邻顶点的数量,W
是顶点上的权重。
我设想的是一种修改的拉普拉斯平滑,其中使用在参数距离内发现的所有顶点,但距离也需要成为一个因素。 也许只需将权重影响乘以参数距离减去当前顶点与总和中使用的顶点之间的距离。 像这样的东西,也许是:
Wmj = Wj * (maxDistance - Dji)
L(Wi) = 1/m * Sum(j from 0 to m-1)(Wmj - Wi)
这样,Wj
平滑的影响就会减少(衰减)到它的顶点距离(Dji
)。 当然,maxDistance
的顶点不会产生影响,可能需要作为m
的一部分被忽略。
这行得通吗?
我想到的第一个想法是投影。 首先获取表示起点和终点(穿过网格)之间欧氏距离的线。 然后将其投影到网格上。 但我意识到这在某些情况下是行不通的。 为了其他人的利益,一种情况是,如果起点是深坑的一侧,而目标在另一侧,则最短的距离将在边缘附近,而不是直线通过。 这仍然适合您,具体取决于您正在使用的网格类型,因此如果这对您来说足够好,我可以按照这些思路制定更完整的方法。
所以我的想法是细分,然后使用搜索。 我会使用自适应细分,即分割边缘,直到所有边缘都小于某个阈值。 从那时起,您可以使用Dijkstra的,或A*或任何其他数量的搜索方法。 这解决了瘦三角形的问题,因为边缘将被细分,直到它们变小,所以不会有长而细的边缘。
- 如何循环打印顶点结构
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- D3D11-将混合权重和索引传递到顶点着色器
- 用C++程序计算圆锥体的体积、球体的体积、八边形的面积和两点之间的距离
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 计算所有对之间的曼哈顿距离
- 如何将一半传递给顶点着色器?
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- Levenshtein 两个文件的距离花费了太多时间
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- QT QOpenGLWidget:如何在不使用数据块复制的情况下修改VBO中的单个顶点值?
- 使用 OpenGL 4.5 更改所选顶点的颜色
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 创建异构顶点数据数组的可移植方法
- 使用 glvertex4i 传递网格面索引时的顶点着色器错误
- 两个有符号数字之间的距离
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何使用顶点的测地线距离平滑骨顶点权重