package { import flash.display.Sprite; import flash.geom.Matrix3D; import flash.geom.Vector3D; /** * @author aM */ public class MatrixTestApp extends Sprite { public function MatrixTestApp() { var forward: Matrix3D = new Matrix3D(); forward.prependTranslation( 0, 0, 100 ); var inverse: Matrix3D = forward.clone(); inverse.invert(); trace( forward.rawData ); // outputs 1,0,0,0,0,1,0,0,0,0,1,0,0,0,100,1 trace( inverse.rawData ); // outputs 1,0,0,0,0,1,0,0,0,0,1,0,0,0,-100,1 var v: Vector3D; // TEST 1 v = new Vector3D( 0, 0, 0 ); trace( v, forward.transformVector( v ), inverse.transformVector( forward.transformVector( v ) ) ); // outputs Vector3D(0, 0, 0) Vector3D(0, 0, 100) Vector3D(0, 0, -95) trace( v, inverse.transformVector( v ), forward.transformVector( inverse.transformVector( v ) ) ); // outputs Vector3D(0, 0, 0) Vector3D(0, 0, -100) Vector3D(0, 0, 95) // TEST 2 v = new Vector3D( 0, 0, 100 ); trace( v, forward.transformVector( v ), inverse.transformVector( forward.transformVector( v ) ) ); // outputs Vector3D(0, 0, 100) Vector3D(0, 0, 105) Vector3D(0, 0, -94.75) trace( v, inverse.transformVector( v ), forward.transformVector( inverse.transformVector( v ) ) ); // outputs Vector3D(0, 0, 100) Vector3D(0, 0, -95) Vector3D(0, 0, 95.25) //-- THIS ONE RUNS PERFECT! var vec: Vector. = Vector.( [ 0, 0, 100 ] ); forward.transformVectors( vec, vec ); inverse.transformVectors( vec, vec ); trace( vec ); // outputs 0,0,100 } } }