// forked from bunta's forked from: forked from: forked from: forked from: Text3Dの練習 // forked from bunta's forked from: forked from: forked from: Text3Dの練習 // forked from Stepan's forked from: forked from: Text3Dの練習 // forked from paq's forked from: Text3Dの練習 // forked from rsakane's Text3Dの練習 package { import org.papervision3d.view.*; import org.papervision3d.materials.special.Letter3DMaterial; import org.papervision3d.typography.Text3D; import org.papervision3d.typography.fonts.HelveticaBold; import flash.events.*; import flash.display.StageAlign; import flash.display.StageScaleMode; import net.hires.debug.Stats; [SWF(backgroundColor="#ffffff", frameRate=60)] public class PV3D extends BasicView { private var text:Text3D; private var words:Array; private const SIZE:int = 62; private const GRAVITY:int = -1; public function PV3D() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; var letter:Letter3DMaterial = new Letter3DMaterial(); letter.fillColor = 0xFF3300; letter.doubleSided = true; var str:String = "knyrlknyrlknyrlknyrlknyrlknyrlknyrlknyrlknyrlknyrlknyrlknyrllr"; text = new Text3D(str, new HelveticaBold(), letter); words = new Array(SIZE); for (var i:uint = 0; i < SIZE; i++) { var char:Char = new Char(); char.initialize(); words[i] = char; text.letters[i].x = -200 + Math.random() * 400; text.letters[i].rotationY = -50 + Math.random() * 100 } addChild(new Stats()); scene.addChild(text); startRendering(); } override protected function onRenderTick(event:Event=null):void { for (var i:uint = 0; i < SIZE; i++) { text.letters[i].x += words[i].vx; text.letters[i].y += words[i].vy; text.letters[i].z += words[i].vz*4; text.letters[i].rotationX += words[i].vx; text.letters[i].rotationY += words[i].vy; words[i].vy += GRAVITY; if (text.letters[i].y < -500) { text.letters[i].x = -200+Math.random()*400; text.letters[i].y = 0; text.letters[i].z = 0; text.letters[i].scaleX = text.letters[i].scaleY = Math.random() * 5; words[i].initialize(); } } super.onRenderTick(event); camera.x += (2000 * Math.sin(mouseX / stage.stageWidth * 360 * Math.PI / 180) - camera.x) * .1; //camera.z += (2000 * Math.cos(mouseX / stage.stageWidth * 360 * Math.PI / 180) - camera.z) * .1; //camera.y += (2000 * mouseY / stage.stageHeight - camera.y) * .1; } } } class Char { public var vx:int; public var vy:int; public var vz:int; public function initialize():void { this.vx = Math.random() * 30 - 10; this.vy = Math.random() * 30; this.vz = Math.random() * 50 - 10; } } forked from: forked from: forked from: forked from: forked from: Text3Dの練習