1

タイトルはほとんどすべてを語っています..私が船を持っているとしましょう。その worldVelocity は次の値を持つ Vector3 です: X: 0 Y: 0 Z: 1 (+Z が前方、+Y が上、+X が右と仮定)この Vector3 は、平行移動と回転を格納する船の worldTranslations Matrix に追加されます。

worldTranslations.Translation += worldVelocity

私の船は前進し、目標速度である速度 1 で (正しく) 加速を停止しますが、船が右に 180 度回転しているとどうなるでしょうか。自動的に船の目標速度がこれを検出し、再び前進しようとします。

問題は、船の速度と localTransforms からローカル速度を取得する方法がわからず、どこにも答えが見つからないことです..

そのため、現時点では、船が回転しない限り、船が目標速度に達したかどうかを確認するために世界速度を使用しています。目標速度は 1 なので、船は現在の速度 (0,0,0) と目標速度 (0,0,1) を比較し、目標 (0,0,1) に到達して加速を停止するまで適切に加速します。一定の速度を維持しますが、右に 90 度回転すると、現在の速度は (-1,0,0) になります。これは、船が左に漂流しているためです。 (1,0,1) を加速して (0,0,1) に戻しますが、相対速度を取得する方法がわかりません。それで、それはすべて良いと思いますが、まだ左に漂っています..

ありがとう..またみんな:)

4

2 に答える 2

1

その答えは、速度ベクトルを逆回転行列で変換することでした。

この投稿は、私の友人が Unity3D の組み込み関数の 1 つを使用して目的の結果が得られたことに気付いたときに作成されましたが、最終的には同じ質問です。

Unity 関数 Transform.InverseTransformDirection の XNA 同等性

より詳細な説明は、そのページにあります。

ただし、問題がすぐに解決しなかったためにこれがうまくいかない場合は、一度にベクトルの 1 つのコンポーネントを調べてみてください。ベクトルの Z 成分のみを -1 で乗算して機能させる必要がありました。他の数学による干渉の可能性が最も高いため、結果ベクトル コンポーネントの結果を個別に調べることをお勧めします。

-アーロン

于 2013-07-02T02:39:48.480 に答える