diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo](
)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo](
)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo](
)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo](
)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo](
)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo](
)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo](
)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
-
-
- pixi.js example 1
-
-
-
-
-
-
-
-
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
-
-
- pixi.js example 1
-
-
-
-
-
-
-
-
diff --git a/examples/example 1/pixi.js b/examples/example 1/pixi.js
deleted file mode 100644
index 161d482..0000000
--- a/examples/example 1/pixi.js
+++ /dev/null
@@ -1,110 +0,0 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
-var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
-var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
-set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
-d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
-d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
-d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
-n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
-d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
-k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
-(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
-j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
-a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
-a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
-return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
-d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
-return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],k=b+b,g=c+c,h=e+e,j=b*k,m=b*g,b=b*h,n=c*g,c=c*h,e=e*h,k=f*k,g=f*g,f=f*h;d[0]=1-(n+e);d[1]=m+f;d[2]=b-g;d[3]=m-f;d[4]=1-(j+e);d[5]=c+k;d[6]=b+g;d[7]=c-k;d[8]=1-(j+n);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
-j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
-0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
-0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
-b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
-b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
-b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
-(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
-PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
-PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
-
-
- pixi.js example 1
-
-
-
-
-
-
-
-
diff --git a/examples/example 1/pixi.js b/examples/example 1/pixi.js
deleted file mode 100644
index 161d482..0000000
--- a/examples/example 1/pixi.js
+++ /dev/null
@@ -1,110 +0,0 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
-var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
-var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
-set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
-d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
-d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
-d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
-n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
-d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
-k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
-(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
-j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
-a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
-a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
-return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
-d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
-return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],k=b+b,g=c+c,h=e+e,j=b*k,m=b*g,b=b*h,n=c*g,c=c*h,e=e*h,k=f*k,g=f*g,f=f*h;d[0]=1-(n+e);d[1]=m+f;d[2]=b-g;d[3]=m-f;d[4]=1-(j+e);d[5]=c+k;d[6]=b+g;d[7]=c-k;d[8]=1-(j+n);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
-j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
-0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
-0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
-b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
-b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
-b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
-(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
-PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
-PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
-
-
- pixi.js example 1
-
-
-
-
-
-
-
-
diff --git a/examples/example 1/pixi.js b/examples/example 1/pixi.js
deleted file mode 100644
index 161d482..0000000
--- a/examples/example 1/pixi.js
+++ /dev/null
@@ -1,110 +0,0 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
-var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
-var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
-set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
-d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
-d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
-d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
-n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
-d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
-k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
-(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
-j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
-a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
-a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
-return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
-d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
-return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],k=b+b,g=c+c,h=e+e,j=b*k,m=b*g,b=b*h,n=c*g,c=c*h,e=e*h,k=f*k,g=f*g,f=f*h;d[0]=1-(n+e);d[1]=m+f;d[2]=b-g;d[3]=m-f;d[4]=1-(j+e);d[5]=c+k;d[6]=b+g;d[7]=c-k;d[8]=1-(j+n);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
-j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
-0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
-0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
-b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
-b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
-b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
-(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
-PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
-PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
-
-
- pixi.js example 1
-
-
-
-
-
-
-
-
diff --git a/examples/example 1/pixi.js b/examples/example 1/pixi.js
deleted file mode 100644
index 161d482..0000000
--- a/examples/example 1/pixi.js
+++ /dev/null
@@ -1,110 +0,0 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
-var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
-var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
-set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
-d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
-d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
-d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
-n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
-d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
-k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
-(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
-j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
-a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
-a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
-return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
-d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
-return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],k=b+b,g=c+c,h=e+e,j=b*k,m=b*g,b=b*h,n=c*g,c=c*h,e=e*h,k=f*k,g=f*g,f=f*h;d[0]=1-(n+e);d[1]=m+f;d[2]=b-g;d[3]=m-f;d[4]=1-(j+e);d[5]=c+k;d[6]=b+g;d[7]=c-k;d[8]=1-(j+n);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
-j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
-0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
-0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
-b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
-b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
-b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
-(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
-PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
-PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
+
+ pixi.js example 2 loading a sprite sheet
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index bafb925..e7f1f70 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,11 @@
-[Bunny Demo]()
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
-
-
- pixi.js example 1
-
-
-
-
-
-
-
-
diff --git a/examples/example 1/pixi.js b/examples/example 1/pixi.js
deleted file mode 100644
index 161d482..0000000
--- a/examples/example 1/pixi.js
+++ /dev/null
@@ -1,110 +0,0 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
-var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
-var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
-set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
-d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
-d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
-d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
-n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
-d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
-k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
-(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
-j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
-a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
-a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
-return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
-d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
-return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],k=b+b,g=c+c,h=e+e,j=b*k,m=b*g,b=b*h,n=c*g,c=c*h,e=e*h,k=f*k,g=f*g,f=f*h;d[0]=1-(n+e);d[1]=m+f;d[2]=b-g;d[3]=m-f;d[4]=1-(j+e);d[5]=c+k;d[6]=b+g;d[7]=c-k;d[8]=1-(j+n);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
-j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
-0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
-0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
-b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
-b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
-b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
-(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
-PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
-PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
+
+ pixi.js example 2 loading a sprite sheet
+
+
+
+
+
+
+
+
diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js
new file mode 100644
index 0000000..8354d7f
--- /dev/null
+++ b/examples/example 2 - SpriteSheet/pixi.js
@@ -0,0 +1,112 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n)
+-[Balls Demo]() (made by @photonstorm)
+
+-[Morph Demo]() (made by @photonstorm)
+
+
### Current features ###
- WebGL renderer (with automatic smart batching allowing for REALLY fast performance)
diff --git a/bin/pixi.js b/bin/pixi.js
index 161d482..775c51c 100644
--- a/bin/pixi.js
+++ b/bin/pixi.js
@@ -1,27 +1,28 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=b*g-c*k,H=b*h-e*k,z=b*t-f*k,A=c*h-e*g,q=c*t-f*g,x=e*t-f*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-c*I+e*E-f*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-k*I+h*C-t*B)*F;d[5]=(b*I-e*C+f*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(k*E-g*C+t*y)*F;d[9]=
+(-b*E+c*C-f*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-k*D+g*B-h*y)*F;d[13]=(b*D-c*B+e*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
@@ -35,16 +36,16 @@
j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+0,c[1]=0,c[2]=0,c;b=1/Math.sqrt(b);c[0]=e*b;c[1]=a*b;return c},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);return e},str:function(a){return"["+a[0]+", "+a[1]+"]"}},J={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):b[0]=b[1]=b[2]=b[3]=0;return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
@@ -27,7 +28,6 @@
-
@@ -42,7 +42,6 @@
-
diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html
index 214ceb2..1ad6430 100644
--- a/docs/classes/BaseTexture.html
+++ b/docs/classes/BaseTexture.html
@@ -153,7 +153,7 @@
- imageUrl
+ source
@@ -208,14 +208,14 @@
- imageUrl
+ source
String
-
image url
+
the source object (image or canvas)
@@ -265,14 +265,7 @@
- image
-
-
-
-
-
-
- imageUrl
+ source
@@ -324,7 +317,7 @@
- pixi/textures/BaseTexture.js:54
+ pixi/textures/BaseTexture.js:32
@@ -345,8 +338,8 @@
-
-
image
+
-
The html image that is loaded to create the texture
-
-
-
-
-
-
-
-
-
-
-
-
imageUrl
-
String
-
-
-
-
-
-
-
-
-
-
-
-
-
The url of the texture
+
The source that is loaded to create the texture
@@ -456,7 +405,7 @@
-
pixi/textures/BaseTexture.js:48
+
pixi/textures/BaseTexture.js:26
diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html
index cfe29a0..f5329ad 100644
--- a/docs/classes/CanvasRenderer.html
+++ b/docs/classes/CanvasRenderer.html
@@ -265,7 +265,7 @@
-
pixi/renderers/CanvasRenderer.js:53
+
pixi/renderers/CanvasRenderer.js:56
@@ -341,7 +341,7 @@
-
pixi/renderers/CanvasRenderer.js:42
+
pixi/renderers/CanvasRenderer.js:45
diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html
index 54b4031..48980dc 100644
--- a/docs/classes/Texture.html
+++ b/docs/classes/Texture.html
@@ -286,6 +286,15 @@
+ fromCanvas
+
+
+ static
+
+
+
+
+
fromFrame
@@ -401,7 +410,7 @@
- pixi/textures/Texture.js:127
+ pixi/textures/Texture.js:169
@@ -461,6 +470,111 @@
+
+
fromCanvas
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
static
+
+
+
+
+
+
+
+
+
+
Helper function that returns a texture based on a canvas element
+ If the canvas is not in the texture cache it will be created and loaded
+
+
+
+
+
Parameters:
+
+
+
+ -
+
+
canvas
+ Canvas
+
+
+
+
+
+
The canvas element source of the texture
+
+
+
+
+
+
+
+
+
+
+
+
Returns:
+
+
+
+
+ Texture
+
+
+
+
+
+
+
+
+
fromFrame
@@ -507,7 +621,7 @@
-
pixi/textures/Texture.js:112
+
pixi/textures/Texture.js:123
@@ -711,7 +825,7 @@
-
pixi/textures/Texture.js:139
+
pixi/textures/Texture.js:181
diff --git a/docs/data.json b/docs/data.json
index 267288f..246ea87 100644
--- a/docs/data.json
+++ b/docs/data.json
@@ -348,8 +348,8 @@
"is_constructor": 1,
"params": [
{
- "name": "imageUrl",
- "description": "image url",
+ "name": "source",
+ "description": "the source object (image or canvas)",
"type": "String"
}
]
@@ -642,7 +642,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 42,
+ "line": 45,
"description": "The canvas context that the everything is drawn to",
"itemtype": "property",
"name": "context",
@@ -651,7 +651,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 53,
+ "line": 56,
"description": "Renders the stage to its canvas view",
"itemtype": "method",
"name": "render",
@@ -666,7 +666,7 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 81,
+ "line": 83,
"description": "resizes the canvas view to the specified width and height",
"params": [
{
@@ -682,21 +682,21 @@
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 95,
+ "line": 97,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 165,
+ "line": 167,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
},
{
"file": "pixi/renderers/CanvasRenderer.js",
- "line": 200,
+ "line": 202,
"access": "private",
"tagname": "",
"class": "CanvasRenderer"
@@ -987,25 +987,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 19,
- "description": "The url of the texture",
- "itemtype": "property",
- "name": "imageUrl",
- "type": "String",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
"line": 26,
- "description": "The html image that is loaded to create the texture",
- "itemtype": "property",
- "name": "image",
- "type": "Image",
- "class": "BaseTexture"
- },
- {
- "file": "pixi/textures/BaseTexture.js",
- "line": 48,
"description": "[read only] The width of the base texture set when the image has loaded",
"itemtype": "property",
"name": "width",
@@ -1014,7 +996,7 @@
},
{
"file": "pixi/textures/BaseTexture.js",
- "line": 54,
+ "line": 32,
"description": "[read only] The height of the base texture set when the image has loaded",
"itemtype": "property",
"name": "height",
@@ -1022,6 +1004,15 @@
"class": "BaseTexture"
},
{
+ "file": "pixi/textures/BaseTexture.js",
+ "line": 39,
+ "description": "The source that is loaded to create the texture",
+ "itemtype": "property",
+ "name": "source",
+ "type": "Image",
+ "class": "BaseTexture"
+ },
+ {
"file": "pixi/textures/Texture.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1081,7 +1072,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 112,
+ "line": 123,
"description": "Helper function that returns a texture based on a frame id\n If the frame id is not in the texture cache an error will be thrown",
"itemtype": "method",
"name": "fromFrame",
@@ -1099,7 +1090,26 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 127,
+ "line": 138,
+ "description": "Helper function that returns a texture based on a canvas element\n If the canvas is not in the texture cache it will be created and loaded",
+ "static": 1,
+ "itemtype": "method",
+ "name": "fromCanvas",
+ "params": [
+ {
+ "name": "canvas",
+ "description": "The canvas element source of the texture",
+ "type": "Canvas"
+ }
+ ],
+ "return": {
+ "description": "Texture"
+ },
+ "class": "Texture"
+ },
+ {
+ "file": "pixi/textures/Texture.js",
+ "line": 169,
"description": "Adds a texture to the textureCache.",
"itemtype": "method",
"name": "addTextureToCache",
@@ -1119,7 +1129,7 @@
},
{
"file": "pixi/textures/Texture.js",
- "line": 139,
+ "line": 181,
"description": "Remove a texture from the textureCache.",
"itemtype": "method",
"name": "removeTextureFromCache",
@@ -1172,6 +1182,12 @@
"class": "DisplayObject"
},
{
+ "file": "pixi/utils/Utils.js",
+ "line": 19,
+ "description": "Provides bind in a cross browser way.",
+ "class": "DisplayObject"
+ },
+ {
"file": "pixi/DisplayObject.js",
"line": 1,
"author": "Mat Groves http://matgroves.com/ @Doormat23",
@@ -1701,19 +1717,19 @@
},
{
"message": "Missing item type\nresizes the canvas view to the specified width and height",
- "line": " pixi/renderers/CanvasRenderer.js:81"
+ "line": " pixi/renderers/CanvasRenderer.js:83"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:95"
+ "line": " pixi/renderers/CanvasRenderer.js:97"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:165"
+ "line": " pixi/renderers/CanvasRenderer.js:167"
},
{
"message": "Missing item type",
- "line": " pixi/renderers/CanvasRenderer.js:200"
+ "line": " pixi/renderers/CanvasRenderer.js:202"
},
{
"message": "Missing item type",
@@ -1804,6 +1820,10 @@
"line": " pixi/utils/Utils.js:1"
},
{
+ "message": "Missing item type\nProvides bind in a cross browser way.",
+ "line": " pixi/utils/Utils.js:19"
+ },
+ {
"message": "Missing item type",
"line": " pixi/DisplayObject.js:1"
},
diff --git a/docs/files/pixi_Rectangle.js.html b/docs/files/pixi_Rectangle.js.html
index faeb2ca..52e0c91 100644
--- a/docs/files/pixi_Rectangle.js.html
+++ b/docs/files/pixi_Rectangle.js.html
@@ -162,7 +162,7 @@
* @method clone
* @return a copy of the rectangle
*/
-PIXI.Point.clone = function()
+PIXI.Rectangle.clone = function()
{
return new PIXI.Rectangle(this.x, this.y, this.width, this.height);
}
diff --git a/docs/files/pixi_renderers_CanvasRenderer.js.html b/docs/files/pixi_renderers_CanvasRenderer.js.html
index 0c2c440..cfedafa 100644
--- a/docs/files/pixi_renderers_CanvasRenderer.js.html
+++ b/docs/files/pixi_renderers_CanvasRenderer.js.html
@@ -151,6 +151,9 @@
*/
this.view = document.createElement( 'canvas' );
+ // hack to enable some hardware acceleration!
+ //this.view.style["transform"] = "translatez(0)";
+
this.view.width = this.width;
this.view.height = this.height;
this.count = 0;
@@ -181,7 +184,6 @@
// update textures if need be
PIXI.texturesToUpdate = [];
-
this.context.setTransform(1,0,0,1,0,0);
stage.updateTransform();
@@ -234,7 +236,7 @@
* meaning we dont need to do a transform and also we
* can round to the nearest round number for a little extra speed!
*/
- if(displayObject.rotation == 0)
+ /*if(displayObject.rotation == 0)
{
if(!blit)this.context.setTransform(1,0,0,1,0,0);
blit = true;
@@ -250,10 +252,10 @@
}
else
- {
+ {*/
blit = false;
context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5])
- context.drawImage(displayObject.texture.baseTexture.image,
+ context.drawImage(displayObject.texture.baseTexture.source,
frame.x,
frame.y,
frame.width,
@@ -262,7 +264,7 @@
(displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height,
displayObject.width,
displayObject.height);
- }
+ //}
}
}
else if(displayObject instanceof PIXI.Strip)
@@ -367,7 +369,7 @@
delta_b/delta, delta_e/delta,
delta_c/delta, delta_f/delta);
- context.drawImage(strip.texture.baseTexture.image, 0, 0);
+ context.drawImage(strip.texture.baseTexture.source, 0, 0);
context.restore();
};
diff --git a/docs/files/pixi_renderers_WebGLRenderer.js.html b/docs/files/pixi_renderers_WebGLRenderer.js.html
index 4938b42..3504fd3 100644
--- a/docs/files/pixi_renderers_WebGLRenderer.js.html
+++ b/docs/files/pixi_renderers_WebGLRenderer.js.html
@@ -352,7 +352,7 @@
{
gl.bindTexture(gl.TEXTURE_2D, texture._glTexture);
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.image);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
diff --git a/docs/files/pixi_textures_BaseTexture.js.html b/docs/files/pixi_textures_BaseTexture.js.html
index 6604f24..a1d5004 100644
--- a/docs/files/pixi_textures_BaseTexture.js.html
+++ b/docs/files/pixi_textures_BaseTexture.js.html
@@ -126,40 +126,18 @@
* @class BaseTexture
* @extends EventTarget
* @constructor
- * @param imageUrl {String} image url
+ * @param source {String} the source object (image or canvas)
*/
-PIXI.BaseTexture = function(imageUrl)
+PIXI.BaseTexture = function(source)
{
PIXI.EventTarget.call( this );
- /**
+ /*
* The url of the texture
* @property imageUrl
* @type String
*/
- this.imageUrl = imageUrl;
-
- /**
- * The html image that is loaded to create the texture
- * @property image
- * @type Image
- */
- this.image = new Image();
-
- var scope = this
- this.image.onload = function(){
-
- scope.hasLoaded = true;
- scope.width = scope.image.width;
- scope.height = scope.image.height;
-
- // add it to somewhere...
- PIXI.texturesToUpdate.push(scope);
- scope.dispatchEvent( { type: 'loaded', content: scope } );
- }
-
- //$.proxy(this.onImageLoaded, this);
- this.image.src = imageUrl;
+ //this.imageUrl = source.src;
/**
* [read only] The width of the base texture set when the image has loaded
@@ -174,16 +152,60 @@
*/
this.height = 100;
+ /**
+ * The source that is loaded to create the texture
+ * @property source
+ * @type Image
+ */
+ this.source = source//new Image();
- PIXI.BaseTextureCache[imageUrl] = this;
+ if(this.source instanceof Image)
+ {
+ if(this.source.complete)
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ PIXI.texturesToUpdate.push(this);
+ }
+ else
+ {
+
+ var scope = this;
+ this.source.onload = function(){
+
+ scope.hasLoaded = true;
+ scope.width = scope.source.width;
+ scope.height = scope.source.height;
+
+ // add it to somewhere...
+ PIXI.texturesToUpdate.push(scope);
+ scope.dispatchEvent( { type: 'loaded', content: scope } );
+ }
+ // this.image.src = imageUrl;
+ }
+ }
+ else
+ {
+ this.hasLoaded = true;
+ this.width = this.source.width;
+ this.height = this.source.height;
+
+ //console.log(">!!",this.width)
+ PIXI.texturesToUpdate.push(this);
+ }
+
+
+
}
PIXI.BaseTexture.constructor = PIXI.BaseTexture;
-/*
-PIXI.BaseTexture.prototype.onImageLoaded = function(image)
+
+PIXI.BaseTexture.prototype.fromImage = function(imageUrl)
{
-}*/
+}
diff --git a/docs/files/pixi_textures_Texture.js.html b/docs/files/pixi_textures_Texture.js.html
index f3c350f..1b17ae6 100644
--- a/docs/files/pixi_textures_Texture.js.html
+++ b/docs/files/pixi_textures_Texture.js.html
@@ -157,13 +157,13 @@
*/
this.frame = frame;
-
-
this.scope = this;
if(baseTexture.hasLoaded)
{
- if(!frame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height);
+ //console.log(frame)
+
this.setFrame(frame);
}
else
@@ -217,9 +217,20 @@
if(!texture)
{
var baseTexture = PIXI.BaseTextureCache[imageUrl];
- if(!baseTexture) baseTexture = new PIXI.BaseTexture(imageUrl);
+ if(!baseTexture)
+ {
+ var image = new Image();//new Image();
+ image.src = imageUrl;
+
+ baseTexture = new PIXI.BaseTexture(image);
+ PIXI.BaseTextureCache[imageUrl] = baseTexture;
+ }
texture = new PIXI.Texture(baseTexture);
+
+
PIXI.TextureCache[imageUrl] = texture;
+
+
}
return texture;
@@ -242,6 +253,37 @@
/**
*
+ * Helper function that returns a texture based on a canvas element
+ * If the canvas is not in the texture cache it will be created and loaded
+ * @static
+ * @method fromCanvas
+ * @param canvas {Canvas} The canvas element source of the texture
+ * @return Texture
+ */
+PIXI.Texture.fromCanvas = function(canvas)
+{
+ // create a canvas id??
+ var texture = PIXI.TextureCache[canvas];
+
+ if(!texture)
+ {
+ var baseTexture = PIXI.BaseTextureCache[canvas];
+ if(!baseTexture)
+ {
+ baseTexture = new PIXI.BaseTexture(canvas);
+ PIXI.BaseTextureCache[canvas] = baseTexture;
+ }
+ texture = new PIXI.Texture(baseTexture);
+
+ PIXI.TextureCache[canvas] = texture;
+ }
+
+ return texture;
+}
+
+
+/**
+ *
* Adds a texture to the textureCache.
* @method addTextureToCache
* @param texture {Texture}
diff --git a/docs/files/pixi_utils_Utils.js.html b/docs/files/pixi_utils_Utils.js.html
index 8a885e8..394866f 100644
--- a/docs/files/pixi_utils_Utils.js.html
+++ b/docs/files/pixi_utils_Utils.js.html
@@ -132,6 +132,32 @@
return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
}
+/**
+ * Provides bind in a cross browser way.
+ */
+if (typeof Function.prototype.bind != 'function') {
+ Function.prototype.bind = (function () {
+ var slice = Array.prototype.slice;
+ return function (thisArg) {
+ var target = this, boundArgs = slice.call(arguments, 1);
+
+ if (typeof target != 'function') throw new TypeError();
+
+ function bound() {
+ var args = boundArgs.concat(slice.call(arguments));
+ target.apply(this instanceof bound ? this : thisArg, args);
+ }
+
+ bound.prototype = (function F(proto) {
+ proto && (F.prototype = proto);
+ if (!(this instanceof F)) return new F;
+ })(target.prototype);
+
+ return bound;
+ };
+ })();
+}
+
var AjaxRequest = function()
{
var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
diff --git a/examples/example 1 - Basics/bunny.png b/examples/example 1 - Basics/bunny.png
new file mode 100644
index 0000000..79c3167
--- /dev/null
+++ b/examples/example 1 - Basics/bunny.png
Binary files differ
diff --git a/examples/example 1 - Basics/index.html b/examples/example 1 - Basics/index.html
new file mode 100644
index 0000000..a88c6d8
--- /dev/null
+++ b/examples/example 1 - Basics/index.html
@@ -0,0 +1,79 @@
+
+
+
+ pixi.js example 1
+
+
+
+
+
+
+
+
diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js
new file mode 100644
index 0000000..4fa1d70
--- /dev/null
+++ b/examples/example 1 - Basics/pixi.js
@@ -0,0 +1,111 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,e,k,f,G){var t=new j(9);t[0]=a;t[1]=d;t[2]=l;t[3]=b;t[4]=c;t[5]=e;t[6]=k;t[7]=f;t[8]=G;return t},determinant:function(a){var d=
+a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],G=a[6],t=a[7],g=a[8],h=g*k-f*t,j=-g*e+f*G,m=t*e-k*G,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*t)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*G)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-t*l+b*G)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],G=a[5],t=a[6],g=
+a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*t;l[1]=h*c+j*f+m*g;l[2]=h*e+j*G+m*a;l[3]=r*b+n*k+v*t;l[4]=r*c+n*f+v*g;l[5]=r*e+n*G+v*a;l[6]=p*b+w*k+d*t;l[7]=p*c+w*f+d*g;l[8]=p*e+w*G+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
+set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
+d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
+a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,G,t,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=G;v[9]=t;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
+d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
+d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
+d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],t=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-t*r*f*c-n*k*j*c+e*r*j*c+t*k*p*c-e*h*p*c-n*h*b*g+t*r*b*g+n*l*j*g-d*r*j*g-t*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-t*k*b*a+e*h*b*a+t*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
+d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],t=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],s=a[13],v=a[14],u=a[15],w=l*g-b*f,H=l*h-c*f,z=l*t-e*f,A=b*h-c*g,q=b*t-e*g,x=c*t-e*h,y=j*s-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*s,E=m*u-p*s,I=n*u-p*v,F=w*I-H*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*I-h*E+t*D)*F;d[1]=(-b*I+c*E-e*D)*F;d[2]=(s*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*I+h*C-t*B)*F;d[5]=(l*I-c*C+e*B)*F;d[6]=(-r*x+v*z-u*H)*F;d[7]=(j*x-n*z+p*H)*F;d[8]=(f*E-g*C+t*y)*F;d[9]=
+(-l*E+b*C-e*y)*F;d[10]=(r*q-s*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+s*H-v*w)*F;d[15]=(j*A-m*H+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
+return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],t=a[9],j=a[10],m=j*k-g*t,n=-j*f+g*h,p=t*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*t)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-t*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],t=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],s=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
+q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*s;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*t+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*s;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*t+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*s;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*t+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*s;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*t+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
+var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,j,m,n,p,q,r,s,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
+a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];j=a[4];m=a[5];n=a[6];p=a[7];q=a[8];r=a[9];s=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=j;b[5]=m;b[6]=n;b[7]=p;b[8]=q;b[9]=r;b[10]=s;b[11]=v;b[12]=f*c+j*e+q*d+a[12];b[13]=k*c+m*e+r*d+a[13];b[14]=g*c+n*e+s*d+a[14];b[15]=h*c+p*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
+d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,s,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];s=a[7];v=a[8];u=a[9];w=
+a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+s*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+s*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+s*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
+n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
+d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
+k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
+(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
+j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
+a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
+a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
+return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
+d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
+return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=n-f;d[4]=1-(m+e);d[5]=c+g;d[6]=b+h;d[7]=c-g;d[8]=1-(m+p);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
+j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
+0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
+0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
+return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
+b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
+Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=J.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
+b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
+g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},L={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
+b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
+(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
+f,b.glMath=e,b.vec2=K,b.vec3=n,b.vec4=L,b.mat2=J,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:K,vec3:n,vec4:L,mat2:J,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
+PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
+PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
-
-
- pixi.js example 1
-
-
-
-
-
-
-
-
diff --git a/examples/example 1/pixi.js b/examples/example 1/pixi.js
deleted file mode 100644
index 161d482..0000000
--- a/examples/example 1/pixi.js
+++ /dev/null
@@ -1,110 +0,0 @@
-var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Point.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
-var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
-var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
-d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],G=Math.sqrt(l*
-l+b*b+c*c);if(!G)return d[0]=0,d[1]=0,d[2]=0,d;if(1===G)return d[0]=l,d[1]=b,d[2]=c,d;G=1/G;d[0]=l*G;d[1]=b*G;d[2]=c*G;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var G=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*G-b*d;l[2]=b*k-c*G;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
-a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var G=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
-u.multiply(l,d,G);if(!u.inverse(G))return null;u.multiplyVec4(G,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),t=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(t,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
-d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1l[3]&&(l[3]=-1);return l};n.str=function(a){return"["+a[0]+", "+a[1]+", "+a[2]+"]"};var y={create:function(a){var d=new j(9);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8]):d[0]=d[1]=d[2]=d[3]=d[4]=d[5]=d[6]=d[7]=d[8]=0;return d},createFrom:function(a,d,l,b,c,G,k,e,f){var s=new j(9);s[0]=a;s[1]=d;s[2]=l;s[3]=b;s[4]=c;s[5]=G;s[6]=k;s[7]=e;s[8]=f;return s},determinant:function(a){var d=
-a[3],l=a[4],b=a[5],c=a[6],e=a[7],k=a[8];return a[0]*(k*l-b*e)+a[1]*(-k*d+b*c)+a[2]*(e*d-l*c)},inverse:function(a,d){var l=a[0],b=a[1],c=a[2],e=a[3],k=a[4],f=a[5],H=a[6],s=a[7],g=a[8],h=g*k-f*s,j=-g*e+f*H,m=s*e-k*H,r=l*h+b*j+c*m;if(!r)return null;r=1/r;d||(d=y.create());d[0]=h*r;d[1]=(-g*b+c*s)*r;d[2]=(f*b-c*k)*r;d[3]=j*r;d[4]=(g*l-c*H)*r;d[5]=(-f*l+c*e)*r;d[6]=m*r;d[7]=(-s*l+b*H)*r;d[8]=(k*l-b*e)*r;return d},multiply:function(a,d,l){l||(l=a);var b=a[0],c=a[1],e=a[2],k=a[3],f=a[4],H=a[5],s=a[6],g=
-a[7];a=a[8];var h=d[0],j=d[1],m=d[2],r=d[3],n=d[4],v=d[5],p=d[6],w=d[7];d=d[8];l[0]=h*b+j*k+m*s;l[1]=h*c+j*f+m*g;l[2]=h*e+j*H+m*a;l[3]=r*b+n*k+v*s;l[4]=r*c+n*f+v*g;l[5]=r*e+n*H+v*a;l[6]=p*b+w*k+d*s;l[7]=p*c+w*f+d*g;l[8]=p*e+w*H+d*a;return l},multiplyVec2:function(a,d,l){l||(l=d);var b=d[0];d=d[1];l[0]=b*a[0]+d*a[3]+a[6];l[1]=b*a[1]+d*a[4]+a[7];return l},multiplyVec3:function(a,d,l){l||(l=d);var b=d[0],c=d[1];d=d[2];l[0]=b*a[0]+c*a[3]+d*a[6];l[1]=b*a[1]+c*a[4]+d*a[7];l[2]=b*a[2]+c*a[5]+d*a[8];return l},
-set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])},identity:function(a){a||(a=y.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=1;a[5]=0;a[6]=0;a[7]=0;a[8]=1;return a},transpose:function(a,
-d){if(!d||a===d){var l=a[1],b=a[2],c=a[5];a[1]=a[3];a[2]=a[6];a[3]=l;a[5]=a[7];a[6]=b;a[7]=c;return a}d[0]=a[0];d[1]=a[3];d[2]=a[6];d[3]=a[1];d[4]=a[4];d[5]=a[7];d[6]=a[2];d[7]=a[5];d[8]=a[8];return d},toMat4:function(a,d){d||(d=u.create());d[15]=1;d[14]=0;d[13]=0;d[12]=0;d[11]=0;d[10]=a[8];d[9]=a[7];d[8]=a[6];d[7]=0;d[6]=a[5];d[5]=a[4];d[4]=a[3];d[3]=0;d[2]=a[2];d[1]=a[1];d[0]=a[0];return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+
-a[8]+"]"}},u={create:function(a){var d=new j(16);a&&(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3],d[4]=a[4],d[5]=a[5],d[6]=a[6],d[7]=a[7],d[8]=a[8],d[9]=a[9],d[10]=a[10],d[11]=a[11],d[12]=a[12],d[13]=a[13],d[14]=a[14],d[15]=a[15]);return d},createFrom:function(a,d,l,b,c,e,k,f,H,s,g,h,m,n,r,p){var v=new j(16);v[0]=a;v[1]=d;v[2]=l;v[3]=b;v[4]=c;v[5]=e;v[6]=k;v[7]=f;v[8]=H;v[9]=s;v[10]=g;v[11]=h;v[12]=m;v[13]=n;v[14]=r;v[15]=p;return v},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];
-d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=a[12];d[13]=a[13];d[14]=a[14];d[15]=a[15];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])&&1E-6>Math.abs(a[4]-d[4])&&1E-6>Math.abs(a[5]-d[5])&&1E-6>Math.abs(a[6]-d[6])&&1E-6>Math.abs(a[7]-d[7])&&1E-6>Math.abs(a[8]-d[8])&&1E-6>Math.abs(a[9]-d[9])&&1E-6>Math.abs(a[10]-d[10])&&1E-6>Math.abs(a[11]-d[11])&&1E-6>Math.abs(a[12]-
-d[12])&&1E-6>Math.abs(a[13]-d[13])&&1E-6>Math.abs(a[14]-d[14])&&1E-6>Math.abs(a[15]-d[15])},identity:function(a){a||(a=u.create());a[0]=1;a[1]=0;a[2]=0;a[3]=0;a[4]=0;a[5]=1;a[6]=0;a[7]=0;a[8]=0;a[9]=0;a[10]=1;a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},transpose:function(a,d){if(!d||a===d){var l=a[1],b=a[2],c=a[3],e=a[6],k=a[7],f=a[11];a[1]=a[4];a[2]=a[8];a[3]=a[12];a[4]=l;a[6]=a[9];a[7]=a[13];a[8]=b;a[9]=e;a[11]=a[14];a[12]=c;a[13]=k;a[14]=f;return a}d[0]=a[0];d[1]=a[4];d[2]=a[8];d[3]=a[12];
-d[4]=a[1];d[5]=a[5];d[6]=a[9];d[7]=a[13];d[8]=a[2];d[9]=a[6];d[10]=a[10];d[11]=a[14];d[12]=a[3];d[13]=a[7];d[14]=a[11];d[15]=a[15];return d},determinant:function(a){var d=a[0],l=a[1],b=a[2],c=a[3],e=a[4],k=a[5],f=a[6],g=a[7],s=a[8],h=a[9],j=a[10],m=a[11],n=a[12],r=a[13],p=a[14];a=a[15];return n*h*f*c-s*r*f*c-n*k*j*c+e*r*j*c+s*k*p*c-e*h*p*c-n*h*b*g+s*r*b*g+n*l*j*g-d*r*j*g-s*l*p*g+d*h*p*g+n*k*b*m-e*r*b*m-n*l*f*m+d*r*f*m+e*l*p*m-d*k*p*m-s*k*b*a+e*h*b*a+s*l*f*a-d*h*f*a-e*l*j*a+d*k*j*a},inverse:function(a,
-d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=a[3],f=a[4],g=a[5],h=a[6],s=a[7],j=a[8],m=a[9],n=a[10],p=a[11],r=a[12],t=a[13],v=a[14],u=a[15],w=l*g-b*f,I=l*h-c*f,z=l*s-e*f,A=b*h-c*g,q=b*s-e*g,x=c*s-e*h,y=j*t-m*r,B=j*v-n*r,C=j*u-p*r,D=m*v-n*t,E=m*u-p*t,J=n*u-p*v,F=w*J-I*E+z*D+A*C-q*B+x*y;if(!F)return null;F=1/F;d[0]=(g*J-h*E+s*D)*F;d[1]=(-b*J+c*E-e*D)*F;d[2]=(t*x-v*q+u*A)*F;d[3]=(-m*x+n*q-p*A)*F;d[4]=(-f*J+h*C-s*B)*F;d[5]=(l*J-c*C+e*B)*F;d[6]=(-r*x+v*z-u*I)*F;d[7]=(j*x-n*z+p*I)*F;d[8]=(f*E-g*C+s*y)*F;d[9]=
-(-l*E+b*C-e*y)*F;d[10]=(r*q-t*z+u*w)*F;d[11]=(-j*q+m*z-p*w)*F;d[12]=(-f*D+g*B-h*y)*F;d[13]=(l*D-b*B+c*y)*F;d[14]=(-r*A+t*I-v*w)*F;d[15]=(j*A-m*I+n*w)*F;return d},toRotationMat:function(a,d){d||(d=u.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];d[4]=a[4];d[5]=a[5];d[6]=a[6];d[7]=a[7];d[8]=a[8];d[9]=a[9];d[10]=a[10];d[11]=a[11];d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d},toMat3:function(a,d){d||(d=y.create());d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[4];d[4]=a[5];d[5]=a[6];d[6]=a[8];d[7]=a[9];d[8]=a[10];
-return d},toInverseMat3:function(a,d){var b=a[0],c=a[1],e=a[2],f=a[4],k=a[5],g=a[6],h=a[8],s=a[9],j=a[10],m=j*k-g*s,n=-j*f+g*h,p=s*f-k*h,r=b*m+c*n+e*p;if(!r)return null;r=1/r;d||(d=y.create());d[0]=m*r;d[1]=(-j*c+e*s)*r;d[2]=(g*c-e*k)*r;d[3]=n*r;d[4]=(j*b-e*h)*r;d[5]=(-g*b+e*f)*r;d[6]=p*r;d[7]=(-s*b+c*h)*r;d[8]=(k*b-c*f)*r;return d},multiply:function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2],k=a[3],g=a[4],h=a[5],s=a[6],j=a[7],m=a[8],n=a[9],p=a[10],r=a[11],t=a[12],v=a[13],u=a[14];a=a[15];var w=d[0],
-q=d[1],z=d[2],A=d[3];b[0]=w*c+q*g+z*m+A*t;b[1]=w*e+q*h+z*n+A*v;b[2]=w*f+q*s+z*p+A*u;b[3]=w*k+q*j+z*r+A*a;w=d[4];q=d[5];z=d[6];A=d[7];b[4]=w*c+q*g+z*m+A*t;b[5]=w*e+q*h+z*n+A*v;b[6]=w*f+q*s+z*p+A*u;b[7]=w*k+q*j+z*r+A*a;w=d[8];q=d[9];z=d[10];A=d[11];b[8]=w*c+q*g+z*m+A*t;b[9]=w*e+q*h+z*n+A*v;b[10]=w*f+q*s+z*p+A*u;b[11]=w*k+q*j+z*r+A*a;w=d[12];q=d[13];z=d[14];A=d[15];b[12]=w*c+q*g+z*m+A*t;b[13]=w*e+q*h+z*n+A*v;b[14]=w*f+q*s+z*p+A*u;b[15]=w*k+q*j+z*r+A*a;return b},multiplyVec3:function(a,d,b){b||(b=d);
-var c=d[0],e=d[1];d=d[2];b[0]=a[0]*c+a[4]*e+a[8]*d+a[12];b[1]=a[1]*c+a[5]*e+a[9]*d+a[13];b[2]=a[2]*c+a[6]*e+a[10]*d+a[14];return b},multiplyVec4:function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=d[3];b[0]=a[0]*c+a[4]*e+a[8]*f+a[12]*d;b[1]=a[1]*c+a[5]*e+a[9]*f+a[13]*d;b[2]=a[2]*c+a[6]*e+a[10]*f+a[14]*d;b[3]=a[3]*c+a[7]*e+a[11]*f+a[15]*d;return b},translate:function(a,d,b){var c=d[0],e=d[1];d=d[2];var f,k,g,h,s,j,m,n,p,r,q,v;if(!b||a===b)return a[12]=a[0]*c+a[4]*e+a[8]*d+a[12],a[13]=a[1]*c+a[5]*e+
-a[9]*d+a[13],a[14]=a[2]*c+a[6]*e+a[10]*d+a[14],a[15]=a[3]*c+a[7]*e+a[11]*d+a[15],a;f=a[0];k=a[1];g=a[2];h=a[3];s=a[4];j=a[5];m=a[6];n=a[7];p=a[8];r=a[9];q=a[10];v=a[11];b[0]=f;b[1]=k;b[2]=g;b[3]=h;b[4]=s;b[5]=j;b[6]=m;b[7]=n;b[8]=p;b[9]=r;b[10]=q;b[11]=v;b[12]=f*c+s*e+p*d+a[12];b[13]=k*c+j*e+r*d+a[13];b[14]=g*c+m*e+q*d+a[14];b[15]=h*c+n*e+v*d+a[15];return b},scale:function(a,d,b){var c=d[0],e=d[1];d=d[2];if(!b||a===b)return a[0]*=c,a[1]*=c,a[2]*=c,a[3]*=c,a[4]*=e,a[5]*=e,a[6]*=e,a[7]*=e,a[8]*=d,a[9]*=
-d,a[10]*=d,a[11]*=d,a;b[0]=a[0]*c;b[1]=a[1]*c;b[2]=a[2]*c;b[3]=a[3]*c;b[4]=a[4]*e;b[5]=a[5]*e;b[6]=a[6]*e;b[7]=a[7]*e;b[8]=a[8]*d;b[9]=a[9]*d;b[10]=a[10]*d;b[11]=a[11]*d;b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=a[15];return b},rotate:function(a,d,b,c){var e=b[0],f=b[1];b=b[2];var k=Math.sqrt(e*e+f*f+b*b),g,h,j,m,n,p,q,r,t,v,u,w,x,z,A,y,B,C,D,E;if(!k)return null;1!==k&&(k=1/k,e*=k,f*=k,b*=k);g=Math.sin(d);h=Math.cos(d);j=1-h;d=a[0];k=a[1];m=a[2];n=a[3];p=a[4];q=a[5];r=a[6];t=a[7];v=a[8];u=a[9];w=
-a[10];x=a[11];z=e*e*j+h;A=f*e*j+b*g;y=b*e*j-f*g;B=e*f*j-b*g;C=f*f*j+h;D=b*f*j+e*g;E=e*b*j+f*g;e=f*b*j-e*g;f=b*b*j+h;c?a!==c&&(c[12]=a[12],c[13]=a[13],c[14]=a[14],c[15]=a[15]):c=a;c[0]=d*z+p*A+v*y;c[1]=k*z+q*A+u*y;c[2]=m*z+r*A+w*y;c[3]=n*z+t*A+x*y;c[4]=d*B+p*C+v*D;c[5]=k*B+q*C+u*D;c[6]=m*B+r*C+w*D;c[7]=n*B+t*C+x*D;c[8]=d*E+p*e+v*f;c[9]=k*E+q*e+u*f;c[10]=m*E+r*e+w*f;c[11]=n*E+t*e+x*f;return c},rotateX:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[4],f=a[5],k=a[6],g=a[7],h=a[8],j=a[9],m=a[10],
-n=a[11];b?a!==b&&(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[4]=e*d+h*c;b[5]=f*d+j*c;b[6]=k*d+m*c;b[7]=g*d+n*c;b[8]=e*-c+h*d;b[9]=f*-c+j*d;b[10]=k*-c+m*d;b[11]=g*-c+n*d;return b},rotateY:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[8],j=a[9],m=a[10],n=a[11];b?a!==b&&(b[4]=a[4],b[5]=a[5],b[6]=a[6],b[7]=a[7],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*-c;b[1]=f*d+j*-c;b[2]=k*d+m*-c;b[3]=g*
-d+n*-c;b[8]=e*c+h*d;b[9]=f*c+j*d;b[10]=k*c+m*d;b[11]=g*c+n*d;return b},rotateZ:function(a,d,b){var c=Math.sin(d);d=Math.cos(d);var e=a[0],f=a[1],k=a[2],g=a[3],h=a[4],j=a[5],m=a[6],n=a[7];b?a!==b&&(b[8]=a[8],b[9]=a[9],b[10]=a[10],b[11]=a[11],b[12]=a[12],b[13]=a[13],b[14]=a[14],b[15]=a[15]):b=a;b[0]=e*d+h*c;b[1]=f*d+j*c;b[2]=k*d+m*c;b[3]=g*d+n*c;b[4]=e*-c+h*d;b[5]=f*-c+j*d;b[6]=k*-c+m*d;b[7]=g*-c+n*d;return b},frustum:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2*e/g;k[1]=0;
-k[2]=0;k[3]=0;k[4]=0;k[5]=2*e/h;k[6]=0;k[7]=0;k[8]=(d+a)/g;k[9]=(c+b)/h;k[10]=-(f+e)/j;k[11]=-1;k[12]=0;k[13]=0;k[14]=-(2*f*e)/j;k[15]=0;return k},perspective:function(a,d,b,c,e){a=b*Math.tan(a*Math.PI/360);d*=a;return u.frustum(-d,d,-a,a,b,c,e)},ortho:function(a,d,b,c,e,f,k){k||(k=u.create());var g=d-a,h=c-b,j=f-e;k[0]=2/g;k[1]=0;k[2]=0;k[3]=0;k[4]=0;k[5]=2/h;k[6]=0;k[7]=0;k[8]=0;k[9]=0;k[10]=-2/j;k[11]=0;k[12]=-(a+d)/g;k[13]=-(c+b)/h;k[14]=-(f+e)/j;k[15]=1;return k},lookAt:function(a,d,b,c){c||
-(c=u.create());var e,f,k,g,h,j,m,n,p=a[0],q=a[1];a=a[2];k=b[0];g=b[1];f=b[2];m=d[0];b=d[1];e=d[2];if(p===m&&q===b&&a===e)return u.identity(c);d=p-m;b=q-b;m=a-e;n=1/Math.sqrt(d*d+b*b+m*m);d*=n;b*=n;m*=n;e=g*m-f*b;f=f*d-k*m;k=k*b-g*d;(n=Math.sqrt(e*e+f*f+k*k))?(n=1/n,e*=n,f*=n,k*=n):k=f=e=0;g=b*k-m*f;h=m*e-d*k;j=d*f-b*e;(n=Math.sqrt(g*g+h*h+j*j))?(n=1/n,g*=n,h*=n,j*=n):j=h=g=0;c[0]=e;c[1]=g;c[2]=d;c[3]=0;c[4]=f;c[5]=h;c[6]=b;c[7]=0;c[8]=k;c[9]=j;c[10]=m;c[11]=0;c[12]=-(e*p+f*q+k*a);c[13]=-(g*p+h*q+
-j*a);c[14]=-(d*p+b*q+m*a);c[15]=1;return c},fromRotationTranslation:function(a,d,b){b||(b=u.create());var c=a[0],e=a[1],f=a[2],k=a[3],g=c+c,h=e+e,j=f+f;a=c*g;var m=c*h,c=c*j,n=e*h,e=e*j,f=f*j,g=k*g,h=k*h,k=k*j;b[0]=1-(n+f);b[1]=m+k;b[2]=c-h;b[3]=0;b[4]=m-k;b[5]=1-(a+f);b[6]=e+g;b[7]=0;b[8]=c+h;b[9]=e-g;b[10]=1-(a+n);b[11]=0;b[12]=d[0];b[13]=d[1];b[14]=d[2];b[15]=1;return b},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+", "+a[4]+", "+a[5]+", "+a[6]+", "+a[7]+", "+a[8]+", "+a[9]+", "+
-a[10]+", "+a[11]+", "+a[12]+", "+a[13]+", "+a[14]+", "+a[15]+"]"}},m={create:function(a){var d=new j(4);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2],d[3]=a[3]):d[0]=d[1]=d[2]=d[3]=0;return d},createFrom:function(a,d,b,c){var e=new j(4);e[0]=a;e[1]=d;e[2]=b;e[3]=c;return e},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];d[3]=a[3];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])&&1E-6>Math.abs(a[3]-d[3])},identity:function(a){a||(a=m.create());
-a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a}},E=m.identity();m.calculateW=function(a,d){var b=a[0],c=a[1],e=a[2];if(!d||a===d)return a[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e)),a;d[0]=b;d[1]=c;d[2]=e;d[3]=-Math.sqrt(Math.abs(1-b*b-c*c-e*e));return d};m.dot=function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3]};m.inverse=function(a,d){var b=a[0],c=a[1],e=a[2],f=a[3],b=(b=b*b+c*c+e*e+f*f)?1/b:0;if(!d||a===d)return a[0]*=-b,a[1]*=-b,a[2]*=-b,a[3]*=b,a;d[0]=-a[0]*b;d[1]=-a[1]*b;d[2]=-a[2]*b;d[3]=a[3]*b;
-return d};m.conjugate=function(a,d){if(!d||a===d)return a[0]*=-1,a[1]*=-1,a[2]*=-1,a;d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];d[3]=a[3];return d};m.length=function(a){var d=a[0],b=a[1],c=a[2];a=a[3];return Math.sqrt(d*d+b*b+c*c+a*a)};m.normalize=function(a,d){d||(d=a);var b=a[0],c=a[1],e=a[2],f=a[3],k=Math.sqrt(b*b+c*c+e*e+f*f);if(0===k)return d[0]=0,d[1]=0,d[2]=0,d[3]=0,d;k=1/k;d[0]=b*k;d[1]=c*k;d[2]=e*k;d[3]=f*k;return d};m.add=function(a,d,b){if(!b||a===b)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a[3]+=
-d[3],a;b[0]=a[0]+d[0];b[1]=a[1]+d[1];b[2]=a[2]+d[2];b[3]=a[3]+d[3];return b};m.multiply=function(a,d,b){b||(b=a);var c=a[0],e=a[1],f=a[2];a=a[3];var k=d[0],g=d[1],h=d[2];d=d[3];b[0]=c*d+a*k+e*h-f*g;b[1]=e*d+a*g+f*k-c*h;b[2]=f*d+a*h+c*g-e*k;b[3]=a*d-c*k-e*g-f*h;return b};m.multiplyVec3=function(a,d,b){b||(b=d);var c=d[0],e=d[1],f=d[2];d=a[0];var k=a[1],g=a[2];a=a[3];var h=a*c+k*f-g*e,j=a*e+g*c-d*f,m=a*f+d*e-k*c,c=-d*c-k*e-g*f;b[0]=h*a+c*-d+j*-g-m*-k;b[1]=j*a+c*-k+m*-d-h*-g;b[2]=m*a+c*-g+h*-k-j*-d;
-return b};m.scale=function(a,d,b){if(!b||a===b)return a[0]*=d,a[1]*=d,a[2]*=d,a[3]*=d,a;b[0]=a[0]*d;b[1]=a[1]*d;b[2]=a[2]*d;b[3]=a[3]*d;return b};m.toMat3=function(a,d){d||(d=y.create());var b=a[0],c=a[1],e=a[2],f=a[3],k=b+b,g=c+c,h=e+e,j=b*k,m=b*g,b=b*h,n=c*g,c=c*h,e=e*h,k=f*k,g=f*g,f=f*h;d[0]=1-(n+e);d[1]=m+f;d[2]=b-g;d[3]=m-f;d[4]=1-(j+e);d[5]=c+k;d[6]=b+g;d[7]=c-k;d[8]=1-(j+n);return d};m.toMat4=function(a,d){d||(d=u.create());var b=a[0],c=a[1],e=a[2],f=a[3],g=b+b,h=c+c,j=e+e,m=b*g,n=b*h,b=b*
-j,p=c*h,c=c*j,e=e*j,g=f*g,h=f*h,f=f*j;d[0]=1-(p+e);d[1]=n+f;d[2]=b-h;d[3]=0;d[4]=n-f;d[5]=1-(m+e);d[6]=c+g;d[7]=0;d[8]=b+h;d[9]=c-g;d[10]=1-(m+p);d[11]=0;d[12]=0;d[13]=0;d[14]=0;d[15]=1;return d};m.slerp=function(a,d,b,c){c||(c=a);var e=a[0]*d[0]+a[1]*d[1]+a[2]*d[2]+a[3]*d[3],f,g;if(1<=Math.abs(e))return c!==a&&(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]),c;f=Math.acos(e);g=Math.sqrt(1-e*e);if(0.0010>Math.abs(g))return c[0]=0.5*a[0]+0.5*d[0],c[1]=0.5*a[1]+0.5*d[1],c[2]=0.5*a[2]+0.5*d[2],c[3]=0.5*a[3]+
-0.5*d[3],c;e=Math.sin((1-b)*f)/g;b=Math.sin(b*f)/g;c[0]=a[0]*e+d[0]*b;c[1]=a[1]*e+d[1]*b;c[2]=a[2]*e+d[2]*b;c[3]=a[3]*e+d[3]*b;return c};m.fromRotationMatrix=function(a,d){d||(d=m.create());var b=a[0]+a[4]+a[8],c;if(0a[0]&&(b=1);a[8]>a[3*b+b]&&(b=2);var e=c[b],f=c[e];c=Math.sqrt(a[3*b+b]-a[3*e+e]-a[3*f+f]+1);d[b]=0.5*c;c=
-0.5/c;d[3]=(a[3*f+e]-a[3*e+f])*c;d[e]=(a[3*e+b]+a[3*b+e])*c;d[f]=(a[3*f+b]+a[3*b+f])*c}return d};y.toQuat4=m.fromRotationMatrix;var B=y.create();m.fromAxes=function(a,b,c,e){B[0]=b[0];B[3]=b[1];B[6]=b[2];B[1]=c[0];B[4]=c[1];B[7]=c[2];B[2]=a[0];B[5]=a[1];B[8]=a[2];return m.fromRotationMatrix(B,e)};m.identity=function(a){a||(a=m.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};m.fromAngleAxis=function(a,b,c){c||(c=m.create());a*=0.5;var e=Math.sin(a);c[3]=Math.cos(a);c[0]=e*b[0];c[1]=e*b[1];c[2]=e*b[2];
-return c};m.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);
-b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0
-Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=K.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b){var c=a[1];a[1]=a[2];a[2]=c;return a}b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],e=a[1],f=a[2],g=a[3],h=c*g-f*e;if(!h)return null;h=1/h;b[0]=g*h;b[1]=-e*h;b[2]=-f*h;b[3]=c*h;return b},multiply:function(a,
-b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];c[0]=e*b[0]+f*b[2];c[1]=e*b[1]+f*b[3];c[2]=g*b[0]+a*b[2];c[3]=g*b[1]+a*b[3];return c},rotate:function(a,b,c){c||(c=a);var e=a[0],f=a[1],g=a[2];a=a[3];var h=Math.sin(b);b=Math.cos(b);c[0]=e*b+f*h;c[1]=e*-h+f*b;c[2]=g*b+a*h;c[3]=g*-h+a*b;return c},multiplyVec2:function(a,b,c){c||(c=b);var e=b[0];b=b[1];c[0]=e*a[0]+b*a[1];c[1]=e*a[2]+b*a[3];return c},scale:function(a,b,c){c||(c=a);var e=a[1],f=a[2],g=a[3],h=b[0];b=b[1];c[0]=a[0]*h;c[1]=e*b;c[2]=f*h;c[3]=
-g*b;return c},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},M={create:function(a){var b=new j(4);a?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3]):(b[0]=0,b[1]=0,b[2]=0,b[3]=0);return b},createFrom:function(a,b,c,e){var f=new j(4);f[0]=a;f[1]=b;f[2]=c;f[3]=e;return f},add:function(a,b,c){c||(c=b);c[0]=a[0]+b[0];c[1]=a[1]+b[1];c[2]=a[2]+b[2];c[3]=a[3]+b[3];return c},subtract:function(a,b,c){c||(c=b);c[0]=a[0]-b[0];c[1]=a[1]-b[1];c[2]=a[2]-b[2];c[3]=a[3]-b[3];return c},multiply:function(a,
-b,c){c||(c=b);c[0]=a[0]*b[0];c[1]=a[1]*b[1];c[2]=a[2]*b[2];c[3]=a[3]*b[3];return c},divide:function(a,b,c){c||(c=b);c[0]=a[0]/b[0];c[1]=a[1]/b[1];c[2]=a[2]/b[2];c[3]=a[3]/b[3];return c},scale:function(a,b,c){c||(c=a);c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;c[3]=a[3]*b;return c},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||
-(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return Math.sqrt(b*b+c*c+e*e+a*a)},squaredLength:function(a){var b=a[0],c=a[1],e=a[2];a=a[3];return b*b+c*c+e*e+a*a},lerp:function(a,b,c,e){e||(e=a);e[0]=a[0]+c*(b[0]-a[0]);e[1]=a[1]+c*(b[1]-a[1]);e[2]=a[2]+c*(b[2]-a[2]);e[3]=a[3]+c*(b[3]-a[3]);return e},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}};b&&(b.glMatrixArrayType=j,b.MatrixArray=j,b.setMatrixArrayType=c,b.determineMatrixArrayType=
-f,b.glMath=e,b.vec2=L,b.vec3=n,b.vec4=M,b.mat2=K,b.mat3=y,b.mat4=u,b.quat4=m);return{glMatrixArrayType:j,MatrixArray:j,setMatrixArrayType:c,determineMatrixArrayType:f,glMath:e,vec2:L,vec3:n,vec4:M,mat2:K,mat3:y,mat4:u,quat4:m}});PIXI.shaderFragmentSrc=["precision mediump float;","varying vec2 vTextureCoord;","varying float vColor;","uniform sampler2D uSampler;","void main(void) {","gl_FragColor \x3d texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));","gl_FragColor \x3d gl_FragColor * vColor;","}"];
-PIXI.shaderVertexSrc=["attribute vec2 aVertexPosition;","attribute vec2 aTextureCoord;","attribute float aColor;","uniform mat4 uMVMatrix;","varying vec2 vTextureCoord;","varying float vColor;","void main(void) {","gl_Position \x3d uMVMatrix * vec4(aVertexPosition, 1.0, 1.0);","vTextureCoord \x3d aTextureCoord;","vColor \x3d aColor;","}"];
-PIXI.CompileVertexShader=function(b,c){for(var f="",e=0;eb.length)){var c=this.uvs,f=this.indices,e=this.colors;this.count-=0.2;c[0]=0;c[1]=1;c[2]=0;c[3]=1;e[0]=1;e[1]=1;f[0]=0;f[1]=1;for(var b=b.length,g=1;gb.length)){var c=this.verticies,f=b[0],e,g=e=0,h=b[0];this.count-=0.2;c[0]=h.x+e;c[1]=h.y+g;c[2]=h.x-e;c[3]=h.y-g;for(var j=b.length,n=1;n
+
+
+ pixi.js example 2 loading a sprite sheet
+
+
+
+
+
+
+
+
diff --git a/examples/example 2 - SpriteSheet/pixi.js b/examples/example 2 - SpriteSheet/pixi.js
new file mode 100644
index 0000000..8354d7f
--- /dev/null
+++ b/examples/example 2 - SpriteSheet/pixi.js
@@ -0,0 +1,112 @@
+var PIXI=PIXI||{};PIXI.Point=function(b,c){this.x=b?b:0;this.y=c?c:0};PIXI.Point.clone=function(){return new PIXI.Point(this.x,this.y)};PIXI.Point.constructor=PIXI.Point;PIXI.Rectangle=function(b,c,f,e){this.x=b?b:0;this.y=c?c:0;this.width=f?f:0;this.height=e?e:0};PIXI.Rectangle.clone=function(){return new PIXI.Rectangle(this.x,this.y,this.width,this.height)};PIXI.Rectangle.constructor=PIXI.Rectangle;window.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(b){window.setTimeout(b,1E3/60)}}();function HEXtoRGB(b){return[(b>>16&255)/255,(b>>8&255)/255,(b&255)/255]}
+"function"!=typeof Function.prototype.bind&&(Function.prototype.bind=function(){var b=Array.prototype.slice;return function(c){function f(){var h=g.concat(b.call(arguments));e.apply(this instanceof f?this:c,h)}var e=this,g=b.call(arguments,1);if("function"!=typeof e)throw new TypeError;f.prototype=function j(b){b&&(j.prototype=b);if(!(this instanceof j))return new j}(e.prototype);return f}}());
+var AjaxRequest=function(){var b=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];if(window.ActiveXObject)for(var c=0;c>1);var d=g[0];return d*(1.5-0.5*a*d*d)}}else e.invsqrt=function(a){return 1/Math.sqrt(a)};
+var j=null;f();var n={create:function(a){var d=new j(3);a?(d[0]=a[0],d[1]=a[1],d[2]=a[2]):d[0]=d[1]=d[2]=0;return d},createFrom:function(a,d,l){var b=new j(3);b[0]=a;b[1]=d;b[2]=l;return b},set:function(a,d){d[0]=a[0];d[1]=a[1];d[2]=a[2];return d},equal:function(a,d){return a===d||1E-6>Math.abs(a[0]-d[0])&&1E-6>Math.abs(a[1]-d[1])&&1E-6>Math.abs(a[2]-d[2])},add:function(a,d,l){if(!l||a===l)return a[0]+=d[0],a[1]+=d[1],a[2]+=d[2],a;l[0]=a[0]+d[0];l[1]=a[1]+d[1];l[2]=a[2]+d[2];return l},subtract:function(a,
+d,l){if(!l||a===l)return a[0]-=d[0],a[1]-=d[1],a[2]-=d[2],a;l[0]=a[0]-d[0];l[1]=a[1]-d[1];l[2]=a[2]-d[2];return l},multiply:function(a,d,l){if(!l||a===l)return a[0]*=d[0],a[1]*=d[1],a[2]*=d[2],a;l[0]=a[0]*d[0];l[1]=a[1]*d[1];l[2]=a[2]*d[2];return l},negate:function(a,d){d||(d=a);d[0]=-a[0];d[1]=-a[1];d[2]=-a[2];return d},scale:function(a,d,l){if(!l||a===l)return a[0]*=d,a[1]*=d,a[2]*=d,a;l[0]=a[0]*d;l[1]=a[1]*d;l[2]=a[2]*d;return l},normalize:function(a,d){d||(d=a);var l=a[0],b=a[1],c=a[2],e=Math.sqrt(l*
+l+b*b+c*c);if(!e)return d[0]=0,d[1]=0,d[2]=0,d;if(1===e)return d[0]=l,d[1]=b,d[2]=c,d;e=1/e;d[0]=l*e;d[1]=b*e;d[2]=c*e;return d},cross:function(a,d,l){l||(l=a);var b=a[0],c=a[1];a=a[2];var e=d[0],k=d[1];d=d[2];l[0]=c*d-a*k;l[1]=a*e-b*d;l[2]=b*k-c*e;return l},length:function(a){var d=a[0],l=a[1];a=a[2];return Math.sqrt(d*d+l*l+a*a)},squaredLength:function(a){var d=a[0],l=a[1];a=a[2];return d*d+l*l+a*a},dot:function(a,d){return a[0]*d[0]+a[1]*d[1]+a[2]*d[2]},direction:function(a,d,l){l||(l=a);var b=
+a[0]-d[0],c=a[1]-d[1];a=a[2]-d[2];d=Math.sqrt(b*b+c*c+a*a);if(!d)return l[0]=0,l[1]=0,l[2]=0,l;d=1/d;l[0]=b*d;l[1]=c*d;l[2]=a*d;return l},lerp:function(a,d,l,b){b||(b=a);b[0]=a[0]+l*(d[0]-a[0]);b[1]=a[1]+l*(d[1]-a[1]);b[2]=a[2]+l*(d[2]-a[2]);return b},dist:function(a,d){var l=d[0]-a[0],b=d[1]-a[1],c=d[2]-a[2];return Math.sqrt(l*l+b*b+c*c)}},q=null,p=new j(4);n.unproject=function(a,d,l,b,c){c||(c=a);q||(q=u.create());var e=q;p[0]=2*(a[0]-b[0])/b[2]-1;p[1]=2*(a[1]-b[1])/b[3]-1;p[2]=2*a[2]-1;p[3]=1;
+u.multiply(l,d,e);if(!u.inverse(e))return null;u.multiplyVec4(e,p);if(0===p[3])return null;c[0]=p[0]/p[3];c[1]=p[1]/p[3];c[2]=p[2]/p[3];return c};var C=n.createFrom(1,0,0),D=n.createFrom(0,1,0),s=n.createFrom(0,0,1),x=n.create();n.rotationTo=function(a,d,l){l||(l=m.create());var b=n.dot(a,d);if(1<=b)m.set(E,l);else if(-0.999999>b)n.cross(C,a,x),1E-6>n.length(x)&&n.cross(D,a,x),1E-6>n.length(x)&&n.cross(s,a,x),n.normalize(x),m.fromAngleAxis(Math.PI,x,l);else{var b=Math.sqrt(2*(1+b)),c=1/b;n.cross(a,
+d,x);l[0]=x[0]*c;l[1]=x[1]*c;l[2]=x[2]*c;l[3]=0.5*b;m.normalize(l)}1