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する必要がある。
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;
}