シーンに、特定の開始速度で指定された時間間隔で回転させたい立方体があります。
さらに、立方体の終了角度は開始角度と同じである必要があります。したがって、時間間隔の±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()
私はまた、解決策を見つけるのに役立つ可能性のあるこの質問を見つけました。
私はコードがどちらかでなければならないと思います
実際の終わりに達する前に速度を遅くします。
これは、最終的な角度が目的の(開始)角度よりも少し大きい場合に当てはまります。または、実際の終了に達した後、回転速度を上げる必要があります。
これは、最終的な角度が目的の(開始)角度よりも少し小さい場合に当てはまります。
しかし、角度が目的の角度から半サイクル離れている場合(つまり、180°またはPI)はどうなりますか?
私の質問を明確にするために、ここに私の既知と未知のものがあります:
既知:
- 開始速度
- 時間間隔
- 開始角度(通常は0)
回転の終了時に立方体の開始角度/位置を同じにしたいと思います。FPSカウントは一定ではないため、キューブを目的の位置に配置するには、時間間隔を短縮または延長する必要があります。