package ; import flash.display.Sprite; import flash.display.TriangleCulling; import flash.events.Event; import flash.geom.Matrix3D; import flash.geom.PerspectiveProjection; import flash.geom.Point; import flash.geom.Utils3D; import flash.geom.Vector3D; import flash.Lib; import flash.ui.Keyboard; /** * @licence Creative Common BY NC SA - http://creativecommons.org/licenses/by-nc-sa/2.0/ * @author Blue112 */ class Main extends Sprite { private var m:Matrix3D; private var sprite:Sprite; private var c:Diamond; private var pers:PerspectiveProjection; private var km:KeyManager; private var rotX:Float; private var rotY:Float; private var vitX:Float; private var vitY:Float; function new() { super(); c = new Diamond(); pers = new PerspectiveProjection(); pers.projectionCenter = new Point(0, 0); pers.fieldOfView = 45; sprite = new Sprite(); sprite.x = Lib.current.stage.stageWidth / 2; sprite.y = Lib.current.stage.stageHeight/ 2; addChild(sprite); rotX = 30; rotY = 30; vitX = 3; vitY = 0; m = pers.toMatrix3D(); addEventListener(Event.ENTER_FRAME, draw); km = new KeyManager(Lib.current.stage); } private function draw(e:Event):Void { rotX += vitX; rotY += vitY; var m2:Matrix3D = new Matrix3D(); m2.identity(); m2.prependTranslation(0, 0, 5); m2.prependRotation(rotX, new Vector3D(0, 1, 0)); m2.prependRotation(rotY, new Vector3D(1, 0, 0)); m2.transformVectors(c.vertices3D, c.vertices3D2); Utils3D.projectVectors(m, c.vertices3D2, c.vertices2D, c.uvtData); sprite.graphics.clear(); sprite.graphics.beginFill(0xbbbbbb, 1); sprite.graphics.lineStyle(2, 0); sprite.graphics.drawTriangles(c.vertices2D, c.indices, null, TriangleCulling.POSITIVE); } static function main() { Lib.current.addChild(new Main()); } }