【发布时间】:2012-09-19 13:20:33
【问题描述】:
我的场景中有一个立方体,我想以特定的起始速度和给定的时间间隔旋转它。
此外,立方体的结束角度应与开始角度相同。
因此,我想到了允许时间间隔± 5% 的偏差。
这是我目前的状态:http://jsfiddle.net/5NWab/1/。
不要怀疑它目前工作。如果我更改时间间隔,就会出现问题,例如通过'3000':http://jsfiddle.net/5NWab/2/。
我的立方体必不可少的move()方法:
Reel.prototype.move = function (delta) {
if (this.velocity < 0 && this.mesh.rotation.x == 0) {
return false;
}
// Create smooth end rotation
if (this.velocity < 0 && this.mesh.rotation.x != 0) {
this.mesh.rotation.x += Math.abs(delta * this.speedUp * 0.5 * this.timeSpan);
if (Math.abs(this.mesh.rotation.x - 2 * Math.PI) < 0.1) {
this.mesh.rotation.x = 0;
}
}
else {
this.mesh.rotation.x += delta * this.velocity;
this.time -= delta;
this.velocity = this.speedUp * this.time;
}
}
问题是我想不出一个解决方案或方法来完成我的主题。
如果我的变量delta 保持不变,它就不会那么复杂了。
它应该在 60fps = 1000/60,因为我使用的是requestAnimationFrame()。
我还找到了this question,这可能有助于找到解决方案。
我认为代码应该是
在到达实际终点之前减慢速度。
如果最终角度略大于所需的(开始)角度,则应该是这种情况。还是应该在到达实际终点后加快转速。
如果最终角度比所需(开始)角度小一点,情况应该如此。
但是当角度与所需角度相差一个半圆(即 180° 或 PI)时是什么情况?
为了澄清我的问题,以下是我的已知和未知数:
已知:
- 起始速度
- 时间间隔
- 起始角度(通常为 0)
我希望立方体在旋转结束时具有相同的起始角度/位置。 因为 FPS 计数不是恒定的,我必须缩短或延长时间间隔才能让立方体进入所需位置。
【问题讨论】:
-
这个问题读起来有点迟钝。你的已知和未知数是什么?
-
@IgnacioVazquez-Abrams 我在最后添加了一小段。现在清楚了吗?
-
我不会将物理与渲染循环联系起来,只需为您的物理循环使用固定的时间步长。
-
@supernova 我希望立方体越来越慢,直到 0。所以你的意思是我应该在渲染之前预先计算插值角度?
-
@ComFreek:您需要保留最初的
timeSpan,还是可以稍微关闭一下?
标签: javascript math animation 3d three.js