flash on 2012-12-12

by mutantleg
♥0 | Line 167 | Modified 2012-12-12 23:27:40 | MIT License
play

ActionScript3 source code

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

package {
    import flash.text.TextField;
    import flash.display.BitmapData;
    import flash.events.Event;
    
    import alternativ7.engine3d.containers.*;
    import alternativ7.engine3d.core.*;
    import alternativ7.engine3d.objects.*;
    import alternativ7.engine3d.objects.Mesh;
    import alternativ7.engine3d.primitives.*;
    import alternativ7.engine3d.materials.*;
    import alternativ7.*;
    import alternativ7.engine3d.lights.*;
    
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
    
        public var cam:Camera3D;
        public var cont:ConflictContainer;
        public var mat:TextureMaterial;
        public var msh:Box;
        
        public var bm:BitmapData;
    
        public var deb:Box;
        public var deb2:Box;
        
        public var dt:TextField;
    
        public function FlashTest() {
            // write as3 code here..
            
             cont = new ConflictContainer();
             cam = new Camera3D();
             cam.view = new View(400,400);
             cam.z = -100;
             addChild(cam.view);
             cont.addChild(cam);
             
             dt = new TextField();
             dt.width = 400;
             dt.multiline = true;
             dt.mouseEnabled = false;
             dt.mouseWheelEnabled = false;
             addChild(dt);
             
             bm = new BitmapData(64,64,false,0);
             bm.noise(2);
             
               msh = new Box(100,100,100);
               msh.setMaterialToAllFaces(new TextureMaterial(bm));
            cont.addChild(msh);
            
            msh.z = 200;
            
            deb = new Box(1,1,1);
            deb.setMaterialToAllFaces(new FillMaterial(0xFF0000, 0.5, 1, 0) );
            cont.addChild(deb);
            
            deb2 = new Box(1,1,1);
            deb2.setMaterialToAllFaces(new FillMaterial(0x000000,0.5,1,0) );
            cont.addChild(deb2);
            
            deb2.x += 50;
            
      
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        

        
        public function onEnter(e:Event):void
        {
           var umx:Number;
           var umy:Number;
           
           dt.text = "";
       
           msh.rotationY += 0.004;
           
           umx = ((stage.mouseX / 400)-0.5)*2;
           umy = ((stage.mouseY / 400)-0.5)*2;
           
           calcMouse(umx, umy, 70.0, 1.0, 0.00001, 300.0,
           cam.x,cam.y,cam.z,  0,0,1,  0,1,0,  1,0,0);
           
           deb.x = nmx; deb.y = nmy; deb.z = nmz;
           deb2.x = fmx; deb2.y = fmy; deb2.z = fmz;
           
           
           
           //dt.appendText(" stage w " + stage.width + " h  " + stage.height);
          // dt.appendText("\n mx " + mouseX + "  my  " + mouseY);
          // dt.appendText("\n umx " + umx + "  umy  " + umy);
          // dt.appendText("\n x  "+ nmx + "  y " + nmy + " z  " + nmz);
          // dt.appendText("\n x  "+ fmx + "  y " + fmy + " z  " + fmz);
           
            
            cam.render();
        }//onenter
        
        
        public var nmx:Number=0;
        public var nmy:Number=0;
        public var nmz:Number=0;
        
        public var fmx:Number=0;
        public var fmy:Number=0;
        public var fmz:Number=0;
        
        
        
        public function calcMouse(mx:Number, my:Number,
        fov:Number, aspect:Number, neard:Number, fard:Number,
        posx:Number, posy:Number, posz:Number,
        frontx:Number, fronty:Number, frontz:Number,
        upx:Number, upy:Number, upz:Number,
        sidex:Number, sidey:Number, sidez:Number):void
        {
            var nw:Number;
            var nh:Number;
            var fw:Number;
            var fh:Number;
            var tang:Number;
            
            var fupx:Number, fupy:Number, fupz:Number;
            var fsidex:Number, fsidey:Number, fsidez:Number;
            var nupx:Number, nupy:Number, nupz:Number;
            var nsidex:Number, nsidey:Number, nsidez:Number;
            
            var fcx:Number, fcy:Number, fcz:Number;
            var ncx:Number, ncy:Number, ncz:Number;
            
            fov *= 3.1415 / 180;
            tang = Math.tan ( fov * 0.5 );
            //tang = Math.tan( fov * 0.5);
        //    tang = Math.tan(90);
            //tang  = Math.tan(  (Math.PI/2) * 0.5);
            
           // dt.appendText("\n tang " + tang);            
            
            nh = neard * tang;
            nw = nh * aspect;
            
            fh = fard * tang;
            fw = fh * aspect;
            
            
          //  dt.appendText("\n nw " +nw + " nh " + nh);
         //   dt.appendText("\n fw " +fw + " fh " + fh);
             
            
            fupx = upx * fh;
            fupy = upy * fh;
            fupz = upz * fh;
            
            fsidex = sidex * fw;
            fsidey = sidey * fw;
            fsidez = sidez * fw;
            
            nupx = upx * nh;
            nupy = upy * nh;
            nupz = upz * nh;
            
            nsidex = sidex * nw;
            nsidey = sidey * nw;
            nsidez = sidez * nw;
            
            fcx = posx + frontx * fard;
            fcy = posy + fronty * fard;
            fcz = posz + frontz * fard;
            
            ncx = posx + frontx * neard;
            ncy = posy + fronty * neard;
            ncz = posz + frontz * neard;
            
            nmx = ncx + (nupx*my)+(nsidex*mx);
            nmy = ncy + (nupy*my)+(nsidey*mx); 
            nmz = ncz + (nupz*my)+(nsidez*mx);
            
            fmx = fcx + (fupx*my)+(fsidex*mx);
            fmy = fcy + (fupy*my)+(fsidey*mx);
            fmz = fcz + (fupz*my)+(fsidez*mx);
            
        }//calcmouse
        
        
        
        public function multMatrix(a:Vector.<Number>, b:Vector.<Number>, r:Vector.<Number>):void
        {
            var i:int;          
            for (i = 0; i < 16; i += 4)
            {
                r[i] = a[0] * b[i]  +  a[4] * b[i + 1] + a[8] * b[i + 2] +  a[12] * b[i + 3];
                r[i + 1] = a[1] * b[i] + a[5] * b[i + 1] + a[9] * b[i + 2] + a[13] * b[i + 3];
                r[i + 2] = a[2] * b[i] + a[6] * b[i + 1] + a[10] * b[i + 2] + a[14] * b[i + 3];
                r[i + 3] = a[3] * b[i] + a[7] * b[i + 1] + a[11] * b[i + 2] + a[15] * b[i + 3];
            }//nexti
            
        }//multmat
        
        public function makePersp(mat:Vector.<Number>,
        fov:Number=90.0, aspect:Number=1.0, nearp:Number=1.0, farp:Number = 300.0 ):void
        {
            var i:int;
            var f:Number;
            
            for (i = 0; i < 16; i++)
            { mat[i] = 0; }    
                
            f = 1.0 / Math.tan( (fov*(3.1415/180.0)) *0.5 );
            
            mat[0] = f / aspect;
            mat[5] = f;
            mat[10] = (farp + nearp) / (nearp - farp);
            mat[14] = (2.0 * farp * nearp) / (nearp - farp);
            mat[11] = -1.0;
            mat[15] = 0.0;
    
        }//makepersp
        
        public function makeView(mat:Vector.<Number>,
        sidex:Number, sidey:Number, sidez:Number,
        upx:Number, upy:Number, upz:Number,
        frontx:Number, fronty:Number, frontz:Number,
        posx:Number, posy:Number, posz:Number):void
        {
            mat[0] = mat[5] = mat[10] = mat[15] = 1.0; 

            mat[0] = sidex;
            mat[4] = sidey;
            mat[8] = sidez;
            
            mat[1] = upx;
            mat[5] = upy;
            mat[9] = upz;

            mat[2] = -frontx;
            mat[6] = -fronty;
            mat[10] = -frontz;
            
            mat[12] = (sidex *-posx) + (sidey * -posy) + (sidez * -posz);
            mat[13] = (upx *-posx) + (upy * -posy) + (upz * -posz);
            mat[14] = (-frontx *-posx) + (-fronty * -posy) + (-frontz * -posz);
            
        }//makeview
        
        
        
        
        
        
        
    }//classend
}