我不确定从哪里开始寻找有关此问题的信息,所以我在这里问。希望它不是太笼统。我用C ++编写了一个粒子库,并尝试添加将粒子约束到网格表面的能力。虽然不是一个严格的约束 - 我希望粒子在受到力的影响时能够在表面上滑动。
所以,想象一下我有一个带有n个三角形面的任意凹面网格。然后我在其中一个面上有一个3d点(粒子)。 A对该粒子施加方向力以使其移动,但我希望它沿着曲面的拓扑移动,而不是简单地在空间中线性移动。它应该在表面上平滑移动,并且总是接触网格的三角形。
我已经考虑过首先线性移动粒子,然后将其捕捉到表面上最近的点,但这会遇到很多问题,比如粒子可能会碰到其他不连续的部分。网格只是因为它们在被力移动后碰巧与粒子的距离较短。
然后我考虑检查它的重心坐标并使用它们来确定它应该移动到哪个相邻的三角形,如果它离开其当前三角形的边界......但这似乎是一个非常低效的解决方案,充满其他问题(如如果力移动粒子也超过所有相邻三角形的边界。)
然后我考虑使用UVW坐标来确定粒子移动到的位置,但这也不起作用。
有什么想法吗?
这是一张有助于说明问题的图片: