サイトのトップへ戻る

libGDX ドキュメント 日本語訳

サイト内検索

Model

model はノードの階層によって構成された3D アセットを表し、各ノードはジオメトリ(メッシュ)とマテリアルが組み合わされてできています。 追加で、modelはアニメーションとスキン処理に関する情報を保持することもできます。

model は実際に描写されることを想定したものではありません。 その代わりにModelのModelInstances を1つ以上作成する必要があり、これが実際の描写に使用されます。 ModelInstance の構造は Modelとほとんど同じです。



Node

model はノードを階層的に表現したものです。 これは実際には、model はノードの配列を含み、各ノードにはノードの配列も含まれるということを意味します。 ノードには、 public 定義されたnodes配列を使ったりgetNode(...)メソッドのどれかを使ったりしてアクセスできます。 各ノードはmodel内において一意のidを持っています。

各ノードは一度に1つのModel やModelInstance に属することができ、複数のModel やModelInstance間で共有されることはありません。 したがってModelInstance のノードへの変更はそのModelInstanceへのみ影響します。 Model のノードへの変更は、そのノードと、変更後にそのノードを使って作成された全てのModelInstanceに影響します。 しかし変更前にそのノードを使って作成したModelInstance は変更されません。



ノード変換

ノードは変換(移動や回転や拡大縮小)をすることができ、それによってすべの子ノードも変換が行われます。 この変換情報は、モデルを読み込んでいる間に設定したり、プログラムのコード上から変更したりできます。 変換情報を変更するために、ノードはvector型の translation値 とvector 型のscale値とquaternion型のrotation値 を持っています。 これらの値が変更された時、変換情報(子ノードの変換情報も含む)を更新して変更を反映する必要があります。 これは model.calculateTransforms();メソッドを使って行うことができます(ModelInstance クラスでも使用可能です)。

Node の変換情報が計算または再計算された時、それらはmatrix 型のlocalTransform値 と matrix 型のglobalTransform値 に保存されます。 matrix 型localTransform値 は、親ノードを基準としたノードの変換情報を表します。 matrix 型globalTransform値 は、 model や modelinstanceを基準としたノードの変換情報を表します。 言い換えれば: Node の globalTransform とは、その親ノードの globalTransformの値 に自身の localTransformの値を掛けたものです。

アニメーションが ModelInstanceに適用された時、isAnimated の値には trueが設定されます。 これにより、変換情報の再計算時にtranslation値とscale 値と rotation値は使用されなくなります。



NodePart

ノードは、必要に応じて視覚的表現の要素を持つことができます。 そのため、Node クラスにはNodePartの配列が含まれています。 各NodePart はMeshPart とMaterialで構成されており、これで形状(MeshPart)をどこ(ノード変換情報)にどのように(Material)して描写するかを設定します。 必要に応じて、メッシュ変形(スキン処理に使用)とUV マッピング(複数のテクスチャ座標で使用)に関する情報を持たせることもできます。



リソースを管理する

modelは1つ以上のメッシュと、多くの場合は1つ以上のテクスチャによって構成されます。 MeshクラスとTextureクラスは両方とも(そしておそらくその他リソースも)、不要になった時は適切に破棄しなければなりません。 modelは自身が含んでいる全てのリソースの破棄について責任を負っています。 不要になった時、 dispose();メソッドを使ってmodelを破棄する必要があります。 そうすることで、後ろで動いている全てのリソースが破棄され、依存してる全てのオブジェクト ( ModelInstanceのような)が無効になります。

model が責任を負っているDisposableの一覧を取得するには、 getManagedDisposables()メソッドを使用します。 プログラムのコード上からmodelにリソース破棄の責任を負わせるには、manageDisposable(Disposable) メソッドを使用します。 例えば、modelのテクスチャを変更してmodelが破棄された時にそのテクスチャも破棄したい場合などです。

modelは自身のリソースに対して責任を負っているので、リソースはmodelごとに分けておくことをお勧めします。 例えば、複数のmodelでリソースを共有することはお勧めしません。 その代わりに多くの場合は、modelを組み合わせて使ったり(読み込みやビルドする前に)、modelではなくModelInstance間でリソースを共有することが可能です。