我正在运行一个非常简单的粒子模拟,我在空间中移动粒子。
粒子在空间中表示为简单的3D点,它们的移动是通过用速度矢量(newPos = oldPos + velocity)递增它们的位置来实现的。
我想引入一种碰撞检测形式,其中粒子可以从3d三角形(由三个3D点定义的简单曲面)反弹。一种天真的方法是在每个粒子的速度矢量方向上射出一条射线,其长度为粒子的速度大小,如果检测到射线 - 三角形交叉,则从那里开始计算粒子反射矢量,等
然而......如果粒子和三角形都随着时间的推移而移动,那么很多情况下都会发生碰撞,但这种天真的方法将无法检测到它们。例如,想象一个缓慢移动的粒子接近快速移动的三角形。在特定的模拟步骤中,沿着其轨迹射出粒子的射线可能不会到达它前面的三角形......但是在下一个模拟步骤中,三角形可能移动得太快以至于它在粒子后面移动并且错过了碰撞。
是否有一种标准的方法来检测可以解决这些类型的问题案例的点三角碰撞?增加模拟子步骤当然是一种选择,但不是首选,因为它只是减少了错过碰撞的可能性,而不是完全阻止它们。