|
@@ -2,7 +2,7 @@ package h3d;
|
|
import hxd.Math;
|
|
import hxd.Math;
|
|
|
|
|
|
class Matrix {
|
|
class Matrix {
|
|
-
|
|
|
|
|
|
+
|
|
static var tmp = new Matrix();
|
|
static var tmp = new Matrix();
|
|
|
|
|
|
public var _11 : Float;
|
|
public var _11 : Float;
|
|
@@ -104,7 +104,7 @@ class Matrix {
|
|
_34 = 0.;
|
|
_34 = 0.;
|
|
_41 = 0.; _42 = 0.; _43 = 0.; _44 = 1.;
|
|
_41 = 0.; _42 = 0.; _43 = 0.; _44 = 1.;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function initRotate( x : Float, y : Float, z : Float ) {
|
|
public function initRotate( x : Float, y : Float, z : Float ) {
|
|
var cx = Math.cos(x);
|
|
var cx = Math.cos(x);
|
|
var sx = Math.sin(x);
|
|
var sx = Math.sin(x);
|
|
@@ -131,7 +131,7 @@ class Matrix {
|
|
_43 = 0;
|
|
_43 = 0;
|
|
_44 = 1;
|
|
_44 = 1;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function translate( x = 0., y = 0., z = 0. ) {
|
|
public function translate( x = 0., y = 0., z = 0. ) {
|
|
_11 += x * _14;
|
|
_11 += x * _14;
|
|
_12 += y * _14;
|
|
_12 += y * _14;
|
|
@@ -146,7 +146,7 @@ class Matrix {
|
|
_42 += y * _44;
|
|
_42 += y * _44;
|
|
_43 += z * _44;
|
|
_43 += z * _44;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function scale( x = 1., y = 1., z = 1. ) {
|
|
public function scale( x = 1., y = 1., z = 1. ) {
|
|
_11 *= x;
|
|
_11 *= x;
|
|
_21 *= x;
|
|
_21 *= x;
|
|
@@ -167,13 +167,13 @@ class Matrix {
|
|
tmp.initRotate(x,y,z);
|
|
tmp.initRotate(x,y,z);
|
|
multiply(this, tmp);
|
|
multiply(this, tmp);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function rotateAxis( axis, angle ) {
|
|
public function rotateAxis( axis, angle ) {
|
|
var tmp = tmp;
|
|
var tmp = tmp;
|
|
tmp.initRotateAxis(axis, angle);
|
|
tmp.initRotateAxis(axis, angle);
|
|
multiply(this, tmp);
|
|
multiply(this, tmp);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public inline function pos( ?v : Vector ) {
|
|
public inline function pos( ?v : Vector ) {
|
|
if( v == null )
|
|
if( v == null )
|
|
return new Vector( _41, _42 , _43 , _44 );
|
|
return new Vector( _41, _42 , _43 , _44 );
|
|
@@ -183,7 +183,7 @@ class Matrix {
|
|
v.w = _44;
|
|
v.w = _44;
|
|
return v;
|
|
return v;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function prependTranslate( x = 0., y = 0., z = 0. ) {
|
|
public function prependTranslate( x = 0., y = 0., z = 0. ) {
|
|
var vx = _11 * x + _21 * y + _31 * z + _41;
|
|
var vx = _11 * x + _21 * y + _31 * z + _41;
|
|
var vy = _12 * x + _22 * y + _32 * z + _42;
|
|
var vy = _12 * x + _22 * y + _32 * z + _42;
|
|
@@ -200,7 +200,7 @@ class Matrix {
|
|
tmp.initRotate(x,y,z);
|
|
tmp.initRotate(x,y,z);
|
|
multiply(tmp, this);
|
|
multiply(tmp, this);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function prependRotateAxis( axis, angle ) {
|
|
public function prependRotateAxis( axis, angle ) {
|
|
var tmp = tmp;
|
|
var tmp = tmp;
|
|
tmp.initRotateAxis(axis, angle);
|
|
tmp.initRotateAxis(axis, angle);
|
|
@@ -212,7 +212,7 @@ class Matrix {
|
|
tmp.initScale(sx,sy,sz);
|
|
tmp.initScale(sx,sy,sz);
|
|
multiply(tmp, this);
|
|
multiply(tmp, this);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function multiply3x4( a : Matrix, b : Matrix ) {
|
|
public function multiply3x4( a : Matrix, b : Matrix ) {
|
|
var m11 = a._11; var m12 = a._12; var m13 = a._13;
|
|
var m11 = a._11; var m12 = a._12; var m13 = a._13;
|
|
var m21 = a._21; var m22 = a._22; var m23 = a._23;
|
|
var m21 = a._21; var m22 = a._22; var m23 = a._23;
|
|
@@ -275,6 +275,25 @@ class Matrix {
|
|
_44 = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;
|
|
_44 = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public function multiplyValue( v : Float ) {
|
|
|
|
+ _11 *= v;
|
|
|
|
+ _12 *= v;
|
|
|
|
+ _13 *= v;
|
|
|
|
+ _14 *= v;
|
|
|
|
+ _21 *= v;
|
|
|
|
+ _22 *= v;
|
|
|
|
+ _23 *= v;
|
|
|
|
+ _24 *= v;
|
|
|
|
+ _31 *= v;
|
|
|
|
+ _32 *= v;
|
|
|
|
+ _33 *= v;
|
|
|
|
+ _34 *= v;
|
|
|
|
+ _41 *= v;
|
|
|
|
+ _42 *= v;
|
|
|
|
+ _43 *= v;
|
|
|
|
+ _44 *= v;
|
|
|
|
+ }
|
|
|
|
+
|
|
public inline function invert() {
|
|
public inline function invert() {
|
|
inverse(this);
|
|
inverse(this);
|
|
}
|
|
}
|
|
@@ -312,7 +331,7 @@ class Matrix {
|
|
_31 *= invDet; _32 *= invDet; _33 *= invDet;
|
|
_31 *= invDet; _32 *= invDet; _33 *= invDet;
|
|
_41 *= invDet; _42 *= invDet; _43 *= invDet;
|
|
_41 *= invDet; _42 *= invDet; _43 *= invDet;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function inverse( m : Matrix ) {
|
|
public function inverse( m : Matrix ) {
|
|
var m11 = m._11; var m12 = m._12; var m13 = m._13; var m14 = m._14;
|
|
var m11 = m._11; var m12 = m._12; var m13 = m._13; var m14 = m._14;
|
|
var m21 = m._21; var m22 = m._22; var m23 = m._23; var m24 = m._24;
|
|
var m21 = m._21; var m22 = m._22; var m23 = m._23; var m24 = m._24;
|
|
@@ -386,18 +405,18 @@ class Matrix {
|
|
_31 = m._31; _32 = m._32; _33 = m._33; _34 = m._34;
|
|
_31 = m._31; _32 = m._32; _33 = m._33; _34 = m._34;
|
|
_41 = m._41; _42 = m._42; _43 = m._43; _44 = m._44;
|
|
_41 = m._41; _42 = m._42; _43 = m._43; _44 = m._44;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function load( a : Array<Float> ) {
|
|
public function load( a : Array<Float> ) {
|
|
_11 = a[0]; _12 = a[1]; _13 = a[2]; _14 = a[3];
|
|
_11 = a[0]; _12 = a[1]; _13 = a[2]; _14 = a[3];
|
|
_21 = a[4]; _22 = a[5]; _23 = a[6]; _24 = a[7];
|
|
_21 = a[4]; _22 = a[5]; _23 = a[6]; _24 = a[7];
|
|
_31 = a[8]; _32 = a[9]; _33 = a[10]; _34 = a[11];
|
|
_31 = a[8]; _32 = a[9]; _33 = a[10]; _34 = a[11];
|
|
_41 = a[12]; _42 = a[13]; _43 = a[14]; _44 = a[15];
|
|
_41 = a[12]; _42 = a[13]; _43 = a[14]; _44 = a[15];
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function getFloats() {
|
|
public function getFloats() {
|
|
return [_11, _12, _13, _14, _21, _22, _23, _24, _31, _32, _33, _34, _41, _42, _43, _44];
|
|
return [_11, _12, _13, _14, _21, _22, _23, _24, _31, _32, _33, _34, _41, _42, _43, _44];
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function toString() {
|
|
public function toString() {
|
|
return "MAT=[\n" +
|
|
return "MAT=[\n" +
|
|
" [ " + Math.fmt(_11) + ", " + Math.fmt(_12) + ", " + Math.fmt(_13) + ", " + Math.fmt(_14) + " ]\n" +
|
|
" [ " + Math.fmt(_11) + ", " + Math.fmt(_12) + ", " + Math.fmt(_13) + ", " + Math.fmt(_14) + " ]\n" +
|
|
@@ -406,13 +425,13 @@ class Matrix {
|
|
" [ " + Math.fmt(_41) + ", " + Math.fmt(_42) + ", " + Math.fmt(_43) + ", " + Math.fmt(_44) + " ]\n" +
|
|
" [ " + Math.fmt(_41) + ", " + Math.fmt(_42) + ", " + Math.fmt(_43) + ", " + Math.fmt(_44) + " ]\n" +
|
|
"]";
|
|
"]";
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// ---- COLOR MATRIX FUNCTIONS -------
|
|
// ---- COLOR MATRIX FUNCTIONS -------
|
|
|
|
|
|
static inline var lumR = 0.212671;
|
|
static inline var lumR = 0.212671;
|
|
static inline var lumG = 0.71516;
|
|
static inline var lumG = 0.71516;
|
|
static inline var lumB = 0.072169;
|
|
static inline var lumB = 0.072169;
|
|
-
|
|
|
|
|
|
+
|
|
public function colorHue( hue : Float ) {
|
|
public function colorHue( hue : Float ) {
|
|
if( hue == 0. )
|
|
if( hue == 0. )
|
|
return;
|
|
return;
|
|
@@ -433,7 +452,7 @@ class Matrix {
|
|
tmp._43 = 0;
|
|
tmp._43 = 0;
|
|
multiply3x4(this, tmp);
|
|
multiply3x4(this, tmp);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function colorSaturation( sat : Float ) {
|
|
public function colorSaturation( sat : Float ) {
|
|
var is = 1 - sat;
|
|
var is = 1 - sat;
|
|
var r = is * lumR;
|
|
var r = is * lumR;
|
|
@@ -453,7 +472,7 @@ class Matrix {
|
|
tmp._43 = 0;
|
|
tmp._43 = 0;
|
|
multiply3x4(this, tmp);
|
|
multiply3x4(this, tmp);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public function colorContrast( contrast : Float ) {
|
|
public function colorContrast( contrast : Float ) {
|
|
var v = contrast + 1;
|
|
var v = contrast + 1;
|
|
tmp._11 = v;
|
|
tmp._11 = v;
|
|
@@ -476,9 +495,9 @@ class Matrix {
|
|
_42 += brightness;
|
|
_42 += brightness;
|
|
_43 += brightness;
|
|
_43 += brightness;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// STATICS
|
|
// STATICS
|
|
-
|
|
|
|
|
|
+
|
|
public static function I() {
|
|
public static function I() {
|
|
var m = new Matrix();
|
|
var m = new Matrix();
|
|
m.identity();
|
|
m.identity();
|
|
@@ -490,7 +509,7 @@ class Matrix {
|
|
m.load(a);
|
|
m.load(a);
|
|
return m;
|
|
return m;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
public static function T( x = 0., y = 0., z = 0. ) {
|
|
public static function T( x = 0., y = 0., z = 0. ) {
|
|
var m = new Matrix();
|
|
var m = new Matrix();
|
|
m.initTranslate(x, y, z);
|
|
m.initTranslate(x, y, z);
|