Astro de 3D(9) ~Matrix3D 使用編 改~
2008/06/10 21:27 - Astro
前回、表示オブジェクトの三次元表現に関わるプロパティを設定すると、暗黙的に Matrix3D が作られるという話をしました。
このコードでは明示的に Matrix3D を生成しました。
しかし createCube メソッドにおいて、すべての面 Shape はその生成の際に z プロパティか rotation[X|Y|Z] プロパティのいずれかを定義します。
ということは暗黙的に Matrix3D が生成されるんだから、何もわざわざ明示的に Matrix3D を作らんでもよいだろうが、ということになるワケだこれが(前々回のラストでちこっと触れたのはこういうこと)。
以上は、前々回のエントリーにおいて localMat と呼んだ方の Matrix3D のことですが、では globalMat と呼んだ Matrix3D についてはどうでしょう?
面 Shape のコンテナとして生成した rootNode に暗黙的 Matrix3D を発生させ、それを globalMat に使えばイイんじゃね? という考え方もアリなんじゃないでしょうか。
速度的にはどうかは分かりませんよ。 ENTER_FRAME のタイミングで new Matrix3D をした方が、rootNode の Matrix3D を使うより速いかも知れません。
でもまぁこういうコーディングもできますよ、ってことで、書き換えたコードが以下のものです。 できる SWF の挙動はすでに掲示したサンプルと同じなので略します。
注意点としては、localMat はそれぞれの面 Shape に書き戻さないとダメですが(上記コードでは clone メソッドを使わない、というやり方で書き戻しと同様の処理になるようにしています)、globalMat は逆に rootNode に書き戻したらダメってことですかねー。
待てよ。
ってことは ENTER_FRAME のタイミングで使う globalMat の値は、常に Matrix3D 生成時のデフォルト値だから、rootNode に Matrix3D を持たせても意味ないのか。
まあ、あくまでもこういう書き方もできるってことで。