新 3D クラス開発日記(14) ~ 面を使った 3D 表現<1> PoligonWorld ~
2007/02/20 21:15 - AS3.0
以前、点を使った 3D 表現の実現は、WorldVertex というクラスで頂点や頂点変形のクラスを統括するという説明をしました。
面を使った 3D 表現も同様に、各部品のクラスを WorldPoligon というクラスで統括します。
WorldPoligon は VertexWorld に面に関わる部分を付け加えただけのものです。
WorldPoligon
このクラスは以下の 5 つのパートから構成されています。
- 生成(コンストラクタ)
- 初期化
- 頂点の登録
- 面の登録
- onEnterFrame 開始
1 ~ 3 までは VertexWorld とまったく同じですので説明は省きます。
頂点の登録
呼び出し時、次の 3 つを引数とします。
- Poligon オブジェクト格納配列
- 面表示オブジェクトの表示タイプ
- タイプに応じたハッシュ
第 1 引数の配列に格納する Poligon オブジェクトはタイムラインスクリプトで生成しておきます。
これまた、WorldVertex における Vertex オブジェクトの扱いと同等です。
onEnterFrame 開始
onEnterFrame イベントに対して、以下の処理の一連の流れを登録します。
- マウスカーソル位置を各頂点の移動量に変換
- 求められた移動量に応じ、ExMatrix のプロパティを更新
- 頂点の座標に ExMatrix のプロパティを反映させ、表示オブジェクトの位置を更新
- 頂点の更新にともない、面も更新
1 ~ 3 までは VertexWorld とまったく同じです。
このように、WorldPoligon は、WorldVertex の構造を援用しています。
ならば、WorldPoligon は WorldVertex を継承すればよさそうなものですが、そうしていません。
Aq3D.core にしても Aq3D.transform にしても Aq3D.skin にしても Aq3D.util にしても、それらのパッケージに格納したクラスは 3D 表現の部品です。
それゆえ、3D 表現の見せ方が変わっても、クラスのコードに変更が生じるわけではありません。
しかし、WorldVertex、WorldPoligon はともに(そして WorldPivot も)、その 3D 表現の見せ方が変わると、コードを書き換える必要があるクラスです。
例えば、Zsort をつけ加えたりはずしたり、Fog 効果をつけ加えたりはずしたり、あるいは、途中で頂点の編隊を変える場合はマウスクリックで Tween を起動させるなど、その都度コードの書き換えおこなう必要がなります。
まぁ、そういうコードは本来クラスとして登録せずに、フレームアクションとして記述すべきなんでしょう。
ですが World 系 3 クラスは、統括クラスのミニマムフォーマットを、備忘録という位置をこめて、外部クラスとしました。