Metasequoiaクラス改造論(1) 階層構造の再現

Metasequoiaクラス改造論(1) 階層構造の再現

Metasequoiaは、バージョン2.4から、オブジェクトの階層化に対応した。そこで、Metasequoiaクラスもオブジェクトを階層化してみよう。幸い、Papervision3D(と言うかFlashそのものが)、木構造でデータを保持するので、これを利用すればいい。

つまり、今までは単一のMetasequoiaインスタンスに全てのオブジェクトを放り込んでいたのを、オブジェクトごとに内部でMetasequoiaクラスを生成し、addChildしていけばよいのだ。

ちなみに、完成品はMQOViewerに使用してある。

階層構造の構築

Metasequoiaのファイルフォーマットだと、階層構造で親になるObjectは、自分より前にいることになる。つまり、パース済みのObjectチャンクの中に親があるのだ。具体的に言うと、自分より先にパースされたオブジェクトは、以下の3つのうちどれってこと。

  1. 自分の親Objectである
  2. 自分の兄弟Objectである
  3. 自分の兄弟Objectの子である

なので、Metasequoiaクラスをこんな風に実装すればよいはずだ。

  • mqoファイルをロードするMetasequoiaインスタンスをrootとする。Objectチャンク内の全Objectはその子
  • rootは、mqoファイル内の全Objectの一覧を持つ
  • 新しいObjectチャンクをパースする際に、一覧から親を探す

Metasequoiaのファイルフォーマットによれば、階層構造はObjectチャンクのdepthチャンクで表現されるとある。そこで、Objectチャンクの読み込み時にdepthを読み込み、それを元に階層構造を決定して、それにあわせてaddChildを使って階層構造を実現していくと言うことにしてみる。

タイトルとURLをコピーしました