forked from: forked from: Implicit 3D Blobby

by bradsedito
interactive implicit 3D blobby plot
more info here: http://actionsnippet.com/?p=1318
♥0 | Line 66 | Modified 2011-10-27 04:37:07 | MIT License
play

ActionScript3 source code

/**
 * Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/jtMG
 */

// forked from jondissed's forked from: Implicit 3D Blobby
// forked from shapevent's Implicit 3D Blobby
package {

        // interactive implicit 3D blobby plot
        
        // more info here: http://actionsnippet.com/?p=1318
        
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;


    
       [SWF(backgroundColor=0x000000)]
       
       public class ImplicitBlobby extends MovieClip {
        private var matrix:Matrix3D;
        private var verts:Vector.<Number>;
        private var pVerts:Vector.<Number>;
        private var uvts:Vector.<Number>;
        private var s:Number;
        private var brush:BitmapData;
        private var canvas:BitmapData;
        private var dx:Number;
        private var dy:Number;
        private var dz:Number;


               public function ImplicitBlobby(){
                  // init
            matrix = new Matrix3D();
            verts = new Vector.<Number>();
            pVerts = new Vector.<Number>();
            uvts = new Vector.<Number>();
            for (var i:Number = -12; i<=12; i+=1) {
                for (var j:Number = -12; j<=12; j+=1) {
                    for (var k:Number = -12; k<=12; k+=1) {
                        // blobby, from here www.iiit.net/techreports/ImplicitTR.pdf
            s=Math.sqrt(i*i+j*j+k*k)-10;
                        if (s<=1 && s>=-1) {
                            verts.push(i * 10);
                            verts.push(j * 10);
                            verts.push(k * 10);
                            pVerts.push(0),pVerts.push(0);
                            uvts.push(0),uvts.push(0),uvts.push(0);
                        }
                    }
                }
            }
            brush=new BitmapData(2,2,true,0x41FFFFFF);
            canvas=new BitmapData(400,400,false,0x000000);
            addChild(new Bitmap(canvas));
            dx=0;
            dy=0;
            addEventListener(Event.ENTER_FRAME, onLoop);
            

               }
               // private methods

        private function onLoop(evt:Event):void {
            dx += (mouseX - dx)/4;
            dy += (mouseY - dy)/4;
            dz += 1;//(mouseY - dy)/4;
            matrix.identity();
            matrix.appendRotation(dy,Vector3D.X_AXIS);
            matrix.appendRotation(dx,Vector3D.Y_AXIS);
            matrix.appendRotation(dx,Vector3D.Z_AXIS);
            matrix.appendTranslation(200, 200, 0);
            Utils3D.projectVectors(matrix, verts, pVerts, uvts);
            canvas.lock();
            canvas.fillRect(canvas.rect, 0x000000);
            //var p:Point = new Point();
            var p:Vector3D = new Vector3D();
            var pPoint:Point = new Point( p.x,p.y );
            for (var i:int = 0; i<pVerts.length; i+=2) 
            { 
                p.x = pVerts[i];
                p.y = pVerts[i+1];
                //p.z = pVerts[i+1];
                canvas.copyPixels(brush, brush.rect, pPoint, null, null, true);
            }
            canvas.unlock();
        }
        

       }

}