2016-05-02 19 views
0

my GameEntity classの場合、エンティティの位置、回転、スケールを表すMatrix4は1つありますが、変更または編集するたびにMatrix4 "EntityMatrix"を更新する変数には個別のフィールドがあります。あたかもこれが最適な設計決定であるかのように感じましたが、別の実装を示すthis class on the internetが見つかりました。Matrix4の "World Transform"と "Local Transform"の違いは何ですか?

40行目と41行目に、私のように2つのMatrix4が追加されていることがわかりました。行列の名前も私を混乱させます。 WorldTransformとLocalTransformです。誰もがこの2つの行列が使われていることを知っていますか?彼らはどのように異なることを表現しているのですか?彼らの違いは何ですか?

+1

私はここから始めます:http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/またはクラスブックとクラスノートを読んでください。私は "Local Transform"がリンク内の "Model"座標を変換していると仮定しています。 "World Transform"は "World"座標を変換します。 – Quantic

答えて

1

worldTransformフィールドは、GameEntityクラスのマトリックスと似ています。しかし、いくつかの重要な相違点があります。回転やスケールではなく、位置だけを考慮に入れている点です。しかし、あなたのクラスのように、エンティティの位置が変わったときに変更されるはずです。

localTransformフィールドは独立しており、エンティティのプロパティに応じて変更されません。しかし、それはpublicです。つまり、他の場所に設定することができます。エンティティが作成されてから変更されない場合、おそらく一度設定されます。モデルファイル内で、ある種の平行移動/回転/スケールオフセットを補正するために使用します。モデルファイルが1つの軸を「前方」として使用するが、ゲームエンジンが異なる軸を使用する場合。 localTransformフィールドはIDに初期化されているため、決して変更されなければ、他の行列計算を妨げません。

+0

なぜ彼らはただ1つではなく2つの行列を選んだのですか? – Krythic

+1

@Krythic私は考えがあります。 'worldTransform'はプロパティ(理論的にはとにかく)によって自動的に変更され、' localTransform'は自動的に変更されません。この場合の 'localTransform'は、位置、回転、スケールに加えて特殊なカスタム変換コンポーネントに似ています。 1つの行列を使用したばかりの場合、位置/回転/スケールが変更されるたびに、行列が再計算され、適用しようとした追加の変換が失われます。 – izrik

+0

@ Krythicつまり、2つの行列は異なる意味/使用法を持ち、異なって更新されますが、それでもエンティティの最終的な位置に寄与します。 – izrik