Beautifl - Flash Gallery

Thumbnail : [PV3D] Typography
[PV3D] Typography
clockmaker 2009-08-27 MIT License

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

/**
* 3D Typography
* 参照 : http://clockmaker.jp/blog/2008/12/papervision_vector_font/
*/
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.text.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.view.*;
	import org.papervision3d.cameras.*;
	import org.papervision3d.materials.special.Letter3DMaterial;
	import org.papervision3d.typography.fonts.HelveticaBold;
	import org.papervision3d.typography.Text3D;
	import caurina.transitions.properties.CurveModifiers;
	import caurina.transitions.Tweener;
	
	[SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "0")]
	
	public class Main extends BasicView 
	{
		public function Main():void 
		{
			CurveModifiers.init()
			stage.quality = StageQuality.MEDIUM;
 			motion();
			stage.addEventListener(MouseEvent.CLICK, motion);
			startRendering();
		}
		
		private function motion(e:Event = null):void
		{
			// create letter
			var text:TextField = new TextField();
			text.htmlText = "<font face='Arial' size='14'>PV3D</font>";
			text.autoSize = "left";
			
			var cap:BitmapData = new BitmapData(text.textWidth, text.textHeight, true, 0xFFFFFFFF);
			cap.draw(text);
			//addChild(new Bitmap(cap))
			
			var wrap:DisplayObject3D = scene.addChild(new DisplayObject3D());
			
			// particle motion
			var cnt:int = 0;
			for (var i:int = 0; i < text.textWidth; i++ )
			{
				for (var j:int = 0; j < text.textHeight; j++ )
				{
					if (cap.getPixel(i, j) == 0xFFFFFF) continue;
					
					// A-Z
					var char:String = String.fromCharCode(65 + 25 * Math.random() | 0);
					
					// letter
					var lettermat:Letter3DMaterial = new Letter3DMaterial();
					lettermat.fillColor = 0xFFFFFF * Math.random();
					var word:Text3D = new Text3D(char , new HelveticaBold() , lettermat);
					
					word.x = 1000 * Math.random() - 500 - 500;
					word.y = 1000 * Math.random() - 500;
					word.z = -5000;
					word.scale = 1;
					word.rotationZ = 720 * Math.random();
					wrap.addChild(word);
					
					Tweener.addTween(word,
					{
						x : (i - text.textWidth / 2) * 30,
						y : (text.textHeight / 2 - j) * 30,
						z : 0,
						scale : 0.5,
						rotationZ: 0,
						_bezier : [{x : 1000, y : 0}],
						time : 5,
						transition : "easeInOutExpo",
						delay : cnt++ * 0.0175
					});
				}
			}
			
			// wrap motion
			wrap.z = 4000;
			Tweener.addTween(wrap,
			{
				z : -1000,
				time : 10,
				transition : "easeInExpo",
				onComplete : function():void
				{
					scene.removeChild(wrap);
				}
			});
            
			// camera motion
			camera.x = -200
			Tweener.addTween(camera,
			{
				x : 200,
				time : 10,
				transition : "easeInExpo"
			});
		}
		
	}
}