flash on 2013-7-23

by mutantleg
triangle winding (CW or CCW)
♥0 | Line 94 | Modified 2013-07-23 21:38:54 | 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/r7ln
 */

package {
    import flash.text.TextField;
    import flash.geom.Vector3D;
    import flash.geom.Matrix3D;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            // write as3 code here..
            
            
            vecVert = Vector.<Number>([-40,0,0,  80, 0,0,  60,90,0 ]);
            vecFace = Vector.<int>([0,1,2]);
            
            
            deb= new TextField();
            deb.mouseEnabled = false;
            deb.width = 465;
            deb.height= 465;
            addChild(deb);
            
            
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var deb:TextField;
        
        public var vecVert:Vector.<Number>;
        public var vecFace:Vector.<int>;
        
        public var ang:Number = 0;
        public var angb:Number = 0;
        public var mat:Matrix3D = new Matrix3D();
        
        public function onEnter(e:Event):void
        {
            var i:int;
            var num:int;
            var sx0:Number;
            var sy0:Number;
            var sx1:Number;
            var sy1:Number;
            var sx2:Number;
            var sy2:Number;
            var vx:Number;
            var vy:Number;
            var vz:Number;
            var rx:Number;
            var ry:Number;
            var rz:Number;
            var k:int;
            var raw:Vector.<Number>;
            
             
            
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            ang += 3;
            angb += 3;
            
            mat.identity();
            mat.appendRotation(ang, Vector3D.Y_AXIS);
            mat.appendRotation(angb, Vector3D.Z_AXIS);
             
            raw = mat.rawData;
            
            num = vecFace.length;
            
            
            for (i = 0; i < num; i+= 3)
            {
              
           
                k = vecFace[i] * 3;
                vx = vecVert[k];
                vy = vecVert[k+1];
                vz = vecVert[k+2];
                
                rx = raw[0] *vx + raw[4] * vy + raw[8]*vz + raw[12];
                ry = raw[1] *vx + raw[5] * vy + raw[9]*vz + raw[13];
                rz = raw[2] *vx + raw[6] * vy + raw[10]*vz + raw[14];
                
                sx0 = rx;
                sy0 = ry;
              
                 
                k = vecFace[i+1] * 3;
                vx = vecVert[k];
                vy = vecVert[k+1];
                vz = vecVert[k+2];
                
                rx = raw[0] *vx + raw[4] * vy + raw[8]*vz + raw[12];
                ry = raw[1] *vx + raw[5] * vy + raw[9]*vz + raw[13];
                rz = raw[2] *vx + raw[6] * vy + raw[10]*vz + raw[14];
                
                sx1 = rx;
                sy1 = ry;
                
                
                k = vecFace[i+2] * 3;
                vx = vecVert[k];
                vy = vecVert[k+1];
                vz = vecVert[k+2];
                
                rx = raw[0] *vx + raw[4] * vy + raw[8]*vz + raw[12];
                ry = raw[1] *vx + raw[5] * vy + raw[9]*vz + raw[13];
                rz = raw[2] *vx + raw[6] * vy + raw[10]*vz + raw[14];
                
                sx2 = rx;
                sy2 = ry;
                
                
                var w:Number;
                
                //check winding
                w = (sx1 - sx0) * (sy2 - sy0) - (sx2 - sx0) * (sy1 - sy0);
                
                
                sx0 += 232; sy0 += 232;
                sx1 += 232; sy1 += 232;
                sx2 += 232; sy2 += 232;
                
             
              graphics.beginFill(w > 0 ? 0 : 0xFF, 1);
                  graphics.moveTo(sx0, sy0);
                  graphics.lineTo(sx1, sy1);
                  graphics.lineTo(sx2, sy2);
                  graphics.lineTo(sx0, sy0);
              graphics.endFill();                  
                
            }//nextk
            
        }//onenter
        
        
    }//classend
}