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; } } }
留言