Sandy 3D Engine with Flash Lite 3.1
Flash のオープンソースな3D描画エンジンとしては Papervision3Dが有名. Papervision3D はActionScript 3ベース. 一方, Flash Lite 3.1以前はActionScript 2ベースなので, Flash LiteでPapervision3Dをそのまま使うことはできない(んじゃないかな〜)
Flash のオープンソースな3D描画エンジンで, Papervision3Dよりも古くあるものとして, Sandy 3D EngineSandy 3D Engine がある. 最近は開発が停滞しているようだが. Sandy 3D Engine は, version 3.1.2はAS3とhaXe(!)をサポートしている一方, 開発が終了したbranch 1.2はAS2に対応している. ということは, Sandy 3D Engine 1.2をFlash Lite 3.x で使って3D描画できる可能性があるのか? というのが1年くらい前から気になっていた. 少なくとも赤い直方体くらいは Flash Liteとしてpublishできるようだ. Flash CS 5.5で実験.
import sandy.core.group.Group; import sandy.primitive.*; import sandy.view.*; import sandy.core.*; import sandy.skin.MixedSkin; var cam = new Camera3D(240,320); // Position the camera up and away from the origin and have it point at (0,0,0) cam.translate(250, 250, -500); cam.lookAt(0,0,0); World3D.getInstance().setCamera(cam); // Creat the root group. var bg:Group = new Group(); // Set the root group of the world World3D.getInstance().setRootGroup(bg); // Add a primitive object to the scene (see below) createRedBox(bg); // Render the world. World3D.getInstance().render(); function createRedBox(bg:Group):Void { // Create a box and add it to the world's rootgroup. var o1:Box = new Box( 100, 100, 100, "tri", 2); var skin1:MixedSkin = new MixedSkin(0xff0000, 50, 0, 100, 2); o1.setSkin(skin1); bg.addChild(o1); }
少しつまずいたのは, 世の中には Sandy 3D Engine 1.1 の(バージョンを明示しない)サンプルが多く流布しているのだが, 1.2になったところでCamera3Dのコンストラクタの引数が変わってそのままでは動作しないこと. 複数バージョン対応の書き方を見て認識した.
なお, Flash Lite 4.0はAS3ベースなので, Sandy 3D Engine 3以降や, Papervision3Dが使えるのかもしれない(未検証).