きまぐれに FP10 のネイティブ 3D 表現(続き)
2009/01/19 21:49 - AS3.0
以前「きまぐれに FP10 のネイティブ 3D 表現」というタイトルで、 球体の表面に丸いシールを貼り付けたようなネイティブ 3D コードを WonderFl に投稿した話を書きました。
↓のヤツですね。
このコードはそれぞれの頂点を Matrix3D や Vector3D を使って投射変換をおこなってるんですが、前回の記事の最後で、いちいち全部の頂点をマトリクス計算せずとも、生成時に rotation[X|Y] もセットしちゃって、コンテナ回転させればいいんじゃないの? でも失敗したよ(とほほ)、ということを書きました。
その後リトライをし続けていたんですが、今回、望みどおりのコードが書けたので、比較用に WonderFl に投稿しました。
↓のヤツですね。
リソース使用状況を確認するため、Stats を導入してみました。
結果はほとんど変わらないですね。 でもなんか体感的にはコンテナを回転させる方がモッサリした感じがするなぁ。
頂点クラスの render メソッドで現在の投射Z座標値を求めるために getRelativeMatrix3D メソッドを使っているんですが、こいつが結構リソースイーターなのかもしれん。
あと、裏と表が入れ替わる瞬間はコンテナ回転版の方がダメです。
コンテナ回転版における各頂点は、最初に rotation[X|Y] を設定すれば、ENTER_FRAME のタイミングでは投射Z座標を求めるだけで楽っちゃあ楽ですが、別に処理速度が劇的に速くなるわけでもない(むしろ体感的には遅く感じる)し、それに何より、裏表入れ替わりの瞬間がダメってのは致命傷。
今後はメンド臭がらずに Matrix3D.transformVector と PerspectiveProjection で計算する手段を使うことにします…… ということが検証できました。