PV3D加入了新功能, 其實加了好一陣子了啦
這次來學習如何製作向量的3D文字
之前只能使用MovieMaterial來製作, 但出來的字就是很點陣, 不滿意
使用的類別為:
Text3D
new Text3D(文字:String , 字型 , 材質 )
文字:任意的英文字母或字元, 中文的話比較麻煩。
字型:目前內建了四種字型,分別是:
HelveticaBold
HelveticaLight
HelveticaMedium
HelveticaRoman
如果想要另外的字型, 也是有解決的辦法。
Text3D是繼承DisplayObject3D, 所以擁有其全的的屬性和方法。
材質的部份需要用使Letter3DMaterial
new Letter3DMaterial(色碼:uint, alpha值:Number );
這樣就可以

完整程式碼:
這次來學習如何製作向量的3D文字
之前只能使用MovieMaterial來製作, 但出來的字就是很點陣, 不滿意
使用的類別為:
Text3D
new Text3D(文字:String , 字型 , 材質 )
文字:任意的英文字母或字元, 中文的話比較麻煩。
字型:目前內建了四種字型,分別是:
HelveticaBold
HelveticaLight
HelveticaMedium
HelveticaRoman
如果想要另外的字型, 也是有解決的辦法。
Text3D是繼承DisplayObject3D, 所以擁有其全的的屬性和方法。
材質的部份需要用使Letter3DMaterial
new Letter3DMaterial(色碼:uint, alpha值:Number );
這樣就可以
完整程式碼:
package
{
import caurina.transitions.Tweener;
import caurina.transitions.properties.CurveModifiers;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
//import milkmidi.papervision3d.view.BasicViewX;
import milkmidi.utils.NumberUtil;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.materials.special.Letter3DMaterial;
import org.papervision3d.typography.fonts.HelveticaMedium;
import org.papervision3d.typography.Text3D;
import org.papervision3d.view.BasicView;
[SWF(width = "950", height = "500", frameRate = "41", backgroundColor = "#ffffff", pageTitle = "milkmidi.com")]
public class Text3DDemo extends BasicView
{
private var demoString :String = "http://milkmidi.com PV3D Demo Text3D Object";
private var _letterArray:Array = demoString.split("");
public function Text3DDemo() {
CurveModifiers.init();
super(0, 0, true, true, CameraType.TARGET);
init();
startRendering();
}
protected function init():void {
init3DObject();
stage.addEventListener(MouseEvent.CLICK, stageClickHandler);
randomLetter();
}
private function stageClickHandler(e:MouseEvent):void {
randomLetter();
}
protected function init3DObject():void {
var _letterMat : Letter3DMaterial = new Letter3DMaterial(0x00, 1 );
//Text3D文字物件, 需要的材質為Letter3DMaterial
//new Letter3DMaterial(色碼:uint,alpha值:Number);
for (var i:int = 0; i < _letterArray.length; i++) {
//var _text3D:Text3D = new Text3D(String.fromCharCode(i + 65), new HelveticaMedium(), _letterMat);
var _text3D:Text3D = new Text3D(_letterArray[i], new HelveticaMedium(), _letterMat);
//new Text3D(文字:String , 字型 , 材質 )
//Text3D是繼承DisplayObject3D, 所以擁有其全的的屬性和方法。
_text3D.name = "letter" + i;
scene.addChild(_text3D);
}
}
private function onTweenerComplete(pTxt3D:Text3D, pIndex:int):void {
var _offsetX:int = 60;
Tweener.addTween(pTxt3D,
{
x:pIndex * _offsetX - (_letterArray.length * _offsetX/2),
y:0,
z:0,
_bezier:{x:118, y:0 , z:-100},
rotationX:0,
rotationY:0,
rotationZ:0,
time:1,
transition:"easeOutExpo"
});
}
private function randomLetter():void {
for (var i:int = 0; i < _letterArray.length; i++) {
var _text3D:Text3D = scene.getChildByName("letter" + i) as Text3D;
Tweener.addTween(_text3D,
{
time:1.5,
delay:i*0.01,
x: randomNumber( -400, 400),
y: randomNumber( -400, 400),
z: randomNumber( -400, 400),
rotationX : randomNumber( -360, 360),
rotationY : randomNumber( -360, 360),
rotationZ : randomNumber( -360, 360),
onComplete: onTweenerComplete,
onCompleteParams:[_text3D,i]
} );
}
}
public function randomNumber(pMin:Number, pMax:Number):int {
return (Math.random() * (pMax - pMin) + pMin) >> 0;
}
override protected function onRenderTick(event:Event = null):void {
super.onRenderTick(event);
camera.x = stage.mouseX - stage.stageWidth/2;
camera.y = stage.mouseY - stage.stageHeight/2;
}
}
}
留言