【发布时间】:2013-08-29 18:14:23
【问题描述】:
背景
我正在使用 three.js 和 Bullet Physics 库的 ammo.js 转换制作迷你高尔夫游戏,但我在让球真实移动时遇到了一些问题。
(如果你想看看它在实践中是如何工作的,我已经在penguinspuzzle.appspot.com/minigolf.html 放了一个演示。)
问题
有什么好的算法可以让迷你高尔夫球更逼真地运动?
我尝试过的
在 ammo.js 中有摩擦、线性阻尼和旋转阻尼的选项。
随着球的滚动,摩擦设置似乎没有太大影响。
我正在使用
body.setRestitution(0.8);
body.setFriction(1);
body.setDamping(0.2,0.1); // linear damping, rotational damping
问题
在线性阻尼值较高的情况下,球似乎减速过快。
使用较低的值似乎需要很长时间才能最终停止。
当球在空中时,应用线性阻尼似乎完全不合理。
分析
我认为问题可能是 ammo.js 中的线性阻尼导致指数级减速。
我试过了:
- 录制高尔夫击球视频
- 在每一帧中测量球的位置
- 根据时间绘制球的位置和速度
结果如下所示。在我看来,速度曲线更接近于线性而不是指数。
对于让 ammo.js 更真实的算法有什么建议吗?
【问题讨论】:
标签: javascript algorithm physics bulletphysics ammo.js