Sandy 3D Engine with Flash Lite 3.1

Flashオープンソースな3D描画エンジンとしては Papervision3Dが有名. Papervision3DActionScript 3ベース. 一方, Flash Lite 3.1以前はActionScript 2ベースなので, Flash LitePapervision3Dをそのまま使うことはできない(んじゃないかな〜)

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が使えるのかもしれない(未検証).