オブジェクトをアニメーション化しようとしています。たとえば、車だとしましょう。私はそれがポイントから行きたい
x1、y1、z1
ポイントx2,y2,z2 へ。それらのポイントに移動しますが、進行方向を指しているのではなく、ドリフトしているように見えます。だから私の質問は: updateframe() イベントでこの問題を解決するにはどうすればよいですか? 良いリソースの方向性を教えてもらえますか?
ありがとう。
オブジェクトをアニメーション化しようとしています。たとえば、車だとしましょう。私はそれがポイントから行きたい
x1、y1、z1
ポイントx2,y2,z2 へ。それらのポイントに移動しますが、進行方向を指しているのではなく、ドリフトしているように見えます。だから私の質問は: updateframe() イベントでこの問題を解決するにはどうすればよいですか? 良いリソースの方向性を教えてもらえますか?
ありがとう。
まず、道路をどのように表現しますか?
私は最近まさにこれを行い、道路にはCatmull-Romスプラインを使用しました。オブジェクトを方向付けてスプライン パスに沿って移動させるには、スプラインに沿って移動するtから現在のx、y、z位置を補間し、その特定の位置のフレネ座標系またはフレネ フレームに沿って向きを合わせる必要があります。
基本的に、各ポイントには、接線、法線、従法線の 3 つのベクトルが必要です。Tangent は、オブジェクト (車) が指す実際の方向になります。
Catmull-Rom を選択したのは、どの点でも接線を簡単に差し引くことができるためです。他の 2 つの近接点と現在の点との (ベクトル) 差を作るだけです。(あなたがtにいるとしましょう。t-epsilonとt+epsilonを選んでください- epsilon は十分に小さい定数です)。
他の 2 つのベクトルについては、この反復法を使用できます。つまり、一方の端で既知のベクトルのセットから開始し、 updateframe()ごとに前のセットに基づいて新しいセットを操作します)。
車の最初の向きと、目的地での車の最終的な向きを計算し、それらの間を補間して、現在のタイムステップのその間の向きを決定する必要があります。
この記事では、補間の背後にある数学と、役に立つかもしれないオブジェクトの回転に関するその他の事柄について説明します。一般に、gamasutra.com は、この種の優れたリソースです。
ある位置から別の位置に移動すると、オブジェクトに速度が与えられます。速度はベクトルです。そのベクトルを正規化すると、「ルックアット」マトリックスにプラグインできるモーションの方向ベクトルが得られます。このベクトルは、移動中のオブジェクトの方向制御のための完全なマトリックスを持っています。
常に目的地に車を向けるのは簡単で安価ですが、車が曲がった道をたどっている場合は機能しません。この場合、現在の場所の接線に沿って車を向ける必要があります(上記の他の回答を参照)。
補間は、あなたが見ているドリフトを与えていると思います。ステアリングの仕組みをモデル化する必要があります..更新関数は、1) 車が常に指している方向に車を動かし、2) 現在のターゲットに向かって車を回転させる必要があります..一方が他方に影響を与えないようにする必要があります。到着よりも迅速に発生し、完了します。
一般的に、車が向いている方向は、位置ベクトルの一次導関数である速度ベクトルに沿っています。
たとえば、車がn秒ごとに原点を中心に(半径rの) 円を描いている場合、車の位置のx成分は次のように与えられます。
x = r.sin(2πt/n)
その速度ベクトルのxコンポーネントは次のようになります。
vx = dx/dt = r.(2π/n)cos(2πt/n)
x、y、zコンポーネントのすべてに対してこれを行い、結果のベクトルを正規化すると、方向が得られます。