ActionScriptを使った3D表現(3D基本事項(0点透視法) : ActionScript -3D-)のサンプル。
////////////////////////////////////////////////////////////////////////////////
//
// 3D円運動 消失点は考えない(0点透視法)
// 単に遠いものを小さく表示する
//
////////////////////////////////////////////////////////////////////////////////
function Elem(argX, argY)
{
//--------------------------------------
// 変数
//--------------------------------------
this._x = argX;
this._y = argY;
// 3次元座標
var x3D:Number;
var y3D:Number;
var z3D:Number;
// 焦点
var fl:Number;
// 半径
var rx;
var ry;
var rz;
// 孤度
var rad;
// 円の中心
var cx:Number;
var cy:Number;
//--------------------------------------
// 関数
//--------------------------------------
// 初期化 : 焦点, 半径X, Y, Z, 中心点X, Y, Z
this.initElem = function(argFl, argRx, argRy, argRz, argCx, argCy, argCz)
{
// 焦点
fl = argFl;
// 半径
rx = argRx;
ry = argRy;
rz = argRz;
// 孤度
rad = Math.random() * 2 * Math.PI;
// 中心点
cx = argCx;
cy = argCy;
cz = argCz;
// ハンドラ
this.onEnterFrame = moveHandler;
};
var moveHandler = function ()
{
// 3次元座標
x3D = rx * Math.cos(rad) + cx;
y3D = ry * Math.sin(rad) + cy;
z3D = rz * Math.sin(rad) + cz;
// 拡大率
var scale = fl / (fl + z3D);
// 3次元を2次元へ投影
this._x = x3D;
this._y = y3D;
// 遠いものを小さく
this._xscale = this._yscale = scale * 100;
// z座標を変更
rad += Math.PI / 36;
};
}
function Controller()
{
// 焦点
var fl:Number;
// 半径
var rx;
var ry;
var rz;
// 中心
var cx;
var cy;
var cz;
// 初期化
this.initController = function(argFl, argRx, argRy, argRz, argCx, argCy, argCz)
{
fl = argFl;
rx = argRx;
ry = argRy;
rz = argRz;
cx = argCx;
cy = argCy;
cz = argCz;
// 要素作成(ステージの外へ配置)
var elemProp = new Elem(-100, 0);
var elem = _root.attachMovie("elem", "elem" + _root.getNextHighestDepth(), _root.getNextHighestDepth(), elemProp);
// 要素初期化 : 焦点, 半径, 中心点X, Y, Z
elem.initElem(fl, rx, ry, rz, cx, cy, cz);
};
}
var o = new Controller();
// 初期化 : 焦点, 半径, 中心X, Y, Z
o.initController(250, 200, 20, 125, Stage.width / 2, Stage.height/2, 0);
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。