// ウソ宇宙 // forked from sake's レインボーロード! forked from: nengafl // forked from nengafl's nengafl /* PV3Dで簡単に綺麗な図形を作ってみよう! PV3Dを使うと3Dを超簡単に扱えます。 そこで、PV3Dで簡単に綺麗な図形を作ってみましょう。 簡単な数式とパラメータだけで綺麗な図形が完成! 下で定義してある定数のp, q, a, l, m をいじってみてください。 また、for文の中の数式を書き換えるとさらに形が変わります。 単純に、sin → cos みたいに書き換えてみてもおもしろいかも! */ package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.events.Event; import flash.geom.Matrix; import flash.geom.Point; import frocessing.color.FColor; import org.papervision3d.core.geom.Pixels; import org.papervision3d.core.geom.renderables.Pixel3D; import org.papervision3d.view.BasicView; import org.papervision3d.view.layer.BitmapEffectLayer; [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="60")] import flash.geom.ColorTransform; import flash.filters.BlurFilter; public class Nengafl extends BasicView { // 計算に使うパラメータ // このあたりを適当に変えてみるだけでも面白いです! //---------------------------------------------------------------- private const p:int=3; private const q:int=7; private const l:Number=0.9; private const m:Number=1.1; private var a:Number = -1.4; private var b:Number = 1.6; private var c:Number = 1.0; private var d:Number = 0.9; //---------------------------------------------------------------- private var i:Number = 0; private var t:Number = 0.2; private var difX:Number, difY:Number, oldX:Number, oldY:Number; private var pixels:Pixels; private var px:Pixel3D; private var canvas:BitmapData; private var mtx:Matrix; private var cTrs:ColorTransform; private var bFlt:BlurFilter; // コンストラクタ public function Nengafl() { super(0, 0, true, true); // レイヤー作成。PV3Dでエフェクト使うときはこれを最初に作ります var layer:BitmapEffectLayer=new BitmapEffectLayer(viewport, 465, 465, true, 0, "clear_pre", true); layer.clearBeforeRender=true; viewport.containerSprite.addLayer(layer); camera.z=-500; // Pixelsの初期化 pixels=new Pixels(layer); scene.addChild(pixels); var c:int=0; var cc:FColor=new FColor; // キラキラロジック canvas=new BitmapData(465, 465, false, 0x000000); var bmp:Bitmap=new Bitmap(canvas, "never", true); addChild(bmp); mtx=new Matrix(1, 0, 0, 1); cTrs = new ColorTransform(0.95, 0.95, 0.99); bFlt = new BlurFilter(2, 2); Draw(3000); // PV3Dの描写開始! startRendering(); // フレームイベント追加 addEventListener(Event.ENTER_FRAME, onFrame); } private function Draw(n:int):void { var x:Number = 0; var y:Number = 0; var z:Number = Math.random()*300-150; var nx:Number; var ny:Number; var nz:Number; for(i = 0; i < n; i++) { nx = Math.sin(a*y)+c*Math.cos(a*x); ny = Math.sin(b*x)+d*Math.cos(b*y); x = nx; y = ny; px = new Pixel3D( 0xffffffff, x*150, y*150, Math.sin(i)*350 ); pixels.addPixel3D(px); } } // フレームイベント用関数 private function onFrame(e:Event):void { // キラキラを描写 canvas.lock(); canvas.applyFilter(canvas, canvas.rect, new Point(0, 0), bFlt); canvas.colorTransform(canvas.rect, cTrs); canvas.draw(viewport, mtx); canvas.unlock(); // Y軸でローテーション pixels.rotationX += 0.2; pixels.rotationY += 0.2; pixels.rotationZ += 0.2; } } } forked from: レインボーロード! forked from: nengafl