ActionScriptを使った3D表現(3D基本事項(1点透視法) : ActionScript -3D-)のサンプル。
// 1点透視法
function Elem(defaultX, defaultY)
{
//--------------------------------------
// 変数
//--------------------------------------
this._x = defaultX;
// 初期はステージ外へ
this._y = defaultY;
// 3次元座標
var x3D:Number;
var y3D:Number;
var z3D:Number;
// 焦点
var fl:Number;
// 消失点
var vpx:Number;
var vpy:Number;
//--------------------------------------
// 関数
//--------------------------------------
// 初期化 : 3次元X, Y, Z, 焦点, 消失点X, Y
this.initElem = function(argX3D, argY3D, argZ3D, argFl, argVpx, argVpy)
{
// x3D,y3Dはscale=1(スクリーン上の位置)
x3D = argX3D;
y3D = argY3D;
z3D = argZ3D;
// 焦点
fl = argFl;
// 消失点
vpx = argVpx;
vpy = argVpy;
// フレームハンドラ
this.onEnterFrame = moveHandler;
};
var moveHandler = function ()
{
var scale = fl / (fl + z3D);
if (scale >= 1)
{
delete this.onEnterFrame;
}
// 3次元を2次元へ投影
this._x = (x3D - vpx) * scale + vpx;
this._y = (y3D - vpy) * scale + vpy;
// 大きさ
this._xscale = this._yscale = scale * 100;
// z座標を変更
z3D -= Math.random()*20+10;
};
}
function Controller()
{
// 焦点
var fl:Number;
// 消失点
var vpx:Number;
var vpy:Number;
// 初期化
this.initController = function(argFl, argVpx, argVpy)
{
fl = argFl;
vpx = argVpx;
vpy = argVpy;
for (var i = 0; i < 30; i++)
{
// 3D座標
var x = Math.ceil(Math.random() * Stage.width);
var y = Math.ceil(Math.random() * Stage.height);
var z = 1000;
// 要素作成(ステージの外へ配置)
var elemProp = new Elem(-100, 0);
var elem = _root.attachMovie("elem", "elem" + _root.getNextHighestDepth(), _root.getNextHighestDepth(), elemProp);
// 要素初期化 : 3次元X, Y, Z, 焦点, 消失点X, Y
elem.initElem(x, y, z, fl, vpx, vpy);
}
};
}
var o = new Controller();
// 初期化 : 焦点, 消失点X, Y
o.initController(250, 10, 200);
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。