2011年4月30日土曜日

Away3D Lite と Flash の native 3d シーンの共存

Flash のネイティブの 3Dシーンと Away3DLite のシーンを共存させる方法を調べてみた。
試行錯誤の結果こんな感じで

Sprite (Flashネイティブ) のレンダリングレイヤーを作成
----------------------------------------------------
//Flash native 3D シーンの作成
native3dlayer = new Sprite();
native3dlayer.transform.perspectiveProjection = new PerspectiveProjection();
native3dlayer.transform.perspectiveProjection.projectionCenter = new Point(0,0);
native3dlayer_base = new Sprite();
native3dlayer_base.addChild(native3dlayer);
addChild(native3dlayer_base);
----------------------------------------------------

Sprite (Flashネイティブ) のレンダリングレイヤーの描画位置を Away3DLite の描画位置と一致させる
----------------------------------------------------
native3dlayer_base.x = view.x;
native3dlayer_base.y = view.y;
----------------------------------------------------

視野角を一致させるためには Away3DLiteの Camera3D.focus と Spriteレンダリングレイヤーの focalLength を一致させる。
----------------------------------------------------
native3dlayer.transform.perspectiveProjection.focalLength = camera.focus;
----------------------------------------------------

描画倍率を一致させるために Away3DLite の Camera3D.zoom の値でSpriteレンダリングレイヤーの描画倍率を一致させる
----------------------------------------------------
native3dlayer_base.scaleX = camera.zoom;
native3dlayer_base.scaleY = camera.zoom;
----------------------------------------------------

カメラの視点をSpriteレンダリングレイヤーにも適用するためにカメラの変換行列を invert して Sprite に適用
----------------------------------------------------
var mat:Matrix3D = camera.transform.matrix3D.clone();
mat.invert();
native3dlayer.transform.matrix3D = mat;
----------------------------------------------------


ソースコード:ソースコード

サンプルコンテンツを別ウィンドウで開く

0 件のコメント:

コメントを投稿