flash on 2013-7-23
triangle winding (CW or CCW)
♥0 |
Line 94 |
Modified 2013-07-23 21:38:54 |
MIT License
archived:2017-03-30 22:50:43
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
}