Papervision3D Learning 101213

12.13.2010

Papervision3Dで好きなフォントをベクターで表示する。

Text3Dでフォントをベクターとして表示する。Letter3DMaterialで色と透明度を設定する。好きなフォントを使用したい場合は自前でフォントデータをクラスにしておく必要がある。

フォントデータを作成するにはFIVe3D make typography v2.0を使用する。
ダウンロードしてきたMake a new typography file.swfを C:\Users\username\AppData\Local\Adobe\Flash CS4\ja\Configuration\WindowSWFフォルダに置く。
「ウィンドウ>その他のパネル」から起動してフォントデータを作成する。
作成されるフォントデータのクラスはそのままでは使用できないので、 パッケージ名を調整してPapervision3DのFont3Dをextendsしたうえで、プロパティの一部をoverrideする必要がある。

SAMPLE VIEW CODE


package {
	
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.special.*;
	import org.papervision3d.typography.fonts.*;
	import org.papervision3d.typography.*;
	import org.papervision3d.view.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.view.layer.ViewportLayer;
	import org.papervision3d.core.math.Matrix3D;
	
	
	import org.libspark.betweenas3.BetweenAS3;
	import org.libspark.betweenas3.events.TweenEvent;
	import org.libspark.betweenas3.tweens.*;
	import org.libspark.betweenas3.easing.*;

	

	public class view3d extends BasicView {
		   
		// ------------------------------------------------------------------------------- Properties
		
		private var _this:Object;
		private var _stage:Stage;

		private var _rootdo3d:DisplayObject3D;
		
		
		
		// ------------------------------------------------------------------------------- Constractor
		
		public function view3d() {
			
			super(1, 1, true, true, "Target");

			_this = this;
		}
		

		
		// ------------------------------------------------------------------------------- Function
		
		/**
		 * initialize
		 */
		public function Init(tgtstage:Stage):void {
			
			_stage = tgtstage;
			
			init3dworld();
			
			inittext3d();
		}
		
		/**
		 * start
		 */
		public function Start():void {			
			
			//startRendering();
			
			singleRender();
		}

		/**
		 * initialize 3dworld
		 */
		private function init3dworld():void {
			
			camera.zoom = 11;
			camera.focus = 100;
			setcameraaction();
			
			_rootdo3d = new DisplayObject3D();

			scene.addChild(_rootdo3d);
		}
		
		/**
		 * initialize cards
		 */
		private var textslength:int = 1;
		
		private function inittext3d():void {
			
			var font = new Fontdata();
				
			var mat = new Letter3DMaterial(0x000000, 1);
			mat.doubleSided = true;				
			
			var _t = new Text3D("nmLog", font, mat);	
			
			_rootdo3d.addChild(_t);		
		}
		
		/**
		 * camera
		 */
		private var camactmousepos:Point;
		private var camera_rotx:Number;
		private var camera_roty:Number;
		private var camposz:Number;
		
		private function setcameraaction():void {		
		
			camera_rotx = -10;
			camera_roty = -40;
			
			camposz = -800;
			
			updatecamerapostion();
			
			_stage.addEventListener(MouseEvent.MOUSE_DOWN, camact_down);

			
		}
		//
		private function camact_down(eo:* = null):void {
			
			camactmousepos = new Point(_stage.mouseX, _stage.mouseY);
			
			_stage.addEventListener(MouseEvent.MOUSE_UP, camact_up);
			_stage.addEventListener(MouseEvent.MOUSE_MOVE, camact_move);
		}
		//
		private function camact_up(eo:* = null):void {
			
			camactmousepos = null;
			
			_stage.removeEventListener(MouseEvent.MOUSE_UP, camact_up);
			_stage.removeEventListener(MouseEvent.MOUSE_MOVE, camact_move);
		}
		//
		private function camact_move(eo:* = null):void {
			
			if(camactmousepos){
				
				var vx :Number = (_stage.mouseX - camactmousepos.x) / 2;
				var vy :Number = (_stage.mouseY - camactmousepos.y) / 2;
				
				camera_rotx = camera_rotx - vy;				
				
				if(camera_rotx <= -89) camera_rotx = -89;
				else if(camera_rotx >= 89) camera_rotx = 89;
				
				camera_roty = camera_roty + vx;
				
				updatecamerapostion();
				
				camactmousepos = new Point(_stage.mouseX, _stage.mouseY);
			}
		}		
		/** */
		private function updatecamerapostion():void {
			
			var v:Matrix3D = new Matrix3D([0, 0, camposz, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
			var vrx:Matrix3D = Matrix3D.rotationX(camera_rotx / 180 * Math.PI);
			var vry:Matrix3D = Matrix3D.rotationY(camera_roty / 180 * Math.PI);
			var va0:Matrix3D = Matrix3D.multiply(v, vrx);
			var va1:Matrix3D = Matrix3D.multiply(va0, vry);
			
			camera.x = va1.n11;
			camera.y = va1.n12;
			camera.z = va1.n13;
			
			singleRender();
		}	

	
	}
	
}


package {
	
	import org.papervision3d.typography.Font3D;
	

	public class Fontdata extends Font3D {
		
		override public function get motifs():Object
		{
			if(!__initialized)initialize();
			return __motifs;
		}

		override public function get widths():Object
		{
			if(!__initialized)initialize();
			return __widths;
		}
		
		override public function get height():Number
		{ 
			if(!__initialized)initialize();
			return __heights;
		}





category : ActionScript / Flash / Papervision3D

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category