3D基本事項(0点透視法)サンプル : ActionScript -3D-

Pocket

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.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。