|
@@ -532,30 +532,116 @@ THREE.Matrix4.prototype = {
|
|
|
|
|
|
},
|
|
|
|
|
|
- setRotationFromEuler: function( v ) {
|
|
|
+ setRotationFromEuler: function( v, order ) {
|
|
|
|
|
|
var x = v.x, y = v.y, z = v.z,
|
|
|
a = Math.cos( x ), b = Math.sin( x ),
|
|
|
c = Math.cos( y ), d = Math.sin( y ),
|
|
|
- e = Math.cos( z ), f = Math.sin( z ),
|
|
|
- ad = a * d, bd = b * d;
|
|
|
+ e = Math.cos( z ), f = Math.sin( z );
|
|
|
|
|
|
- this.n11 = c * e;
|
|
|
- this.n12 = - c * f;
|
|
|
- this.n13 = d;
|
|
|
+ switch ( order ) {
|
|
|
+ case 'YXZ':
|
|
|
+ var ce = c * e, cf = c * f, de = d * e, df = d * f;
|
|
|
|
|
|
- this.n21 = bd * e + a * f;
|
|
|
- this.n22 = - bd * f + a * e;
|
|
|
- this.n23 = - b * c;
|
|
|
+ this.n11 = ce + df * b;
|
|
|
+ this.n12 = de * b - cf;
|
|
|
+ this.n13 = a * d;
|
|
|
|
|
|
- this.n31 = - ad * e + b * f;
|
|
|
- this.n32 = ad * f + b * e;
|
|
|
- this.n33 = a * c;
|
|
|
+ this.n21 = a * f;
|
|
|
+ this.n22 = a * e;
|
|
|
+ this.n23 = - b;
|
|
|
+
|
|
|
+ this.n31 = cf * b - de;
|
|
|
+ this.n32 = df + ce * b;
|
|
|
+ this.n33 = a * c;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'ZXY':
|
|
|
+ var ce = c * e, cf = c * f, de = d * e, df = d * f;
|
|
|
+
|
|
|
+ this.n11 = ce - df * b;
|
|
|
+ this.n12 = - a * f;
|
|
|
+ this.n13 = de + cf * b;
|
|
|
+
|
|
|
+ this.n21 = cf + de * b;
|
|
|
+ this.n22 = a * e;
|
|
|
+ this.n23 = df - ce * b;
|
|
|
+
|
|
|
+ this.n31 = - a * d;
|
|
|
+ this.n32 = b;
|
|
|
+ this.n33 = a * c;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'ZYX':
|
|
|
+ var ae = a * e, af = a * f, be = b * e, bf = b * f;
|
|
|
+
|
|
|
+ this.n11 = c * e;
|
|
|
+ this.n12 = be * d - af;
|
|
|
+ this.n13 = ae * d + bf;
|
|
|
+
|
|
|
+ this.n21 = c * f;
|
|
|
+ this.n22 = bf * d + ae;
|
|
|
+ this.n23 = af * d - be;
|
|
|
+
|
|
|
+ this.n31 = - d;
|
|
|
+ this.n32 = b * c;
|
|
|
+ this.n33 = a * c;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'YZX':
|
|
|
+ var ac = a * c, ad = a * d, bc = b * c, bd = b * d;
|
|
|
+
|
|
|
+ this.n11 = c * e;
|
|
|
+ this.n12 = bd - ac * f;
|
|
|
+ this.n13 = bc * f + ad;
|
|
|
+
|
|
|
+ this.n21 = f;
|
|
|
+ this.n22 = a * e;
|
|
|
+ this.n23 = - b * e;
|
|
|
+
|
|
|
+ this.n31 = - d * e;
|
|
|
+ this.n32 = ad * f + bc;
|
|
|
+ this.n33 = ac - bd * f;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'XZY':
|
|
|
+ var ac = a * c, ad = a * d, bc = b * c, bd = b * d;
|
|
|
+
|
|
|
+ this.n11 = c * e;
|
|
|
+ this.n12 = - f;
|
|
|
+ this.n13 = d * e;
|
|
|
+
|
|
|
+ this.n21 = ac * f + bd;
|
|
|
+ this.n22 = a * e;
|
|
|
+ this.n23 = ad * f - bc;
|
|
|
+
|
|
|
+ this.n31 = bc * f - ad;
|
|
|
+ this.n32 = b * e;
|
|
|
+ this.n33 = bd * f + ac;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default: // 'XYZ'
|
|
|
+ var ae = a * e, af = a * f, be = b * e, bf = b * f;
|
|
|
+
|
|
|
+ this.n11 = c * e;
|
|
|
+ this.n12 = - c * f;
|
|
|
+ this.n13 = d;
|
|
|
+
|
|
|
+ this.n21 = af + be * d;
|
|
|
+ this.n22 = ae - bf * d;
|
|
|
+ this.n23 = - b * c;
|
|
|
+
|
|
|
+ this.n31 = bf - ae * d;
|
|
|
+ this.n32 = be + af * d;
|
|
|
+ this.n33 = a * c;
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
return this;
|
|
|
|
|
|
},
|
|
|
|
|
|
+
|
|
|
setRotationFromQuaternion: function( q ) {
|
|
|
|
|
|
var x = q.x, y = q.y, z = q.z, w = q.w,
|