提交 60f43847 编写于 作者: J John Pywtorak

Merge branch 'dev' of github.com:AddictArts/three.js into dev

......@@ -275,7 +275,7 @@ THREE.Matrix4.prototype = {
tmp = this.n41; this.n41 = this.n14; this.n14 = tmp;
tmp = this.n42; this.n42 = this.n24; this.n24 = tmp;
tmp = this.n43; this.n43 = this.n34; this.n43 = tmp;
tmp = this.n43; this.n43 = this.n34; this.n34 = tmp;
return this;
......@@ -499,7 +499,7 @@ THREE.Matrix4.prototype = {
this.n24 = n13*n24*n31 - n14*n23*n31 + n14*n21*n33 - n11*n24*n33 - n13*n21*n34 + n11*n23*n34;
this.n31 = n22*n34*n41 - n24*n32*n41 + n24*n31*n42 - n21*n34*n42 - n22*n31*n44 + n21*n32*n44;
this.n32 = n14*n32*n41 - n12*n34*n41 - n14*n31*n42 + n11*n34*n42 + n12*n31*n44 - n11*n32*n44;
this.n33 = n13*n24*n41 - n14*n22*n41 + n14*n21*n42 - n11*n24*n42 - n12*n21*n44 + n11*n22*n44;
this.n33 = n12*n24*n41 - n14*n22*n41 + n14*n21*n42 - n11*n24*n42 - n12*n21*n44 + n11*n22*n44;
this.n34 = n14*n22*n31 - n12*n24*n31 - n14*n21*n32 + n11*n24*n32 + n12*n21*n34 - n11*n22*n34;
this.n41 = n23*n32*n41 - n22*n33*n41 - n23*n31*n42 + n21*n33*n42 + n22*n31*n43 - n21*n32*n43;
this.n42 = n12*n33*n41 - n13*n32*n41 + n13*n31*n42 - n11*n33*n42 - n12*n31*n43 + n11*n32*n43;
......@@ -766,6 +766,185 @@ THREE.Matrix4.prototype = {
return this;
},
rotateByAxis: function ( axis, angle ) {
// optimize by checking axis
if ( axis.x === 1 && axis.y === 0 && axis.z === 0 ) {
return this.rotateX( angle );
} else if ( axis.x === 0 && axis.y === 1 && axis.z === 0 ) {
return this.rotateY( angle );
} else if ( axis.x === 0 && axis.y === 0 && axis.z === 1 ) {
return this.rotateZ( angle );
}
var x = axis.x,
y = axis.y,
z = axis.z,
n = Math.sqrt(x * x + y * y + z * z);
x /= n;
y /= n;
z /= n;
var xx = x * x,
yy = y * y,
zz = z * z,
c = Math.cos(angle),
s = Math.sin(angle),
oneMinusCosine = 1 - c,
xy = x * y * oneMinusCosine,
xz = x * z * oneMinusCosine,
yz = y * z * oneMinusCosine,
xs = x * s,
ys = y * s,
zs = z * s,
r11 = xx + (1 - xx) * c,
r21 = xy + zs,
r31 = xz - ys,
r12 = xy - zs,
r22 = yy + (1 - yy) * c,
r32 = yz + xs,
r13 = xz + ys,
r23 = yz - xs,
r33 = zz + (1 - zz) * c,
m11 = this.n11,
m21 = this.n21,
m31 = this.n31,
m41 = this.n41,
m12 = this.n12,
m22 = this.n22,
m32 = this.n32,
m42 = this.n42,
m13 = this.n13,
m23 = this.n23,
m33 = this.n33,
m43 = this.n43,
m14 = this.n14,
m24 = this.n24,
m34 = this.n34,
m44 = this.n44;
this.n11 = r11 * m11 + r21 * m12 + r31 * m13;
this.n21 = r11 * m21 + r21 * m22 + r31 * m23;
this.n31 = r11 * m31 + r21 * m32 + r31 * m33;
this.n41 = r11 * m41 + r21 * m42 + r31 * m43;
this.n12 = r12 * m11 + r22 * m12 + r32 * m13;
this.n22 = r12 * m21 + r22 * m22 + r32 * m23;
this.n32 = r12 * m31 + r22 * m32 + r32 * m33;
this.n42 = r12 * m41 + r22 * m42 + r32 * m43;
this.n13 = r13 * m11 + r23 * m12 + r33 * m13;
this.n23 = r13 * m21 + r23 * m22 + r33 * m23;
this.n33 = r13 * m31 + r23 * m32 + r33 * m33;
this.n43 = r13 * m41 + r23 * m42 + r33 * m43;
return this;
},
rotateX: function ( angle ) {
var m12 = this.n12,
m22 = this.n22,
m32 = this.n32,
m42 = this.n42,
m13 = this.n13,
m23 = this.n23,
m33 = this.n33,
m43 = this.n43,
c = Math.cos(angle),
s = Math.sin(angle);
this.n12 = c * m12 + s * m13;
this.n22 = c * m22 + s * m23;
this.n32 = c * m32 + s * m33;
this.n42 = c * m42 + s * m43;
this.n13 = c * m13 - s * m12;
this.n23 = c * m23 - s * m22;
this.n33 = c * m33 - s * m32;
this.n43 = c * m43 - s * m42;
return this;
},
rotateY: function ( angle ) {
var m11 = this.n11,
m21 = this.n21,
m31 = this.n31,
m41 = this.n41,
m13 = this.n13,
m23 = this.n23,
m33 = this.n33,
m43 = this.n43,
c = Math.cos(angle),
s = Math.sin(angle);
this.n11 = c * m11 - s * m13;
this.n21 = c * m21 - s * m23;
this.n31 = c * m31 - s * m33;
this.n41 = c * m41 - s * m43;
this.n13 = c * m13 + s * m11;
this.n23 = c * m23 + s * m21;
this.n33 = c * m33 + s * m31;
this.n43 = c * m43 + s * m41;
return this;
},
rotateZ: function ( angle ) {
var m11 = this.n11,
m21 = this.n21,
m31 = this.n31,
m41 = this.n41,
m12 = this.n12,
m22 = this.n22,
m32 = this.n32,
m42 = this.n42,
c = Math.cos(angle),
s = Math.sin(angle);
this.n11 = c * m11 + s * m12;
this.n21 = c * m21 + s * m22;
this.n31 = c * m31 + s * m32;
this.n41 = c * m41 + s * m42;
this.n12 = c * m12 - s * m11;
this.n22 = c * m22 - s * m21;
this.n32 = c * m32 - s * m31;
this.n42 = c * m42 - s * m41;
return this;
},
translate: function ( v ) {
var x = v.x, y = v.y, z = v.z;
this.n14 = this.n11 * x + this.n12 * y + this.n13 * z + this.n14;
this.n24 = this.n21 * x + this.n22 * y + this.n23 * z + this.n24;
this.n34 = this.n31 * x + this.n32 * y + this.n33 * z + this.n34;
this.n44 = this.n41 * x + this.n42 * y + this.n43 * z + this.n44;
return this;
}
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册