2

だから私は「グラフィックスとゲーム開発のための 3D 数学入門」という本を読んでいて、ほとんど数学以外のバックグラウンドを持っていたので、ようやくベクトル/行列の数学を理解し始めました - これは安心です。

しかし、はい、常にありますが、ある座標空間から別の座標空間へのオブジェクトの変換を理解するのに苦労しています。この本の中で、著者は、 「ワールド空間」で 20 度 (簡単にするために 2D 空間にすぎません) 回転させた車 (画像) を銃で撃った例を取り上げています。つまり、ワールド空間、ガン オブジェクト空間、カー オブジェクト空間の 3 つの空間があります。その後、本書は次のように述べています。

「この図では、車に向かって弾丸を発射しているライフルを導入しました。左側の座標空間で示されているように、通常は銃とワールド空間での弾丸の軌道を知ることから始めます。さて、車、銃、弾丸の軌道を静止させたまま、座標空間を車のオブジェクト空間に合わせて変換することを想像してください. これで、車のオブジェクト空間における銃の位置と弾丸の軌道がわかります.交差テストを実行して、弾丸が車に当たるかどうか、どこに当たるかを確認できます。」

そして、私はこの説明に従います。ワールド空間で車が 20* 度回転していることを事前に知っている場合、これは問題ではありません。他の誰かにダウン?すべてがそこに移動する角度がわかりませんか?

そして、ここでどのオブジェクト空間が回転されますか? 世界か銃空間か?ええ、ご覧のとおり、私は少し混乱しています。

理想的な応答は、位置、角度などに任意の変数を使用した車と銃の例を使用することだと思います.

4

5 に答える 5

3

base を変更する方法を読んで、配列ではなくvectorで考える必要があります:P

于 2009-02-01T14:47:08.807 に答える
2

私はかつてゲームプログラマーでしたが、何度もやりました。結局、私は角度を使うのをやめました。すべてのオブジェクトについて、前向きのベクトルと上向きのベクトルがありました。次に、外積から右向きのベクトルを取得できます。そして、スペース間のすべての変換は内積になります。

于 2009-01-31T23:17:49.620 に答える
0

座標空間と変換が2Dでどのように機能するかという概念を理解していますか?座標空間と変換は、3Dに移行する前に、2Dで視覚化する方がはるかに簡単であることがわかりました。そうすれば、「what-if」シナリオを紙の上で実行でき、主要な概念を理解するのに役立ちます。

あなたが投稿した画像では、車自体は内部座標系で変更されていないが、そのシステムは世界のシステムに対して回転していると解釈されていると思います。

車には独自のローカル座標系があることを理解する必要があります。車のジオメトリは、ローカル座標系で定義されます。したがって、車の長さは、世界での向きに関係なく、独自のローカルシステムで常にx軸に沿って伸びます。車は、ローカル座標系を変換することで方向を決めることができます。

座標系は、ルート(この場合はワールド)を除いて、常に別のシステムを基準にして定義されます。つまり、銃には独自のシステムがあり、車には独自のシステムがあり、どちらも世界のシステムに組み込まれています。ワールドに対して車のシステムを回転または移動すると、ジオメトリが変更されていなくても、車は回転しているように見えます。

これは視覚的なシナリオを描くことができずに説明するのは非常に難しいことであり、私のgoogle-fuは基本の適切な説明を見つけることができません。

于 2009-01-31T23:05:28.723 に答える
0

以前の返信が示唆しているように、上、前、右のベクトルを維持することは、(ユークリッド) 座標空間を定義するための良い方法です。より広い範囲の空間を表現できるため、原点も追加するとさらに良い.

2 つのスペース A と B があり、A では、上、前、右がそれぞれ (0,1,0)、(0,0,1)、(1,0,0) で、原点がゼロであるとします。これにより、A の通常の左手 xyz 座標が得られます。B の場合、原点 o = で u=(ux,uy,uz)、f=(fx,fy,fz)、r=(rx,ry,rz) があるとします。 (オックス、オイ、オンス)。次に、B の p = (x,y,z) の点について、A に (x*rx + y*ux + z*fx + ox, x*ry + y*uy + z*fy + oy, x *rz + y*uz + z*fz + oz)。

これは、検査によって到達することができます。B の右、上、および前方のベクトルは A の各軸にコンポーネントを持っているため、B のある座標のコンポーネントは、A の座標の 3 つのコンポーネントすべてに寄与しなければならないことに注意してください。 B は (ux,uy,uz) に等しく、(x,y,z) = y*u + (その他のもの) です。これを座標ごとに行うと、(x,y,z) = x*r + y*u + z*f + (その他のもの) になります。原点でこれらの用語が (他の何か) を除いて消えるという観察を行うと、(他の何か) は実際には o でなければならないことがわかります。これは A の座標を x*r + y*u + として与えます。 z*f + o、つまり (x*rx + y*ux + z*fx + ox, x*ry + y*uy + z*fy + oy, x*rz + y*uz + z*fz + oz ) ベクトル演算が展開されると。

この操作は逆にすることもできます。A に座標を設定し、方程式を解いて B を見つけるだけです。たとえば、A の (1,1,1) は x*r + y*u + z*f + o に等しくなります。これにより、3 つの未知数で 3 つの方程式が得られ、連立方程式の方法で解くことができます。ここではあえて説明しませんが、行き詰まった場合のリンクは次のとおりです

これらすべては、弾丸と車の元の例とどのように関連していますか? 車で上/右/前方向ベクトルのセットを回転させ、車が移動するときに原点を更新すると、ワールド空間から車のローカル空間に移動して、いくつかのテストを簡単にすることができます。たとえば、衝突モデルの頂点を変換する代わりに、弾丸を「車のローカル」空間に変換し、ローカル座標を使用できます。これは、自動車の頂点を GPU でのレンダリング用に変換しようとしているが、CPU での物理計算に使用するためにその情報を読み戻すオーバーヘッドに悩まされたくない場合に便利です。

他の用途では、3 つのポイントを変換し、代わりにこれらの操作を実行することで、x ポイントの変換を節約できます。これにより、同じ数のポイントにわたる単一の変換でパフォーマンスに大きな影響を与えることなく、多数のポイントで x 変換を組み合わせることができます。

于 2009-02-01T03:30:58.080 に答える
0

ゲームの状況では、通常、車が 20 度回転していること自体はわかりません。代わりに、車の位置情報には暗黙的にその知識が含まれます。したがって、この 2 次元の例では、車の中心の x、y 座標と、車が指している x、y ベクトル (両方ともワールド空間の情報) がわかります。それを描くために。この 2 つの情報だけで、ワールド空間と車のオブジェクト空間の間で変換する行列を見つけることができます。(そして、この例の行列を見て、20 度回転したと言う人もいるかもしれませんが、それはゲームで通常気にするような情報ではありません。)

銃と車の問題は、3 つのスペースのいずれかで解決できます。それで問題は、どれが最も簡単かということです。おそらく銃のスペースは、弾丸が X 軸に沿って発射されるように設定されています。したがって、それを他のスペースのいずれかに変換するのは簡単です。2D の自動車は、おそらくそれ自体のオブジェクト空間で表現されるでしょう。おそらく、一連の 2D 線分または 2D ピクセルなどとして表現されるでしょう。これらをワールド空間または銃のオブジェクト空間に変換することは確かにできますが、車のオブジェクト空間で問題を解決する場合は、それらを変換する必要がまったくないため、この問題に取り組むのが最も簡単です。

それは一種の相対性理論のようなものです: それ自身の観点からは、どの空間も回転していません. ただし、相対性理論とは異なり、私たちは世界空間を特権的な固定座標系として扱います。したがって、オブジェクトのモデル空間は、ワールド空間に対して回転、鏡像化、スケーリング、移動などされます。

于 2009-02-01T14:30:18.047 に答える