Javascript 我如何用子弹物理来真实地模拟高尔夫击球?(包括现场演示) 背景
我正在使用three.js和Bullet Physics library的ammo.js转换制作一个小型高尔夫游戏,但是我在让球真实移动方面遇到了一些问题 (如果您想了解这在实践中是如何工作的,我已经在上放了一个演示。) 问题: 什么是一个好的算法,以提供更现实的运动一个迷你高尔夫球 我试过的 在ammo.js中,有摩擦、线性阻尼和旋转阻尼选项 当球滚动时,摩擦设置似乎没有多大影响 我目前正在使用Javascript 我如何用子弹物理来真实地模拟高尔夫击球?(包括现场演示) 背景,javascript,algorithm,physics,bulletphysics,ammo.js,Javascript,Algorithm,Physics,Bulletphysics,Ammo.js,我正在使用three.js和Bullet Physics library的ammo.js转换制作一个小型高尔夫游戏,但是我在让球真实移动方面遇到了一些问题 (如果您想了解这在实践中是如何工作的,我已经在上放了一个演示。) 问题: 什么是一个好的算法,以提供更现实的运动一个迷你高尔夫球 我试过的 在ammo.js中,有摩擦、线性阻尼和旋转阻尼选项 当球滚动时,摩擦设置似乎没有多大影响 我目前正在使用 body.setRestitution(0.8); body.setFriction(1); bo
body.setRestitution(0.8);
body.setFriction(1);
body.setDamping(0.2,0.1); // linear damping, rotational damping
问题
线性阻尼值较高时,球似乎减速过快
对于较低的值,似乎需要很长时间才能最终停止
当球在空中时,应用线性阻尼似乎根本不合理
分析
我认为问题可能是ammo.js中的线性阻尼导致了指数级的减速
我试过:
我发现你在一个球形物体上使用“规则”摩擦力。在物理学中,圆形物体有一个单独的概念。我不知道Bullet Physics在其API中是否提供了这样一个概念。如果确实如此,请尝试将其替换为滚动摩擦对应物:
body.setFriction(1);
我在想,这就是“旋转阻尼”的含义。@Teepeemm阻尼只有在涉及到类似弹簧的振荡系统时才具有现实意义。大多数物理引擎中存在的“线性阻尼”和“旋转阻尼”概念没有实际意义。它们既可以在游戏中插入稍微虚假的物理,而一个简单的近似就足够了,也可以在物理模拟中保持稳定性。滚动摩擦和旋转阻尼是完全不同的。谢谢,这是非常有用的-一个恒定的力应该给我恒定的减速,我是在追求。奇怪的是,子弹物理C++中确实有一个设置摩擦,但就我所见,它并没有出现在AMMO.JS中(当我尝试使用它时,它给出了一个未定义的错误)。基本上,你想对球施加摩擦力,但是在球接触地面的点,而不是质心。同样,当球停止弹跳并与地面连续接触时,球的速度应为球上与地面接触的点的速度。你最终得到的结果是,旋转摩擦力减少了球的角动量和线动量。我可以看到,工作-我肯定有能力在非中心位置施力,我可以获得速度,所以我知道施力的方向。如果没有人知道为什么ammo.js中缺少setRollingFriction,我会用原力来试试——再次感谢!