EJE INC.WEBLOG

Labの記事

2009年9月29日 12:43 written by Arikata [ Lab ]

OZi

OZi

かなり前に実験的につくったFlashです。
約1000個のポリゴンにテクスチャを貼り付けています。
  • COMMENT
  • TRACKBACK
  • このエントリーを含むはてなブックマーク はてなブックマーク Yahoo!ブックマークに登録 Googleブックマークに登録 del.icio.usブックマークに登録 livedoorクリップに登録 Buzzurlにブックマーク
 

2009年7月 2日 15:03 written by Arikata [ Lab ]

Fractale Tree

as3で木の描画を試してみました。
アルゴリズムはフラクタルのカリフラワーを少し改造してみました。
時間があるときにもう少しリアルさを追求してみようと思います。
(※閲覧にはFlashPlayer10が必要です。)
(※Flashをクリックしたら木が描画されます。やや重いです。)




  • COMMENT
  • TRACKBACK
  • このエントリーを含むはてなブックマーク はてなブックマーク Yahoo!ブックマークに登録 Googleブックマークに登録 del.icio.usブックマークに登録 livedoorクリップに登録 Buzzurlにブックマーク
 

2009年6月25日 14:10 written by Arikata [ Lab ]

Sound Visualization

as3で音を視覚化してみました。
ドットの表現はPV3Dを使っています。

ポイントのみを3D座標に配置して動かすFlashは今まで自作エンジンを使っていたのですが、
今回はPV3Dでやってみました。
(※閲覧にはFlashPlayer10が必要です。)
(※Flashをクリックしたら音がでます。)
(※ドラッグで回転します。)



#参考
http://www.nabble.com/3D-%3E%3E-2D-coordinates-td14730886.html

各ポイントはNumber3Dではなく、空のDisplayObject3Dにすると楽です。


  • COMMENT
  • TRACKBACK
  • このエントリーを含むはてなブックマーク はてなブックマーク Yahoo!ブックマークに登録 Googleブックマークに登録 del.icio.usブックマークに登録 livedoorクリップに登録 Buzzurlにブックマーク
 

2009年6月16日 18:34 written by Arikata [ Lab ]

Basic Spring

バネ運動をActionscriptで再現したものです。
NIKKEのFlashのときにas2で作ったのですが、as3に書き直してみました。
描画はラインのみでほぼ内部計算なので、as3の性能がフル活用できるのではないでしょうか。
下記の例はぶら下がり運動ですが、地面をつけたりすれば一応物理演算系の動作も可能です。
Z座標を追加すれば3D上でも使えます。
(※閲覧にはFlashPlayer10が必要です。)

※閲覧にはFlashPlayer10が必要です。


以下ソースです。

package {

	/***************
	* Import
	*/
	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.geom.Point;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import flash.utils.getTimer;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.system.System;
	import arikata.physics.spring.BasicSpring;
	import arikata.physics.spring.Dpoint;

	public class SimpleWireFrame extends Sprite {

		private var spring1:BasicSpring;
		private var spring2:BasicSpring;
		private static const Yoffset:uint = 40;
		private static const MAX:uint = 10;
		private var pic01:Sprite = new Sprite();
		private var pic02:Sprite = new Sprite();
		private var p1vec:Point = new Point();
		private var p2vec:Point = new Point();
		private var target:String = "";
		private static const PI:Number = Math.PI;
		private static const ASIN:Number = 180*Math.asin(3/5)/Math.PI;
		private var fps:uint;
		private var fpsField:TextField;

		public function SimpleWireFrame(){
			//Spring生成
			spring1 = new BasicSpring();
			spring2 = new BasicSpring();
			spring1.lineColor = spring2.lineColor = 0xE5D3B0;
			spring1.lineThickness = spring2.lineThickness = 2;

			//背景画像設置(埋め込み)
			addChild(new Bitmap(new BACKGROUND(550,400)));

			//Spring設置
			addChild(spring1);
			addChild(spring2);

			//画像01設置(埋め込み)
			pic01.addChild(new Bitmap(new SKY01(120,90)));
			addChild(pic01);

			//画像02設置(埋め込み)
			pic02.addChild(new Bitmap(new SKY02(120,90)));
			addChild(pic02);

			//ピン設置(埋め込み)
			var pin01:Sprite = new Sprite();
			var pin02:Sprite = new Sprite();
			pin01.addChild(new Bitmap(new PIN(18,19)));
			pin02.addChild(new Bitmap(new PIN(18,19)));
			addChild(pin01);
			addChild(pin02);
			pin01.y = pin02.y = Yoffset-6;
			pin01.x = 150-6;
			pin02.x = 400-6;

			var i:uint;
			var max:uint = MAX;
			for(i=0;i<max;i++){
				//ポイント生成
				spring1.addPoint(150, Yoffset+i-i/MAX, !i);
				spring2.addPoint(400, Yoffset+i-i/MAX, !i);
				//コネクター生成
				if(i>0){
					spring1.addConnector(i-1,i);
					spring2.addConnector(i-1,i);
				}
			}
			spring1.addPoint(150, Yoffset+i+148, false);
			spring2.addPoint(400, Yoffset+i+148, false);
			spring1.addConnector(i-1,i);
			spring2.addConnector(i-1,i);
			spring1.updateList();
			spring2.updateList();
			spring1.renderStart();
			spring2.renderStart();
			pic01.buttonMode = pic02.buttonMode = true;
			pic01.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
			pic02.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
			pic01.addEventListener(Event.ENTER_FRAME, enterFrame);
			pic02.addEventListener(Event.ENTER_FRAME, enterFrame);

			fpsField = new TextField();
			fpsField.background = true;
			fpsField.autoSize = TextFieldAutoSize.LEFT;
			addChild(fpsField);
			fps = getTimer();
		}

		private function mouseDown(e:MouseEvent=null):void{
			target = e.target.name.substr(8);
			var p1:Dpoint = this["spring"+target].getPoint(MAX-1);
			var p2:Dpoint = this["spring"+target].getPoint(MAX);
			p1vec.x = p1.x-mouseX;
			p1vec.y = p1.y-mouseY;
			p2vec.x = p2.x-mouseX;
			p2vec.y = p2.y-mouseY;
			mouseMove();
			stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
			stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
		}

		private function mouseMove(e:MouseEvent=null):void{
			this["spring"+target].setPoint(MAX-1,mouseX+p1vec.x,mouseY+p1vec.y,true);
			this["spring"+target].setPoint(MAX,mouseX+p2vec.x,mouseY+p2vec.y,true);
		}

		private function mouseUp(e:MouseEvent=null):void{
			this["spring"+target].setPointFixed(MAX-1,false);
			this["spring"+target].setPointFixed(MAX,false);
			stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
		}

		private function enterFrame(e:Event=null):void{
			var local_target:String = e.target.name.substr(8);
			var pic_target:Sprite = this["pic0"+local_target];
			var p1:Dpoint = this["spring"+local_target].getPoint(MAX-1);
			var p2:Dpoint = this["spring"+local_target].getPoint(MAX);
			pic_target.x = p1.x;
			pic_target.y = p1.y;
			pic_target.rotation = 180*Math.atan2(p2.y-p1.y, p2.x-p1.x)/PI-ASIN;
			if(local_target=="1"){
				fpsField.text = Math.floor(1000 / (getTimer() - fps)) + "fps\\n" + Number(System.totalMemory / 1024 / 1024).toFixed(2) + 'Mb'
				fps = getTimer();
			}
		}
	}
}


spring_engine.zip

※ご使用は自己責任でお願いします。
※一応MITライセンスってことでお願いします。
※2009/06/17 dumper⇒spring
  • COMMENT
  • TRACKBACK
  • このエントリーを含むはてなブックマーク はてなブックマーク Yahoo!ブックマークに登録 Googleブックマークに登録 del.icio.usブックマークに登録 livedoorクリップに登録 Buzzurlにブックマーク
 
1

Page Top

株式会社 エジェ eje.Inc

http://www.eje-web.com/
株式会社 エジェ eje.Inc
〒530-0001 大阪市北区梅田1-2-2 大阪駅前第2ビル4F
TEL:06-6453-3931
E-MAIL:info@eje-web.com