diff --git a/build/Three.js b/build/Three.js index 6e761e61..77871f2d 100644 --- a/build/Three.js +++ b/build/Three.js @@ -1,204 +1,213 @@ // Three.js r46dev - http://github.com/mrdoob/three.js -var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array;THREE.Color=function(b){b!==void 0&&this.setHex(b);return this}; -THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(b){this.r=b.r;this.g=b.g;this.b=b.b;return this},setRGB:function(b,e,c){this.r=b;this.g=e;this.b=c;return this},setHSV:function(b,e,c){var f,m,h;if(c==0)this.r=this.g=this.b=0;else switch(f=Math.floor(b*6),m=b*6-f,b=c*(1-e),h=c*(1-e*m),e=c*(1-e*(1-m)),f){case 1:this.r=h;this.g=c;this.b=b;break;case 2:this.r=b;this.g=c;this.b=e;break;case 3:this.r=b;this.g=h;this.b=c;break;case 4:this.r=e;this.g=b;this.b=c;break;case 5:this.r= -c;this.g=b;this.b=h;break;case 6:case 0:this.r=c,this.g=e,this.b=b}return this},setHex:function(b){b=Math.floor(b);this.r=(b>>16&255)/255;this.g=(b>>8&255)/255;this.b=(b&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}}; -THREE.Vector2=function(b,e){this.x=b||0;this.y=e||0}; -THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(b,e){this.x=b;this.y=e;return this},copy:function(b){this.x=b.x;this.y=b.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(b,e){this.x=b.x+e.x;this.y=b.y+e.y;return this},addSelf:function(b){this.x+=b.x;this.y+=b.y;return this},sub:function(b,e){this.x=b.x-e.x;this.y=b.y-e.y;return this},subSelf:function(b){this.x-=b.x;this.y-=b.y;return this},multiplyScalar:function(b){this.x*=b;this.y*=b;return this}, -divideScalar:function(b){b?(this.x/=b,this.y/=b):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(b){return Math.sqrt(this.distanceToSquared(b))},distanceToSquared:function(b){var e=this.x-b.x,b=this.y-b.y;return e*e+b*b},setLength:function(b){return this.normalize().multiplyScalar(b)}, -equals:function(b){return b.x==this.x&&b.y==this.y}};THREE.Vector3=function(b,e,c){this.x=b||0;this.y=e||0;this.z=c||0}; -THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(b,e,c){this.x=b;this.y=e;this.z=c;return this},setX:function(b){this.x=b;return this},setY:function(b){this.y=b;return this},setZ:function(b){this.z=b;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(b,e){this.x=b.x+e.x;this.y=b.y+e.y;this.z=b.z+e.z;return this},addSelf:function(b){this.x+=b.x;this.y+=b.y;this.z+=b.z;return this}, -addScalar:function(b){this.x+=b;this.y+=b;this.z+=b;return this},sub:function(b,e){this.x=b.x-e.x;this.y=b.y-e.y;this.z=b.z-e.z;return this},subSelf:function(b){this.x-=b.x;this.y-=b.y;this.z-=b.z;return this},multiply:function(b,e){this.x=b.x*e.x;this.y=b.y*e.y;this.z=b.z*e.z;return this},multiplySelf:function(b){this.x*=b.x;this.y*=b.y;this.z*=b.z;return this},multiplyScalar:function(b){this.x*=b;this.y*=b;this.z*=b;return this},divideSelf:function(b){this.x/=b.x;this.y/=b.y;this.z/=b.z;return this}, -divideScalar:function(b){b?(this.x/=b,this.y/=b,this.z/=b):this.set(0,0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y+this.z*b.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(b){return this.normalize().multiplyScalar(b)}, -cross:function(b,e){this.x=b.y*e.z-b.z*e.y;this.y=b.z*e.x-b.x*e.z;this.z=b.x*e.y-b.y*e.x;return this},crossSelf:function(b){return this.set(this.y*b.z-this.z*b.y,this.z*b.x-this.x*b.z,this.x*b.y-this.y*b.x)},distanceTo:function(b){return Math.sqrt(this.distanceToSquared(b))},distanceToSquared:function(b){return(new THREE.Vector3).sub(this,b).lengthSq()},setPositionFromMatrix:function(b){this.x=b.n14;this.y=b.n24;this.z=b.n34},setRotationFromMatrix:function(b){var e=Math.cos(this.y);this.y=Math.asin(b.n13); -Math.abs(e)>1.0E-5?(this.x=Math.atan2(-b.n23/e,b.n33/e),this.z=Math.atan2(-b.n12/e,b.n11/e)):(this.x=0,this.z=Math.atan2(b.n21,b.n22))},isZero:function(){return this.lengthSq()<1.0E-4}};THREE.Vector4=function(b,e,c,f){this.x=b||0;this.y=e||0;this.z=c||0;this.w=f!==void 0?f:1}; -THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(b,e,c,f){this.x=b;this.y=e;this.z=c;this.w=f;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;this.w=b.w!==void 0?b.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(b,e){this.x=b.x+e.x;this.y=b.y+e.y;this.z=b.z+e.z;this.w=b.w+e.w;return this},addSelf:function(b){this.x+=b.x;this.y+=b.y;this.z+=b.z;this.w+=b.w;return this},sub:function(b,e){this.x=b.x-e.x;this.y=b.y-e.y;this.z=b.z- -e.z;this.w=b.w-e.w;return this},subSelf:function(b){this.x-=b.x;this.y-=b.y;this.z-=b.z;this.w-=b.w;return this},multiplyScalar:function(b){this.x*=b;this.y*=b;this.z*=b;this.w*=b;return this},divideScalar:function(b){b?(this.x/=b,this.y/=b,this.z/=b,this.w/=b):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y+this.z*b.z+this.w*b.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, -normalize:function(){return this.divideScalar(this.length())},setLength:function(b){return this.normalize().multiplyScalar(b)},lerpSelf:function(b,e){this.x+=(b.x-this.x)*e;this.y+=(b.y-this.y)*e;this.z+=(b.z-this.z)*e;this.w+=(b.w-this.w)*e;return this}};THREE.Ray=function(b,e){this.origin=b||new THREE.Vector3;this.direction=e||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(b){return this.intersectObjects(b.children)},intersectObjects:function(b){var e,c,f=[];e=0;for(c=b.length;e0&&b>0&&h+b<1}for(var f,m=[],h=0,k=b.children.length;hb.scale.x)return[];f={distance:h,point:b.position,face:null,object:b};m.push(f)}else if(b instanceof THREE.Mesh){h=e(this.origin, -this.direction,b.matrixWorld.getPosition());if(h==null||h>b.geometry.boundingSphere.radius*Math.max(b.scale.x,Math.max(b.scale.y,b.scale.z)))return m;var n,p,v,u,t,x,w,A,y=b.geometry,z=y.vertices;b.matrixRotationWorld.extractRotation(b.matrixWorld);h=0;for(k=y.faces.length;h0:x<0)))if(x=t.dot((new THREE.Vector3).sub(n,w))/x,w=w.addSelf(A.multiplyScalar(x)),f instanceof THREE.Face3)c(w,n,p,v)&&(f={distance:this.origin.distanceTo(w),point:w,face:f,object:b},m.push(f));else if(f instanceof THREE.Face4&&(c(w,n,p,u)||c(w,p,v,u)))f={distance:this.origin.distanceTo(w), -point:w,face:f,object:b},m.push(f)}return m}}; -THREE.Rectangle=function(){function b(){h=f-e;k=m-c}var e,c,f,m,h,k,n=!0;this.getX=function(){return e};this.getY=function(){return c};this.getWidth=function(){return h};this.getHeight=function(){return k};this.getLeft=function(){return e};this.getTop=function(){return c};this.getRight=function(){return f};this.getBottom=function(){return m};this.set=function(h,k,u,t){n=!1;e=h;c=k;f=u;m=t;b()};this.addPoint=function(h,k){n?(n=!1,e=h,c=k,f=h,m=k):(e=eh?f:h,m=m>k?m:k);b()};this.add3Points= -function(h,k,u,t,x,w){n?(n=!1,e=hu?h>x?h:x:u>x?u:x,m=k>t?k>w?k:w:t>w?t:w):(e=hu?h>x?h>f?h:f:x>f?x:f:u>x?u>f?u:f:x>f?x:f,m=k>t?k>w?k>m?k:m:w>m?w:m:t>w?t>m?t:m:w>m?w:m);b()};this.addRectangle=function(h){n?(n=!1,e=h.getLeft(),c=h.getTop(),f=h.getRight(),m=h.getBottom()):(e=eh.getRight()?f:h.getRight(),m=m> -h.getBottom()?m:h.getBottom());b()};this.inflate=function(h){e-=h;c-=h;f+=h;m+=h;b()};this.minSelf=function(h){e=e>h.getLeft()?e:h.getLeft();c=c>h.getTop()?c:h.getTop();f=f=0&&Math.min(m,b.getBottom())-Math.max(c,b.getTop())>=0};this.empty=function(){n=!0;m=f=c=e=0;b()};this.isEmpty=function(){return n}};THREE.Matrix3=function(){this.m=[]}; -THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var b,e=this.m;b=e[1];e[1]=e[3];e[3]=b;b=e[2];e[2]=e[6];e[6]=b;b=e[5];e[5]=e[7];e[7]=b;return this},transposeIntoArray:function(b){var e=this.m;b[0]=e[0];b[1]=e[3];b[2]=e[6];b[3]=e[1];b[4]=e[4];b[5]=e[7];b[6]=e[2];b[7]=e[5];b[8]=e[8];return this}}; -THREE.Matrix4=function(b,e,c,f,m,h,k,n,p,v,u,t,x,w,A,y){this.set(b!==void 0?b:1,e||0,c||0,f||0,m||0,h!==void 0?h:1,k||0,n||0,p||0,v||0,u!==void 0?u:1,t||0,x||0,w||0,A||0,y!==void 0?y:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(b,e,c,f,m,h,k,n,p,v,u,t,x,w,A,y){this.n11=b;this.n12=e;this.n13=c;this.n14=f;this.n21=m;this.n22=h;this.n23=k;this.n24=n;this.n31=p;this.n32=v;this.n33=u;this.n34=t;this.n41=x;this.n42=w;this.n43=A;this.n44=y;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(b){this.set(b.n11,b.n12,b.n13,b.n14,b.n21,b.n22,b.n23,b.n24,b.n31,b.n32,b.n33,b.n34,b.n41,b.n42,b.n43,b.n44);return this},lookAt:function(b, -e,c){var f=THREE.Matrix4.__v1,m=THREE.Matrix4.__v2,h=THREE.Matrix4.__v3;h.sub(b,e).normalize();if(h.length()===0)h.z=1;f.cross(c,h).normalize();f.length()===0&&(h.x+=1.0E-4,f.cross(c,h).normalize());m.cross(h,f).normalize();this.n11=f.x;this.n12=m.x;this.n13=h.x;this.n21=f.y;this.n22=m.y;this.n23=h.y;this.n31=f.z;this.n32=m.z;this.n33=h.z;return this},multiply:function(b,e){var c=b.n11,f=b.n12,m=b.n13,h=b.n14,k=b.n21,n=b.n22,p=b.n23,v=b.n24,u=b.n31,t=b.n32,x=b.n33,w=b.n34,A=b.n41,y=b.n42,z=b.n43, -F=b.n44,D=e.n11,B=e.n12,G=e.n13,O=e.n14,E=e.n21,P=e.n22,U=e.n23,L=e.n24,R=e.n31,I=e.n32,K=e.n33,aa=e.n34,Z=e.n41,S=e.n42,M=e.n43,o=e.n44;this.n11=c*D+f*E+m*R+h*Z;this.n12=c*B+f*P+m*I+h*S;this.n13=c*G+f*U+m*K+h*M;this.n14=c*O+f*L+m*aa+h*o;this.n21=k*D+n*E+p*R+v*Z;this.n22=k*B+n*P+p*I+v*S;this.n23=k*G+n*U+p*K+v*M;this.n24=k*O+n*L+p*aa+v*o;this.n31=u*D+t*E+x*R+w*Z;this.n32=u*B+t*P+x*I+w*S;this.n33=u*G+t*U+x*K+w*M;this.n34=u*O+t*L+x*aa+w*o;this.n41=A*D+y*E+z*R+F*Z;this.n42=A*B+y*P+z*I+F*S;this.n43=A* -G+y*U+z*K+F*M;this.n44=A*O+y*L+z*aa+F*o;return this},multiplySelf:function(b){return this.multiply(this,b)},multiplyToArray:function(b,e,c){this.multiply(b,e);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(b){this.n11*=b;this.n12*=b;this.n13*=b;this.n14*=b;this.n21*=b;this.n22*=b; -this.n23*=b;this.n24*=b;this.n31*=b;this.n32*=b;this.n33*=b;this.n34*=b;this.n41*=b;this.n42*=b;this.n43*=b;this.n44*=b;return this},multiplyVector3:function(b){var e=b.x,c=b.y,f=b.z,m=1/(this.n41*e+this.n42*c+this.n43*f+this.n44);b.x=(this.n11*e+this.n12*c+this.n13*f+this.n14)*m;b.y=(this.n21*e+this.n22*c+this.n23*f+this.n24)*m;b.z=(this.n31*e+this.n32*c+this.n33*f+this.n34)*m;return b},multiplyVector4:function(b){var e=b.x,c=b.y,f=b.z,m=b.w;b.x=this.n11*e+this.n12*c+this.n13*f+this.n14*m;b.y=this.n21* -e+this.n22*c+this.n23*f+this.n24*m;b.z=this.n31*e+this.n32*c+this.n33*f+this.n34*m;b.w=this.n41*e+this.n42*c+this.n43*f+this.n44*m;return b},rotateAxis:function(b){var e=b.x,c=b.y,f=b.z;b.x=e*this.n11+c*this.n12+f*this.n13;b.y=e*this.n21+c*this.n22+f*this.n23;b.z=e*this.n31+c*this.n32+f*this.n33;b.normalize();return b},crossVector:function(b){var e=new THREE.Vector4;e.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;e.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24*b.w;e.z=this.n31*b.x+this.n32* -b.y+this.n33*b.z+this.n34*b.w;e.w=b.w?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return e},determinant:function(){var b=this.n11,e=this.n12,c=this.n13,f=this.n14,m=this.n21,h=this.n22,k=this.n23,n=this.n24,p=this.n31,v=this.n32,u=this.n33,t=this.n34,x=this.n41,w=this.n42,A=this.n43,y=this.n44;return f*k*v*x-c*n*v*x-f*h*u*x+e*n*u*x+c*h*t*x-e*k*t*x-f*k*p*w+c*n*p*w+f*m*u*w-b*n*u*w-c*m*t*w+b*k*t*w+f*h*p*A-e*n*p*A-f*m*v*A+b*n*v*A+e*m*t*A-b*h*t*A-c*h*p*y+e*k*p*y+c*m*v*y-b*k*v*y-e*m*u*y+b*h*u* -y},transpose:function(){var b;b=this.n21;this.n21=this.n12;this.n12=b;b=this.n31;this.n31=this.n13;this.n13=b;b=this.n32;this.n32=this.n23;this.n23=b;b=this.n41;this.n41=this.n14;this.n14=b;b=this.n42;this.n42=this.n24;this.n24=b;b=this.n43;this.n43=this.n34;this.n43=b;return this},clone:function(){var b=new THREE.Matrix4;b.n11=this.n11;b.n12=this.n12;b.n13=this.n13;b.n14=this.n14;b.n21=this.n21;b.n22=this.n22;b.n23=this.n23;b.n24=this.n24;b.n31=this.n31;b.n32=this.n32;b.n33=this.n33;b.n34=this.n34; -b.n41=this.n41;b.n42=this.n42;b.n43=this.n43;b.n44=this.n44;return b},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(b){b[0]=this.n11; -b[1]=this.n21;b[2]=this.n31;b[3]=this.n41;b[4]=this.n12;b[5]=this.n22;b[6]=this.n32;b[7]=this.n42;b[8]=this.n13;b[9]=this.n23;b[10]=this.n33;b[11]=this.n43;b[12]=this.n14;b[13]=this.n24;b[14]=this.n34;b[15]=this.n44;return b},flattenToArrayOffset:function(b,e){b[e]=this.n11;b[e+1]=this.n21;b[e+2]=this.n31;b[e+3]=this.n41;b[e+4]=this.n12;b[e+5]=this.n22;b[e+6]=this.n32;b[e+7]=this.n42;b[e+8]=this.n13;b[e+9]=this.n23;b[e+10]=this.n33;b[e+11]=this.n43;b[e+12]=this.n14;b[e+13]=this.n24;b[e+14]=this.n34; -b[e+15]=this.n44;return b},setTranslation:function(b,e,c){this.set(1,0,0,b,0,1,0,e,0,0,1,c,0,0,0,1);return this},setScale:function(b,e,c){this.set(b,0,0,0,0,e,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(b){var e=Math.cos(b),b=Math.sin(b);this.set(1,0,0,0,0,e,-b,0,0,b,e,0,0,0,0,1);return this},setRotationY:function(b){var e=Math.cos(b),b=Math.sin(b);this.set(e,0,b,0,0,1,0,0,-b,0,e,0,0,0,0,1);return this},setRotationZ:function(b){var e=Math.cos(b),b=Math.sin(b);this.set(e,-b,0,0,b,e,0,0, -0,0,1,0,0,0,0,1);return this},setRotationAxis:function(b,e){var c=Math.cos(e),f=Math.sin(e),m=1-c,h=b.x,k=b.y,n=b.z,p=m*h,v=m*k;this.set(p*h+c,p*k-f*n,p*n+f*k,0,p*k+f*n,v*k+c,v*n-f*h,0,p*n-f*k,v*n+f*h,m*n*n+c,0,0,0,0,1);return this},setPosition:function(b){this.n14=b.x;this.n24=b.y;this.n34=b.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, -this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(b){var e=b.n11,c=b.n12,f=b.n13,m=b.n14,h=b.n21,k=b.n22,n=b.n23,p=b.n24,v=b.n31,u=b.n32,t=b.n33,x=b.n34,w=b.n41,A=b.n42,y=b.n43,z=b.n44;this.n11=n*x*A-p*t*A+p*u*y-k*x*y-n*u*z+k*t*z;this.n12=m*t*A-f*x*A-m*u*y+c*x*y+f*u*z-c*t*z;this.n13=f*p*A-m*n*A+m*k*y-c*p*y-f*k*z+c*n*z;this.n14=m*n*u-f*p*u-m*k*t+c*p*t+f*k*x-c*n*x;this.n21=p*t*w-n*x*w-p*v*y+h*x*y+n*v*z-h*t*z;this.n22=f*x*w-m*t*w+ -m*v*y-e*x*y-f*v*z+e*t*z;this.n23=m*n*w-f*p*w-m*h*y+e*p*y+f*h*z-e*n*z;this.n24=f*p*v-m*n*v+m*h*t-e*p*t-f*h*x+e*n*x;this.n31=k*x*w-p*u*w+p*v*A-h*x*A-k*v*z+h*u*z;this.n32=m*u*w-c*x*w-m*v*A+e*x*A+c*v*z-e*u*z;this.n33=f*p*w-m*k*w+m*h*A-e*p*A-c*h*z+e*k*z;this.n34=m*k*v-c*p*v-m*h*u+e*p*u+c*h*x-e*k*x;this.n41=n*u*w-k*t*w-n*v*A+h*t*A+k*v*y-h*u*y;this.n42=c*t*w-f*u*w+f*v*A-e*t*A-c*v*y+e*u*y;this.n43=f*k*w-c*n*w-f*h*A+e*n*A+c*h*y-e*k*y;this.n44=c*n*v-f*k*v+f*h*u-e*n*u-c*h*t+e*k*t;this.multiplyScalar(1/b.determinant()); -return this},setRotationFromEuler:function(b,e){var c=b.x,f=b.y,m=b.z,h=Math.cos(c),c=Math.sin(c),k=Math.cos(f),f=Math.sin(f),n=Math.cos(m),m=Math.sin(m);switch(e){case "YXZ":var p=k*n,v=k*m,u=f*n,t=f*m;this.n11=p+t*c;this.n12=u*c-v;this.n13=h*f;this.n21=h*m;this.n22=h*n;this.n23=-c;this.n31=v*c-u;this.n32=t+p*c;this.n33=h*k;break;case "ZXY":p=k*n;v=k*m;u=f*n;t=f*m;this.n11=p-t*c;this.n12=-h*m;this.n13=u+v*c;this.n21=v+u*c;this.n22=h*n;this.n23=t-p*c;this.n31=-h*f;this.n32=c;this.n33=h*k;break;case "ZYX":p= -h*n;v=h*m;u=c*n;t=c*m;this.n11=k*n;this.n12=u*f-v;this.n13=p*f+t;this.n21=k*m;this.n22=t*f+p;this.n23=v*f-u;this.n31=-f;this.n32=c*k;this.n33=h*k;break;case "YZX":p=h*k;v=h*f;u=c*k;t=c*f;this.n11=k*n;this.n12=t-p*m;this.n13=u*m+v;this.n21=m;this.n22=h*n;this.n23=-c*n;this.n31=-f*n;this.n32=v*m+u;this.n33=p-t*m;break;case "XZY":p=h*k;v=h*f;u=c*k;t=c*f;this.n11=k*n;this.n12=-m;this.n13=f*n;this.n21=p*m+t;this.n22=h*n;this.n23=v*m-u;this.n31=u*m-v;this.n32=c*n;this.n33=t*m+p;break;default:p=h*n,v=h* -m,u=c*n,t=c*m,this.n11=k*n,this.n12=-k*m,this.n13=f,this.n21=v+u*f,this.n22=p-t*f,this.n23=-c*k,this.n31=t-p*f,this.n32=u+v*f,this.n33=h*k}return this},setRotationFromQuaternion:function(b){var e=b.x,c=b.y,f=b.z,m=b.w,h=e+e,k=c+c,n=f+f,b=e*h,p=e*k;e*=n;var v=c*k;c*=n;f*=n;h*=m;k*=m;m*=n;this.n11=1-(v+f);this.n12=p-m;this.n13=e+k;this.n21=p+m;this.n22=1-(b+f);this.n23=c-h;this.n31=e-k;this.n32=c+h;this.n33=1-(b+v);return this},scale:function(b){var e=b.x,c=b.y,b=b.z;this.n11*=e;this.n12*=c;this.n13*= -b;this.n21*=e;this.n22*=c;this.n23*=b;this.n31*=e;this.n32*=c;this.n33*=b;this.n41*=e;this.n42*=c;this.n43*=b;return this},compose:function(b,e,c){var f=THREE.Matrix4.__m1,m=THREE.Matrix4.__m2;f.identity();f.setRotationFromQuaternion(e);m.setScale(c.x,c.y,c.z);this.multiply(f,m);this.n14=b.x;this.n24=b.y;this.n34=b.z;return this},decompose:function(b,e,c){var f=THREE.Matrix4.__v1,m=THREE.Matrix4.__v2,h=THREE.Matrix4.__v3;f.set(this.n11,this.n21,this.n31);m.set(this.n12,this.n22,this.n32);h.set(this.n13, -this.n23,this.n33);b=b instanceof THREE.Vector3?b:new THREE.Vector3;e=e instanceof THREE.Quaternion?e:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=f.length();c.y=m.length();c.z=h.length();b.x=this.n14;b.y=this.n24;b.z=this.n34;f=THREE.Matrix4.__m1;f.copy(this);f.n11/=c.x;f.n21/=c.x;f.n31/=c.x;f.n12/=c.y;f.n22/=c.y;f.n32/=c.y;f.n13/=c.z;f.n23/=c.z;f.n33/=c.z;e.setFromRotationMatrix(f);return[b,e,c]},extractPosition:function(b){this.n14=b.n14;this.n24=b.n24;this.n34=b.n34; -return this},extractRotation:function(b){var e=THREE.Matrix4.__v1,c=1/e.set(b.n11,b.n21,b.n31).length(),f=1/e.set(b.n12,b.n22,b.n32).length(),e=1/e.set(b.n13,b.n23,b.n33).length();this.n11=b.n11*c;this.n21=b.n21*c;this.n31=b.n31*c;this.n12=b.n12*f;this.n22=b.n22*f;this.n32=b.n32*f;this.n13=b.n13*e;this.n23=b.n23*e;this.n33=b.n33*e;return this}}; -THREE.Matrix4.makeInvert3x3=function(b){var e=b.m33,c=e.m,f=b.n33*b.n22-b.n32*b.n23,m=-b.n33*b.n21+b.n31*b.n23,h=b.n32*b.n21-b.n31*b.n22,k=-b.n33*b.n12+b.n32*b.n13,n=b.n33*b.n11-b.n31*b.n13,p=-b.n32*b.n11+b.n31*b.n12,v=b.n23*b.n12-b.n22*b.n13,u=-b.n23*b.n11+b.n21*b.n13,t=b.n22*b.n11-b.n21*b.n12,b=b.n11*f+b.n21*k+b.n31*v;b==0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");b=1/b;c[0]=b*f;c[1]=b*m;c[2]=b*h;c[3]=b*k;c[4]=b*n;c[5]=b*p;c[6]=b*v;c[7]=b*u;c[8]=b*t;return e}; -THREE.Matrix4.makeFrustum=function(b,e,c,f,m,h){var k;k=new THREE.Matrix4;k.n11=2*m/(e-b);k.n12=0;k.n13=(e+b)/(e-b);k.n14=0;k.n21=0;k.n22=2*m/(f-c);k.n23=(f+c)/(f-c);k.n24=0;k.n31=0;k.n32=0;k.n33=-(h+m)/(h-m);k.n34=-2*h*m/(h-m);k.n41=0;k.n42=0;k.n43=-1;k.n44=0;return k};THREE.Matrix4.makePerspective=function(b,e,c,f){var m,b=c*Math.tan(b*Math.PI/360);m=-b;return THREE.Matrix4.makeFrustum(m*e,b*e,m,b,c,f)}; -THREE.Matrix4.makeOrtho=function(b,e,c,f,m,h){var k,n,p,v;k=new THREE.Matrix4;n=e-b;p=c-f;v=h-m;k.n11=2/n;k.n12=0;k.n13=0;k.n14=-((e+b)/n);k.n21=0;k.n22=2/p;k.n23=0;k.n24=-((c+f)/p);k.n31=0;k.n32=0;k.n33=-2/v;k.n34=-((h+m)/v);k.n41=0;k.n42=0;k.n43=0;k.n44=1;return k};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; +var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array;THREE.Clock=function(a){this.autoStart=a!==void 0?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1};THREE.Clock.prototype.start=function(){this.oldTime=this.startTime=Date.now();this.running=!0};THREE.Clock.prototype.stop=function(){this.getElapsedTime();this.running=!1};THREE.Clock.prototype.getElapsedTime=function(){this.elapsedTime+=this.getDelta();return this.elapsedTime}; +THREE.Clock.prototype.getDelta=function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=Date.now(),a=0.0010*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a};THREE.Color=function(a){a!==void 0&&this.setHex(a);return this}; +THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var e,f,h;if(c===0)this.r=this.g=this.b=0;else switch(e=Math.floor(a*6),f=a*6-e,a=c*(1-b),h=c*(1- +b*f),b=c*(1-b*(1-f)),e){case 1:this.r=h;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=h;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r=c;this.g=a;this.b=h;break;case 6:case 0:this.r=c,this.g=b,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+ +Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this}, +divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, +equals:function(a){return a.x===this.x&&a.y===this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this}, +addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this}, +divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a):this.set(0,0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)}, +cross:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y=a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},crossSelf:function(a){return this.set(this.y*a.z-this.z*a.y,this.z*a.x-this.x*a.z,this.x*a.y-this.y*a.x)},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){return(new THREE.Vector3).sub(this,a).lengthSq()},setPositionFromMatrix:function(a){this.x=a.n14;this.y=a.n24;this.z=a.n34},setRotationFromMatrix:function(a){var b=Math.cos(this.y);this.y=Math.asin(a.n13); +Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12/b,a.n11/b)):(this.x=0,this.z=Math.atan2(a.n21,a.n22))},isZero:function(){return this.lengthSq()<1.0E-4}};THREE.Vector4=function(a,b,c,e){this.x=a||0;this.y=b||0;this.z=c||0;this.w=e!==void 0?e:1}; +THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,e){this.x=a;this.y=b;this.z=c;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- +b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, +normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.objects)},intersectObjects:function(a){var b,c,e=[];b=0;for(c=a.length;b0&&a>0&&k+a<1}for(var e,f=[],h=0,k=a.children.length;ha.scale.x)return[];e={distance:h,point:a.position,face:null,object:a};f.push(e)}else if(a instanceof THREE.Mesh){h= +b(this.origin,this.direction,a.matrixWorld.getPosition());if(h===null||h>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;for(var l,n,p,u,t,v,o,y,x=a.geometry,w=x.vertices,h=0,k=x.faces.length;h0:v<0)))if(v=t.dot((new THREE.Vector3).sub(l,o))/v,o=o.addSelf(y.multiplyScalar(v)),e instanceof THREE.Face3)c(o,l,n,p)&&(e={distance:this.origin.distanceTo(o),point:o,face:e,object:a},f.push(e));else if(e instanceof THREE.Face4&&(c(o,l,n,u)||c(o,n,p,u)))e={distance:this.origin.distanceTo(o),point:o,face:e,object:a},f.push(e)}return f}}; +THREE.Rectangle=function(){function a(){h=e-b;k=f-c}var b,c,e,f,h,k,l=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return h};this.getHeight=function(){return k};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return e};this.getBottom=function(){return f};this.set=function(k,h,u,t){l=!1;b=k;c=h;e=u;f=t;a()};this.addPoint=function(k,h){l?(l=!1,b=k,c=h,e=k,f=h):(b=bk?e:k,f=f>h?f:h);a()};this.add3Points= +function(k,h,u,t,v,o){l?(l=!1,b=ku?k>v?k:v:u>v?u:v,f=h>t?h>o?h:o:t>o?t:o):(b=ku?k>v?k>e?k:e:v>e?v:e:u>v?u>e?u:e:v>e?v:e,f=h>t?h>o?h>f?h:f:o>f?o:f:t>o?t>f?t:f:o>f?o:f);a()};this.addRectangle=function(k){l?(l=!1,b=k.getLeft(),c=k.getTop(),e=k.getRight(),f=k.getBottom()):(b=bk.getRight()?e:k.getRight(),f=f> +k.getBottom()?f:k.getBottom());a()};this.inflate=function(k){b-=k;c-=k;e+=k;f+=k;a()};this.minSelf=function(k){b=b>k.getLeft()?b:k.getLeft();c=c>k.getTop()?c:k.getTop();e=e=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){l=!0;f=e=c=b=0;a()};this.isEmpty=function(){return l}}; +THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&m>=0&&k>=0&&n>=0?!0:h<0&&m<0||k<0&&n<0?!1:(h<0?e=Math.max(e,h/(h-m)):m<0&&(f=Math.min(f,h/(h-m))),k<0?e=Math.max(e,k/(k-n)):n<0&&(f=Math.min(f,k/(k-n))),fI&&f.positionScreen.z0&&D.z<1))ma=z[y]=z[y]||new THREE.RenderableParticle,y++,A=ma,A.x=D.x/D.w,A.y=D.y/D.w,A.z=D.z,A.rotation=X.rotation.z,A.scale.x=X.scale.x*Math.abs(A.x-(D.x+L.projectionMatrix.n11)/(D.w+L.projectionMatrix.n14)),A.scale.y=X.scale.y*Math.abs(A.y- -(D.y+L.projectionMatrix.n22)/(D.w+L.projectionMatrix.n24)),A.materials=X.materials,F.elements.push(A);R&&F.elements.sort(e);return F}};THREE.Quaternion=function(b,e,c,f){this.set(b||0,e||0,c||0,f!==void 0?f:1)}; -THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(b,e,c,f){this.x=b;this.y=e;this.z=c;this.w=f;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;this.w=b.w;return this},setFromEuler:function(b){var e=Math.PI/360,c=b.x*e,f=b.y*e,m=b.z*e,b=Math.cos(f),f=Math.sin(f),e=Math.cos(-m),m=Math.sin(-m),h=Math.cos(c),c=Math.sin(c),k=b*e,n=f*m;this.w=k*h-n*c;this.x=k*c+n*h;this.y=f*e*h+b*m*c;this.z=b*m*h-f*e*c;return this},setFromAxisAngle:function(b,e){var c=e/2,f=Math.sin(c); -this.x=b.x*f;this.y=b.y*f;this.z=b.z*f;this.w=Math.cos(c);return this},setFromRotationMatrix:function(b){var e=Math.pow(b.determinant(),1/3);this.w=Math.sqrt(Math.max(0,e+b.n11+b.n22+b.n33))/2;this.x=Math.sqrt(Math.max(0,e+b.n11-b.n22-b.n33))/2;this.y=Math.sqrt(Math.max(0,e-b.n11+b.n22-b.n33))/2;this.z=Math.sqrt(Math.max(0,e-b.n11-b.n22+b.n33))/2;this.x=b.n32-b.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=b.n13-b.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=b.n21-b.n12<0?-Math.abs(this.z):Math.abs(this.z); -this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var b=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);b==0?this.w=this.z=this.y=this.x=0:(b=1/b,this.x*=b,this.y*=b,this.z*=b,this.w*=b);return this},multiplySelf:function(b){var e= -this.x,c=this.y,f=this.z,m=this.w,h=b.x,k=b.y,n=b.z,b=b.w;this.x=e*b+m*h+c*n-f*k;this.y=c*b+m*k+f*h-e*n;this.z=f*b+m*n+e*k-c*h;this.w=m*b-e*h-c*k-f*n;return this},multiply:function(b,e){this.x=b.x*e.w+b.y*e.z-b.z*e.y+b.w*e.x;this.y=-b.x*e.z+b.y*e.w+b.z*e.x+b.w*e.y;this.z=b.x*e.y-b.y*e.x+b.z*e.w+b.w*e.z;this.w=-b.x*e.x-b.y*e.y-b.z*e.z+b.w*e.w;return this},multiplyVector3:function(b,e){e||(e=b);var c=b.x,f=b.y,m=b.z,h=this.x,k=this.y,n=this.z,p=this.w,v=p*c+k*m-n*f,u=p*f+n*c-h*m,t=p*m+h*f-k*c,c=-h* -c-k*f-n*m;e.x=v*p+c*-h+u*-n-t*-k;e.y=u*p+c*-k+t*-h-v*-n;e.z=t*p+c*-n+v*-k-u*-h;return e}}; -THREE.Quaternion.slerp=function(b,e,c,f){var m=b.w*e.w+b.x*e.x+b.y*e.y+b.z*e.z;m<0?(c.w=-e.w,c.x=-e.x,c.y=-e.y,c.z=-e.z,m=-m):c.copy(e);if(Math.abs(m)>=1)return c.w=b.w,c.x=b.x,c.y=b.y,c.z=b.z,c;var h=Math.acos(m),m=Math.sqrt(1-m*m);if(Math.abs(m)<0.0010)return c.w=0.5*(b.w+e.w),c.x=0.5*(b.x+e.x),c.y=0.5*(b.y+e.y),c.z=0.5*(b.z+e.z),c;e=Math.sin((1-f)*h)/m;f=Math.sin(f*h)/m;c.w=b.w*e+c.w*f;c.x=b.x*e+c.x*f;c.y=b.y*e+c.y*f;c.z=b.z*e+c.z*f;return c};THREE.Vertex=function(b){this.position=b||new THREE.Vector3}; -THREE.Face3=function(b,e,c,f,m,h){this.a=b;this.b=e;this.c=c;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=m instanceof THREE.Color?m:new THREE.Color;this.vertexColors=m instanceof Array?m:[];this.vertexTangents=[];this.materials=h instanceof Array?h:[h];this.centroid=new THREE.Vector3}; -THREE.Face4=function(b,e,c,f,m,h,k){this.a=b;this.b=e;this.c=c;this.d=f;this.normal=m instanceof THREE.Vector3?m:new THREE.Vector3;this.vertexNormals=m instanceof Array?m:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materials=k instanceof Array?k:[k];this.centroid=new THREE.Vector3};THREE.UV=function(b,e){this.u=b||0;this.v=e||0}; -THREE.UV.prototype={constructor:THREE.UV,set:function(b,e){this.u=b;this.v=e;return this},copy:function(b){this.u=b.u;this.v=b.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}};THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; -THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(b){var e=new THREE.Matrix4;e.extractRotation(b,new THREE.Vector3(1,1,1));for(var c=0,f=this.vertices.length;c0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, -this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var e=1,c=this.vertices.length;ethis.boundingBox.x[1])this.boundingBox.x[1]=b.position.x;if(b.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=b.position.y;if(b.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=b.position.z}}},computeBoundingSphere:function(){for(var b=0,e=0,c=this.vertices.length;ethis.points.length-2?h:h+1;c[3]=h>this.points.length-3?h:h+2;v=this.points[c[0]];u=this.points[c[1]]; -t=this.points[c[2]];x=this.points[c[3]];n=k*k;p=k*n;f.x=e(v.x,u.x,t.x,x.x,k,n,p);f.y=e(v.y,u.y,t.y,x.y,k,n,p);f.z=e(v.z,u.z,t.z,x.z,k,n,p);return f};this.getControlPointsArray=function(){var b,c,e=this.points.length,f=[];for(b=0;b=0&&k>=0&&h>=0&&l>=0?!0:f<0&&k<0||h<0&&l<0?!1:(f<0?b=Math.max(b,f/(f-k)):k<0&&(e=Math.min(e,f/(f-k))),h<0?b=Math.max(b,h/(h-l)):l<0&&(e=Math.min(e,h/(h-l))),em&&k.positionScreen.z0&&M.z<1))X=C[z]=C[z]||new THREE.RenderableParticle,z++,A=X,A.x=M.x/M.w,A.y=M.y/M.w,A.z=M.z,A.rotation=Y.rotation.z,A.scale.x=Y.scale.x*Math.abs(A.x-(M.x+f.projectionMatrix.n11)/(M.w+f.projectionMatrix.n14)),A.scale.y=Y.scale.y*Math.abs(A.y-(M.y+f.projectionMatrix.n22)/(M.w+f.projectionMatrix.n24)),A.materials=Y.materials,K.push(A);h&&K.sort(b);return K}};THREE.Quaternion=function(a,b,c,e){this.set(a||0,b||0,c||0,e!==void 0?e:1)}; +THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,e){this.x=a;this.y=b;this.z=c;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,e=a.y*b,f=a.z*b,a=Math.cos(e),e=Math.sin(e),b=Math.cos(-f),f=Math.sin(-f),h=Math.cos(c),c=Math.sin(c),k=a*b,l=e*f;this.w=k*h-l*c;this.x=k*c+l*h;this.y=e*b*h+a*f*c;this.z=a*f*h-e*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,e=Math.sin(c); +this.x=a.x*e;this.y=a.y*e;this.z=a.z*e;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); +this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= +this.x,c=this.y,e=this.z,f=this.w,h=a.x,k=a.y,l=a.z,a=a.w;this.x=b*a+f*h+c*l-e*k;this.y=c*a+f*k+e*h-b*l;this.z=e*a+f*l+b*k-c*h;this.w=f*a-b*h-c*k-e*l;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,f=a.z,h=this.x,k=this.y,l=this.z,n=this.w,p=n*c+k*f-l*e,u=n*e+l*c-h*f,t=n*f+h*e-k*c,c=-h* +c-k*e-l*f;b.x=p*n+c*-h+u*-l-t*-k;b.y=u*n+c*-k+t*-h-p*-l;b.z=t*n+c*-l+p*-k-u*-h;return b}};THREE.Quaternion.slerp=function(a,b,c,e){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var h=Math.acos(f),k=Math.sqrt(1-f*f);if(Math.abs(k)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;f=Math.sin((1-e)*h)/k;e=Math.sin(e*h)/k;c.w=a.w*f+b.w*e;c.x=a.x*f+b.x*e;c.y=a.y*f+b.y*e;c.z=a.z*f+b.z*e;return c}; +THREE.Vertex=function(a){this.position=a||new THREE.Vector3};THREE.Face3=function(a,b,c,e,f,h){this.a=a;this.b=b;this.c=c;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=h;this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,b,c,e,f,h,k){this.a=a;this.b=b;this.c=c;this.d=e;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materialIndex=k;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; +THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}}; +THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; +THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,e=this.vertices.length;c0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, +this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,b=0,c=this.vertices.length;bthis.points.length-2?h:h+1;c[3]=h>this.points.length-3?h:h+2;p=this.points[c[0]];u=this.points[c[1]]; +t=this.points[c[2]];v=this.points[c[3]];l=k*k;n=k*l;e.x=b(p.x,u.x,t.x,v.x,k,l,n);e.y=b(p.y,u.y,t.y,v.y,k,l,n);e.z=b(p.z,u.z,t.z,v.z,k,l,n);return e};this.getControlPointsArray=function(){var a,c,b=this.points.length,e=[];for(a=0;a1){b=c.matrixWorldInverse;b=-(b.n31*this.position.x+b.n32*this.position.y+b.n33*this.position.z+b.n34);this.LODs[0].object3D.visible=!0;for(var f=1;f=this.LODs[f].visibleAtDistance)this.LODs[f-1].object3D.visible=!1, -this.LODs[f].object3D.visible=!0;else break;for(;fthis.duration||this.time<0){this.direction*=-1;if(this.time>this.duration)this.time=this.duration,this.directionBackwards=!0;if(this.time<0)this.time=0,this.directionBackwards=!1}}else this.time%=this.duration;a=THREE.Math.clamp(Math.floor(this.time/b),0,this.geometry.morphTargets.length-1);if(a!=this.currentKeyframe)this.morphTargetInfluences[this.lastKeyframe]= +0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a;b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b};THREE.Ribbon=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=b};THREE.Ribbon.prototype=new THREE.Object3D;THREE.Ribbon.prototype.constructor=THREE.Ribbon; +THREE.LOD=function(){THREE.Object3D.call(this);this.LODs=[]};THREE.LOD.prototype=new THREE.Object3D;THREE.LOD.prototype.constructor=THREE.LOD;THREE.LOD.prototype.supr=THREE.Object3D.prototype;THREE.LOD.prototype.addLevel=function(a,b){b===void 0&&(b=0);for(var b=Math.abs(b),c=0;c1){a=c.matrixWorldInverse;a=-(a.n31*this.position.x+a.n32*this.position.y+a.n33*this.position.z+a.n34);this.LODs[0].object3D.visible=!0;for(var e=1;e=this.LODs[e].visibleAtDistance)this.LODs[e-1].object3D.visible=!1, +this.LODs[e].object3D.visible=!0;else break;for(;e0&&(c(THREE.NormalBlending),e(1),m("rgba("+Math.floor(z.r*255)+","+Math.floor(z.g*255)+","+Math.floor(z.b*255)+","+F+")"),y.fillRect(Math.floor(V.getX()), -Math.floor(V.getY()),Math.floor(V.getWidth()),Math.floor(V.getHeight()))),V.empty())};this.render=function(b,oa){function u(b){var c,e,f,h;J.setRGB(0,0,0);ua.setRGB(0,0,0);ka.setRGB(0,0,0);c=0;for(e=b.length;c>1,t= -v.height>>1,k=h.scale.x*w,p=h.scale.y*A,o=k*oa,n=p*t,ca.set(b.x-o,b.y-n,b.x+o,b.y+n),ga.intersects(ca)&&(y.save(),y.translate(b.x,b.y),y.rotate(-h.rotation),y.scale(k,-p),y.translate(-oa,-t),y.drawImage(v,0,0),y.restore())}else k instanceof THREE.ParticleCanvasMaterial&&(o=h.scale.x*w,n=h.scale.y*A,ca.set(b.x-o,b.y-n,b.x+o,b.y+n),ga.intersects(ca)&&(f(k.color.getContextStyle()),m(k.color.getContextStyle()),y.save(),y.translate(b.x,b.y),y.rotate(-h.rotation),y.scale(o,n),k.program(y),y.restore()))} -function x(b,h,k,m){e(m.opacity);c(m.blending);y.beginPath();y.moveTo(b.positionScreen.x,b.positionScreen.y);y.lineTo(h.positionScreen.x,h.positionScreen.y);y.closePath();if(m instanceof THREE.LineBasicMaterial){b=m.linewidth;if(E!=b)y.lineWidth=E=b;b=m.linecap;if(P!=b)y.lineCap=P=b;b=m.linejoin;if(U!=b)y.lineJoin=U=b;f(m.color.getContextStyle());y.stroke();ca.inflate(m.linewidth*2)}}function z(b,f,m,k,n,v,w,u){h.info.render.vertices+=3;h.info.render.faces++;e(u.opacity);c(u.blending);S=b.positionScreen.x; -M=b.positionScreen.y;o=f.positionScreen.x;N=f.positionScreen.y;da=m.positionScreen.x;fa=m.positionScreen.y;D(S,M,o,N,da,fa);if(u instanceof THREE.MeshBasicMaterial)if(u.map)u.map.mapping instanceof THREE.UVMapping&&(ta=w.uvs[0],Xa(S,M,o,N,da,fa,ta[k].u,ta[k].v,ta[n].u,ta[n].v,ta[v].u,ta[v].v,u.map));else if(u.envMap){if(u.envMap.mapping instanceof THREE.SphericalReflectionMapping)b=oa.matrixWorldInverse,ja.copy(w.vertexNormalsWorld[k]),Da=(ja.x*b.n11+ja.y*b.n12+ja.z*b.n13)*0.5+0.5,Ga=-(ja.x*b.n21+ -ja.y*b.n22+ja.z*b.n23)*0.5+0.5,ja.copy(w.vertexNormalsWorld[n]),Ba=(ja.x*b.n11+ja.y*b.n12+ja.z*b.n13)*0.5+0.5,Aa=-(ja.x*b.n21+ja.y*b.n22+ja.z*b.n23)*0.5+0.5,ja.copy(w.vertexNormalsWorld[v]),Ea=(ja.x*b.n11+ja.y*b.n12+ja.z*b.n13)*0.5+0.5,ea=-(ja.x*b.n21+ja.y*b.n22+ja.z*b.n23)*0.5+0.5,Xa(S,M,o,N,da,fa,Da,Ga,Ba,Aa,Ea,ea,u.envMap)}else u.wireframe?G(u.color,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Oa(u.color);else if(u instanceof THREE.MeshLambertMaterial)u.map&&!u.wireframe&&(u.map.mapping instanceof -THREE.UVMapping&&(ta=w.uvs[0],Xa(S,M,o,N,da,fa,ta[k].u,ta[k].v,ta[n].u,ta[n].v,ta[v].u,ta[v].v,u.map)),c(THREE.SubtractiveBlending)),xa?!u.wireframe&&u.shading==THREE.SmoothShading&&w.vertexNormalsWorld.length==3?($.r=ha.r=ia.r=J.r,$.g=ha.g=ia.g=J.g,$.b=ha.b=ia.b=J.b,t(p,w.v1.positionWorld,w.vertexNormalsWorld[0],$),t(p,w.v2.positionWorld,w.vertexNormalsWorld[1],ha),t(p,w.v3.positionWorld,w.vertexNormalsWorld[2],ia),$.r=Math.max(0,Math.min(u.color.r*$.r,1)),$.g=Math.max(0,Math.min(u.color.g*$.g,1)), -$.b=Math.max(0,Math.min(u.color.b*$.b,1)),ha.r=Math.max(0,Math.min(u.color.r*ha.r,1)),ha.g=Math.max(0,Math.min(u.color.g*ha.g,1)),ha.b=Math.max(0,Math.min(u.color.b*ha.b,1)),ia.r=Math.max(0,Math.min(u.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(u.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(u.color.b*ia.b,1)),Q.r=(ha.r+ia.r)*0.5,Q.g=(ha.g+ia.g)*0.5,Q.b=(ha.b+ia.b)*0.5,va=Ua($,ha,ia,Q),Ra(S,M,o,N,da,fa,0,0,1,0,0,1,va)):(Y.r=J.r,Y.g=J.g,Y.b=J.b,t(p,w.centroidWorld,w.normalWorld,Y),Y.r=Math.max(0,Math.min(u.color.r* -Y.r,1)),Y.g=Math.max(0,Math.min(u.color.g*Y.g,1)),Y.b=Math.max(0,Math.min(u.color.b*Y.b,1)),u.wireframe?G(Y,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Oa(Y)):u.wireframe?G(u.color,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Oa(u.color);else if(u instanceof THREE.MeshDepthMaterial)na=oa.near,sa=oa.far,$.r=$.g=$.b=1-O(b.positionScreen.z,na,sa),ha.r=ha.g=ha.b=1-O(f.positionScreen.z,na,sa),ia.r=ia.g=ia.b=1-O(m.positionScreen.z,na,sa),Q.r=(ha.r+ia.r)*0.5,Q.g=(ha.g+ia.g)* -0.5,Q.b=(ha.b+ia.b)*0.5,va=Ua($,ha,ia,Q),Ra(S,M,o,N,da,fa,0,0,1,0,0,1,va);else if(u instanceof THREE.MeshNormalMaterial)Y.r=Sa(w.normalWorld.x),Y.g=Sa(w.normalWorld.y),Y.b=Sa(w.normalWorld.z),u.wireframe?G(Y,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Oa(Y)}function B(b,f,m,k,n,u,v,w,y){h.info.render.vertices+=4;h.info.render.faces++;e(w.opacity);c(w.blending);if(w.map||w.envMap)z(b,f,k,0,1,3,v,w,y),z(n,m,u,1,2,3,v,w,y);else if(S=b.positionScreen.x,M=b.positionScreen.y,o=f.positionScreen.x, -N=f.positionScreen.y,da=m.positionScreen.x,fa=m.positionScreen.y,X=k.positionScreen.x,ma=k.positionScreen.y,pa=n.positionScreen.x,ra=n.positionScreen.y,ya=u.positionScreen.x,la=u.positionScreen.y,w instanceof THREE.MeshBasicMaterial)F(S,M,o,N,da,fa,X,ma),w.wireframe?G(w.color,w.wireframeLinewidth,w.wireframeLinecap,w.wireframeLinejoin):Oa(w.color);else if(w instanceof THREE.MeshLambertMaterial)xa?!w.wireframe&&w.shading==THREE.SmoothShading&&v.vertexNormalsWorld.length==4?($.r=ha.r=ia.r=Q.r=J.r,$.g= -ha.g=ia.g=Q.g=J.g,$.b=ha.b=ia.b=Q.b=J.b,t(p,v.v1.positionWorld,v.vertexNormalsWorld[0],$),t(p,v.v2.positionWorld,v.vertexNormalsWorld[1],ha),t(p,v.v4.positionWorld,v.vertexNormalsWorld[3],ia),t(p,v.v3.positionWorld,v.vertexNormalsWorld[2],Q),$.r=Math.max(0,Math.min(w.color.r*$.r,1)),$.g=Math.max(0,Math.min(w.color.g*$.g,1)),$.b=Math.max(0,Math.min(w.color.b*$.b,1)),ha.r=Math.max(0,Math.min(w.color.r*ha.r,1)),ha.g=Math.max(0,Math.min(w.color.g*ha.g,1)),ha.b=Math.max(0,Math.min(w.color.b*ha.b,1)),ia.r= -Math.max(0,Math.min(w.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(w.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(w.color.b*ia.b,1)),Q.r=Math.max(0,Math.min(w.color.r*Q.r,1)),Q.g=Math.max(0,Math.min(w.color.g*Q.g,1)),Q.b=Math.max(0,Math.min(w.color.b*Q.b,1)),va=Ua($,ha,ia,Q),D(S,M,o,N,X,ma),Ra(S,M,o,N,X,ma,0,0,1,0,0,1,va),D(pa,ra,da,fa,ya,la),Ra(pa,ra,da,fa,ya,la,1,0,1,1,0,1,va)):(Y.r=J.r,Y.g=J.g,Y.b=J.b,t(p,v.centroidWorld,v.normalWorld,Y),Y.r=Math.max(0,Math.min(w.color.r*Y.r,1)),Y.g=Math.max(0,Math.min(w.color.g* -Y.g,1)),Y.b=Math.max(0,Math.min(w.color.b*Y.b,1)),F(S,M,o,N,da,fa,X,ma),w.wireframe?G(Y,w.wireframeLinewidth,w.wireframeLinecap,w.wireframeLinejoin):Oa(Y)):(F(S,M,o,N,da,fa,X,ma),w.wireframe?G(w.color,w.wireframeLinewidth,w.wireframeLinecap,w.wireframeLinejoin):Oa(w.color));else if(w instanceof THREE.MeshNormalMaterial)Y.r=Sa(v.normalWorld.x),Y.g=Sa(v.normalWorld.y),Y.b=Sa(v.normalWorld.z),F(S,M,o,N,da,fa,X,ma),w.wireframe?G(Y,w.wireframeLinewidth,w.wireframeLinecap,w.wireframeLinejoin):Oa(Y);else if(w instanceof -THREE.MeshDepthMaterial)na=oa.near,sa=oa.far,$.r=$.g=$.b=1-O(b.positionScreen.z,na,sa),ha.r=ha.g=ha.b=1-O(f.positionScreen.z,na,sa),ia.r=ia.g=ia.b=1-O(k.positionScreen.z,na,sa),Q.r=Q.g=Q.b=1-O(m.positionScreen.z,na,sa),va=Ua($,ha,ia,Q),D(S,M,o,N,X,ma),Ra(S,M,o,N,X,ma,0,0,1,0,0,1,va),D(pa,ra,da,fa,ya,la),Ra(pa,ra,da,fa,ya,la,1,0,1,1,0,1,va)}function D(b,c,e,f,h,m){y.beginPath();y.moveTo(b,c);y.lineTo(e,f);y.lineTo(h,m);y.lineTo(b,c);y.closePath()}function F(b,c,e,f,h,m,k,o){y.beginPath();y.moveTo(b, -c);y.lineTo(e,f);y.lineTo(h,m);y.lineTo(k,o);y.lineTo(b,c);y.closePath()}function G(b,c,e,h){if(E!=c)y.lineWidth=E=c;if(P!=e)y.lineCap=P=e;if(U!=h)y.lineJoin=U=h;f(b.getContextStyle());y.stroke();ca.inflate(c*2)}function Oa(b){m(b.getContextStyle());y.fill()}function Xa(b,c,e,f,h,k,o,n,p,w,v,u,oa){if(oa.image.width!=0){if(oa.needsUpdate==!0||qa[oa.id]==void 0){var t=oa.wrapS==THREE.RepeatWrapping,Na=oa.wrapT==THREE.RepeatWrapping;qa[oa.id]=y.createPattern(oa.image,t&&Na?"repeat":t&&!Na?"repeat-x": -!t&&Na?"repeat-y":"no-repeat");oa.needsUpdate=!1}m(qa[oa.id]);var t=oa.offset.x/oa.repeat.x,Na=oa.offset.y/oa.repeat.y,x=(oa.image.width-1)*oa.repeat.x,oa=(oa.image.height-1)*oa.repeat.y,o=(o+t)*x,n=(n+Na)*oa,p=(p+t)*x,w=(w+Na)*oa,v=(v+t)*x,u=(u+Na)*oa;e-=b;f-=c;h-=b;k-=c;p-=o;w-=n;v-=o;u-=n;t=1/(p*u-v*w);oa=(u*e-w*h)*t;w=(u*f-w*k)*t;e=(p*h-v*e)*t;f=(p*k-v*f)*t;b=b-oa*o-e*n;c=c-w*o-f*n;y.save();y.transform(oa,w,e,f,b,c);y.fill();y.restore()}}function Ra(b,c,e,f,h,m,k,o,n,p,w,v,u){var oa,t;oa=u.width- -1;t=u.height-1;k*=oa;o*=t;n*=oa;p*=t;w*=oa;v*=t;e-=b;f-=c;h-=b;m-=c;n-=k;p-=o;w-=k;v-=o;t=1/(n*v-w*p);oa=(v*e-p*h)*t;p=(v*f-p*m)*t;e=(n*h-w*e)*t;f=(n*m-w*f)*t;b=b-oa*k-e*o;c=c-p*k-f*o;y.save();y.transform(oa,p,e,f,b,c);y.clip();y.drawImage(u,0,0);y.restore()}function Ua(b,c,e,f){var h=~~(b.r*255),m=~~(b.g*255),b=~~(b.b*255),k=~~(c.r*255),o=~~(c.g*255),c=~~(c.b*255),n=~~(e.r*255),p=~~(e.g*255),e=~~(e.b*255),w=~~(f.r*255),v=~~(f.g*255),f=~~(f.b*255);za[0]=h<0?0:h>255?255:h;za[1]=m<0?0:m>255?255:m;za[2]= -b<0?0:b>255?255:b;za[4]=k<0?0:k>255?255:k;za[5]=o<0?0:o>255?255:o;za[6]=c<0?0:c>255?255:c;za[8]=n<0?0:n>255?255:n;za[9]=p<0?0:p>255?255:p;za[10]=e<0?0:e>255?255:e;za[12]=w<0?0:w>255?255:w;za[13]=v<0?0:v>255?255:v;za[14]=f<0?0:f>255?255:f;Fa.putImageData(Ma,0,0);W.drawImage(Ha,0,0);return Ka}function O(b,c,e){b=(b-c)/(e-c);return b*b*(3-2*b)}function Sa(b){b=(b+1)*0.5;return b<0?0:b>1?1:b}function Pa(b,c){var e=c.x-b.x,f=c.y-b.y,h=e*e+f*f;h!=0&&(h=1/Math.sqrt(h),e*=h,f*=h,c.x+=e,c.y+=f,b.x-=e,b.y-= -f)}var Va,Ya,wa,Ia,Qa,Ta,Wa,Ca;this.autoClear?this.clear():y.setTransform(1,0,0,-1,w,A);h.info.render.vertices=0;h.info.render.faces=0;k=v.projectScene(b,oa,this.sortElements);n=k.elements;p=k.lights;(xa=p.length>0)&&u(p);Va=0;for(Ya=n.length;Va1?1:b}var h=this,k,n,p,v=new THREE.Projector,u=document.createElementNS("http://www.w3.org/2000/svg","svg"),t,x,w,A,y,z,F,D,B=new THREE.Rectangle,G=new THREE.Rectangle, -O=!1,E=new THREE.Color,P=new THREE.Color,U=new THREE.Color,L=new THREE.Color,R,I=new THREE.Vector3,K=[],aa=[],Z,S,M,o=1;this.domElement=u;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setQuality=function(b){switch(b){case "high":o=1;break;case "low":o=0}};this.setSize=function(b,c){t=b;x=c;w=t/2;A=x/2;u.setAttribute("viewBox",-w+" "+-A+" "+t+" "+x);u.setAttribute("width",t);u.setAttribute("height",x);B.set(-w,-A,w,A)};this.clear=function(){for(;u.childNodes.length> -0;)u.removeChild(u.childNodes[0])};this.render=function(b,f){var m,t,x,E,I,R,K,Y;this.autoClear&&this.clear();h.info.render.vertices=0;h.info.render.faces=0;k=v.projectScene(b,f,this.sortElements);n=k.elements;p=k.lights;M=S=0;if(O=p.length>0){m=p;P.setRGB(0,0,0);U.setRGB(0,0,0);L.setRGB(0,0,0);t=0;for(x=m.length;t 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif", -lights_vertex:"if ( !enableLighting ) {\nvLightWeighting = vec3( 1.0 );\n} else {\nvLightWeighting = ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nfloat directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat pointLightWeighting = max( dot( transformedNormal, lVector ), 0.0 );\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting * lDistance;\n}\n#endif\n}", -lights_phong_pars_vertex:"#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif",lights_phong_vertex:"#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif", -lights_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",lights_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec3 pointVector = normalize( vPointLight[ i ].xyz );\nvec3 pointHalfVector = normalize( vPointLight[ i ].xyz + viewPosition );\nfloat pointDistance = vPointLight[ i ].w;\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\nfloat pointSpecularWeight = pow( pointDotNormalHalf, shininess );\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * pointDistance;\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = pow( dirDotNormalHalf, shininess );\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;", -color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\nvColor = color;\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#endif", +THREE.Scene=function(){THREE.Object3D.call(this);this.fog=null;this.matrixAutoUpdate=!1;this.collisions=this.overrideMaterial=null;this.objects=[];this.lights=[];this.__objectsAdded=[];this.__objectsRemoved=[]};THREE.Scene.prototype=new THREE.Object3D;THREE.Scene.prototype.constructor=THREE.Scene;THREE.Scene.prototype.supr=THREE.Object3D.prototype;THREE.Scene.prototype.add=function(a){this.supr.add.call(this,a);this.addChildRecurse(a)}; +THREE.Scene.prototype.addChildRecurse=function(a){if(a instanceof THREE.Light)this.lights.indexOf(a)===-1&&this.lights.push(a);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&this.objects.indexOf(a)===-1){this.objects.push(a);this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);b!==-1&&this.__objectsRemoved.splice(b,1)}for(b=0;b0&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(y.r*255)+","+Math.floor(y.g*255)+","+ +Math.floor(y.b*255)+","+x+")"),o.fillRect(Math.floor(G.getX()),Math.floor(G.getY()),Math.floor(G.getWidth()),Math.floor(G.getHeight()))),G.empty())};this.render=function(a,n){function p(a){var c,b,e,f=a.lights;N.setRGB(0,0,0);ta.setRGB(0,0,0);pa.setRGB(0,0,0);a=0;for(c=f.length;a>1,wa=p.height>>1,h=k.scale.x*t,n=k.scale.y*v,m=h*u,l=n*wa,$.set(a.x-m,a.y-l,a.x+m,a.y+l),xa.intersects($)&&(o.save(),o.translate(a.x,a.y),o.rotate(-k.rotation),o.scale(h,-n),o.translate(-u,-wa),o.drawImage(p,0,0),o.restore())}else h instanceof THREE.ParticleCanvasMaterial&&(m=k.scale.x*t,l=k.scale.y*v,$.set(a.x-m,a.y-l,a.x+m,a.y+l),xa.intersects($)&&(e(h.color.getContextStyle()),f(h.color.getContextStyle()),o.save(),o.translate(a.x,a.y),o.rotate(-k.rotation),o.scale(m,l),h.program(o), +o.restore()))}function w(a,f,k,h){b(h.opacity);c(h.blending);o.beginPath();o.moveTo(a.positionScreen.x,a.positionScreen.y);o.lineTo(f.positionScreen.x,f.positionScreen.y);o.closePath();if(h instanceof THREE.LineBasicMaterial){a=h.linewidth;if(B!=a)o.lineWidth=B=a;a=h.linecap;if(K!=a)o.lineCap=K=a;a=h.linejoin;if(F!=a)o.lineJoin=F=a;e(h.color.getContextStyle());o.stroke();$.inflate(h.linewidth*2)}}function y(a,e,f,k,l,p,t,o,v){h.info.render.vertices+=3;h.info.render.faces++;b(o.opacity);c(o.blending); +L=a.positionScreen.x;T=a.positionScreen.y;S=e.positionScreen.x;m=e.positionScreen.y;aa=f.positionScreen.x;U=f.positionScreen.y;A(L,T,S,m,aa,U);if(o instanceof THREE.MeshBasicMaterial)if(o.map)o.map.mapping instanceof THREE.UVMapping&&(la=t.uvs[0],$a(L,T,S,m,aa,U,la[k].u,la[k].v,la[l].u,la[l].v,la[p].u,la[p].v,o.map));else if(o.envMap){if(o.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=n.matrixWorldInverse,ka.copy(t.vertexNormalsWorld[0]),ua=(ka.x*a.n11+ka.y*a.n12+ka.z*a.n13)*0.5+0.5, +sa=-(ka.x*a.n21+ka.y*a.n22+ka.z*a.n23)*0.5+0.5,ka.copy(t.vertexNormalsWorld[1]),Da=(ka.x*a.n11+ka.y*a.n12+ka.z*a.n13)*0.5+0.5,Ea=-(ka.x*a.n21+ka.y*a.n22+ka.z*a.n23)*0.5+0.5,ka.copy(t.vertexNormalsWorld[2]),za=(ka.x*a.n11+ka.y*a.n12+ka.z*a.n13)*0.5+0.5,Fa=-(ka.x*a.n21+ka.y*a.n22+ka.z*a.n23)*0.5+0.5,$a(L,T,S,m,aa,U,ua,sa,Da,Ea,za,Fa,o.envMap)}else o.wireframe?Ka(o.color,o.wireframeLinewidth,o.wireframeLinecap,o.wireframeLinejoin):La(o.color);else if(o instanceof THREE.MeshLambertMaterial)o.map&&!o.wireframe&& +(o.map.mapping instanceof THREE.UVMapping&&(la=t.uvs[0],$a(L,T,S,m,aa,U,la[k].u,la[k].v,la[l].u,la[l].v,la[p].u,la[p].v,o.map)),c(THREE.SubtractiveBlending)),ma?!o.wireframe&&o.shading==THREE.SmoothShading&&t.vertexNormalsWorld.length==3?(R.r=Y.r=X.r=N.r,R.g=Y.g=X.g=N.g,R.b=Y.b=X.b=N.b,u(v,t.v1.positionWorld,t.vertexNormalsWorld[0],R),u(v,t.v2.positionWorld,t.vertexNormalsWorld[1],Y),u(v,t.v3.positionWorld,t.vertexNormalsWorld[2],X),R.r=Math.max(0,Math.min(o.color.r*R.r,1)),R.g=Math.max(0,Math.min(o.color.g* +R.g,1)),R.b=Math.max(0,Math.min(o.color.b*R.b,1)),Y.r=Math.max(0,Math.min(o.color.r*Y.r,1)),Y.g=Math.max(0,Math.min(o.color.g*Y.g,1)),Y.b=Math.max(0,Math.min(o.color.b*Y.b,1)),X.r=Math.max(0,Math.min(o.color.r*X.r,1)),X.g=Math.max(0,Math.min(o.color.g*X.g,1)),X.b=Math.max(0,Math.min(o.color.b*X.b,1)),ga.r=(Y.r+X.r)*0.5,ga.g=(Y.g+X.g)*0.5,ga.b=(Y.b+X.b)*0.5,qa=Xa(R,Y,X,ga),Ua(L,T,S,m,aa,U,0,0,1,0,0,1,qa)):(H.r=N.r,H.g=N.g,H.b=N.b,u(v,t.centroidWorld,t.normalWorld,H),Z.r=Math.max(0,Math.min(o.color.r* +H.r,1)),Z.g=Math.max(0,Math.min(o.color.g*H.g,1)),Z.b=Math.max(0,Math.min(o.color.b*H.b,1)),o.wireframe?Ka(Z,o.wireframeLinewidth,o.wireframeLinecap,o.wireframeLinejoin):La(Z)):o.wireframe?Ka(o.color,o.wireframeLinewidth,o.wireframeLinecap,o.wireframeLinejoin):La(o.color);else if(o instanceof THREE.MeshDepthMaterial)na=n.near,fa=n.far,R.r=R.g=R.b=1-Oa(a.positionScreen.z,na,fa),Y.r=Y.g=Y.b=1-Oa(e.positionScreen.z,na,fa),X.r=X.g=X.b=1-Oa(f.positionScreen.z,na,fa),ga.r=(Y.r+X.r)*0.5,ga.g=(Y.g+X.g)*0.5, +ga.b=(Y.b+X.b)*0.5,qa=Xa(R,Y,X,ga),Ua(L,T,S,m,aa,U,0,0,1,0,0,1,qa);else if(o instanceof THREE.MeshNormalMaterial)Z.r=Va(t.normalWorld.x),Z.g=Va(t.normalWorld.y),Z.b=Va(t.normalWorld.z),o.wireframe?Ka(Z,o.wireframeLinewidth,o.wireframeLinecap,o.wireframeLinejoin):La(Z)}function z(a,e,f,k,l,p,o,t,v){h.info.render.vertices+=4;h.info.render.faces++;b(t.opacity);c(t.blending);if(t.map||t.envMap)y(a,e,k,0,1,3,o,t,v),y(l,f,p,1,2,3,o,t,v);else if(L=a.positionScreen.x,T=a.positionScreen.y,S=e.positionScreen.x, +m=e.positionScreen.y,aa=f.positionScreen.x,U=f.positionScreen.y,ea=k.positionScreen.x,da=k.positionScreen.y,ia=l.positionScreen.x,ha=l.positionScreen.y,ja=p.positionScreen.x,ca=p.positionScreen.y,t instanceof THREE.MeshBasicMaterial)C(L,T,S,m,aa,U,ea,da),t.wireframe?Ka(t.color,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):La(t.color);else if(t instanceof THREE.MeshLambertMaterial)ma?!t.wireframe&&t.shading==THREE.SmoothShading&&o.vertexNormalsWorld.length==4?(R.r=Y.r=X.r=ga.r=N.r,R.g= +Y.g=X.g=ga.g=N.g,R.b=Y.b=X.b=ga.b=N.b,u(v,o.v1.positionWorld,o.vertexNormalsWorld[0],R),u(v,o.v2.positionWorld,o.vertexNormalsWorld[1],Y),u(v,o.v4.positionWorld,o.vertexNormalsWorld[3],X),u(v,o.v3.positionWorld,o.vertexNormalsWorld[2],ga),R.r=Math.max(0,Math.min(t.color.r*R.r,1)),R.g=Math.max(0,Math.min(t.color.g*R.g,1)),R.b=Math.max(0,Math.min(t.color.b*R.b,1)),Y.r=Math.max(0,Math.min(t.color.r*Y.r,1)),Y.g=Math.max(0,Math.min(t.color.g*Y.g,1)),Y.b=Math.max(0,Math.min(t.color.b*Y.b,1)),X.r=Math.max(0, +Math.min(t.color.r*X.r,1)),X.g=Math.max(0,Math.min(t.color.g*X.g,1)),X.b=Math.max(0,Math.min(t.color.b*X.b,1)),ga.r=Math.max(0,Math.min(t.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(t.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(t.color.b*ga.b,1)),qa=Xa(R,Y,X,ga),A(L,T,S,m,ea,da),Ua(L,T,S,m,ea,da,0,0,1,0,0,1,qa),A(ia,ha,aa,U,ja,ca),Ua(ia,ha,aa,U,ja,ca,1,0,1,1,0,1,qa)):(H.r=N.r,H.g=N.g,H.b=N.b,u(v,o.centroidWorld,o.normalWorld,H),Z.r=Math.max(0,Math.min(t.color.r*H.r,1)),Z.g=Math.max(0,Math.min(t.color.g* +H.g,1)),Z.b=Math.max(0,Math.min(t.color.b*H.b,1)),C(L,T,S,m,aa,U,ea,da),t.wireframe?Ka(Z,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):La(Z)):(C(L,T,S,m,aa,U,ea,da),t.wireframe?Ka(t.color,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):La(t.color));else if(t instanceof THREE.MeshNormalMaterial)Z.r=Va(o.normalWorld.x),Z.g=Va(o.normalWorld.y),Z.b=Va(o.normalWorld.z),C(L,T,S,m,aa,U,ea,da),t.wireframe?Ka(Z,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):La(Z); +else if(t instanceof THREE.MeshDepthMaterial)na=n.near,fa=n.far,R.r=R.g=R.b=1-Oa(a.positionScreen.z,na,fa),Y.r=Y.g=Y.b=1-Oa(e.positionScreen.z,na,fa),X.r=X.g=X.b=1-Oa(k.positionScreen.z,na,fa),ga.r=ga.g=ga.b=1-Oa(f.positionScreen.z,na,fa),qa=Xa(R,Y,X,ga),A(L,T,S,m,ea,da),Ua(L,T,S,m,ea,da,0,0,1,0,0,1,qa),A(ia,ha,aa,U,ja,ca),Ua(ia,ha,aa,U,ja,ca,1,0,1,1,0,1,qa)}function A(a,c,b,e,f,k){o.beginPath();o.moveTo(a,c);o.lineTo(b,e);o.lineTo(f,k);o.lineTo(a,c);o.closePath()}function C(a,c,b,e,f,k,h,m){o.beginPath(); +o.moveTo(a,c);o.lineTo(b,e);o.lineTo(f,k);o.lineTo(h,m);o.lineTo(a,c);o.closePath()}function Ka(a,c,b,f){if(B!=c)o.lineWidth=B=c;if(K!=b)o.lineCap=K=b;if(F!=f)o.lineJoin=F=f;e(a.getContextStyle());o.stroke();$.inflate(c*2)}function La(a){f(a.getContextStyle());o.fill()}function $a(a,c,b,e,k,h,m,l,n,p,t,u,v){if(v.image.width!=0){if(v.needsUpdate==!0||oa[v.id]==void 0){var wa=v.wrapS==THREE.RepeatWrapping,G=v.wrapT==THREE.RepeatWrapping;oa[v.id]=o.createPattern(v.image,wa&&G?"repeat":wa&&!G?"repeat-x": +!wa&&G?"repeat-y":"no-repeat");v.needsUpdate=!1}f(oa[v.id]);var wa=v.offset.x/v.repeat.x,G=v.offset.y/v.repeat.y,x=(v.image.width-1)*v.repeat.x,v=(v.image.height-1)*v.repeat.y,m=(m+wa)*x,l=(l+G)*v,n=(n+wa)*x,p=(p+G)*v,t=(t+wa)*x,u=(u+G)*v;b-=a;e-=c;k-=a;h-=c;n-=m;p-=l;t-=m;u-=l;wa=1/(n*u-t*p);v=(u*b-p*k)*wa;p=(u*e-p*h)*wa;b=(n*k-t*b)*wa;e=(n*h-t*e)*wa;a=a-v*m-b*l;c=c-p*m-e*l;o.save();o.transform(v,p,b,e,a,c);o.fill();o.restore()}}function Ua(a,c,b,e,f,k,h,m,l,n,p,t,v){var u,wa;u=v.width-1;wa=v.height- +1;h*=u;m*=wa;l*=u;n*=wa;p*=u;t*=wa;b-=a;e-=c;f-=a;k-=c;l-=h;n-=m;p-=h;t-=m;wa=1/(l*t-p*n);u=(t*b-n*f)*wa;n=(t*e-n*k)*wa;b=(l*f-p*b)*wa;e=(l*k-p*e)*wa;a=a-u*h-b*m;c=c-n*h-e*m;o.save();o.transform(u,n,b,e,a,c);o.clip();o.drawImage(v,0,0);o.restore()}function Xa(a,c,b,e){var f=~~(a.r*255),k=~~(a.g*255),a=~~(a.b*255),h=~~(c.r*255),m=~~(c.g*255),c=~~(c.b*255),l=~~(b.r*255),n=~~(b.g*255),b=~~(b.b*255),p=~~(e.r*255),t=~~(e.g*255),e=~~(e.b*255);Ba[0]=f<0?0:f>255?255:f;Ba[1]=k<0?0:k>255?255:k;Ba[2]=a<0?0: +a>255?255:a;Ba[4]=h<0?0:h>255?255:h;Ba[5]=m<0?0:m>255?255:m;Ba[6]=c<0?0:c>255?255:c;Ba[8]=l<0?0:l>255?255:l;Ba[9]=n<0?0:n>255?255:n;Ba[10]=b<0?0:b>255?255:b;Ba[12]=p<0?0:p>255?255:p;Ba[13]=t<0?0:t>255?255:t;Ba[14]=e<0?0:e>255?255:e;va.putImageData(Ca,0,0);W.drawImage(ya,0,0);return Ga}function Oa(a,c,b){a=(a-c)/(b-c);return a*a*(3-2*a)}function Va(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Ma(a,c){var b=c.x-a.x,e=c.y-a.y,f=b*b+e*e;f!=0&&(f=1/Math.sqrt(f),b*=f,e*=f,c.x+=b,c.y+=e,a.x-=b,a.y-=e)}var Ya, +ab,ra,Ha,Na,Wa,Za,Aa;this.autoClear?this.clear():o.setTransform(1,0,0,-1,t,v);h.info.render.vertices=0;h.info.render.faces=0;k=l.projectScene(a,n,this.sortElements);(ma=a.lights.length>0)&&p(a);Ya=0;for(ab=k.length;Ya0&&(b.r+=k.color.r*h,b.g+=k.color.g*h,b.b+=k.color.b*h)):k instanceof THREE.PointLight&&(V.sub(k.position,c.centroidWorld),V.normalize(),h=c.normalWorld.dot(V)*k.intensity,h>0&&(b.r+=k.color.r*h,b.g+=k.color.g*h,b.b+=k.color.b*h))}function b(c,b,k,m,l,p){h.info.render.vertices+=3;h.info.render.faces++;L=e(T++); +L.setAttribute("d","M "+c.positionScreen.x+" "+c.positionScreen.y+" L "+b.positionScreen.x+" "+b.positionScreen.y+" L "+k.positionScreen.x+","+k.positionScreen.y+"z");l instanceof THREE.MeshBasicMaterial?B.copy(l.color):l instanceof THREE.MeshLambertMaterial?C?(K.r=F.r,K.g=F.g,K.b=F.b,a(p,m,K),B.r=Math.max(0,Math.min(l.color.r*K.r,1)),B.g=Math.max(0,Math.min(l.color.g*K.g,1)),B.b=Math.max(0,Math.min(l.color.b*K.b,1))):B.copy(l.color):l instanceof THREE.MeshDepthMaterial?(O=1-l.__2near/(l.__farPlusNear- +m.z*l.__farMinusNear),B.setRGB(O,O,O)):l instanceof THREE.MeshNormalMaterial&&B.setRGB(f(m.normalWorld.x),f(m.normalWorld.y),f(m.normalWorld.z));l.wireframe?L.setAttribute("style","fill: none; stroke: "+B.getContextStyle()+"; stroke-width: "+l.wireframeLinewidth+"; stroke-opacity: "+l.opacity+"; stroke-linecap: "+l.wireframeLinecap+"; stroke-linejoin: "+l.wireframeLinejoin):L.setAttribute("style","fill: "+B.getContextStyle()+"; fill-opacity: "+l.opacity);n.appendChild(L)}function c(c,b,k,m,l,p,t){h.info.render.vertices+= +4;h.info.render.faces++;L=e(T++);L.setAttribute("d","M "+c.positionScreen.x+" "+c.positionScreen.y+" L "+b.positionScreen.x+" "+b.positionScreen.y+" L "+k.positionScreen.x+","+k.positionScreen.y+" L "+m.positionScreen.x+","+m.positionScreen.y+"z");p instanceof THREE.MeshBasicMaterial?B.copy(p.color):p instanceof THREE.MeshLambertMaterial?C?(K.r=F.r,K.g=F.g,K.b=F.b,a(t,l,K),B.r=Math.max(0,Math.min(p.color.r*K.r,1)),B.g=Math.max(0,Math.min(p.color.g*K.g,1)),B.b=Math.max(0,Math.min(p.color.b*K.b,1))): +B.copy(p.color):p instanceof THREE.MeshDepthMaterial?(O=1-p.__2near/(p.__farPlusNear-l.z*p.__farMinusNear),B.setRGB(O,O,O)):p instanceof THREE.MeshNormalMaterial&&B.setRGB(f(l.normalWorld.x),f(l.normalWorld.y),f(l.normalWorld.z));p.wireframe?L.setAttribute("style","fill: none; stroke: "+B.getContextStyle()+"; stroke-width: "+p.wireframeLinewidth+"; stroke-opacity: "+p.opacity+"; stroke-linecap: "+p.wireframeLinecap+"; stroke-linejoin: "+p.wireframeLinejoin):L.setAttribute("style","fill: "+B.getContextStyle()+ +"; fill-opacity: "+p.opacity);n.appendChild(L)}function e(a){I[a]==null&&(I[a]=document.createElementNS("http://www.w3.org/2000/svg","path"),m==0&&I[a].setAttribute("shape-rendering","crispEdges"));return I[a]}function f(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}var h=this,k=null,l=new THREE.Projector,n=document.createElementNS("http://www.w3.org/2000/svg","svg"),p,u,t,v,o,y,x,w,A=new THREE.Rectangle,z=new THREE.Rectangle,C=!1,B=new THREE.Color(16777215),K=new THREE.Color(16777215),F=new THREE.Color(0), +M=new THREE.Color(0),E=new THREE.Color(0),O,V=new THREE.Vector3,I=[],P=[],L,T,S,m=1;this.domElement=n;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setQuality=function(a){switch(a){case "high":m=1;break;case "low":m=0}};this.setSize=function(a,c){p=a;u=c;t=p/2;v=u/2;n.setAttribute("viewBox",-t+" "+-v+" "+p+" "+u);n.setAttribute("width",p);n.setAttribute("height",u);A.set(-t,-v,t,v)};this.clear=function(){for(;n.childNodes.length>0;)n.removeChild(n.childNodes[0])}; +this.render=function(a,e){var f,p,u,B,O,I,K,R;this.autoClear&&this.clear();h.info.render.vertices=0;h.info.render.faces=0;k=l.projectScene(a,e,this.sortElements);S=T=0;if(C=a.lights.length>0){K=a.lights;F.setRGB(0,0,0);M.setRGB(0,0,0);E.setRGB(0,0,0);f=0;for(p=K.length;f 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif", +lights_lambert_vertex:"if ( !enableLighting ) {\nvLightWeighting = vec3( 1.0 );\n} else {\nvLightWeighting = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nfloat directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat pointLightWeighting = max( dot( transformedNormal, lVector ), 0.0 );\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting * lDistance;\n}\n#endif\nvLightWeighting = vLightWeighting * diffuse + ambient * ambientLightColor;\n}", +lights_phong_pars_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif",lights_phong_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif", +lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;", +lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDistance = lDistance;\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointDiffuseWeight = max( dot( normal, lVector ), 0.0 );\nfloat pointSpecularWeight = pow( pointDotNormalHalf, shininess );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * pointDistance;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = pow( dirDotNormalHalf, shininess );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif", +color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#endif", morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\nuniform float morphTargetInfluences[ 8 ];\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0, 0.0, 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\nmorphed += position;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( morphed, 1.0 );\n#endif", default_vertex:"#ifndef USE_MORPHTARGETS\n#ifndef USE_SKINNING\ngl_Position = projectionMatrix * mvPosition;\n#endif\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform float shadowDarkness;\nuniform float shadowBias;\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif", -shadowmap_fragment:"#ifdef USE_SHADOWMAP\n#ifdef SHADOWMAP_SOFT\nconst float xPixelOffset = 1.0 / SHADOWMAP_WIDTH;\nconst float yPixelOffset = 1.0 / SHADOWMAP_HEIGHT;\n#endif\nvec4 shadowColor = vec4( 1.0 );\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nshadowCoord.z += shadowBias;\nif ( shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0 ) {\n#ifdef SHADOWMAP_SOFT\nfloat shadow = 0.0;\nfor ( float y = -1.25; y <= 1.25; y += 1.25 )\nfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\nvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadow += 1.0;\n}\nshadow /= 9.0;\nshadowColor = shadowColor * vec4( vec3( ( 1.0 - shadowDarkness * shadow ) ), 1.0 );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec4( vec3( shadowDarkness ), 1.0 );\n#endif\n}\n}\ngl_FragColor = gl_FragColor * shadowColor;\n#endif", -shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( position, 1.0 );\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif"}; -THREE.UniformsUtils={merge:function(b){var e,c,f,m={};for(e=0;e= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0 ) {\n#ifdef SHADOWMAP_SOFT\nfloat shadow = 0.0;\nfor ( float y = -1.25; y <= 1.25; y += 1.25 )\nfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\nvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadow += 1.0;\n}\nshadow /= 9.0;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( shadowDarkness );\n#endif\n}\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( position, 1.0 );\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; +THREE.UniformsUtils={merge:function(a){var b,c,e,f={};for(b=0;b=0)e&&(o.bindBuffer(o.ARRAY_BUFFER,k.__webglVertexBuffer), -o.vertexAttribPointer(b.position,3,o.FLOAT,!1,0,0));else if(m.morphTargetBase){f=h.program.attributes;m.morphTargetBase!==-1?(o.bindBuffer(o.ARRAY_BUFFER,k.__webglMorphTargetsBuffers[m.morphTargetBase]),o.vertexAttribPointer(f.position,3,o.FLOAT,!1,0,0)):f.position>=0&&(o.bindBuffer(o.ARRAY_BUFFER,k.__webglVertexBuffer),o.vertexAttribPointer(f.position,3,o.FLOAT,!1,0,0));if(m.morphTargetForcedOrder.length)for(var p=0,w=m.morphTargetForcedOrder,u=m.morphTargetInfluences;pv&&(t=y,v=u[t]);o.bindBuffer(o.ARRAY_BUFFER,k.__webglMorphTargetsBuffers[t]);o.vertexAttribPointer(f["morphTarget"+p],3,o.FLOAT,!1,0,0);m.__webglMorphTargetInfluences[p]= -v;w[t]=1;v=-1;p++}}h.program.uniforms.morphTargetInfluences!==null&&o.uniform1fv(h.program.uniforms.morphTargetInfluences,m.__webglMorphTargetInfluences)}if(e){if(k.__webglCustomAttributes)for(n in k.__webglCustomAttributes)b[n]>=0&&(f=k.__webglCustomAttributes[n],o.bindBuffer(o.ARRAY_BUFFER,f.buffer),o.vertexAttribPointer(b[n],f.size,o.FLOAT,!1,0,0));b.color>=0&&(o.bindBuffer(o.ARRAY_BUFFER,k.__webglColorBuffer),o.vertexAttribPointer(b.color,3,o.FLOAT,!1,0,0));b.normal>=0&&(o.bindBuffer(o.ARRAY_BUFFER, -k.__webglNormalBuffer),o.vertexAttribPointer(b.normal,3,o.FLOAT,!1,0,0));b.tangent>=0&&(o.bindBuffer(o.ARRAY_BUFFER,k.__webglTangentBuffer),o.vertexAttribPointer(b.tangent,4,o.FLOAT,!1,0,0));b.uv>=0&&(k.__webglUVBuffer?(o.bindBuffer(o.ARRAY_BUFFER,k.__webglUVBuffer),o.vertexAttribPointer(b.uv,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(b.uv)):o.disableVertexAttribArray(b.uv));b.uv2>=0&&(k.__webglUV2Buffer?(o.bindBuffer(o.ARRAY_BUFFER,k.__webglUV2Buffer),o.vertexAttribPointer(b.uv2,2,o.FLOAT,!1,0, -0),o.enableVertexAttribArray(b.uv2)):o.disableVertexAttribArray(b.uv2));h.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0&&(o.bindBuffer(o.ARRAY_BUFFER,k.__webglSkinVertexABuffer),o.vertexAttribPointer(b.skinVertexA,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,k.__webglSkinVertexBBuffer),o.vertexAttribPointer(b.skinVertexB,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,k.__webglSkinIndicesBuffer),o.vertexAttribPointer(b.skinIndex,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER, -k.__webglSkinWeightsBuffer),o.vertexAttribPointer(b.skinWeight,4,o.FLOAT,!1,0,0))}m instanceof THREE.Mesh?(h.wireframe?(o.lineWidth(h.wireframeLinewidth),e&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,k.__webglLineBuffer),o.drawElements(o.LINES,k.__webglLineCount,o.UNSIGNED_SHORT,0)):(e&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,k.__webglFaceBuffer),o.drawElements(o.TRIANGLES,k.__webglFaceCount,o.UNSIGNED_SHORT,0)),M.info.render.calls++,M.info.render.vertices+=k.__webglFaceCount,M.info.render.faces+=k.__webglFaceCount/ -3):m instanceof THREE.Line?(m=m.type==THREE.LineStrip?o.LINE_STRIP:o.LINES,o.lineWidth(h.linewidth),o.drawArrays(m,0,k.__webglLineCount),M.info.render.calls++):m instanceof THREE.ParticleSystem?(o.drawArrays(o.POINTS,0,k.__webglParticleCount),M.info.render.calls++):m instanceof THREE.Ribbon&&(o.drawArrays(o.TRIANGLE_STRIP,0,k.__webglVertexCount),M.info.render.calls++)}}function m(b,c,e){if(!b.__webglVertexBuffer)b.__webglVertexBuffer=o.createBuffer();if(!b.__webglNormalBuffer)b.__webglNormalBuffer= -o.createBuffer();b.hasPos&&(o.bindBuffer(o.ARRAY_BUFFER,b.__webglVertexBuffer),o.bufferData(o.ARRAY_BUFFER,b.positionArray,o.DYNAMIC_DRAW),o.enableVertexAttribArray(c.attributes.position),o.vertexAttribPointer(c.attributes.position,3,o.FLOAT,!1,0,0));if(b.hasNormal){o.bindBuffer(o.ARRAY_BUFFER,b.__webglNormalBuffer);if(e==THREE.FlatShading){var f,h,k,m,n,p,w,u,v,t,y=b.count*3;for(t=0;t0&&(o.bindBuffer(o.ARRAY_BUFFER,h.__webglColorBuffer),o.bufferData(o.ARRAY_BUFFER,W,n));pa&&(o.bindBuffer(o.ARRAY_BUFFER,h.__webglNormalBuffer),o.bufferData(o.ARRAY_BUFFER,sa,n));Ha&&la.hasTangents&&(o.bindBuffer(o.ARRAY_BUFFER,h.__webglTangentBuffer),o.bufferData(o.ARRAY_BUFFER,ua,n));Fa&&P>0&&(o.bindBuffer(o.ARRAY_BUFFER,h.__webglUVBuffer),o.bufferData(o.ARRAY_BUFFER,aa,n));Fa&&O>0&&(o.bindBuffer(o.ARRAY_BUFFER,h.__webglUV2Buffer),o.bufferData(o.ARRAY_BUFFER,Z,n));ma&&(o.bindBuffer(o.ELEMENT_ARRAY_BUFFER, -h.__webglFaceBuffer),o.bufferData(o.ELEMENT_ARRAY_BUFFER,ha,n),o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,h.__webglLineBuffer),o.bufferData(o.ELEMENT_ARRAY_BUFFER,va,n));T>0&&(o.bindBuffer(o.ARRAY_BUFFER,h.__webglSkinVertexABuffer),o.bufferData(o.ARRAY_BUFFER,X,n),o.bindBuffer(o.ARRAY_BUFFER,h.__webglSkinVertexBBuffer),o.bufferData(o.ARRAY_BUFFER,ja,n),o.bindBuffer(o.ARRAY_BUFFER,h.__webglSkinIndicesBuffer),o.bufferData(o.ARRAY_BUFFER,$,n),o.bindBuffer(o.ARRAY_BUFFER,h.__webglSkinWeightsBuffer),o.bufferData(o.ARRAY_BUFFER, -ka,n));p&&(delete h.__inittedArrays,delete h.__colorArray,delete h.__normalArray,delete h.__tangentArray,delete h.__uvArray,delete h.__uv2Array,delete h.__faceArray,delete h.__vertexArray,delete h.__lineArray,delete h.__skinVertexAArray,delete h.__skinVertexBArray,delete h.__skinIndexArray,delete h.__skinWeightArray)}}c.__dirtyVertices=!1;c.__dirtyMorphTargets=!1;c.__dirtyElements=!1;c.__dirtyUvs=!1;c.__dirtyNormals=!1;c.__dirtyTangents=!1;c.__dirtyColors=!1;B(f)}else if(b instanceof THREE.Ribbon){c= -b.geometry;if(c.__dirtyVertices||c.__dirtyColors){b=c;f=o.DYNAMIC_DRAW;u=b.vertices;m=b.colors;ea=u.length;h=m.length;V=b.__vertexArray;n=b.__colorArray;ga=b.__dirtyColors;if(b.__dirtyVertices){for(p=0;p65535&&(t[o].counter+=1,p=t[o].hash+"_"+t[o].counter,b.geometryGroups[p]==void 0&&(b.geometryGroups[p]={faces:[],materials:n,vertices:0,numMorphTargets:w})), -b.geometryGroups[p].faces.push(h),b.geometryGroups[p].vertices+=m;b.geometryGroupsList=[];for(var v in b.geometryGroups)b.geometryGroups[v].id=pa++,b.geometryGroupsList.push(b.geometryGroups[v])}function E(b,c,e){b.push({buffer:c,object:e,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function P(b){if(b!=la){switch(b){case THREE.AdditiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE);break;case THREE.SubtractiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO, -o.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,o.SRC_COLOR);break;default:o.blendEquationSeparate(o.FUNC_ADD,o.FUNC_ADD),o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA)}la=b}}function U(b,c,e){(e.width&e.width-1)==0&&(e.height&e.height-1)==0?(o.texParameteri(b,o.TEXTURE_WRAP_S,S(c.wrapS)),o.texParameteri(b,o.TEXTURE_WRAP_T,S(c.wrapT)),o.texParameteri(b,o.TEXTURE_MAG_FILTER,S(c.magFilter)),o.texParameteri(b, -o.TEXTURE_MIN_FILTER,S(c.minFilter)),o.generateMipmap(b)):(o.texParameteri(b,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(b,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.texParameteri(b,o.TEXTURE_MAG_FILTER,Z(c.magFilter)),o.texParameteri(b,o.TEXTURE_MIN_FILTER,Z(c.minFilter)))}function L(b,c){if(b.needsUpdate){if(!b.__webglInit)b.__webglInit=!0,b.__webglTexture=o.createTexture(),M.info.memory.textures++;o.activeTexture(o.TEXTURE0+c);o.bindTexture(o.TEXTURE_2D,b.__webglTexture);b instanceof THREE.DataTexture? -o.texImage2D(o.TEXTURE_2D,0,S(b.format),b.image.width,b.image.height,0,S(b.format),o.UNSIGNED_BYTE,b.image.data):o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,b.image);U(o.TEXTURE_2D,b,b.image);b.needsUpdate=!1}else o.activeTexture(o.TEXTURE0+c),o.bindTexture(o.TEXTURE_2D,b.__webglTexture)}function R(b,c){o.bindRenderbuffer(o.RENDERBUFFER,b);c.depthBuffer&&!c.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_COMPONENT16,c.width,c.height),o.framebufferRenderbuffer(o.FRAMEBUFFER, -o.DEPTH_ATTACHMENT,o.RENDERBUFFER,b)):c.depthBuffer&&c.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_STENCIL,c.width,c.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.RENDERBUFFER,b)):o.renderbufferStorage(o.RENDERBUFFER,o.RGBA4,c.width,c.height)}function I(b){var c=b instanceof THREE.WebGLRenderTargetCube;if(b&&!b.__webglFramebuffer){if(b.depthBuffer===void 0)b.depthBuffer=!0;if(b.stencilBuffer===void 0)b.stencilBuffer=!0;b.__webglTexture=o.createTexture(); -if(c){b.__webglFramebuffer=[];b.__webglRenderbuffer=[];o.bindTexture(o.TEXTURE_CUBE_MAP,b.__webglTexture);U(o.TEXTURE_CUBE_MAP,b,b);for(var e=0;e<6;e++){b.__webglFramebuffer[e]=o.createFramebuffer();b.__webglRenderbuffer[e]=o.createRenderbuffer();o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,S(b.format),b.width,b.height,0,S(b.format),S(b.type),null);var f=b,h=o.TEXTURE_CUBE_MAP_POSITIVE_X+e;o.bindFramebuffer(o.FRAMEBUFFER,b.__webglFramebuffer[e]);o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0, -h,f.__webglTexture,0);R(b.__webglRenderbuffer[e],b)}}else b.__webglFramebuffer=o.createFramebuffer(),b.__webglRenderbuffer=o.createRenderbuffer(),o.bindTexture(o.TEXTURE_2D,b.__webglTexture),U(o.TEXTURE_2D,b,b),o.texImage2D(o.TEXTURE_2D,0,S(b.format),b.width,b.height,0,S(b.format),S(b.type),null),e=o.TEXTURE_2D,o.bindFramebuffer(o.FRAMEBUFFER,b.__webglFramebuffer),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,e,b.__webglTexture,0),o.bindRenderbuffer(o.RENDERBUFFER,b.__webglRenderbuffer), -R(b.__webglRenderbuffer,b);c?o.bindTexture(o.TEXTURE_CUBE_MAP,null):o.bindTexture(o.TEXTURE_2D,null);o.bindRenderbuffer(o.RENDERBUFFER,null);o.bindFramebuffer(o.FRAMEBUFFER,null)}b?(c=c?b.__webglFramebuffer[b.activeCubeFace]:b.__webglFramebuffer,e=b.width,b=b.height,h=f=0):(c=null,e=sa,b=va,f=qa,h=na);c!=fa&&(o.bindFramebuffer(o.FRAMEBUFFER,c),o.viewport(f,h,e,b),fa=c)}function K(b){b instanceof THREE.WebGLRenderTargetCube?(o.bindTexture(o.TEXTURE_CUBE_MAP,b.__webglTexture),o.generateMipmap(o.TEXTURE_CUBE_MAP), -o.bindTexture(o.TEXTURE_CUBE_MAP,null)):(o.bindTexture(o.TEXTURE_2D,b.__webglTexture),o.generateMipmap(o.TEXTURE_2D),o.bindTexture(o.TEXTURE_2D,null))}function aa(b,c){var e;b=="fragment"?e=o.createShader(o.FRAGMENT_SHADER):b=="vertex"&&(e=o.createShader(o.VERTEX_SHADER));o.shaderSource(e,c);o.compileShader(e);if(!o.getShaderParameter(e,o.COMPILE_STATUS))return console.error(o.getShaderInfoLog(e)),console.error(c),null;return e}function Z(b){switch(b){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return o.NEAREST; -default:return o.LINEAR}}function S(b){switch(b){case THREE.RepeatWrapping:return o.REPEAT;case THREE.ClampToEdgeWrapping:return o.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return o.MIRRORED_REPEAT;case THREE.NearestFilter:return o.NEAREST;case THREE.NearestMipMapNearestFilter:return o.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return o.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return o.LINEAR;case THREE.LinearMipMapNearestFilter:return o.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return o.LINEAR_MIPMAP_LINEAR; -case THREE.ByteType:return o.BYTE;case THREE.UnsignedByteType:return o.UNSIGNED_BYTE;case THREE.ShortType:return o.SHORT;case THREE.UnsignedShortType:return o.UNSIGNED_SHORT;case THREE.IntType:return o.INT;case THREE.UnsignedShortType:return o.UNSIGNED_INT;case THREE.FloatType:return o.FLOAT;case THREE.AlphaFormat:return o.ALPHA;case THREE.RGBFormat:return o.RGB;case THREE.RGBAFormat:return o.RGBA;case THREE.LuminanceFormat:return o.LUMINANCE;case THREE.LuminanceAlphaFormat:return o.LUMINANCE_ALPHA}return 0} -var M=this,o,N=[],da=null,fa=null,X=-1,ma=null,pa=0,ra=null,ya=null,la=null,Y=null,$=null,ha=null,ia=null,Q=null,qa=0,na=0,sa=0,va=0,ta=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Da=new THREE.Matrix4,Ga=new Float32Array(16),Ba=new Float32Array(16),Aa=new THREE.Vector4,Ea={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},b=b||{},ea=b.canvas!==void 0?b.canvas:document.createElement("canvas"), -ga=b.stencil!==void 0?b.stencil:!0,V=b.preserveDrawingBuffer!==void 0?b.preserveDrawingBuffer:!1,ca=b.antialias!==void 0?b.antialias:!1,xa=b.clearColor!==void 0?new THREE.Color(b.clearColor):new THREE.Color(0),J=b.clearAlpha!==void 0?b.clearAlpha:0,ua=b.maxLights!==void 0?b.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=ea;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear= -!0;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=!0;var ka,ja=[],b=THREE.ShaderLib.depthRGBA,Ha=THREE.UniformsUtils.clone(b.uniforms),Fa=new THREE.ShaderMaterial({fragmentShader:b.fragmentShader,vertexShader:b.vertexShader,uniforms:Ha}),Ma=new THREE.ShaderMaterial({fragmentShader:b.fragmentShader,vertexShader:b.vertexShader, -uniforms:Ha,morphTargets:!0});Fa._shadowPass=!0;Ma._shadowPass=!0;try{if(!(o=ea.getContext("experimental-webgl",{antialias:ca,stencil:ga,preserveDrawingBuffer:V})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+o.getParameter(o.VERSION)+" | "+o.getParameter(o.VENDOR)+" | "+o.getParameter(o.RENDERER)+" | "+o.getParameter(o.SHADING_LANGUAGE_VERSION))}catch(za){console.error(za)}o.clearColor(0,0,0,1);o.clearDepth(1);o.clearStencil(0);o.enable(o.DEPTH_TEST);o.depthFunc(o.LEQUAL); -o.frontFace(o.CCW);o.cullFace(o.BACK);o.enable(o.CULL_FACE);o.enable(o.BLEND);o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA);o.clearColor(xa.r,xa.g,xa.b,J);this.context=o;var Ka=o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,W={};W.vertices=new Float32Array(16);W.faces=new Uint16Array(6);ga=0;W.vertices[ga++]=-1;W.vertices[ga++]=-1;W.vertices[ga++]=0;W.vertices[ga++]=1;W.vertices[ga++]=1;W.vertices[ga++]=-1;W.vertices[ga++]=1;W.vertices[ga++]=1;W.vertices[ga++]=1;W.vertices[ga++]= -1;W.vertices[ga++]=1;W.vertices[ga++]=0;W.vertices[ga++]=-1;W.vertices[ga++]=1;W.vertices[ga++]=0;ga=W.vertices[ga++]=0;W.faces[ga++]=0;W.faces[ga++]=1;W.faces[ga++]=2;W.faces[ga++]=0;W.faces[ga++]=2;W.faces[ga++]=3;W.vertexBuffer=o.createBuffer();W.elementBuffer=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,W.vertexBuffer);o.bufferData(o.ARRAY_BUFFER,W.vertices,o.STATIC_DRAW);o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,W.elementBuffer);o.bufferData(o.ELEMENT_ARRAY_BUFFER,W.faces,o.STATIC_DRAW);W.program= -o.createProgram();o.attachShader(W.program,aa("fragment",THREE.ShaderLib.sprite.fragmentShader));o.attachShader(W.program,aa("vertex",THREE.ShaderLib.sprite.vertexShader));o.linkProgram(W.program);W.attributes={};W.uniforms={};W.attributes.position=o.getAttribLocation(W.program,"position");W.attributes.uv=o.getAttribLocation(W.program,"uv");W.uniforms.uvOffset=o.getUniformLocation(W.program,"uvOffset");W.uniforms.uvScale=o.getUniformLocation(W.program,"uvScale");W.uniforms.rotation=o.getUniformLocation(W.program, -"rotation");W.uniforms.scale=o.getUniformLocation(W.program,"scale");W.uniforms.alignment=o.getUniformLocation(W.program,"alignment");W.uniforms.color=o.getUniformLocation(W.program,"color");W.uniforms.map=o.getUniformLocation(W.program,"map");W.uniforms.opacity=o.getUniformLocation(W.program,"opacity");W.uniforms.useScreenCoordinates=o.getUniformLocation(W.program,"useScreenCoordinates");W.uniforms.affectedByDistance=o.getUniformLocation(W.program,"affectedByDistance");W.uniforms.screenPosition= -o.getUniformLocation(W.program,"screenPosition");W.uniforms.modelViewMatrix=o.getUniformLocation(W.program,"modelViewMatrix");W.uniforms.projectionMatrix=o.getUniformLocation(W.program,"projectionMatrix");var Ja=!1;this.setSize=function(b,c){ea.width=b;ea.height=c;this.setViewport(0,0,ea.width,ea.height)};this.setViewport=function(b,c,e,f){qa=b;na=c;sa=e;va=f;o.viewport(qa,na,sa,va)};this.setScissor=function(b,c,e,f){o.scissor(b,c,e,f)};this.enableScissorTest=function(b){b?o.enable(o.SCISSOR_TEST): -o.disable(o.SCISSOR_TEST)};this.setClearColorHex=function(b,c){xa.setHex(b);J=c;o.clearColor(xa.r,xa.g,xa.b,J)};this.setClearColor=function(b,c){xa.copy(b);J=c;o.clearColor(xa.r,xa.g,xa.b,J)};this.getClearColor=function(){return xa};this.getClearAlpha=function(){return J};this.clear=function(b,c,e){var f=0;if(b==void 0||b)f|=o.COLOR_BUFFER_BIT;if(c==void 0||c)f|=o.DEPTH_BUFFER_BIT;if(e==void 0||e)f|=o.STENCIL_BUFFER_BIT;o.clear(f)};this.getContext=function(){return o};this.deallocateObject=function(b){if(b.__webglInit)if(b.__webglInit= -!1,delete b._modelViewMatrix,delete b._normalMatrixArray,delete b._modelViewMatrixArray,delete b._objectMatrixArray,b instanceof THREE.Mesh)for(g in b.geometry.geometryGroups){var c=b.geometry.geometryGroups[g];o.deleteBuffer(c.__webglVertexBuffer);o.deleteBuffer(c.__webglNormalBuffer);o.deleteBuffer(c.__webglTangentBuffer);o.deleteBuffer(c.__webglColorBuffer);o.deleteBuffer(c.__webglUVBuffer);o.deleteBuffer(c.__webglUV2Buffer);o.deleteBuffer(c.__webglSkinVertexABuffer);o.deleteBuffer(c.__webglSkinVertexBBuffer); -o.deleteBuffer(c.__webglSkinIndicesBuffer);o.deleteBuffer(c.__webglSkinWeightsBuffer);o.deleteBuffer(c.__webglFaceBuffer);o.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var e=0,f=c.numMorphTargets;e=0&&o.enableVertexAttribArray(y.position);y.color>=0&&o.enableVertexAttribArray(y.color);y.normal>=0&&o.enableVertexAttribArray(y.normal);y.tangent>=0&&o.enableVertexAttribArray(y.tangent);b.skinning&&y.skinVertexA>=0&&y.skinVertexB>=0&&y.skinIndex>=0&&y.skinWeight>=0&&(o.enableVertexAttribArray(y.skinVertexA), -o.enableVertexAttribArray(y.skinVertexB),o.enableVertexAttribArray(y.skinIndex),o.enableVertexAttribArray(y.skinWeight));if(b.attributes)for(k in b.attributes)y[k]!==void 0&&y[k]>=0&&o.enableVertexAttribArray(y[k]);if(b.morphTargets)for(k=b.numSupportedMorphTargets=0;k=0&&(o.enableVertexAttribArray(y[z]),b.numSupportedMorphTargets++);b.uniformsList=[];for(h in b.uniforms)b.uniformsList.push([b.uniforms[h],h])};this.clearTarget=function(b,c,e,f){I(b); -this.clear(c,e,f)};this.render=function(b,e,t,ea){var V,ga,B,J,D,ca,Q,E,G,L=b.fog;X=-1;this.shadowMapEnabled&&y(b,e);M.info.render.calls=0;M.info.render.vertices=0;M.info.render.faces=0;e.parent==null&&(console.warn("Camera is not on the Scene. Adding it..."),b.add(e));b.updateMatrixWorld();e.matrixWorldInverse.getInverse(e.matrixWorld);e.matrixWorldInverse.flattenToArray(Ba);e.projectionMatrix.flattenToArray(Ga);Da.multiply(e.projectionMatrix,e.matrixWorldInverse);v(Da);this.initWebGLObjects(b); -G=b.__webglLights;I(t);(this.autoClear||ea)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);D=b.__webglObjects.length;for(ea=0;ea=0;ea--)if(V=b.__webglObjects[ea],V.render){Q=V.object;E=V.buffer;B=V.opaque;h(Q);for(V=0;V0||v.faceVertexUvs.length>0)h.__uvArray=new Float32Array(m*2);if(v.faceUvs.length>1||v.faceVertexUvs.length> -1)h.__uv2Array=new Float32Array(m*2)}if(k.geometry.skinWeights.length&&k.geometry.skinIndices.length)h.__skinVertexAArray=new Float32Array(m*4),h.__skinVertexBArray=new Float32Array(m*4),h.__skinIndexArray=new Float32Array(m*4),h.__skinWeightArray=new Float32Array(m*4);h.__faceArray=new Uint16Array(y*3+(k.geometry.edgeFaces?k.geometry.edgeFaces.length*6:0));h.__lineArray=new Uint16Array(x*2);if(h.numMorphTargets){h.__morphTargetsArrays=[];v=0;for(u=h.numMorphTargets;v=0)return a.geometry.materials[c.materialIndex]}function c(a,c,b){var e,f,k,h=a.vertices,l=h.length,n=a.colors,p=n.length,t=a.__vertexArray,o=a.__colorArray,u=a.__sortArray,v=a.__dirtyVertices,G=a.__dirtyColors,x=a.__webglCustomAttributesList,w;if(x){k=0;for(e=x.length;k=0)c&&(m.bindBuffer(m.ARRAY_BUFFER,f.__webglVertexBuffer),m.vertexAttribPointer(a.position,3,m.FLOAT,!1,0,0));else if(h.morphTargetBase){b=k.program.attributes;h.morphTargetBase!==-1?(m.bindBuffer(m.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[h.morphTargetBase]),m.vertexAttribPointer(b.position, +3,m.FLOAT,!1,0,0)):b.position>=0&&(m.bindBuffer(m.ARRAY_BUFFER,f.__webglVertexBuffer),m.vertexAttribPointer(b.position,3,m.FLOAT,!1,0,0));if(h.morphTargetForcedOrder.length){l=0;var p=h.morphTargetForcedOrder;for(n=h.morphTargetInfluences;lt&&(o=v,t=n[o]);m.bindBuffer(m.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[o]);m.vertexAttribPointer(b["morphTarget"+l],3,m.FLOAT,!1,0,0);h.__webglMorphTargetInfluences[l]=t;p[o]=1;t=-1;l++}}k.program.uniforms.morphTargetInfluences!==null&&m.uniform1fv(k.program.uniforms.morphTargetInfluences,h.__webglMorphTargetInfluences)}if(c){if(f.__webglCustomAttributesList){l=0;for(n= +f.__webglCustomAttributesList.length;l=0&&(m.bindBuffer(m.ARRAY_BUFFER,b.buffer),m.vertexAttribPointer(a[b.buffer.belongsToAttribute],b.size,m.FLOAT,!1,0,0))}a.color>=0&&(m.bindBuffer(m.ARRAY_BUFFER,f.__webglColorBuffer),m.vertexAttribPointer(a.color,3,m.FLOAT,!1,0,0));a.normal>=0&&(m.bindBuffer(m.ARRAY_BUFFER,f.__webglNormalBuffer),m.vertexAttribPointer(a.normal,3,m.FLOAT,!1,0,0));a.tangent>=0&&(m.bindBuffer(m.ARRAY_BUFFER, +f.__webglTangentBuffer),m.vertexAttribPointer(a.tangent,4,m.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(m.bindBuffer(m.ARRAY_BUFFER,f.__webglUVBuffer),m.vertexAttribPointer(a.uv,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(a.uv)):m.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(m.bindBuffer(m.ARRAY_BUFFER,f.__webglUV2Buffer),m.vertexAttribPointer(a.uv2,2,m.FLOAT,!1,0,0),m.enableVertexAttribArray(a.uv2)):m.disableVertexAttribArray(a.uv2));k.skinning&&a.skinVertexA>=0&&a.skinVertexB>= +0&&a.skinIndex>=0&&a.skinWeight>=0&&(m.bindBuffer(m.ARRAY_BUFFER,f.__webglSkinVertexABuffer),m.vertexAttribPointer(a.skinVertexA,4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),m.vertexAttribPointer(a.skinVertexB,4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),m.vertexAttribPointer(a.skinIndex,4,m.FLOAT,!1,0,0),m.bindBuffer(m.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),m.vertexAttribPointer(a.skinWeight,4,m.FLOAT,!1,0,0))}h instanceof THREE.Mesh?(k.wireframe? +(m.lineWidth(k.wireframeLinewidth),c&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),m.drawElements(m.LINES,f.__webglLineCount,m.UNSIGNED_SHORT,0)):(c&&m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),m.drawElements(m.TRIANGLES,f.__webglFaceCount,m.UNSIGNED_SHORT,0)),S.info.render.calls++,S.info.render.vertices+=f.__webglFaceCount,S.info.render.faces+=f.__webglFaceCount/3):h instanceof THREE.Line?(h=h.type===THREE.LineStrip?m.LINE_STRIP:m.LINES,m.lineWidth(k.linewidth),m.drawArrays(h, +0,f.__webglLineCount),S.info.render.calls++):h instanceof THREE.ParticleSystem?(m.drawArrays(m.POINTS,0,f.__webglParticleCount),S.info.render.calls++):h instanceof THREE.Ribbon&&(m.drawArrays(m.TRIANGLE_STRIP,0,f.__webglVertexCount),S.info.render.calls++)}}function h(a,c,b){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=m.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=m.createBuffer();a.hasPos&&(m.bindBuffer(m.ARRAY_BUFFER,a.__webglVertexBuffer),m.bufferData(m.ARRAY_BUFFER,a.positionArray, +m.DYNAMIC_DRAW),m.enableVertexAttribArray(c.attributes.position),m.vertexAttribPointer(c.attributes.position,3,m.FLOAT,!1,0,0));if(a.hasNormal){m.bindBuffer(m.ARRAY_BUFFER,a.__webglNormalBuffer);if(b===THREE.FlatShading){var e,f,k,h,l,n,p,t,o,v,u=a.count*3;for(v=0;v=0)c=c.geometry.materials[b],c.transparent?(a.transparent=c,a.opaque=null):(a.opaque=c,a.transparent=null)}else if(c=e)c.transparent?(a.transparent=c,a.opaque=null):(a.opaque=c,a.transparent=null)}function y(a,c){return c.z-a.z}function x(a){var c,b,n,p=0,o,v,G,w,x=a.lights;pa||(pa=new THREE.PerspectiveCamera(S.shadowCameraFov,S.shadowMapWidth/S.shadowMapHeight,S.shadowCameraNear,S.shadowCameraFar));c=0;for(b=x.length;c=0;b--)a[b].object===c&&a.splice(b,1)}function K(a,c,b){a.push({buffer:c,object:b,opaque:null,transparent:null})}function F(a){if(a!==Z){switch(a){case THREE.AdditiveBlending:m.blendEquation(m.FUNC_ADD);m.blendFunc(m.SRC_ALPHA,m.ONE);break;case THREE.SubtractiveBlending:m.blendEquation(m.FUNC_ADD);m.blendFunc(m.ZERO, +m.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:m.blendEquation(m.FUNC_ADD);m.blendFunc(m.ZERO,m.SRC_COLOR);break;default:m.blendEquationSeparate(m.FUNC_ADD,m.FUNC_ADD),m.blendFuncSeparate(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA,m.ONE,m.ONE_MINUS_SRC_ALPHA)}Z=a}}function M(a,c,b){(b.width&b.width-1)===0&&(b.height&b.height-1)===0?(m.texParameteri(a,m.TEXTURE_WRAP_S,T(c.wrapS)),m.texParameteri(a,m.TEXTURE_WRAP_T,T(c.wrapT)),m.texParameteri(a,m.TEXTURE_MAG_FILTER,T(c.magFilter)),m.texParameteri(a, +m.TEXTURE_MIN_FILTER,T(c.minFilter)),m.generateMipmap(a)):(m.texParameteri(a,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_MAG_FILTER,L(c.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,L(c.minFilter)))}function E(a,c){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=m.createTexture(),S.info.memory.textures++;m.activeTexture(m.TEXTURE0+c);m.bindTexture(m.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture? +m.texImage2D(m.TEXTURE_2D,0,T(a.format),a.image.width,a.image.height,0,T(a.format),m.UNSIGNED_BYTE,a.image.data):m.texImage2D(m.TEXTURE_2D,0,m.RGBA,m.RGBA,m.UNSIGNED_BYTE,a.image);M(m.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else m.activeTexture(m.TEXTURE0+c),m.bindTexture(m.TEXTURE_2D,a.__webglTexture)}function O(a,c){m.bindRenderbuffer(m.RENDERBUFFER,a);c.depthBuffer&&!c.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_COMPONENT16,c.width,c.height),m.framebufferRenderbuffer(m.FRAMEBUFFER, +m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a)):c.depthBuffer&&c.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_STENCIL,c.width,c.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a)):m.renderbufferStorage(m.RENDERBUFFER,m.RGBA4,c.width,c.height)}function V(a){var c=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=m.createTexture(); +if(c){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];m.bindTexture(m.TEXTURE_CUBE_MAP,a.__webglTexture);M(m.TEXTURE_CUBE_MAP,a,a);for(var b=0;b<6;b++){a.__webglFramebuffer[b]=m.createFramebuffer();a.__webglRenderbuffer[b]=m.createRenderbuffer();m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+b,0,T(a.format),a.width,a.height,0,T(a.format),T(a.type),null);var e=a,f=m.TEXTURE_CUBE_MAP_POSITIVE_X+b;m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer[b]);m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0, +f,e.__webglTexture,0);O(a.__webglRenderbuffer[b],a)}}else a.__webglFramebuffer=m.createFramebuffer(),a.__webglRenderbuffer=m.createRenderbuffer(),m.bindTexture(m.TEXTURE_2D,a.__webglTexture),M(m.TEXTURE_2D,a,a),m.texImage2D(m.TEXTURE_2D,0,T(a.format),a.width,a.height,0,T(a.format),T(a.type),null),b=m.TEXTURE_2D,m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,b,a.__webglTexture,0),m.bindRenderbuffer(m.RENDERBUFFER,a.__webglRenderbuffer), +O(a.__webglRenderbuffer,a);c?m.bindTexture(m.TEXTURE_CUBE_MAP,null):m.bindTexture(m.TEXTURE_2D,null);m.bindRenderbuffer(m.RENDERBUFFER,null);m.bindFramebuffer(m.FRAMEBUFFER,null)}a?(c=c?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,b=a.width,a=a.height,f=e=0):(c=null,b=qa,a=la,e=na,f=fa);c!==ea&&(m.bindFramebuffer(m.FRAMEBUFFER,c),m.viewport(e,f,b,a),ea=c)}function I(a){a instanceof THREE.WebGLRenderTargetCube?(m.bindTexture(m.TEXTURE_CUBE_MAP,a.__webglTexture),m.generateMipmap(m.TEXTURE_CUBE_MAP), +m.bindTexture(m.TEXTURE_CUBE_MAP,null)):(m.bindTexture(m.TEXTURE_2D,a.__webglTexture),m.generateMipmap(m.TEXTURE_2D),m.bindTexture(m.TEXTURE_2D,null))}function P(a,c){var b;a==="fragment"?b=m.createShader(m.FRAGMENT_SHADER):a==="vertex"&&(b=m.createShader(m.VERTEX_SHADER));m.shaderSource(b,c);m.compileShader(b);if(!m.getShaderParameter(b,m.COMPILE_STATUS))return console.error(m.getShaderInfoLog(b)),console.error(c),null;return b}function L(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return m.NEAREST; +default:return m.LINEAR}}function T(a){switch(a){case THREE.RepeatWrapping:return m.REPEAT;case THREE.ClampToEdgeWrapping:return m.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return m.MIRRORED_REPEAT;case THREE.NearestFilter:return m.NEAREST;case THREE.NearestMipMapNearestFilter:return m.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return m.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return m.LINEAR;case THREE.LinearMipMapNearestFilter:return m.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return m.LINEAR_MIPMAP_LINEAR; +case THREE.ByteType:return m.BYTE;case THREE.UnsignedByteType:return m.UNSIGNED_BYTE;case THREE.ShortType:return m.SHORT;case THREE.UnsignedShortType:return m.UNSIGNED_SHORT;case THREE.IntType:return m.INT;case THREE.UnsignedShortType:return m.UNSIGNED_INT;case THREE.FloatType:return m.FLOAT;case THREE.AlphaFormat:return m.ALPHA;case THREE.RGBFormat:return m.RGB;case THREE.RGBAFormat:return m.RGBA;case THREE.LuminanceFormat:return m.LUMINANCE;case THREE.LuminanceAlphaFormat:return m.LUMINANCE_ALPHA}return 0} +var S=this,m,aa=[],U=null,ea=null,da=-1,ia=null,ha=0,ja=null,ca=null,Z=null,R=null,Y=null,X=null,ga=null,oa=null,na=0,fa=0,qa=0,la=0,ua=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],sa=new THREE.Matrix4,Da=new Float32Array(16),Ea=new Float32Array(16),za=new THREE.Vector4,Fa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},xa=a.canvas!==void 0?a.canvas:document.createElement("canvas"), +G=a.stencil!==void 0?a.stencil:!0,$=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,ma=a.antialias!==void 0?a.antialias:!1,H=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),N=a.clearAlpha!==void 0?a.clearAlpha:0,ta=a.maxLights!==void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=xa;this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth= +this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var pa,ka=[],a=THREE.ShaderLib.depthRGBA,ya=THREE.UniformsUtils.clone(a.uniforms),va=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader, +vertexShader:a.vertexShader,uniforms:ya}),Ca=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:ya,morphTargets:!0});va._shadowPass=!0;Ca._shadowPass=!0;try{if(!(m=xa.getContext("experimental-webgl",{antialias:ma,stencil:G,preserveDrawingBuffer:$})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+m.getParameter(m.VERSION)+" | "+m.getParameter(m.VENDOR)+" | "+m.getParameter(m.RENDERER)+" | "+m.getParameter(m.SHADING_LANGUAGE_VERSION))}catch(Ba){console.error(Ba)}m.clearColor(0, +0,0,1);m.clearDepth(1);m.clearStencil(0);m.enable(m.DEPTH_TEST);m.depthFunc(m.LEQUAL);m.frontFace(m.CCW);m.cullFace(m.BACK);m.enable(m.CULL_FACE);m.enable(m.BLEND);m.blendEquation(m.FUNC_ADD);m.blendFunc(m.SRC_ALPHA,m.ONE_MINUS_SRC_ALPHA);m.clearColor(H.r,H.g,H.b,N);this.context=m;var Ga=m.getParameter(m.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,W={};W.vertices=new Float32Array(16);W.faces=new Uint16Array(6);G=0;W.vertices[G++]=-1;W.vertices[G++]=-1;W.vertices[G++]=0;W.vertices[G++]=1;W.vertices[G++]=1;W.vertices[G++]= +-1;W.vertices[G++]=1;W.vertices[G++]=1;W.vertices[G++]=1;W.vertices[G++]=1;W.vertices[G++]=1;W.vertices[G++]=0;W.vertices[G++]=-1;W.vertices[G++]=1;W.vertices[G++]=0;G=W.vertices[G++]=0;W.faces[G++]=0;W.faces[G++]=1;W.faces[G++]=2;W.faces[G++]=0;W.faces[G++]=2;W.faces[G++]=3;W.vertexBuffer=m.createBuffer();W.elementBuffer=m.createBuffer();m.bindBuffer(m.ARRAY_BUFFER,W.vertexBuffer);m.bufferData(m.ARRAY_BUFFER,W.vertices,m.STATIC_DRAW);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,W.elementBuffer);m.bufferData(m.ELEMENT_ARRAY_BUFFER, +W.faces,m.STATIC_DRAW);W.program=m.createProgram();m.attachShader(W.program,P("fragment",THREE.ShaderLib.sprite.fragmentShader));m.attachShader(W.program,P("vertex",THREE.ShaderLib.sprite.vertexShader));m.linkProgram(W.program);W.attributes={};W.uniforms={};W.attributes.position=m.getAttribLocation(W.program,"position");W.attributes.uv=m.getAttribLocation(W.program,"uv");W.uniforms.uvOffset=m.getUniformLocation(W.program,"uvOffset");W.uniforms.uvScale=m.getUniformLocation(W.program,"uvScale");W.uniforms.rotation= +m.getUniformLocation(W.program,"rotation");W.uniforms.scale=m.getUniformLocation(W.program,"scale");W.uniforms.alignment=m.getUniformLocation(W.program,"alignment");W.uniforms.color=m.getUniformLocation(W.program,"color");W.uniforms.map=m.getUniformLocation(W.program,"map");W.uniforms.opacity=m.getUniformLocation(W.program,"opacity");W.uniforms.useScreenCoordinates=m.getUniformLocation(W.program,"useScreenCoordinates");W.uniforms.affectedByDistance=m.getUniformLocation(W.program,"affectedByDistance"); +W.uniforms.screenPosition=m.getUniformLocation(W.program,"screenPosition");W.uniforms.modelViewMatrix=m.getUniformLocation(W.program,"modelViewMatrix");W.uniforms.projectionMatrix=m.getUniformLocation(W.program,"projectionMatrix");var Ta=!1;this.setSize=function(a,c){xa.width=a;xa.height=c;this.setViewport(0,0,xa.width,xa.height)};this.setViewport=function(a,c,b,e){na=a;fa=c;qa=b;la=e;m.viewport(na,fa,qa,la)};this.setScissor=function(a,c,b,e){m.scissor(a,c,b,e)};this.enableScissorTest=function(a){a? +m.enable(m.SCISSOR_TEST):m.disable(m.SCISSOR_TEST)};this.setClearColorHex=function(a,c){H.setHex(a);N=c;m.clearColor(H.r,H.g,H.b,N)};this.setClearColor=function(a,c){H.copy(a);N=c;m.clearColor(H.r,H.g,H.b,N)};this.getClearColor=function(){return H};this.getClearAlpha=function(){return N};this.clear=function(a,c,b){var e=0;if(a===void 0||a)e|=m.COLOR_BUFFER_BIT;if(c===void 0||c)e|=m.DEPTH_BUFFER_BIT;if(b===void 0||b)e|=m.STENCIL_BUFFER_BIT;m.clear(e)};this.getContext=function(){return m};this.deallocateObject= +function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(g in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[g];m.deleteBuffer(c.__webglVertexBuffer);m.deleteBuffer(c.__webglNormalBuffer);m.deleteBuffer(c.__webglTangentBuffer);m.deleteBuffer(c.__webglColorBuffer);m.deleteBuffer(c.__webglUVBuffer);m.deleteBuffer(c.__webglUV2Buffer);m.deleteBuffer(c.__webglSkinVertexABuffer); +m.deleteBuffer(c.__webglSkinVertexBBuffer);m.deleteBuffer(c.__webglSkinIndicesBuffer);m.deleteBuffer(c.__webglSkinWeightsBuffer);m.deleteBuffer(c.__webglFaceBuffer);m.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var b=0,e=c.numMorphTargets;b=0&&m.enableVertexAttribArray(u.position);u.color>=0&&m.enableVertexAttribArray(u.color);u.normal>=0&&m.enableVertexAttribArray(u.normal); +u.tangent>=0&&m.enableVertexAttribArray(u.tangent);a.skinning&&u.skinVertexA>=0&&u.skinVertexB>=0&&u.skinIndex>=0&&u.skinWeight>=0&&(m.enableVertexAttribArray(u.skinVertexA),m.enableVertexAttribArray(u.skinVertexB),m.enableVertexAttribArray(u.skinIndex),m.enableVertexAttribArray(u.skinWeight));if(a.attributes)for(k in a.attributes)u[k]!==void 0&&u[k]>=0&&m.enableVertexAttribArray(u[k]);if(a.morphTargets)for(k=a.numSupportedMorphTargets=0;k=0&&(m.enableVertexAttribArray(u[G]), +a.numSupportedMorphTargets++);a.uniformsList=[];for(f in a.uniforms)a.uniformsList.push([a.uniforms[f],f])};this.clearTarget=function(a,c,b,e){V(a);this.clear(c,b,e)};this.updateShadowMap=function(a,c){x(a,c)};this.render=function(a,c,b,G){var ma,$,z,C,B,H,K,E=a.lights,na=a.fog;da=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&x(a,c);S.info.render.calls=0;S.info.render.vertices=0;S.info.render.faces=0;if(c.matrixAutoUpdate){for(z=c;z.parent;)z= +z.parent;z.update(void 0,!0)}a.update(void 0,!1,c);c.matrixWorldInverse.flattenToArray(Ea);c.projectionMatrix.flattenToArray(Da);sa.multiply(c.projectionMatrix,c.matrixWorldInverse);u(sa);V(b);(this.autoClear||G)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);z=a.__webglObjects.length;for(G=0;G=0;G--)if(B=a.__webglObjects[G],B.render&&(H=B.object,K=B.buffer,$=B.opaque))k(H),l($.depthTest),n($.depthWrite),p($.polygonOffset,$.polygonOffsetFactor,$.polygonOffsetUnits), +f(c,E,na,$,K,H);for(G=0;G65535&&(G[v].counter+=1,u=G[v].hash+"_"+G[v].counter,l.geometryGroups[u]===void 0&&(l.geometryGroups[u]={faces:[], +materialIndex:o,vertices:0,numMorphTargets:w})),l.geometryGroups[u].faces.push(n),l.geometryGroups[u].vertices+=t;l.geometryGroupsList=[];n=void 0;for(n in l.geometryGroups)l.geometryGroups[n].id=ha++,l.geometryGroupsList.push(l.geometryGroups[n])}for(k in h.geometryGroups)if(l=h.geometryGroups[k],!l.__webglVertexBuffer){n=l;n.__webglVertexBuffer=m.createBuffer();n.__webglNormalBuffer=m.createBuffer();n.__webglTangentBuffer=m.createBuffer();n.__webglColorBuffer=m.createBuffer();n.__webglUVBuffer= +m.createBuffer();n.__webglUV2Buffer=m.createBuffer();n.__webglSkinVertexABuffer=m.createBuffer();n.__webglSkinVertexBBuffer=m.createBuffer();n.__webglSkinIndicesBuffer=m.createBuffer();n.__webglSkinWeightsBuffer=m.createBuffer();n.__webglFaceBuffer=m.createBuffer();n.__webglLineBuffer=m.createBuffer();if(n.numMorphTargets){o=p=void 0;n.__webglMorphTargetsBuffers=[];p=0;for(o=n.numMorphTargets;p0||w.faceVertexUvs.length>0)l.__uvArray=new Float32Array(n*2);if(w.faceUvs.length>1||w.faceVertexUvs.length>1)l.__uv2Array=new Float32Array(n*2)}if(o.geometry.skinWeights.length&&o.geometry.skinIndices.length)l.__skinVertexAArray=new Float32Array(n*4),l.__skinVertexBArray=new Float32Array(n* +4),l.__skinIndexArray=new Float32Array(n*4),l.__skinWeightArray=new Float32Array(n*4);l.__faceArray=new Uint16Array(v*3);l.__lineArray=new Uint16Array(u*2);if(l.numMorphTargets){l.__morphTargetsArrays=[];w=0;for(x=l.numMorphTargets;w=0;h--)f[h]===k&&f.splice(h,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&B(f.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(f=a.__webglObjects.length;e0&&(m.bindBuffer(m.ARRAY_BUFFER,o.__webglColorBuffer),m.bufferData(m.ARRAY_BUFFER,da,v));Fa&&(m.bindBuffer(m.ARRAY_BUFFER,o.__webglNormalBuffer),m.bufferData(m.ARRAY_BUFFER,ya,v));xa&&sa.hasTangents&&(m.bindBuffer(m.ARRAY_BUFFER,o.__webglTangentBuffer),m.bufferData(m.ARRAY_BUFFER,aa, +v));za&&qa>0&&(m.bindBuffer(m.ARRAY_BUFFER,o.__webglUVBuffer),m.bufferData(m.ARRAY_BUFFER,ia,v));za&&Y>0&&(m.bindBuffer(m.ARRAY_BUFFER,o.__webglUV2Buffer),m.bufferData(m.ARRAY_BUFFER,ua,v));Ea&&(m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,o.__webglFaceBuffer),m.bufferData(m.ELEMENT_ARRAY_BUFFER,Ca,v),m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,o.__webglLineBuffer),m.bufferData(m.ELEMENT_ARRAY_BUFFER,va,v));Q>0&&(m.bindBuffer(m.ARRAY_BUFFER,o.__webglSkinVertexABuffer),m.bufferData(m.ARRAY_BUFFER,ga,v),m.bindBuffer(m.ARRAY_BUFFER, +o.__webglSkinVertexBBuffer),m.bufferData(m.ARRAY_BUFFER,ea,v),m.bindBuffer(m.ARRAY_BUFFER,o.__webglSkinIndicesBuffer),m.bufferData(m.ARRAY_BUFFER,Z,v),m.bindBuffer(m.ARRAY_BUFFER,o.__webglSkinWeightsBuffer),m.bufferData(m.ARRAY_BUFFER,ca,v));u&&(delete o.__inittedArrays,delete o.__colorArray,delete o.__normalArray,delete o.__tangentArray,delete o.__uvArray,delete o.__uv2Array,delete o.__faceArray,delete o.__vertexArray,delete o.__lineArray,delete o.__skinVertexAArray,delete o.__skinVertexBArray,delete o.__skinIndexArray, +delete o.__skinWeightArray)}k.__dirtyVertices=!1;k.__dirtyMorphTargets=!1;k.__dirtyElements=!1;k.__dirtyUvs=!1;k.__dirtyNormals=!1;k.__dirtyColors=!1;k.__dirtyTangents=!1;l.attributes&&C(l)}else if(h instanceof THREE.Ribbon){if(k.__dirtyVertices||k.__dirtyColors){h=k;l=m.DYNAMIC_DRAW;n=G=u=u=void 0;w=h.vertices;p=h.colors;t=w.length;o=p.length;y=h.__vertexArray;v=h.__colorArray;ma=h.__dirtyColors;if(h.__dirtyVertices){for(u=0;u1&&(c-=1)}e===void 0&&(e={h:0,s:0,v:0});e.h=c;e.s=k;e.v=h;return e}, -clamp:function(b,e,c){return bc?c:b}};THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(b,e){var c,f,m=b.vertices.length,h=e instanceof THREE.Mesh?e.geometry:e,k=b.vertices,n=h.vertices,p=b.faces,v=h.faces,u=b.faceVertexUvs[0],h=h.faceVertexUvs[0];if(e instanceof THREE.Mesh)e.matrixAutoUpdate&&e.updateMatrix(),c=e.matrix,f=new THREE.Matrix4,f.extractRotation(c,e.scale);for(var t=0,x=n.length;t1&&(f=1-f,m=1-m);h=1-f-m;k.copy(b);k.multiplyScalar(f);n.copy(e);n.multiplyScalar(m);k.addSelf(n);n.copy(c);n.multiplyScalar(h);k.addSelf(n);return k},randomPointInFace:function(b,e,c){var f,m,h;if(b instanceof THREE.Face3)return f=e.vertices[b.a].position,m=e.vertices[b.b].position,h=e.vertices[b.c].position,THREE.GeometryUtils.randomPointInTriangle(f,m,h);else if(b instanceof THREE.Face4){f=e.vertices[b.a].position;m=e.vertices[b.b].position;h=e.vertices[b.c].position;var e=e.vertices[b.d].position, -k;c?b._area1&&b._area2?(c=b._area1,k=b._area2):(c=THREE.GeometryUtils.triangleArea(f,m,e),k=THREE.GeometryUtils.triangleArea(m,h,e),b._area1=c,b._area2=k):(c=THREE.GeometryUtils.triangleArea(f,m,e),k=THREE.GeometryUtils.triangleArea(m,h,e));return THREE.GeometryUtils.random()*(c+k) -b?c(e,h-1):v[h]1&&(c-=1)}b===void 0&&(b={h:0,s:0,v:0});b.h=c;b.s=k;b.v=h;return b}}; +THREE.ColorUtils.__hsv={h:0,s:0,v:0}; +THREE.GeometryUtils={merge:function(a,b){for(var c,e,f=a.vertices.length,h=b instanceof THREE.Mesh?b.geometry:b,k=a.vertices,l=h.vertices,n=a.faces,p=h.faces,u=a.faceVertexUvs[0],t=h.faceVertexUvs[0],v={},o=0;o1&&(e=1-e,f=1-f);h=1-e-f;k.copy(a);k.multiplyScalar(e);l.copy(b);l.multiplyScalar(f);k.addSelf(l);l.copy(c);l.multiplyScalar(h);k.addSelf(l);return k},randomPointInFace:function(a,b,c){var e,f,h;if(a instanceof THREE.Face3)return e=b.vertices[a.a].position,f=b.vertices[a.b].position, +h=b.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(e,f,h);else if(a instanceof THREE.Face4){e=b.vertices[a.a].position;f=b.vertices[a.b].position;h=b.vertices[a.c].position;var b=b.vertices[a.d].position,k;c?a._area1&&a._area2?(c=a._area1,k=a._area2):(c=THREE.GeometryUtils.triangleArea(e,f,b),k=THREE.GeometryUtils.triangleArea(f,h,b),a._area1=c,a._area2=k):(c=THREE.GeometryUtils.triangleArea(e,f,b),k=THREE.GeometryUtils.triangleArea(f,h,b));return THREE.GeometryUtils.random()*(c+ +k)a?c(b,f-1):p[f] 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;", THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvViewPosition = -mvPosition.xyz;\nvNormal = normalize( normalMatrix * normal );\nvTangent = normalize( normalMatrix * tangent.xyz );\nvBinormal = cross( vNormal, vTangent ) * tangent.w;\nvBinormal = normalize( vBinormal );\nvUv = uv * uRepeat + uOffset;\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#ifdef VERTEX_TEXTURES\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\nvec4 displacedPosition = vec4( vNormal.xyz * df, 0.0 ) + mvPosition;\ngl_Position = projectionMatrix * displacedPosition;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif", THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:1,texture:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vViewPosition;\nvoid main() {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vViewPosition;\nvoid main() {\nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( tFlip * wPos.x, wPos.yz ) );\n}"}}}; -THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(b){return this.getPoint(this.getUtoTmapping(b))};THREE.Curve.prototype.getPoints=function(b){b||(b=5);var e,c=[];for(e=0;e<=b;e++)c.push(this.getPoint(e/b));return c};THREE.Curve.prototype.getSpacedPoints=function(b){b||(b=5);var e,c=[];for(e=0;e<=b;e++)c.push(this.getPointAt(e/b));return c}; -THREE.Curve.prototype.getLength=function(){var b=this.getLengths();return b[b.length-1]};THREE.Curve.prototype.getLengths=function(b){b||(b=200);if(this.cacheArcLengths&&this.cacheArcLengths.length==b+1)return this.cacheArcLengths;var e=[],c,f=this.getPoint(0),m,h=0;e.push(0);for(m=1;m<=b;m++)c=this.getPoint(m/b),h+=c.distanceTo(f),e.push(h),f=c;return this.cacheArcLengths=e}; -THREE.Curve.prototype.getUtoTmapping=function(b,e){var c=this.getLengths(),f=0,m=c.length,h;h=e?e:b*c[m-1];time=Date.now();for(var k=0,n=m-1,p;k<=n;)if(f=Math.floor(k+(n-k)/2),p=c[f]-h,p<0)k=f+1;else if(p>0)n=f-1;else{n=f;break}f=n;if(c[f]==h)return f/(m-1);k=c[f];return c=(f+(h-k)/(c[f+1]-k))/(m-1)};THREE.Curve.prototype.getNormalVector=function(b){b=this.getTangent(b);return new THREE.Vector2(-b.y,b.x)}; -THREE.Curve.prototype.getTangent=function(b){var e=b-1.0E-4;b+=1.0E-4;e<0&&(e=0);b>1&&(b=1);var e=this.getPoint(e),b=this.getPoint(b),c=new THREE.Vector2;c.sub(b,e);return c.unit()};THREE.LineCurve=function(b,e){b instanceof THREE.Vector2?(this.v1=b,this.v2=e):THREE.LineCurve.oldConstructor.apply(this,arguments)};THREE.LineCurve.oldConstructor=function(b,e,c,f){this.constructor(new THREE.Vector2(b,e),new THREE.Vector2(c,f))};THREE.LineCurve.prototype=new THREE.Curve; -THREE.LineCurve.prototype.constructor=THREE.LineCurve;THREE.LineCurve.prototype.getPoint=function(b){var e=new THREE.Vector2;e.sub(this.v2,this.v1);e.multiplyScalar(b).addSelf(this.v1);return e};THREE.LineCurve.prototype.getPointAt=function(b){return this.getPoint(b)};THREE.LineCurve.prototype.getTangent=function(){var b=new THREE.Vector2;b.sub(this.v2,this.v1);b.normalize();return b}; -THREE.QuadraticBezierCurve=function(b,e,c){if(!(e instanceof THREE.Vector2))var f=Array.prototype.slice.call(arguments),b=new THREE.Vector2(f[0],f[1]),e=new THREE.Vector2(f[2],f[3]),c=new THREE.Vector2(f[4],f[5]);this.v0=b;this.v1=e;this.v2=c};THREE.QuadraticBezierCurve.prototype=new THREE.Curve;THREE.QuadraticBezierCurve.prototype.constructor=THREE.QuadraticBezierCurve; -THREE.QuadraticBezierCurve.prototype.getPoint=function(b){var e;e=THREE.Shape.Utils.b2(b,this.v0.x,this.v1.x,this.v2.x);b=THREE.Shape.Utils.b2(b,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(e,b)};THREE.QuadraticBezierCurve.prototype.getTangent=function(b){var e;e=THREE.Curve.Utils.tangentQuadraticBezier(b,this.v0.x,this.v1.x,this.v2.x);b=THREE.Curve.Utils.tangentQuadraticBezier(b,this.v0.y,this.v1.y,this.v2.y);e=new THREE.Vector2(e,b);e.normalize();return e}; -THREE.CubicBezierCurve=function(b,e,c,f){if(!(e instanceof THREE.Vector2))var m=Array.prototype.slice.call(arguments),b=new THREE.Vector2(m[0],m[1]),e=new THREE.Vector2(m[2],m[3]),c=new THREE.Vector2(m[4],m[5]),f=new THREE.Vector2(m[6],m[7]);this.v0=b;this.v1=e;this.v2=c;this.v3=f};THREE.CubicBezierCurve.prototype=new THREE.Curve;THREE.CubicBezierCurve.prototype.constructor=THREE.CubicBezierCurve; -THREE.CubicBezierCurve.prototype.getPoint=function(b){var e;e=THREE.Shape.Utils.b3(b,this.v0.x,this.v1.x,this.v2.x,this.v3.x);b=THREE.Shape.Utils.b3(b,this.v0.y,this.v1.y,this.v2.y,this.v3.y);return new THREE.Vector2(e,b)};THREE.CubicBezierCurve.prototype.getTangent=function(b){var e;e=THREE.Curve.Utils.tangentCubicBezier(b,this.v0.x,this.v1.x,this.v2.x,this.v3.x);b=THREE.Curve.Utils.tangentCubicBezier(b,this.v0.y,this.v1.y,this.v2.y,this.v3.y);e=new THREE.Vector2(e,b);e.normalize();return e}; -THREE.SplineCurve=function(b){this.points=b};THREE.SplineCurve.prototype=new THREE.Curve;THREE.SplineCurve.prototype.constructor=THREE.SplineCurve; -THREE.SplineCurve.prototype.getPoint=function(b){var e=new THREE.Vector2,c=[],f=this.points,m;m=(f.length-1)*b;b=Math.floor(m);m-=b;c[0]=b==0?b:b-1;c[1]=b;c[2]=b>f.length-2?b:b+1;c[3]=b>f.length-3?b:b+2;e.x=THREE.Curve.Utils.interpolate(f[c[0]].x,f[c[1]].x,f[c[2]].x,f[c[3]].x,m);e.y=THREE.Curve.Utils.interpolate(f[c[0]].y,f[c[1]].y,f[c[2]].y,f[c[3]].y,m);return e};THREE.ArcCurve=function(b,e,c,f,m,h){this.aX=b;this.aY=e;this.aRadius=c;this.aStartAngle=f;this.aEndAngle=m;this.aClockwise=h}; -THREE.ArcCurve.prototype=new THREE.Curve;THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.ArcCurve.prototype.getPoint=function(b){var e=this.aEndAngle-this.aStartAngle;this.aClockwise||(b=1-b);b=this.aStartAngle+b*e;return new THREE.Vector2(this.aX+this.aRadius*Math.cos(b),this.aY+this.aRadius*Math.sin(b))}; -THREE.Curve.Utils={tangentQuadraticBezier:function(b,e,c,f){return 2*(1-b)*(c-e)+2*b*(f-c)},tangentCubicBezier:function(b,e,c,f,m){return-3*e*(1-b)*(1-b)+3*c*(1-b)*(1-b)-6*b*c*(1-b)+6*b*f*(1-b)-3*b*b*f+3*b*b*m},tangentSpline:function(b){return 6*b*b-6*b+(3*b*b-4*b+1)+(-6*b*b+6*b)+(3*b*b-2*b)},interpolate:function(b,e,c,f,m){var b=(c-b)*0.5,f=(f-e)*0.5,h=m*m;return(2*e-2*c+b+f)*m*h+(-3*e+3*c-2*b-f)*h+b*m+e}}; -THREE.Curve.create=function(b,e){b.prototype=new THREE.Curve;b.prototype.constructor=b;b.prototype.getPoint=e;return b};THREE.LineCurve3=THREE.Curve.create(function(b,e){this.v1=b;this.v2=e},function(b){var e=new THREE.Vector3;e.sub(v2,v1);e.multiplyScalar(b);e.addSelf(this.v1);return e}); -THREE.QuadraticBezierCurve3=THREE.Curve.create(function(b,e,c){this.v0=b;this.v1=e;this.v2=c},function(b){var e,c;e=THREE.Shape.Utils.b2(b,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(b,this.v0.y,this.v1.y,this.v2.y);b=THREE.Shape.Utils.b2(b,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(e,c,b)}); -THREE.CubicBezierCurve3=THREE.Curve.create(function(b,e,c,f){this.v0=b;this.v1=e;this.v2=c;this.v3=f},function(b){var e,c;e=THREE.Shape.Utils.b3(b,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(b,this.v0.y,this.v1.y,this.v2.y,this.v3.y);b=THREE.Shape.Utils.b3(b,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(e,c,b)}); -THREE.SplineCurve3=THREE.Curve.create(function(b){this.points=b},function(b){var e=new THREE.Vector3,c=[],f=this.points,m;m=(f.length-1)*b;b=Math.floor(m);m-=b;c[0]=b==0?b:b-1;c[1]=b;c[2]=b>f.length-2?b:b+1;c[3]=b>f.length-3?b:b+2;e.x=THREE.Curve.Utils.interpolate(f[c[0]].x,f[c[1]].x,f[c[2]].x,f[c[3]].x,m);e.y=THREE.Curve.Utils.interpolate(f[c[0]].y,f[c[1]].y,f[c[2]].y,f[c[3]].y,m);e.z=THREE.Curve.Utils.interpolate(f[c[0]].z,f[c[1]].z,f[c[2]].z,f[c[3]].z,m);return e}); -THREE.CurvePath=function(){this.curves=[];this.bends=[]};THREE.CurvePath.prototype=new THREE.Curve;THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(b){this.curves.push(b)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){}; -THREE.CurvePath.prototype.getPoint=function(b){for(var e=b*this.getLength(),c=this.getCurveLengths(),b=0;b=e)return e=c[b]-e,b=this.curves[b],e=1-e/b.getLength(),b.getPointAt(e);b++}return null};THREE.CurvePath.prototype.getLength=function(){var b=this.getCurveLengths();return b[b.length-1]}; -THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var b=[],e=0,c,f=this.curves.length;for(c=0;ce)e=h.x;else if(h.xc)c=h.y;else if(h.y0?(k=c[c.length-1],w=k.x,A=k.y):(k=this.actions[f-1].args,w=k[k.length-2],A=k[k.length-1]);for(k=1;k<=b;k++)y=k/b,h=THREE.Shape.Utils.b2(y,w,t,n),y=THREE.Shape.Utils.b2(y,A,x, -p),c.push(new THREE.Vector2(h,y));break;case THREE.PathActions.BEZIER_CURVE_TO:n=h[4];p=h[5];t=h[0];x=h[1];v=h[2];u=h[3];c.length>0?(k=c[c.length-1],w=k.x,A=k.y):(k=this.actions[f-1].args,w=k[k.length-2],A=k[k.length-1]);for(k=1;k<=b;k++)y=k/b,h=THREE.Shape.Utils.b3(y,w,t,v,n),y=THREE.Shape.Utils.b3(y,A,x,u,p),c.push(new THREE.Vector2(h,y));break;case THREE.PathActions.CSPLINE_THRU:k=this.actions[f-1].args;k=[new THREE.Vector2(k[k.length-2],k[k.length-1])];y=b*h[0].length;k=k.concat(h[0]);h=new THREE.SplineCurve(k); -for(k=1;k<=y;k++)c.push(h.getPointAt(k/y));break;case THREE.PathActions.ARC:k=this.actions[f-1].args;n=h[0];p=h[1];v=h[2];t=h[3];y=h[4];x=!!h[5];u=k[k.length-2];w=k[k.length-1];k.length==0&&(u=w=0);A=y-t;var z=b*2;for(k=1;k<=z;k++)y=k/z,x||(y=1-y),y=t+y*A,h=u+n+v*Math.cos(y),y=w+p+v*Math.sin(y),c.push(new THREE.Vector2(h,y))}e&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(b,e){this.getBoundingBox();return this.getWrapPoints(this.getPoints(e),b)}; -THREE.Path.prototype.nltransform=function(b,e,c,f,m,h){var k=this.getPoints(),n,p,v,u,t;n=0;for(p=k.length;n=0?n-1:c.length-1;h=k-1>=0?k-1:v.length-1;var y=[v[k],c[n],c[m]];t=THREE.FontUtils.Triangulate.area(y);var z=[v[k],v[h],c[n]];x=THREE.FontUtils.Triangulate.area(z);w=n;u=k;n+=1;k+=-1;n< -0&&(n+=c.length);n%=c.length;k<0&&(k+=v.length);k%=v.length;m=n-1>=0?n-1:c.length-1;h=k-1>=0?k-1:v.length-1;y=[v[k],c[n],c[m]];y=THREE.FontUtils.Triangulate.area(y);z=[v[k],v[h],c[n]];z=THREE.FontUtils.Triangulate.area(z);t+x>y+z&&(n=w,k=u,n<0&&(n+=c.length),n%=c.length,k<0&&(k+=v.length),k%=v.length,m=n-1>=0?n-1:c.length-1,h=k-1>=0?k-1:v.length-1);t=c.slice(0,n);x=c.slice(n);w=v.slice(k);u=v.slice(0,k);h=[v[k],v[h],c[n]];A.push([v[k],c[n],c[m]]);A.push(h);c=t.concat(w).concat(u).concat(x)}return{shape:c, -isolatedPts:A,allpoints:f}},triangulateShape:function(b,e){var c=THREE.Shape.Utils.removeHoles(b,e),f=c.allpoints,m=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),h,k,n,p,v={};h=0;for(k=f.length;h0)l=e-1;else{l=e;break}e=l;if(c[e]==h)return e/(f-1);k=c[e];return c=(e+(h-k)/(c[e+1]-k))/(f-1)};THREE.Curve.prototype.getNormalVector=function(a){a=this.getTangent(a);return new THREE.Vector2(-a.y,a.x)}; +THREE.Curve.prototype.getTangent=function(a){var b=a-1.0E-4;a+=1.0E-4;b<0&&(b=0);a>1&&(a=1);var b=this.getPoint(b),a=this.getPoint(a),c=new THREE.Vector2;c.sub(a,b);return c.unit()};THREE.LineCurve=function(a,b){a instanceof THREE.Vector2?(this.v1=a,this.v2=b):THREE.LineCurve.oldConstructor.apply(this,arguments)};THREE.LineCurve.oldConstructor=function(a,b,c,e){this.constructor(new THREE.Vector2(a,b),new THREE.Vector2(c,e))};THREE.LineCurve.prototype=new THREE.Curve; +THREE.LineCurve.prototype.constructor=THREE.LineCurve;THREE.LineCurve.prototype.getPoint=function(a){var b=new THREE.Vector2;b.sub(this.v2,this.v1);b.multiplyScalar(a).addSelf(this.v1);return b};THREE.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)};THREE.LineCurve.prototype.getTangent=function(){var a=new THREE.Vector2;a.sub(this.v2,this.v1);a.normalize();return a}; +THREE.QuadraticBezierCurve=function(a,b,c){if(!(b instanceof THREE.Vector2))var e=Array.prototype.slice.call(arguments),a=new THREE.Vector2(e[0],e[1]),b=new THREE.Vector2(e[2],e[3]),c=new THREE.Vector2(e[4],e[5]);this.v0=a;this.v1=b;this.v2=c};THREE.QuadraticBezierCurve.prototype=new THREE.Curve;THREE.QuadraticBezierCurve.prototype.constructor=THREE.QuadraticBezierCurve; +THREE.QuadraticBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(b,a)};THREE.QuadraticBezierCurve.prototype.getTangent=function(a){var b;b=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.y,this.v1.y,this.v2.y);b=new THREE.Vector2(b,a);b.normalize();return b}; +THREE.CubicBezierCurve=function(a,b,c,e){if(!(b instanceof THREE.Vector2))var f=Array.prototype.slice.call(arguments),a=new THREE.Vector2(f[0],f[1]),b=new THREE.Vector2(f[2],f[3]),c=new THREE.Vector2(f[4],f[5]),e=new THREE.Vector2(f[6],f[7]);this.v0=a;this.v1=b;this.v2=c;this.v3=e};THREE.CubicBezierCurve.prototype=new THREE.Curve;THREE.CubicBezierCurve.prototype.constructor=THREE.CubicBezierCurve; +THREE.CubicBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);return new THREE.Vector2(b,a)};THREE.CubicBezierCurve.prototype.getTangent=function(a){var b;b=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);b=new THREE.Vector2(b,a);b.normalize();return b}; +THREE.SplineCurve=function(a){this.points=a};THREE.SplineCurve.prototype=new THREE.Curve;THREE.SplineCurve.prototype.constructor=THREE.SplineCurve; +THREE.SplineCurve.prototype.getPoint=function(a){var b=new THREE.Vector2,c=[],e=this.points,f;f=(e.length-1)*a;a=Math.floor(f);f-=a;c[0]=a==0?a:a-1;c[1]=a;c[2]=a>e.length-2?a:a+1;c[3]=a>e.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(e[c[0]].x,e[c[1]].x,e[c[2]].x,e[c[3]].x,f);b.y=THREE.Curve.Utils.interpolate(e[c[0]].y,e[c[1]].y,e[c[2]].y,e[c[3]].y,f);return b};THREE.ArcCurve=function(a,b,c,e,f,h){this.aX=a;this.aY=b;this.aRadius=c;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=h}; +THREE.ArcCurve.prototype=new THREE.Curve;THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.ArcCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);a=this.aStartAngle+a*b;return new THREE.Vector2(this.aX+this.aRadius*Math.cos(a),this.aY+this.aRadius*Math.sin(a))}; +THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,e){return 2*(1-a)*(c-b)+2*a*(e-c)},tangentCubicBezier:function(a,b,c,e,f){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*e*(1-a)-3*a*a*e+3*a*a*f},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,e,f){var a=(c-a)*0.5,e=(e-b)*0.5,h=f*f;return(2*b-2*c+a+e)*f*h+(-3*b+3*c-2*a-e)*h+a*f+b}}; +THREE.Curve.create=function(a,b){a.prototype=new THREE.Curve;a.prototype.constructor=a;a.prototype.getPoint=b;return a};THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.sub(v2,v1);b.multiplyScalar(a);b.addSelf(this.v1);return b}); +THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)}); +THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,e){this.v0=a;this.v1=b;this.v2=c;this.v3=e},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)}); +THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=a},function(a){var b=new THREE.Vector3,c=[],e=this.points,f;f=(e.length-1)*a;a=Math.floor(f);f-=a;c[0]=a==0?a:a-1;c[1]=a;c[2]=a>e.length-2?a:a+1;c[3]=a>e.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(e[c[0]].x,e[c[1]].x,e[c[2]].x,e[c[3]].x,f);b.y=THREE.Curve.Utils.interpolate(e[c[0]].y,e[c[1]].y,e[c[2]].y,e[c[3]].y,f);b.z=THREE.Curve.Utils.interpolate(e[c[0]].z,e[c[1]].z,e[c[2]].z,e[c[3]].z,f);return b}); +THREE.CurvePath=function(){this.curves=[];this.bends=[]};THREE.CurvePath.prototype=new THREE.Curve;THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){}; +THREE.CurvePath.prototype.getPoint=function(a){for(var b=a*this.getLength(),c=this.getCurveLengths(),a=0;a=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; +THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,e=this.curves.length;for(c=0;cb)b=h.x;else if(h.xc)c=h.y;else if(h.y0?(k=c[c.length-1],o=k.x,y=k.y):(k=this.actions[e-1].args,o=k[k.length-2],y=k[k.length-1]);for(k=1;k<=a;k++)x=k/a,h=THREE.Shape.Utils.b2(x,o,t,l),x=THREE.Shape.Utils.b2(x,y,v, +n),c.push(new THREE.Vector2(h,x));break;case THREE.PathActions.BEZIER_CURVE_TO:l=h[4];n=h[5];t=h[0];v=h[1];p=h[2];u=h[3];c.length>0?(k=c[c.length-1],o=k.x,y=k.y):(k=this.actions[e-1].args,o=k[k.length-2],y=k[k.length-1]);for(k=1;k<=a;k++)x=k/a,h=THREE.Shape.Utils.b3(x,o,t,p,l),x=THREE.Shape.Utils.b3(x,y,v,u,n),c.push(new THREE.Vector2(h,x));break;case THREE.PathActions.CSPLINE_THRU:k=this.actions[e-1].args;k=[new THREE.Vector2(k[k.length-2],k[k.length-1])];x=a*h[0].length;k=k.concat(h[0]);h=new THREE.SplineCurve(k); +for(k=1;k<=x;k++)c.push(h.getPointAt(k/x));break;case THREE.PathActions.ARC:k=this.actions[e-1].args;l=h[0];n=h[1];p=h[2];t=h[3];x=h[4];v=!!h[5];u=k[k.length-2];o=k[k.length-1];k.length==0&&(u=o=0);y=x-t;var w=a*2;for(k=1;k<=w;k++)x=k/w,v||(x=1-x),x=t+x*y,h=u+l+p*Math.cos(x),x=o+n+p*Math.sin(x),c.push(new THREE.Vector2(h,x))}b&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(a,b){this.getBoundingBox();return this.getWrapPoints(this.getPoints(b),a)}; +THREE.Path.prototype.nltransform=function(a,b,c,e,f,h){var k=this.getPoints(),l,n,p,u,t;l=0;for(n=k.length;l=0?l-1:c.length-1;h=k-1>=0?k-1:p.length-1;var x=[p[k],c[l],c[f]];t=THREE.FontUtils.Triangulate.area(x);var w=[p[k],p[h],c[l]];v=THREE.FontUtils.Triangulate.area(w);o=l;u=k;l+=1;k+=-1;l< +0&&(l+=c.length);l%=c.length;k<0&&(k+=p.length);k%=p.length;f=l-1>=0?l-1:c.length-1;h=k-1>=0?k-1:p.length-1;x=[p[k],c[l],c[f]];x=THREE.FontUtils.Triangulate.area(x);w=[p[k],p[h],c[l]];w=THREE.FontUtils.Triangulate.area(w);t+v>x+w&&(l=o,k=u,l<0&&(l+=c.length),l%=c.length,k<0&&(k+=p.length),k%=p.length,f=l-1>=0?l-1:c.length-1,h=k-1>=0?k-1:p.length-1);t=c.slice(0,l);v=c.slice(l);o=p.slice(k);u=p.slice(0,k);h=[p[k],p[h],c[l]];y.push([p[k],c[l],c[f]]);y.push(h);c=t.concat(o).concat(u).concat(v)}return{shape:c, +isolatedPts:y,allpoints:e}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),e=c.allpoints,f=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),h,k,l,n,p={};h=0;for(k=e.length;h1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+f+" on bone "+w),f=f<0?0:1;if(c==="pos")if(c=b.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=m[0]+(h[0]-m[0])*f,c.y=m[1]+(h[1]-m[1])*f,c.z=m[2]+(h[2]-m[2])*f;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= -this.getPrevKeyWith("pos",w,k.index-1).pos,this.points[1]=m,this.points[2]=h,this.points[3]=this.getNextKeyWith("pos",w,n.index+1).pos,f=f*0.33+0.33,m=this.interpolateCatmullRom(this.points,f),c.x=m[0],c.y=m[1],c.z=m[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)f=this.interpolateCatmullRom(this.points,f*1.01),this.target.set(f[0],f[1],f[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),f=Math.atan2(this.target.x,this.target.z),b.rotation.set(0,f,0)}else if(c=== -"rot")THREE.Quaternion.slerp(m,h,b.quaternion,f);else if(c==="scl")c=b.scale,c.x=m[0]+(h[0]-m[0])*f,c.y=m[1]+(h[1]-m[1])*f,c.z=m[2]+(h[2]-m[2])*f}}if(this.JITCompile&&u[0][v]===void 0){this.hierarchy[0].update(void 0,!0);for(w=0;wb.length-2?h:h+1;c[3]=h>b.length-3?h:h+2;h=b[c[0]];n=b[c[1]];p=b[c[2]];v=b[c[3]];c=m*m;k=m*c;f[0]=this.interpolate(h[0],n[0],p[0],v[0],m,c,k);f[1]=this.interpolate(h[1],n[1],p[1],v[1],m,c,k);f[2]=this.interpolate(h[2],n[2],p[2],v[2],m,c,k);return f}; -THREE.Animation.prototype.interpolate=function(b,e,c,f,m,h,k){b=(c-b)*0.5;f=(f-e)*0.5;return(2*(e-c)+b+f)*k+(-3*(e-c)-2*b-f)*h+b*m+e};THREE.Animation.prototype.getNextKeyWith=function(b,e,c){var f=this.data.hierarchy[e].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c=c0?c:0:c>=0?c:c+f.length;c>=0;c--)if(f[c][b]!==void 0)return f[c];return this.data.hierarchy[e].keys[f.length-1]}; -THREE.CubeCamera=function(b,e,c,f){this.heightOffset=c;this.position=new THREE.Vector3(0,c,0);this.cameraPX=new THREE.PerspectiveCamera(90,1,b,e);this.cameraNX=new THREE.PerspectiveCamera(90,1,b,e);this.cameraPY=new THREE.PerspectiveCamera(90,1,b,e);this.cameraNY=new THREE.PerspectiveCamera(90,1,b,e);this.cameraPZ=new THREE.PerspectiveCamera(90,1,b,e);this.cameraNZ=new THREE.PerspectiveCamera(90,1,b,e);this.cameraPX.position=this.position;this.cameraNX.position=this.position;this.cameraPY.position= +THREE.Animation.prototype.stop=function(){this.isPaused=this.isPlaying=!1;THREE.AnimationHandler.removeFromUpdate(this);for(var a=0;a1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+e+" on bone "+o),e=e<0?0:1;if(c==="pos")if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=f[0]+(h[0]-f[0])*e,c.y=f[1]+(h[1]-f[1])*e,c.z=f[2]+(h[2]-f[2])*e;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= +this.getPrevKeyWith("pos",o,k.index-1).pos,this.points[1]=f,this.points[2]=h,this.points[3]=this.getNextKeyWith("pos",o,l.index+1).pos,e=e*0.33+0.33,f=this.interpolateCatmullRom(this.points,e),c.x=f[0],c.y=f[1],c.z=f[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)e=this.interpolateCatmullRom(this.points,e*1.01),this.target.set(e[0],e[1],e[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),e=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,e,0)}else if(c=== +"rot")THREE.Quaternion.slerp(f,h,a.quaternion,e);else if(c==="scl")c=a.scale,c.x=f[0]+(h[0]-f[0])*e,c.y=f[1]+(h[1]-f[1])*e,c.z=f[2]+(h[2]-f[2])*e}}if(this.JITCompile&&u[0][p]===void 0){this.hierarchy[0].update(void 0,!0);for(o=0;oa.length-2?h:h+1;c[3]=h>a.length-3?h:h+2;h=a[c[0]];l=a[c[1]];n=a[c[2]];p=a[c[3]];c=f*f;k=f*c;e[0]=this.interpolate(h[0],l[0],n[0],p[0],f,c,k);e[1]=this.interpolate(h[1],l[1],n[1],p[1],f,c,k);e[2]=this.interpolate(h[2],l[2],n[2],p[2],f,c,k);return e}; +THREE.Animation.prototype.interpolate=function(a,b,c,e,f,h,k){a=(c-a)*0.5;e=(e-b)*0.5;return(2*(b-c)+a+e)*k+(-3*(b-c)-2*a-e)*h+a*f+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){var e=this.data.hierarchy[b].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c=c0?c:0:c>=0?c:c+e.length;c>=0;c--)if(e[c][a]!==void 0)return e[c];return this.data.hierarchy[b].keys[e.length-1]}; +THREE.CubeCamera=function(a,b,c,e){this.heightOffset=c;this.position=new THREE.Vector3(0,c,0);this.cameraPX=new THREE.PerspectiveCamera(90,1,a,b);this.cameraNX=new THREE.PerspectiveCamera(90,1,a,b);this.cameraPY=new THREE.PerspectiveCamera(90,1,a,b);this.cameraNY=new THREE.PerspectiveCamera(90,1,a,b);this.cameraPZ=new THREE.PerspectiveCamera(90,1,a,b);this.cameraNZ=new THREE.PerspectiveCamera(90,1,a,b);this.cameraPX.position=this.position;this.cameraNX.position=this.position;this.cameraPY.position= this.position;this.cameraNY.position=this.position;this.cameraPZ.position=this.position;this.cameraNZ.position=this.position;this.cameraPX.up.set(0,-1,0);this.cameraNX.up.set(0,-1,0);this.cameraPY.up.set(0,0,1);this.cameraNY.up.set(0,0,-1);this.cameraPZ.up.set(0,-1,0);this.cameraNZ.up.set(0,-1,0);this.targetPX=new THREE.Vector3(0,0,0);this.targetNX=new THREE.Vector3(0,0,0);this.targetPY=new THREE.Vector3(0,0,0);this.targetNY=new THREE.Vector3(0,0,0);this.targetPZ=new THREE.Vector3(0,0,0);this.targetNZ= -new THREE.Vector3(0,0,0);this.renderTarget=new THREE.WebGLRenderTargetCube(f,f,{format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter});this.updatePosition=function(b){this.position.copy(b);this.position.y+=this.heightOffset;this.targetPX.copy(this.position);this.targetNX.copy(this.position);this.targetPY.copy(this.position);this.targetNY.copy(this.position);this.targetPZ.copy(this.position);this.targetNZ.copy(this.position);this.targetPX.x+=1;this.targetNX.x-=1;this.targetPY.y+= -1;this.targetNY.y-=1;this.targetPZ.z+=1;this.targetNZ.z-=1;this.cameraPX.lookAt(this.targetPX);this.cameraNX.lookAt(this.targetNX);this.cameraPY.lookAt(this.targetPY);this.cameraNY.lookAt(this.targetNY);this.cameraPZ.lookAt(this.targetPZ);this.cameraNZ.lookAt(this.targetNZ)};this.updateCubeMap=function(b,c){var e=this.renderTarget;e.activeCubeFace=0;b.render(c,this.cameraPX,e);e.activeCubeFace=1;b.render(c,this.cameraNX,e);e.activeCubeFace=2;b.render(c,this.cameraPY,e);e.activeCubeFace=3;b.render(c, -this.cameraNY,e);e.activeCubeFace=4;b.render(c,this.cameraPZ,e);e.activeCubeFace=5;b.render(c,this.cameraNZ,e)}};THREE.FirstPersonCamera=function(){console.warn("DEPRECATED: FirstPersonCamera() is FirstPersonControls().")};THREE.PathCamera=function(){console.warn("DEPRECATED: PathCamera() is PathControls().")};THREE.FlyCamera=function(){console.warn("DEPRECATED: FlyCamera() is FlyControls().")};THREE.RollCamera=function(){console.warn("DEPRECATED: RollCamera() is RollControls().")}; -THREE.TrackballCamera=function(){console.warn("DEPRECATED: TrackballCamera() is TrackballControls().")};THREE.CombinedCamera=function(b,e,c,f,m,h,k){THREE.Camera.call(this);this.cameraO=new THREE.OrthographicCamera(b/-2,b/2,e/2,e/-2,h,k);this.cameraP=new THREE.PerspectiveCamera(c,b/e,f,m);this.toPerspective()};THREE.CombinedCamera.prototype=new THREE.Camera;THREE.CombinedCamera.prototype.constructor=THREE.CoolCamera; -THREE.CombinedCamera.prototype.toPerspective=function(){this.near=this.cameraP.near;this.far=this.cameraP.far;this.projectionMatrix=this.cameraP.projectionMatrix};THREE.CombinedCamera.prototype.toOrthographic=function(){this.near=this.cameraO.near;this.far=this.cameraO.far;this.projectionMatrix=this.cameraO.projectionMatrix};THREE.CombinedCamera.prototype.setFov=function(b){this.cameraP.fov=b;this.cameraP.updateProjectionMatrix();this.toPerspective()}; -THREE.CombinedCamera.prototype.setLens=function(b,e){e||(e=43.25);var c=2*Math.atan(e/(b*2));c*=180/Math.PI;this.setFov(c);return c}; -THREE.FirstPersonControls=function(b,e){function c(b,c){return function(){c.apply(b,arguments)}}this.object=b;this.target=new THREE.Vector3(0,0,0);this.domElement=e!==void 0?e:document;this.movementSpeed=1;this.lookSpeed=0.0050;this.noFly=!1;this.lookVertical=!0;this.autoForward=!1;this.activeLook=!0;this.heightSpeed=!1;this.heightCoef=1;this.heightMin=0;this.constrainVertical=!1;this.verticalMin=0;this.verticalMax=Math.PI;this.lastUpdate=(new Date).getTime();this.theta=this.phi=this.lon=this.lat= -this.mouseY=this.mouseX=this.autoSpeedFactor=this.tdiff=0;this.mouseDragOn=this.freeze=this.moveRight=this.moveLeft=this.moveBackward=this.moveForward=!1;this.domElement===document?(this.viewHalfX=window.innerWidth/2,this.viewHalfY=window.innerHeight/2):(this.viewHalfX=this.domElement.offsetWidth/2,this.viewHalfY=this.domElement.offsetHeight/2,this.domElement.setAttribute("tabindex",-1));this.onMouseDown=function(b){this.domElement!==document&&this.domElement.focus();b.preventDefault();b.stopPropagation(); -if(this.activeLook)switch(b.button){case 0:this.moveForward=!0;break;case 2:this.moveBackward=!0}this.mouseDragOn=!0};this.onMouseUp=function(b){b.preventDefault();b.stopPropagation();if(this.activeLook)switch(b.button){case 0:this.moveForward=!1;break;case 2:this.moveBackward=!1}this.mouseDragOn=!1};this.onMouseMove=function(b){this.domElement===document?(this.mouseX=b.pageX-this.viewHalfX,this.mouseY=b.pageY-this.viewHalfY):(this.mouseX=b.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY= -b.pageY-this.domElement.offsetTop-this.viewHalfY)};this.onKeyDown=function(b){switch(b.keyCode){case 38:case 87:this.moveForward=!0;break;case 37:case 65:this.moveLeft=!0;break;case 40:case 83:this.moveBackward=!0;break;case 39:case 68:this.moveRight=!0;break;case 82:this.moveUp=!0;break;case 70:this.moveDown=!0;break;case 81:this.freeze=!this.freeze}};this.onKeyUp=function(b){switch(b.keyCode){case 38:case 87:this.moveForward=!1;break;case 37:case 65:this.moveLeft=!1;break;case 40:case 83:this.moveBackward= -!1;break;case 39:case 68:this.moveRight=!1;break;case 82:this.moveUp=!1;break;case 70:this.moveDown=!1}};this.update=function(){var b=(new Date).getTime();this.tdiff=(b-this.lastUpdate)/1E3;this.lastUpdate=b;if(!this.freeze){this.autoSpeedFactor=this.heightSpeed?this.tdiff*((this.object.position.ythis.heightMax?this.heightMax:this.object.position.y)-this.heightMin)*this.heightCoef:0;var c=this.tdiff*this.movementSpeed;(this.moveForward||this.autoForward&& -!this.moveBackward)&&this.object.translateZ(-(c+this.autoSpeedFactor));this.moveBackward&&this.object.translateZ(c);this.moveLeft&&this.object.translateX(-c);this.moveRight&&this.object.translateX(c);this.moveUp&&this.object.translateY(c);this.moveDown&&this.object.translateY(-c);c=this.tdiff*this.lookSpeed;this.activeLook||(c=0);this.lon+=this.mouseX*c;this.lookVertical&&(this.lat-=this.mouseY*c);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon* -Math.PI/180;var b=this.target,e=this.object.position;b.x=e.x+100*Math.sin(this.phi)*Math.cos(this.theta);b.y=e.y+100*Math.cos(this.phi);b.z=e.z+100*Math.sin(this.phi)*Math.sin(this.theta)}b=1;this.constrainVertical&&(b=Math.PI/(this.verticalMax-this.verticalMin));this.lon+=this.mouseX*c;this.lookVertical&&(this.lat-=this.mouseY*c*b);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;if(this.constrainVertical)this.phi=(this.phi-0)*(this.verticalMax- -this.verticalMin)/(Math.PI-0)+this.verticalMin;b=this.target;e=this.object.position;b.x=e.x+100*Math.sin(this.phi)*Math.cos(this.theta);b.y=e.y+100*Math.cos(this.phi);b.z=e.z+100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(b)};this.domElement.addEventListener("contextmenu",function(b){b.preventDefault()},!1);this.domElement.addEventListener("mousemove",c(this,this.onMouseMove),!1);this.domElement.addEventListener("mousedown",c(this,this.onMouseDown),!1);this.domElement.addEventListener("mouseup", -c(this,this.onMouseUp),!1);this.domElement.addEventListener("keydown",c(this,this.onKeyDown),!1);this.domElement.addEventListener("keyup",c(this,this.onKeyUp),!1)}; -THREE.PathControls=function(b,e){function c(b){if((b*=2)<1)return 0.5*b*b;return-0.5*(--b*(b-2)-1)}function f(b,c){return function(){c.apply(b,arguments)}}function m(b,c,e,f){var h={name:e,fps:0.6,length:f,hierarchy:[]},k,m=c.getControlPointsArray(),n=c.getLength(),z=m.length,F=0;k=z-1;c={parent:-1,keys:[]};c.keys[0]={time:0,pos:m[0],rot:[0,0,0,1],scl:[1,1,1]};c.keys[k]={time:f,pos:m[k],rot:[0,0,0,1],scl:[1,1,1]};for(k=1;k=0?b:b+k;b=this.verticalAngleMap.srcRange; -e=this.verticalAngleMap.dstRange;var f=e[1]-e[0];this.phi=c(((this.phi-b[0])*(e[1]-e[0])/(b[1]-b[0])+e[0]-e[0])/f)*f+e[0];b=this.horizontalAngleMap.srcRange;e=this.horizontalAngleMap.dstRange;f=e[1]-e[0];this.theta=c(((this.theta-b[0])*(e[1]-e[0])/(b[1]-b[0])+e[0]-e[0])/f)*f+e[0];b=this.target.position;b.x=100*Math.sin(this.phi)*Math.cos(this.theta);b.y=100*Math.cos(this.phi);b.z=100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(this.target.position)};this.onMouseMove=function(b){this.domElement=== -document?(this.mouseX=b.pageX-this.viewHalfX,this.mouseY=b.pageY-this.viewHalfY):(this.mouseX=b.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY=b.pageY-this.domElement.offsetTop-this.viewHalfY)};this.init=function(){this.spline=new THREE.Spline;this.spline.initFromArray(this.waypoints);this.useConstantSpeed&&this.spline.reparametrizeByArcLength(this.resamplingCoef);if(this.createDebugDummy){var b=new THREE.MeshLambertMaterial({color:30719}),c=new THREE.MeshLambertMaterial({color:65280}), -e=new THREE.CubeGeometry(10,10,20),k=new THREE.CubeGeometry(2,2,10);this.animationParent=new THREE.Mesh(e,b);b=new THREE.Mesh(k,c);b.position.set(0,10,0);this.animation=m(this.animationParent,this.spline,this.id,this.duration);this.animationParent.add(this.object);this.animationParent.add(this.target);this.animationParent.add(b)}else this.animation=m(this.animationParent,this.spline,this.id,this.duration),this.animationParent.add(this.target),this.animationParent.add(this.object);if(this.createDebugPath){var b= -this.debugPath,c=this.spline,e=h(c,10),k=h(c,10),n=new THREE.LineBasicMaterial({color:16711680,linewidth:3});lineObj=new THREE.Line(e,n);particleObj=new THREE.ParticleSystem(k,new THREE.ParticleBasicMaterial({color:16755200,size:3}));lineObj.scale.set(1,1,1);b.add(lineObj);particleObj.scale.set(1,1,1);b.add(particleObj);k=new THREE.SphereGeometry(1,16,8);n=new THREE.MeshBasicMaterial({color:65280});for(i=0;i0){var c=this.getContainerDimensions(),e=c.size[0]/2,k=c.size[1]/2;this.moveState.yawLeft=-(b.pageX-c.offset[0]-e)/e;this.moveState.pitchDown=(b.pageY-c.offset[1]-k)/k;this.updateRotationVector()}};this.mouseup=function(b){b.preventDefault();b.stopPropagation();if(this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else switch(b.button){case 0:this.moveForward= -!1;break;case 2:this.moveBackward=!1}this.updateRotationVector()};this.update=function(){var b=(new Date).getTime();if(this.lastUpdate==-1)this.lastUpdate=b;this.tdiff=(b-this.lastUpdate)/1E3;this.lastUpdate=b;var b=this.tdiff*this.movementSpeed,c=this.tdiff*this.rollSpeed;this.object.translateX(this.moveVector.x*b);this.object.translateY(this.moveVector.y*b);this.object.translateZ(this.moveVector.z*b);this.tmpQuaternion.set(this.rotationVector.x*c,this.rotationVector.y*c,this.rotationVector.z*c, -1).normalize();this.object.quaternion.multiplySelf(this.tmpQuaternion);this.object.matrix.setPosition(this.object.position);this.object.matrix.setRotationFromQuaternion(this.object.quaternion);this.object.matrixWorldNeedsUpdate=!0};this.updateMovementVector=function(){var b=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right;this.moveVector.y=-this.moveState.down+this.moveState.up;this.moveVector.z=-b+this.moveState.back}; -this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp;this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft;this.rotationVector.z=-this.moveState.rollRight+this.moveState.rollLeft};this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0, -0]}};this.domElement.addEventListener("mousemove",c(this,this.mousemove),!1);this.domElement.addEventListener("mousedown",c(this,this.mousedown),!1);this.domElement.addEventListener("mouseup",c(this,this.mouseup),!1);this.domElement.addEventListener("keydown",c(this,this.keydown),!1);this.domElement.addEventListener("keyup",c(this,this.keyup),!1);this.updateMovementVector();this.updateRotationVector()}; -THREE.RollControls=function(b,e){this.object=b;this.domElement=e!==void 0?e:document;this.mouseLook=!0;this.autoForward=!1;this.rollSpeed=this.movementSpeed=this.lookSpeed=1;this.constrainVertical=[-0.9,0.9];this.object.matrixAutoUpdate=!1;this.forward=new THREE.Vector3(0,0,1);this.roll=0;this.lastUpdate=-1;this.delta=0;var c=new THREE.Vector3,f=new THREE.Vector3,m=new THREE.Vector3,h=new THREE.Matrix4,k=!1,n=1,p=0,v=0,u=0,t=0,x=0,w=window.innerWidth/2,A=window.innerHeight/2;this.update=function(){var b= -(new Date).getTime();if(this.lastUpdate==-1)this.lastUpdate=b;this.delta=(b-this.lastUpdate)/1E3;this.lastUpdate=b;this.mouseLook&&(b=this.delta*this.lookSpeed,this.rotateHorizontally(b*t),this.rotateVertically(b*x));b=this.delta*this.movementSpeed;this.object.translateZ(-b*(p>0||this.autoForward&&!(p<0)?1:p));this.object.translateX(b*v);this.object.translateY(b*u);k&&(this.roll+=this.rollSpeed*this.delta*n);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize(); -else if(this.forward.y1?f.normalize():f.z=Math.sqrt(1-h*h);k.copy(c.object.position).subSelf(c.target);h=c.object.up.clone().setLength(f.y);h.addSelf(c.object.up.clone().crossSelf(k).setLength(f.x));h.addSelf(k.setLength(f.z));return h};this.rotateCamera=function(){var b=Math.acos(n.dot(p)/n.length()/p.length());if(b){var e=(new THREE.Vector3).cross(n,p).normalize(),f=new THREE.Quaternion;b*=c.rotateSpeed;f.setFromAxisAngle(e,-b);f.multiplyVector3(k); -f.multiplyVector3(c.object.up);f.multiplyVector3(p);c.staticMoving?n=p:(f.setFromAxisAngle(e,b*(c.dynamicDampingFactor-1)),f.multiplyVector3(n))}};this.zoomCamera=function(){var b=1+(u.y-v.y)*c.zoomSpeed;b!==1&&b>0&&(k.multiplyScalar(b),c.staticMoving?v=u:v.y+=(u.y-v.y)*this.dynamicDampingFactor)};this.panCamera=function(){var b=x.clone().subSelf(t);if(b.lengthSq()){b.multiplyScalar(k.length()*c.panSpeed);var e=k.clone().crossSelf(c.object.up).setLength(b.x);e.addSelf(c.object.up.clone().setLength(b.y)); -c.object.position.addSelf(e);c.target.addSelf(e);c.staticMoving?t=x:t.addSelf(b.sub(x,t).multiplyScalar(c.dynamicDampingFactor))}};this.checkDistances=function(){if(!c.noZoom||!c.noPan)c.object.position.lengthSq()>c.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),k.lengthSq()0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,k,0)));for(n=0;n0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-k,0)));for(n=0;nb&&(b+=Math.PI*2),anglec=(c+b)/2,new THREE.Vector2(-Math.cos(anglec),-Math.sin(anglec));return f.multiplyScalar(m).addSelf(n).subSelf(b).clone()}function m(b){for(I=b.length;--I>=0;){pa=I;ra=I-1;ra<0&&(ra=b.length- -1);for(var c=0,e=w+u*2,c=0;c=0;aa--){Z=aa/u;S=p*(1-Z);Z=v*Math.sin(Z*Math.PI/2);I=0;for(K=D.length;I=0?a:a+k;b=this.verticalAngleMap.srcRange; +a=this.verticalAngleMap.dstRange;b=THREE.Math.mapLinear(this.phi,b[0],b[1],a[0],a[1]);var e=a[1]-a[0];this.phi=c((b-a[0])/e)*e+a[0];b=this.horizontalAngleMap.srcRange;a=this.horizontalAngleMap.dstRange;b=THREE.Math.mapLinear(this.theta,b[0],b[1],a[0],a[1]);e=a[1]-a[0];this.theta=c((b-a[0])/e)*e+a[0];a=this.target.position;a.x=100*Math.sin(this.phi)*Math.cos(this.theta);a.y=100*Math.cos(this.phi);a.z=100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(this.target.position)};this.onMouseMove= +function(a){this.domElement===document?(this.mouseX=a.pageX-this.viewHalfX,this.mouseY=a.pageY-this.viewHalfY):(this.mouseX=a.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY=a.pageY-this.domElement.offsetTop-this.viewHalfY)};this.init=function(){this.spline=new THREE.Spline;this.spline.initFromArray(this.waypoints);this.useConstantSpeed&&this.spline.reparametrizeByArcLength(this.resamplingCoef);if(this.createDebugDummy){var a=new THREE.MeshLambertMaterial({color:30719}),c=new THREE.MeshLambertMaterial({color:65280}), +b=new THREE.CubeGeometry(10,10,20),k=new THREE.CubeGeometry(2,2,10);this.animationParent=new THREE.Mesh(b,a);a=new THREE.Mesh(k,c);a.position.set(0,10,0);this.animation=f(this.animationParent,this.spline,this.id,this.duration);this.animationParent.add(this.object);this.animationParent.add(this.target);this.animationParent.add(a)}else this.animation=f(this.animationParent,this.spline,this.id,this.duration),this.animationParent.add(this.target),this.animationParent.add(this.object);if(this.createDebugPath){var a= +this.debugPath,c=this.spline,b=h(c,10),k=h(c,10),l=new THREE.LineBasicMaterial({color:16711680,linewidth:3});lineObj=new THREE.Line(b,l);particleObj=new THREE.ParticleSystem(k,new THREE.ParticleBasicMaterial({color:16755200,size:3}));lineObj.scale.set(1,1,1);a.add(lineObj);particleObj.scale.set(1,1,1);a.add(particleObj);k=new THREE.SphereGeometry(1,16,8);l=new THREE.MeshBasicMaterial({color:65280});for(i=0;i0){var c=this.getContainerDimensions(),b=c.size[0]/2,k=c.size[1]/2;this.moveState.yawLeft=-(a.pageX-c.offset[0]-b)/b;this.moveState.pitchDown=(a.pageY-c.offset[1]-k)/k;this.updateRotationVector()}};this.mouseup=function(a){a.preventDefault();a.stopPropagation();if(this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else switch(a.button){case 0:this.moveForward= +!1;break;case 2:this.moveBackward=!1}this.updateRotationVector()};this.update=function(a){var c=a*this.movementSpeed;a*=this.rollSpeed;this.object.translateX(this.moveVector.x*c);this.object.translateY(this.moveVector.y*c);this.object.translateZ(this.moveVector.z*c);this.tmpQuaternion.set(this.rotationVector.x*a,this.rotationVector.y*a,this.rotationVector.z*a,1).normalize();this.object.quaternion.multiplySelf(this.tmpQuaternion);this.object.matrix.setPosition(this.object.position);this.object.matrix.setRotationFromQuaternion(this.object.quaternion); +this.object.matrixWorldNeedsUpdate=!0};this.updateMovementVector=function(){var a=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right;this.moveVector.y=-this.moveState.down+this.moveState.up;this.moveVector.z=-a+this.moveState.back};this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp;this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft;this.rotationVector.z= +-this.moveState.rollRight+this.moveState.rollLeft};this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}};this.domElement.addEventListener("mousemove",c(this,this.mousemove),!1);this.domElement.addEventListener("mousedown",c(this,this.mousedown),!1);this.domElement.addEventListener("mouseup",c(this, +this.mouseup),!1);this.domElement.addEventListener("keydown",c(this,this.keydown),!1);this.domElement.addEventListener("keyup",c(this,this.keyup),!1);this.updateMovementVector();this.updateRotationVector()}; +THREE.RollControls=function(a,b){this.object=a;this.domElement=b!==void 0?b:document;this.mouseLook=!0;this.autoForward=!1;this.rollSpeed=this.movementSpeed=this.lookSpeed=1;this.constrainVertical=[-0.9,0.9];this.object.matrixAutoUpdate=!1;this.forward=new THREE.Vector3(0,0,1);this.roll=0;var c=new THREE.Vector3,e=new THREE.Vector3,f=new THREE.Vector3,h=new THREE.Matrix4,k=!1,l=1,n=0,p=0,u=0,t=0,v=0,o=window.innerWidth/2,y=window.innerHeight/2;this.update=function(a){if(this.mouseLook){var b=a*this.lookSpeed; +this.rotateHorizontally(b*t);this.rotateVertically(b*v)}b=a*this.movementSpeed;this.object.translateZ(-b*(n>0||this.autoForward&&!(n<0)?1:n));this.object.translateX(b*p);this.object.translateY(b*u);k&&(this.roll+=this.rollSpeed*a*l);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y1?b.normalize():b.z=Math.sqrt(1-e*e);h.copy(this.object.position).subSelf(this.target);e=this.object.up.clone().setLength(b.y);e.addSelf(this.object.up.clone().crossSelf(h).setLength(b.x));e.addSelf(h.setLength(b.z));return e};this.rotateCamera=function(){var a=Math.acos(k.dot(l)/k.length()/l.length());if(a){var c=(new THREE.Vector3).cross(k,l).normalize(),b=new THREE.Quaternion;a*=this.rotateSpeed;b.setFromAxisAngle(c, +-a);b.multiplyVector3(h);b.multiplyVector3(this.object.up);b.multiplyVector3(l);this.staticMoving?k=l:(b.setFromAxisAngle(c,a*(this.dynamicDampingFactor-1)),b.multiplyVector3(k))}};this.zoomCamera=function(){var a=1+(p.y-n.y)*this.zoomSpeed;a!==1&&a>0&&(h.multiplyScalar(a),this.staticMoving?n=p:n.y+=(p.y-n.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=t.clone().subSelf(u);if(a.lengthSq()){a.multiplyScalar(h.length()*this.panSpeed);var c=h.clone().crossSelf(this.object.up).setLength(a.x); +c.addSelf(this.object.up.clone().setLength(a.y));this.object.position.addSelf(c);this.target.addSelf(c);this.staticMoving?u=t:u.addSelf(a.sub(t,u).multiplyScalar(this.dynamicDampingFactor))}};this.checkDistances=function(){if(!this.noZoom||!this.noPan)this.object.position.lengthSq()>this.maxDistance*this.maxDistance&&this.object.position.setLength(this.maxDistance),h.lengthSq()0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,k,0)));for(l=0;l0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-k,0)));for(l=0;la&&(a+=Math.PI*2),anglec=(c+a)/2,new THREE.Vector2(-Math.cos(anglec),-Math.sin(anglec));return e.multiplyScalar(f).addSelf(l).subSelf(a).clone()}function f(a){for(I=a.length;--I>=0;){ja=I;ca=I-1;ca<0&&(ca=a.length- +1);for(var c=0,b=o+u*2,c=0;c=0;L--){T=L/u;S=n*(1-T);T=p*Math.sin(T*Math.PI/2);I=0;for(P=z.length;I0||(u=this.vertices.push(new THREE.Vertex(new THREE.Vector3(t,n,x)))-1);v.push(u)}e.push(v)}for(var w,A,y,m=e.length,c=0;c0)for(f=0;f1&&(w= -this.vertices[k].position.clone(),A=this.vertices[p].position.clone(),y=this.vertices[v].position.clone(),w.normalize(),A.normalize(),y.normalize(),this.faces.push(new THREE.Face3(k,p,v,[new THREE.Vector3(w.x,w.y,w.z),new THREE.Vector3(A.x,A.y,A.z),new THREE.Vector3(y.x,y.y,y.z)])),this.faceVertexUvs[0].push([u,t,z]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:b}};THREE.SphereGeometry.prototype=new THREE.Geometry; +THREE.SphereGeometry=function(a,b,c){THREE.Geometry.call(this);for(var a=a||50,e,f=Math.PI,h=Math.max(3,b||8),k=Math.max(2,c||6),b=[],c=0;c0||(u=this.vertices.push(new THREE.Vertex(new THREE.Vector3(t,l,v)))-1);p.push(u)}b.push(p)}for(var o,y,x,f=b.length,c=0;c0)for(e=0;e1&&(o= +this.vertices[k].position.clone(),y=this.vertices[n].position.clone(),x=this.vertices[p].position.clone(),o.normalize(),y.normalize(),x.normalize(),this.faces.push(new THREE.Face3(k,n,p,[new THREE.Vector3(o.x,o.y,o.z),new THREE.Vector3(y.x,y.y,y.z),new THREE.Vector3(x.x,x.y,x.z)])),this.faceVertexUvs[0].push([u,t,w]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};THREE.SphereGeometry.prototype=new THREE.Geometry; THREE.SphereGeometry.prototype.constructor=THREE.SphereGeometry; -THREE.TextGeometry=function(b,e){var c=(new THREE.TextPath(b,e)).toShapes();e.amount=e.height!==void 0?e.height:50;if(e.bevelThickness===void 0)e.bevelThickness=10;if(e.bevelSize===void 0)e.bevelSize=8;if(e.bevelEnabled===void 0)e.bevelEnabled=!1;if(e.bend){var f=c[c.length-1].getBoundingBox().maxX;e.bendPath=new THREE.QuadraticBezierCurve(new THREE.Vector2(0,0),new THREE.Vector2(f/2,120),new THREE.Vector2(f,0))}THREE.ExtrudeGeometry.call(this,c,e)};THREE.TextGeometry.prototype=new THREE.ExtrudeGeometry; +THREE.TextGeometry=function(a,b){var c=(new THREE.TextPath(a,b)).toShapes();b.amount=b.height!==void 0?b.height:50;if(b.bevelThickness===void 0)b.bevelThickness=10;if(b.bevelSize===void 0)b.bevelSize=8;if(b.bevelEnabled===void 0)b.bevelEnabled=!1;if(b.bend){var e=c[c.length-1].getBoundingBox().maxX;b.bendPath=new THREE.QuadraticBezierCurve(new THREE.Vector2(0,0),new THREE.Vector2(e/2,120),new THREE.Vector2(e,0))}THREE.ExtrudeGeometry.call(this,c,b)};THREE.TextGeometry.prototype=new THREE.ExtrudeGeometry; THREE.TextGeometry.prototype.constructor=THREE.TextGeometry; -THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size:150,divisions:10,getFace:function(){return this.faces[this.face][this.weight][this.style]},getTextShapes:function(b,e){return(new TextPath(b,e)).toShapes()},loadFace:function(b){var e=b.familyName.toLowerCase();this.faces[e]=this.faces[e]||{};this.faces[e][b.cssFontWeight]=this.faces[e][b.cssFontWeight]||{};this.faces[e][b.cssFontWeight][b.cssFontStyle]=b;return this.faces[e][b.cssFontWeight][b.cssFontStyle]=b},drawText:function(b){for(var e= -this.getFace(),c=this.size/e.resolution,f=0,m=String(b).split(""),h=m.length,k=[],b=0;b0)for(v=0;v2;){if(t--<=0){console.log("Warning, unable to triangulate polygon!");if(f)return n;return h}p=v;m<=p&&(p=0);v=p+1;m<=v&&(v=0);u=v+1;m<=u&&(u=0);var x;a:{x=b;var w=p,A=v,y=u,z=m,F=k,D=void 0,B=void 0,G=void 0, -O=void 0,E=void 0,P=void 0,U=void 0,L=void 0,R=void 0,B=x[F[w]].x,G=x[F[w]].y,O=x[F[A]].x,E=x[F[A]].y,P=x[F[y]].x,U=x[F[y]].y;if(1.0E-10>(O-B)*(U-G)-(E-G)*(P-B))x=!1;else{for(D=0;D=0&&aa>=0&&S>=0){x=!1; -break a}}x=!0}}if(x){h.push([b[k[p]],b[k[v]],b[k[u]]]);n.push([k[p],k[v],k[u]]);p=v;for(u=v+1;u0;)this.smooth(b)}; -THREE.SubdivisionModifier.prototype.smooth=function(b){function e(b,c,e,f,n,p){var w=new THREE.Face4(b,c,e,f,null,n.color,n.material);if(k.useOldVertexColors){w.vertexColors=[];for(var u,o,v,y=0;y<4;y++){v=p[y];u=new THREE.Color;u.setRGB(0,0,0);for(var x=0;x0)for(p=0;p2;){if(t--<=0){console.log("Warning, unable to triangulate polygon!");if(e)return l;return h}n=p;f<=n&&(n=0);p=n+1;f<=p&&(p=0);u=p+1;f<=u&&(u=0);var v;a:{v=a;var o=n,y=p,x=u,w=f,A=k,z=void 0,C=void 0,B=void 0, +K=void 0,F=void 0,M=void 0,E=void 0,O=void 0,V=void 0,C=v[A[o]].x,B=v[A[o]].y,K=v[A[y]].x,F=v[A[y]].y,M=v[A[x]].x,E=v[A[x]].y;if(1.0E-10>(K-C)*(E-B)-(F-B)*(M-C))v=!1;else{for(z=0;z=0&&L>=0&&S>=0){v=!1; +break a}}v=!0}}if(v){h.push([a[k[n]],a[k[p]],a[k[u]]]);l.push([k[n],k[p],k[u]]);n=p;for(u=p+1;u0;)this.smooth(a)}; +THREE.SubdivisionModifier.prototype.smooth=function(a){function b(a,c,b,e,l,n){var o=new THREE.Face4(a,c,b,e,null,l.color,l.material);if(k.useOldVertexColors){o.vertexColors=[];for(var m,p,u,v=0;v<4;v++){u=n[v];m=new THREE.Color;m.setRGB(0,0,0);for(var w=0;w>7)-127;f|=(k&127)<<16|h<<8;if(f==0&&n==-127)return 0;return(1-2*(m>>7))*(1+f*Math.pow(2,-23))*Math.pow(2,n)}function m(b,c){var e=u(b,c),f=u(b,c+1),h=u(b,c+2);return(u(b,c+3)<<24)+(h<<16)+(f<<8)+e}function p(b,c){var e=u(b,c);return(u(b,c+1)<<8)+e}function v(b,c){var e=u(b,c);return e>127?e-256:e}function u(b,c){return b.charCodeAt(c)&255}function t(c){var e, -f,h;e=m(b,c);f=m(b,c+E);h=m(b,c+P);c=p(b,c+U);F.faces.push(new THREE.Face3(e,f,h,null,null,F.materials[c]))}function x(c){var e,f,h,k,o,t;e=m(b,c);f=m(b,c+E);h=m(b,c+P);k=p(b,c+U);o=m(b,c+L);t=m(b,c+R);c=m(b,c+I);k=F.materials[k];var w=G[t*3],u=G[t*3+1];t=G[t*3+2];var v=G[c*3],x=G[c*3+1],c=G[c*3+2];F.faces.push(new THREE.Face3(e,f,h,[new THREE.Vector3(G[o*3],G[o*3+1],G[o*3+2]),new THREE.Vector3(w,u,t),new THREE.Vector3(v,x,c)],null,k))}function w(c){var e,f,h,k;e=m(b,c);f=m(b,c+K);h=m(b,c+aa);k=m(b, -c+Z);c=p(b,c+S);F.faces.push(new THREE.Face4(e,f,h,k,null,null,F.materials[c]))}function A(c){var e,f,h,k,t,w,u,v;e=m(b,c);f=m(b,c+K);h=m(b,c+aa);k=m(b,c+Z);t=p(b,c+S);w=m(b,c+M);u=m(b,c+o);v=m(b,c+N);c=m(b,c+da);t=F.materials[t];var x=G[u*3],y=G[u*3+1];u=G[u*3+2];var z=G[v*3],A=G[v*3+1];v=G[v*3+2];var V=G[c*3],B=G[c*3+1],c=G[c*3+2];F.faces.push(new THREE.Face4(e,f,h,k,[new THREE.Vector3(G[w*3],G[w*3+1],G[w*3+2]),new THREE.Vector3(x,y,u),new THREE.Vector3(z,A,v),new THREE.Vector3(V,B,c)],null,t))} -function y(c){var e,f,h,k;e=m(b,c);f=m(b,c+fa);h=m(b,c+X);c=O[e*2];k=O[e*2+1];e=O[f*2];var o=F.faceVertexUvs[0];f=O[f*2+1];var p=O[h*2];h=O[h*2+1];var t=[];t.push(new THREE.UV(c,k));t.push(new THREE.UV(e,f));t.push(new THREE.UV(p,h));o.push(t)}function z(c){var e,f,h,k,o,p;e=m(b,c);f=m(b,c+ma);h=m(b,c+pa);k=m(b,c+ra);c=O[e*2];o=O[e*2+1];e=O[f*2];p=O[f*2+1];f=O[h*2];var t=F.faceVertexUvs[0];h=O[h*2+1];var u=O[k*2];k=O[k*2+1];var w=[];w.push(new THREE.UV(c,o));w.push(new THREE.UV(e,p));w.push(new THREE.UV(f, -h));w.push(new THREE.UV(u,k));t.push(w)}var F=this,D=0,B,G=[],O=[],E,P,U,L,R,I,K,aa,Z,S,M,o,N,da,fa,X,ma,pa,ra,ya,la,Y,$,ha,ia;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(F,f,c);B={signature:b.substr(D,8),header_bytes:u(b,D+8),vertex_coordinate_bytes:u(b,D+9),normal_coordinate_bytes:u(b,D+10),uv_coordinate_bytes:u(b,D+11),vertex_index_bytes:u(b,D+12),normal_index_bytes:u(b,D+13),uv_index_bytes:u(b,D+14),material_index_bytes:u(b,D+15),nvertices:m(b,D+16),nnormals:m(b,D+16+4),nuvs:m(b, -D+16+8),ntri_flat:m(b,D+16+12),ntri_smooth:m(b,D+16+16),ntri_flat_uv:m(b,D+16+20),ntri_smooth_uv:m(b,D+16+24),nquad_flat:m(b,D+16+28),nquad_smooth:m(b,D+16+32),nquad_flat_uv:m(b,D+16+36),nquad_smooth_uv:m(b,D+16+40)};D+=B.header_bytes;E=B.vertex_index_bytes;P=B.vertex_index_bytes*2;U=B.vertex_index_bytes*3;L=B.vertex_index_bytes*3+B.material_index_bytes;R=B.vertex_index_bytes*3+B.material_index_bytes+B.normal_index_bytes;I=B.vertex_index_bytes*3+B.material_index_bytes+B.normal_index_bytes*2;K=B.vertex_index_bytes; -aa=B.vertex_index_bytes*2;Z=B.vertex_index_bytes*3;S=B.vertex_index_bytes*4;M=B.vertex_index_bytes*4+B.material_index_bytes;o=B.vertex_index_bytes*4+B.material_index_bytes+B.normal_index_bytes;N=B.vertex_index_bytes*4+B.material_index_bytes+B.normal_index_bytes*2;da=B.vertex_index_bytes*4+B.material_index_bytes+B.normal_index_bytes*3;fa=B.uv_index_bytes;X=B.uv_index_bytes*2;ma=B.uv_index_bytes;pa=B.uv_index_bytes*2;ra=B.uv_index_bytes*3;c=B.vertex_index_bytes*3+B.material_index_bytes;ia=B.vertex_index_bytes* -4+B.material_index_bytes;ya=B.ntri_flat*c;la=B.ntri_smooth*(c+B.normal_index_bytes*3);Y=B.ntri_flat_uv*(c+B.uv_index_bytes*3);$=B.ntri_smooth_uv*(c+B.normal_index_bytes*3+B.uv_index_bytes*3);ha=B.nquad_flat*ia;c=B.nquad_smooth*(ia+B.normal_index_bytes*4);ia=B.nquad_flat_uv*(ia+B.uv_index_bytes*4);D+=function(c){for(var f,h,m,n=B.vertex_coordinate_bytes*3,o=c+B.nvertices*n;c=0){y=o.invBindMatrices[u];p.invBindMatrix=y;p.skinningMatrix=new THREE.Matrix4;p.skinningMatrix.multiply(p.world,y);p.weights=[];for(y=0;y1){o=new THREE.MeshFaceMaterial;for(j=0;j1?c.add(o):c=o}}c.name=b.id||"";b.matrix.decompose(c.position,c.rotation, -c.scale);for(k=0;k1?e[1].substr(0,c):"0";e[1].length=0,m=h.indexOf("(")>=0,n;if(k)f=h.split("."), -h=f.shift(),f.shift();else if(m){n=h.split("(");h=n.shift();for(f=0;fc){u=p.output[o];break}m=u!==void 0?u instanceof THREE.Matrix4?m.multiply(m,u):m.multiply(m,n.matrix):m.multiply(m,n.matrix)}else m=m.multiply(m,n.matrix);c=m;e.push({time:b,pos:[c.n14,c.n24,c.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=e}this.updateMatrix();return this};t.prototype.updateMatrix=function(){this.matrix.identity();for(var b=0;b0&&(this[e.nodeName]=parseFloat(f[0].textContent))}}this.create();return this};R.prototype.create=function(){var b={},c=this.transparency!==void 0&&this.transparency<1,e;for(e in this)switch(e){case "ambient":case "emission":case "diffuse":case "specular":var f=this[e];if(f instanceof L)if(f.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(f=Q[this.effect.surface.init_from]))b.map= -THREE.ImageUtils.loadTexture(Ga+f.init_from),b.map.wrapS=THREE.RepeatWrapping,b.map.wrapT=THREE.RepeatWrapping,b.map.repeat.x=1,b.map.repeat.y=-1}else e=="diffuse"?b.color=f.color.getHex():c||(b[e]=f.color.getHex());break;case "shininess":case "reflectivity":b[e]=this[e];break;case "transparency":if(c)b.transparent=!0,b.opacity=this[e],c=!0}b.shading=Ea;return this.material=new THREE.MeshLambertMaterial(b)};I.prototype.parse=function(b){for(var c=0;c=0,f=b.indexOf("(")>=0,h,k;if(e)c=b.split("."),b=c.shift(),k=c.shift();else if(f){h=b.split("(");b=h.shift();for(c=0;c>7)-127;e|=(h&127)<<16|f<<8;if(e==0&&l==-127)return 0;return(1-2*(k>>7))*(1+e*Math.pow(2,-23))*Math.pow(2,l)}function f(a,c){var b=u(a,c),e=u(a,c+1),h=u(a,c+2);return(u(a,c+3)<<24)+(h<<16)+(e<<8)+b}function n(a,c){var b=u(a,c);return(u(a,c+1)<<8)+b}function p(a,c){var b=u(a,c);return b>127?b-256:b}function u(a,c){return a.charCodeAt(c)&255}function t(c){var b, +e,h;b=f(a,c);e=f(a,c+F);h=f(a,c+M);c=n(a,c+E);A.faces.push(new THREE.Face3(b,e,h,null,null,c))}function v(c){var b,e,h,k,m,o,p;b=f(a,c);e=f(a,c+F);h=f(a,c+M);k=n(a,c+E);m=f(a,c+O);o=f(a,c+V);p=f(a,c+I);var c=B[o*3],t=B[o*3+1];o=B[o*3+2];var u=B[p*3],v=B[p*3+1];p=B[p*3+2];A.faces.push(new THREE.Face3(b,e,h,[new THREE.Vector3(B[m*3],B[m*3+1],B[m*3+2]),new THREE.Vector3(c,t,o),new THREE.Vector3(u,v,p)],null,k))}function o(c){var b,e,h,k;b=f(a,c);e=f(a,c+P);h=f(a,c+L);k=f(a,c+T);c=n(a,c+S);A.faces.push(new THREE.Face4(b, +e,h,k,null,null,c))}function y(c){var b,e,h,k,o,p,t,u,v;b=f(a,c);e=f(a,c+P);h=f(a,c+L);k=f(a,c+T);o=n(a,c+S);p=f(a,c+m);t=f(a,c+aa);u=f(a,c+U);v=f(a,c+ea);var c=B[t*3],w=B[t*3+1];t=B[t*3+2];var G=B[u*3],x=B[u*3+1];u=B[u*3+2];var ma=B[v*3],H=B[v*3+1];v=B[v*3+2];A.faces.push(new THREE.Face4(b,e,h,k,[new THREE.Vector3(B[p*3],B[p*3+1],B[p*3+2]),new THREE.Vector3(c,w,t),new THREE.Vector3(G,x,u),new THREE.Vector3(ma,H,v)],null,o))}function x(c){var b,e,h,k;b=f(a,c);e=f(a,c+da);h=f(a,c+ia);c=K[b*2];k=K[b* +2+1];b=K[e*2];var m=A.faceVertexUvs[0];e=K[e*2+1];var n=K[h*2];h=K[h*2+1];var o=[];o.push(new THREE.UV(c,k));o.push(new THREE.UV(b,e));o.push(new THREE.UV(n,h));m.push(o)}function w(c){var b,e,h,k,m,n;b=f(a,c);e=f(a,c+ha);h=f(a,c+ja);k=f(a,c+ca);c=K[b*2];m=K[b*2+1];b=K[e*2];n=K[e*2+1];e=K[h*2];var o=A.faceVertexUvs[0];h=K[h*2+1];var p=K[k*2];k=K[k*2+1];var t=[];t.push(new THREE.UV(c,m));t.push(new THREE.UV(b,n));t.push(new THREE.UV(e,h));t.push(new THREE.UV(p,k));o.push(t)}var A=this,z=0,C,B=[],K= +[],F,M,E,O,V,I,P,L,T,S,m,aa,U,ea,da,ia,ha,ja,ca,Z,R,Y,X,ga,oa;THREE.Geometry.call(this);THREE.Loader.prototype.initMaterials(A,e,c);C={signature:a.substr(z,8),header_bytes:u(a,z+8),vertex_coordinate_bytes:u(a,z+9),normal_coordinate_bytes:u(a,z+10),uv_coordinate_bytes:u(a,z+11),vertex_index_bytes:u(a,z+12),normal_index_bytes:u(a,z+13),uv_index_bytes:u(a,z+14),material_index_bytes:u(a,z+15),nvertices:f(a,z+16),nnormals:f(a,z+16+4),nuvs:f(a,z+16+8),ntri_flat:f(a,z+16+12),ntri_smooth:f(a,z+16+16),ntri_flat_uv:f(a, +z+16+20),ntri_smooth_uv:f(a,z+16+24),nquad_flat:f(a,z+16+28),nquad_smooth:f(a,z+16+32),nquad_flat_uv:f(a,z+16+36),nquad_smooth_uv:f(a,z+16+40)};z+=C.header_bytes;F=C.vertex_index_bytes;M=C.vertex_index_bytes*2;E=C.vertex_index_bytes*3;O=C.vertex_index_bytes*3+C.material_index_bytes;V=C.vertex_index_bytes*3+C.material_index_bytes+C.normal_index_bytes;I=C.vertex_index_bytes*3+C.material_index_bytes+C.normal_index_bytes*2;P=C.vertex_index_bytes;L=C.vertex_index_bytes*2;T=C.vertex_index_bytes*3;S=C.vertex_index_bytes* +4;m=C.vertex_index_bytes*4+C.material_index_bytes;aa=C.vertex_index_bytes*4+C.material_index_bytes+C.normal_index_bytes;U=C.vertex_index_bytes*4+C.material_index_bytes+C.normal_index_bytes*2;ea=C.vertex_index_bytes*4+C.material_index_bytes+C.normal_index_bytes*3;da=C.uv_index_bytes;ia=C.uv_index_bytes*2;ha=C.uv_index_bytes;ja=C.uv_index_bytes*2;ca=C.uv_index_bytes*3;c=C.vertex_index_bytes*3+C.material_index_bytes;oa=C.vertex_index_bytes*4+C.material_index_bytes;Z=C.ntri_flat*c;R=C.ntri_smooth*(c+ +C.normal_index_bytes*3);Y=C.ntri_flat_uv*(c+C.uv_index_bytes*3);X=C.ntri_smooth_uv*(c+C.normal_index_bytes*3+C.uv_index_bytes*3);ga=C.nquad_flat*oa;c=C.nquad_smooth*(oa+C.normal_index_bytes*4);oa=C.nquad_flat_uv*(oa+C.uv_index_bytes*4);z+=function(c){for(var e,h,f,l=C.vertex_coordinate_bytes*3,m=c+C.nvertices*l;c=0){w=m.invBindMatrices[t];n.invBindMatrix=w;n.skinningMatrix=new THREE.Matrix4;n.skinningMatrix.multiply(n.world,w);n.weights=[];for(w=0;w1){m=new THREE.MeshFaceMaterial;for(j=0;j1?b[1].substr(0,c):"0";b[1].length=0,k=h.indexOf("(")>=0,l;if(f)e=h.split("."),h=e.shift(),e.shift();else if(k){l=h.split("(");h=l.shift(); +for(e=0;ec){p=n.output[m];break}k=p!==void 0?p instanceof THREE.Matrix4? +k.multiply(k,p):k.multiply(k,l.matrix):k.multiply(k,l.matrix)}else k=k.multiply(k,l.matrix);c=k;b.push({time:a,pos:[c.n14,c.n24,c.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=b}this.updateMatrix();return this};t.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a0&&(this[b.nodeName]=parseFloat(e[0].textContent))}}this.create();return this};V.prototype.create=function(){var a={},c=this.transparency!==void 0&&this.transparency<1,b;for(b in this)switch(b){case "ambient":case "emission":case "diffuse":case "specular":var e=this[b];if(e instanceof O)if(e.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(e=na[this.effect.surface.init_from]))a.map=THREE.ImageUtils.loadTexture(Ea+e.init_from), +a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}else b=="diffuse"?a.color=e.color.getHex():c||(a[b]=e.color.getHex());break;case "shininess":case "reflectivity":a[b]=this[b];break;case "transparency":if(c)a.transparent=!0,a.opacity=this[b],c=!0}a.shading=xa;return this.material=new THREE.MeshLambertMaterial(a)};I.prototype.parse=function(a){for(var c=0;c=0,e=a.indexOf("(")>=0,h,f;if(b)c=a.split("."),a=c.shift(),f=c.shift();else if(e){h=a.split("(");a=h.shift();for(c=0;c1&&(R=[new THREE.MeshFaceMaterial]);object=new THREE.Mesh(E,R);object.name=w;object.position.set(B[0],B[1],B[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=D.visible;N.scene.add(object);N.objects[w]=object;D.meshCollider&&(b=THREE.CollisionUtils.MeshColliderWBox(object),N.scene.collisions.colliders.push(b)); -if(D.castsShadow)b=new THREE.ShadowVolume(E),N.scene.add(b),b.position=object.position,b.rotation=object.rotation,b.scale=object.scale;D.trigger&&D.trigger.toLowerCase()!="none"&&(b={type:D.trigger,object:D},N.triggers[object.name]=b)}}else B=D.position,r=D.rotation,q=D.quaternion,s=D.scale,q=0,object=new THREE.Object3D,object.name=w,object.position.set(B[0],B[1],B[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0], -s[1],s[2]),object.visible=D.visible!==void 0?D.visible:!1,N.scene.add(object),N.objects[w]=object,N.empties[w]=object,D.trigger&&D.trigger.toLowerCase()!="none"&&(b={type:D.trigger,object:D},N.triggers[object.name]=b)}function p(b){return function(e){N.geometries[b]=e;n();Z-=1;c.onLoadComplete();u()}}function v(b){return function(c){N.geometries[b]=c}}function u(){c.callbackProgress({totalModels:M,totalTextures:o,loadedModels:M-Z,loadedTextures:o-S},N);c.onLoadProgress();Z==0&&S==0&&e(N)}var t,x, -w,A,y,z,F,D,B,G,O,E,P,U,L,R,I,K,aa,Z,S,M,o,N;K=b.data;L=new THREE.BinaryLoader;aa=new THREE.JSONLoader;S=Z=0;N={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};b=!1;for(w in K.objects)if(D=K.objects[w],D.meshCollider){b=!0;break}if(b)N.scene.collisions=new THREE.CollisionSystem;if(K.transform){b=K.transform.position;G=K.transform.rotation;var da=K.transform.scale;b&&N.scene.position.set(b[0],b[1],b[2]);G&&N.scene.rotation.set(G[0], -G[1],G[2]);da&&N.scene.scale.set(da[0],da[1],da[2]);(b||G||da)&&N.scene.updateMatrix()}b=function(){S-=1;u();c.onLoadComplete()};for(y in K.cameras)G=K.cameras[y],G.type=="perspective"?P=new THREE.PerspectiveCamera(G.fov,G.aspect,G.near,G.far):G.type=="ortho"&&(P=new THREE.OrthographicCamera(G.left,G.right,G.top,G.bottom,G.near,G.far)),B=G.position,G=G.target,P.position.set(B[0],B[1],B[2]),P.target=new THREE.Vector3(G[0],G[1],G[2]),N.cameras[y]=P;for(A in K.lights)y=K.lights[A],P=y.color!==void 0? -y.color:16777215,G=y.intensity!==void 0?y.intensity:1,y.type=="directional"?(B=y.direction,I=new THREE.DirectionalLight(P,G),I.position.set(B[0],B[1],B[2]),I.position.normalize()):y.type=="point"?(B=y.position,d=y.distance,I=new THREE.PointLight(P,G,d),I.position.set(B[0],B[1],B[2])):y.type=="ambient"&&(I=new THREE.AmbientLight(P)),N.scene.add(I),N.lights[A]=I;for(z in K.fogs)A=K.fogs[z],A.type=="linear"?U=new THREE.Fog(0,A.near,A.far):A.type=="exp2"&&(U=new THREE.FogExp2(0,A.density)),G=A.color, -U.color.setRGB(G[0],G[1],G[2]),N.fogs[z]=U;if(N.cameras&&K.defaults.camera)N.currentCamera=N.cameras[K.defaults.camera];if(N.fogs&&K.defaults.fog)N.scene.fog=N.fogs[K.defaults.fog];G=K.defaults.bgcolor;N.bgColor=new THREE.Color;N.bgColor.setRGB(G[0],G[1],G[2]);N.bgColorAlpha=K.defaults.bgalpha;for(t in K.geometries)if(z=K.geometries[t],z.type=="bin_mesh"||z.type=="ascii_mesh")Z+=1,c.onLoadStart();M=Z;for(t in K.geometries)z=K.geometries[t],z.type=="cube"?(E=new THREE.CubeGeometry(z.width,z.height, -z.depth,z.segmentsWidth,z.segmentsHeight,z.segmentsDepth,null,z.flipped,z.sides),N.geometries[t]=E):z.type=="plane"?(E=new THREE.PlaneGeometry(z.width,z.height,z.segmentsWidth,z.segmentsHeight),N.geometries[t]=E):z.type=="sphere"?(E=new THREE.SphereGeometry(z.radius,z.segmentsWidth,z.segmentsHeight),N.geometries[t]=E):z.type=="cylinder"?(E=new THREE.CylinderGeometry(z.topRad,z.botRad,z.height,z.radSegs,z.heightSegs),N.geometries[t]=E):z.type=="torus"?(E=new THREE.TorusGeometry(z.radius,z.tube,z.segmentsR, -z.segmentsT),N.geometries[t]=E):z.type=="icosahedron"?(E=new THREE.IcosahedronGeometry(z.subdivisions),N.geometries[t]=E):z.type=="bin_mesh"?L.load({model:f(z.url,K.urlBaseType),callback:p(t)}):z.type=="ascii_mesh"?aa.load({model:f(z.url,K.urlBaseType),callback:p(t)}):z.type=="embedded_mesh"&&(z=K.embeds[z.id])&&aa.createModel(z,v(t),"");for(F in K.textures)if(t=K.textures[F],t.url instanceof Array){S+=t.url.length;for(L=0;L=57344&&(e-=2048);e++;for(var c=new Float32Array(8*e),f=1,m=0;m<8;m++){for(var h=0,k=0;k>1^-(n&1);c[8*k+m]=h}f+=e}e=b.length-f;h=new Uint16Array(e);for(m=k=0;m=this.maxCount-3&&n(this)};this.begin=function(){this.count=0; -this.hasNormal=this.hasPos=!1};this.end=function(b){if(this.count!=0){for(var e=this.count*3;ethis.size-1&&(p=this.size-1);var x=Math.floor(v-n);x<1&&(x=1);v=Math.floor(v+n);v>this.size-1&&(v=this.size-1);var w=Math.floor(u-n);w<1&&(w=1);n=Math.floor(u+n);n>this.size-1&&(n=this.size- -1);for(var A,y,z,F,D,B;t0&&(this.field[z+A]+=F)}}};this.addPlaneX=function(b,e){var m,h,k,n,p,v=this.size,u=this.yd,t=this.zd,x=this.field,w=v*Math.sqrt(b/e);w>v&&(w=v);for(m=0;m0)for(h=0;hu&&(A=u);for(h=0;h0){p=h*t;for(m=0;msize&&(dist=size);for(k=0;k0){p=zd*k;for(h=0;h1&&(V=new THREE.MeshFaceMaterial);object=new THREE.Mesh(F,V);object.name=o;object.position.set(C[0],C[1],C[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=z.visible;U.scene.add(object);U.objects[o]=object;z.meshCollider&&(a=THREE.CollisionUtils.MeshColliderWBox(object),U.scene.collisions.colliders.push(a));if(z.castsShadow)a= +new THREE.ShadowVolume(F),U.scene.add(a),a.position=object.position,a.rotation=object.rotation,a.scale=object.scale;z.trigger&&z.trigger.toLowerCase()!="none"&&(a={type:z.trigger,object:z},U.triggers[object.name]=a)}}else C=z.position,r=z.rotation,q=z.quaternion,s=z.scale,q=0,object=new THREE.Object3D,object.name=o,object.position.set(C[0],C[1],C[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0],s[1],s[2]),object.visible= +z.visible!==void 0?z.visible:!1,U.scene.add(object),U.objects[o]=object,U.empties[o]=object,z.trigger&&z.trigger.toLowerCase()!="none"&&(a={type:z.trigger,object:z},U.triggers[object.name]=a)}function n(a){return function(b){U.geometries[a]=b;l();T-=1;c.onLoadComplete();u()}}function p(a){return function(c){U.geometries[a]=c}}function u(){c.callbackProgress({totalModels:m,totalTextures:aa,loadedModels:m-T,loadedTextures:aa-S},U);c.onLoadProgress();T==0&&S==0&&b(U)}var t,v,o,y,x,w,A,z,C,B,K,F,M,E, +O,V,I,P,L,T,S,m,aa,U;P=a.data;O=new THREE.BinaryLoader;L=new THREE.JSONLoader;S=T=0;U={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};a=!1;for(o in P.objects)if(z=P.objects[o],z.meshCollider){a=!0;break}if(a)U.scene.collisions=new THREE.CollisionSystem;if(P.transform){a=P.transform.position;B=P.transform.rotation;var ea=P.transform.scale;a&&U.scene.position.set(a[0],a[1],a[2]);B&&U.scene.rotation.set(B[0],B[1],B[2]);ea&& +U.scene.scale.set(ea[0],ea[1],ea[2]);(a||B||ea)&&U.scene.updateMatrix()}a=function(){S-=1;u();c.onLoadComplete()};for(x in P.cameras)B=P.cameras[x],B.type=="perspective"?M=new THREE.PerspectiveCamera(B.fov,B.aspect,B.near,B.far):B.type=="ortho"&&(M=new THREE.OrthographicCamera(B.left,B.right,B.top,B.bottom,B.near,B.far)),C=B.position,B=B.target,M.position.set(C[0],C[1],C[2]),M.target=new THREE.Vector3(B[0],B[1],B[2]),U.cameras[x]=M;for(y in P.lights)x=P.lights[y],M=x.color!==void 0?x.color:16777215, +B=x.intensity!==void 0?x.intensity:1,x.type=="directional"?(C=x.direction,I=new THREE.DirectionalLight(M,B),I.position.set(C[0],C[1],C[2]),I.position.normalize()):x.type=="point"?(C=x.position,d=x.distance,I=new THREE.PointLight(M,B,d),I.position.set(C[0],C[1],C[2])):x.type=="ambient"&&(I=new THREE.AmbientLight(M)),U.scene.add(I),U.lights[y]=I;for(w in P.fogs)y=P.fogs[w],y.type=="linear"?E=new THREE.Fog(0,y.near,y.far):y.type=="exp2"&&(E=new THREE.FogExp2(0,y.density)),B=y.color,E.color.setRGB(B[0], +B[1],B[2]),U.fogs[w]=E;if(U.cameras&&P.defaults.camera)U.currentCamera=U.cameras[P.defaults.camera];if(U.fogs&&P.defaults.fog)U.scene.fog=U.fogs[P.defaults.fog];B=P.defaults.bgcolor;U.bgColor=new THREE.Color;U.bgColor.setRGB(B[0],B[1],B[2]);U.bgColorAlpha=P.defaults.bgalpha;for(t in P.geometries)if(w=P.geometries[t],w.type=="bin_mesh"||w.type=="ascii_mesh")T+=1,c.onLoadStart();m=T;for(t in P.geometries)w=P.geometries[t],w.type=="cube"?(F=new THREE.CubeGeometry(w.width,w.height,w.depth,w.segmentsWidth, +w.segmentsHeight,w.segmentsDepth,null,w.flipped,w.sides),U.geometries[t]=F):w.type=="plane"?(F=new THREE.PlaneGeometry(w.width,w.height,w.segmentsWidth,w.segmentsHeight),U.geometries[t]=F):w.type=="sphere"?(F=new THREE.SphereGeometry(w.radius,w.segmentsWidth,w.segmentsHeight),U.geometries[t]=F):w.type=="cylinder"?(F=new THREE.CylinderGeometry(w.topRad,w.botRad,w.height,w.radSegs,w.heightSegs),U.geometries[t]=F):w.type=="torus"?(F=new THREE.TorusGeometry(w.radius,w.tube,w.segmentsR,w.segmentsT),U.geometries[t]= +F):w.type=="icosahedron"?(F=new THREE.IcosahedronGeometry(w.subdivisions),U.geometries[t]=F):w.type=="bin_mesh"?O.load(e(w.url,P.urlBaseType),n(t)):w.type=="ascii_mesh"?L.load(e(w.url,P.urlBaseType),n(t)):w.type=="embedded_mesh"&&(w=P.embeds[w.id])&&L.createModel(w,p(t),"");for(A in P.textures)if(t=P.textures[A],t.url instanceof Array){S+=t.url.length;for(O=0;O=57344&&(b-=2048);b++;for(var c=new Float32Array(8*b),e=1,f=0;f<8;f++){for(var h=0,k=0;k>1^-(l&1);c[8*k+f]=h}e+=b}b=a.length-e;h=new Uint16Array(b);for(f=k=0;f=this.maxCount-3&&l(this)};this.begin= +function(){this.count=0;this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var b=this.count*3;bthis.size-1&&(n=this.size-1);var v=Math.floor(p-l);v<1&&(v=1);p=Math.floor(p+l);p>this.size-1&&(p=this.size-1);var o=Math.floor(u-l);o<1&&(o=1);l=Math.floor(u+l); +l>this.size-1&&(l=this.size-1);for(var y,x,w,A,z,C;t0&&(this.field[w+y]+=A)}}};this.addPlaneX=function(a,b){var f,h,k,l,n,p=this.size,u=this.yd,t=this.zd,v=this.field,o=p*Math.sqrt(a/b);o>p&&(o=p);for(f=0;f0)for(h=0;hu&&(y=u);for(h=0;h0){n=h*t;for(f=0;fsize&&(dist=size);for(k=0;k0){n=zd*k;for(h=0;hh?this.hits.push(m):this.hits.unshift(m),h=f;return this.hits}; -THREE.CollisionSystem.prototype.rayCastNearest=function(b){var e=this.rayCastAll(b);if(e.length==0)return null;for(var c=0;e[c]instanceof THREE.MeshCollider;){var f=this.rayMesh(b,e[c]);if(f.diste.length)return null;return e[c]}; -THREE.CollisionSystem.prototype.rayCast=function(b,e){if(e instanceof THREE.PlaneCollider)return this.rayPlane(b,e);else if(e instanceof THREE.SphereCollider)return this.raySphere(b,e);else if(e instanceof THREE.BoxCollider)return this.rayBox(b,e);else if(e instanceof THREE.MeshCollider&&e.box)return this.rayBox(b,e.box)}; -THREE.CollisionSystem.prototype.rayMesh=function(b,e){for(var c=this.makeRayLocal(b,e.mesh),f=Number.MAX_VALUE,m,h=0;h=n*m))return Number.MAX_VALUE;k/=n;n=THREE.CollisionSystem.__v3;n.copy(b.direction);n.multiplyScalar(k);n.addSelf(b.origin);Math.abs(h.x)> -Math.abs(h.y)?Math.abs(h.x)>Math.abs(h.z)?(b=n.y-e.y,h=c.y-e.y,m=f.y-e.y,n=n.z-e.z,c=c.z-e.z,f=f.z-e.z):(b=n.x-e.x,h=c.x-e.x,m=f.x-e.x,n=n.y-e.y,c=c.y-e.y,f=f.y-e.y):Math.abs(h.y)>Math.abs(h.z)?(b=n.x-e.x,h=c.x-e.x,m=f.x-e.x,n=n.z-e.z,c=c.z-e.z,f=f.z-e.z):(b=n.x-e.x,h=c.x-e.x,m=f.x-e.x,n=n.y-e.y,c=c.y-e.y,f=f.y-e.y);e=h*f-c*m;if(e==0)return Number.MAX_VALUE;e=1/e;f=(b*f-n*m)*e;if(!(f>=0))return Number.MAX_VALUE;e*=h*n-c*b;if(!(e>=0))return Number.MAX_VALUE;if(!(1-f-e>=0))return Number.MAX_VALUE;return k}; -THREE.CollisionSystem.prototype.makeRayLocal=function(b,e){var c=THREE.CollisionSystem.__m;THREE.Matrix4.makeInvert(e.matrixWorld,c);var f=THREE.CollisionSystem.__r;f.origin.copy(b.origin);f.direction.copy(b.direction);c.multiplyVector3(f.origin);c.rotateAxis(f.direction);f.direction.normalize();return f}; -THREE.CollisionSystem.prototype.rayBox=function(b,e){var c;e.dynamic&&e.mesh&&e.mesh.matrixWorld?c=this.makeRayLocal(b,e.mesh):(c=THREE.CollisionSystem.__r,c.origin.copy(b.origin),c.direction.copy(b.direction));var f=0,m=0,h=0,k=0,n=0,p=0,v=!0;c.origin.xe.max.x&&(f=e.max.x-c.origin.x,f/=c.direction.x,v=!1,k=1);c.origin.ye.max.y&&(m=e.max.y-c.origin.y,m/=c.direction.y, -v=!1,n=1);c.origin.ze.max.z&&(h=e.max.z-c.origin.z,h/=c.direction.z,v=!1,p=1);if(v)return-1;v=0;m>f&&(v=1,f=m);h>f&&(v=2,f=h);switch(v){case 0:n=c.origin.y+c.direction.y*f;if(ne.max.y)return Number.MAX_VALUE;c=c.origin.z+c.direction.z*f;if(ce.max.z)return Number.MAX_VALUE;e.normal.set(k,0,0);break;case 1:k=c.origin.x+c.direction.x*f;if(ke.max.x)return Number.MAX_VALUE;c=c.origin.z+c.direction.z* -f;if(ce.max.z)return Number.MAX_VALUE;e.normal.set(0,n,0);break;case 2:k=c.origin.x+c.direction.x*f;if(ke.max.x)return Number.MAX_VALUE;n=c.origin.y+c.direction.y*f;if(ne.max.y)return Number.MAX_VALUE;e.normal.set(0,0,p)}return f};THREE.CollisionSystem.prototype.rayPlane=function(b,e){var c=b.direction.dot(e.normal),f=e.point.dot(e.normal);if(c<0)c=(f-b.origin.dot(e.normal))/c;else return Number.MAX_VALUE;return c>0?c:Number.MAX_VALUE}; -THREE.CollisionSystem.prototype.raySphere=function(b,e){var c=e.center.clone().subSelf(b.origin);if(c.lengthSq=0)return Math.abs(f)-Math.sqrt(c);return Number.MAX_VALUE};THREE.CollisionSystem.__v1=new THREE.Vector3;THREE.CollisionSystem.__v2=new THREE.Vector3;THREE.CollisionSystem.__v3=new THREE.Vector3;THREE.CollisionSystem.__nr=new THREE.Vector3;THREE.CollisionSystem.__m=new THREE.Matrix4; -THREE.CollisionSystem.__r=new THREE.Ray;THREE.CollisionUtils={};THREE.CollisionUtils.MeshOBB=function(b){b.geometry.computeBoundingBox();var e=b.geometry.boundingBox,c=new THREE.Vector3(e.x[0],e.y[0],e.z[0]),e=new THREE.Vector3(e.x[1],e.y[1],e.z[1]),c=new THREE.BoxCollider(c,e);c.mesh=b;return c};THREE.CollisionUtils.MeshAABB=function(b){var e=THREE.CollisionUtils.MeshOBB(b);e.min.addSelf(b.position);e.max.addSelf(b.position);e.dynamic=!1;return e}; -THREE.CollisionUtils.MeshColliderWBox=function(b){return new THREE.MeshCollider(b,THREE.CollisionUtils.MeshOBB(b))}; -if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(b){THREE.WebGLRenderer.call(this,b);var e=this,c=this.setSize,f=this.render,m=new THREE.PerspectiveCamera,h=new THREE.PerspectiveCamera,k=new THREE.Matrix4,n=new THREE.Matrix4,p,v,u;m.matrixAutoUpdate=h.matrixAutoUpdate=!1;var b={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},t=new THREE.WebGLRenderTarget(512,512,b),x=new THREE.WebGLRenderTarget(512,512,b),w=new THREE.PerspectiveCamera(53,1,1,1E4);w.position.z= -2;_material=new THREE.ShaderMaterial({uniforms:{mapLeft:{type:"t",value:0,texture:t},mapRight:{type:"t",value:1,texture:x}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D mapLeft;\nuniform sampler2D mapRight;\nvarying vec2 vUv;\nvoid main() {\nvec4 colorL, colorR;\nvec2 uv = vUv;\ncolorL = texture2D( mapLeft, uv );\ncolorR = texture2D( mapRight, uv );\ngl_FragColor = vec4( colorL.g * 0.7 + colorL.b * 0.3, colorR.g, colorR.b, colorL.a + colorR.a ) * 1.1;\n}"}); -var A=new THREE.Scene;A.add(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));this.setSize=function(b,f){c.call(e,b,f);t.width=b;t.height=f;x.width=b;x.height=f};this.render=function(b,c){c.update(null,!0);if(p!==c.aspect||v!==c.near||u!==c.fov){p=c.aspect;v=c.near;u=c.fov;var F=c.projectionMatrix.clone(),D=125/30*0.5,B=D*v/125,G=v*Math.tan(u*Math.PI/360),O;k.n14=D;n.n14=-D;D=-G*p+B;O=G*p+B;F.n11=2*v/(O-D);F.n13=(O+D)/(O-D);m.projectionMatrix=F.clone();D=-G*p-B;O=G*p-B;F.n11=2*v/(O-D);F.n13= -(O+D)/(O-D);h.projectionMatrix=F.clone()}m.matrix=c.matrixWorld.clone().multiplySelf(n);m.update(null,!0);m.position.copy(c.position);m.near=v;m.far=c.far;f.call(e,b,m,t,!0);h.matrix=c.matrixWorld.clone().multiplySelf(k);h.update(null,!0);h.position.copy(c.position);h.near=v;h.far=c.far;f.call(e,b,h,x,!0);f.call(e,A,w)}}; -if(THREE.WebGLRenderer)THREE.CrosseyedWebGLRenderer=function(b){THREE.WebGLRenderer.call(this,b);this.autoClear=!1;var e=this,c=this.setSize,f=this.render,m,h,k=new THREE.PerspectiveCamera;k.target=new THREE.Vector3(0,0,0);var n=new THREE.PerspectiveCamera;n.target=new THREE.Vector3(0,0,0);e.separation=10;if(b&&b.separation!==void 0)e.separation=b.separation;this.setSize=function(b,f){c.call(e,b,f);m=b/2;h=f};this.render=function(b,c){this.clear();k.fov=c.fov;k.aspect=0.5*c.aspect;k.near=c.near;k.far= -c.far;k.updateProjectionMatrix();k.position.copy(c.position);k.target.copy(c.target);k.translateX(e.separation);k.lookAt(k.target);n.projectionMatrix=k.projectionMatrix;n.position.copy(c.position);n.target.copy(c.target);n.translateX(-e.separation);n.lookAt(n.target);this.setViewport(0,0,m,h);f.call(e,b,k);this.setViewport(m,0,m,h);f.call(e,b,n,!1)}}; +2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,8,9,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]);THREE.PlaneCollider=function(a,b){this.point=a;this.normal=b};THREE.SphereCollider=function(a,b){this.center=a;this.radius=b;this.radiusSq=b*b};THREE.BoxCollider=function(a,b){this.min=a;this.max=b;this.dynamic=!0;this.normal=new THREE.Vector3}; +THREE.MeshCollider=function(a,b){this.mesh=a;this.box=b;this.numFaces=this.mesh.geometry.faces.length;this.normal=new THREE.Vector3};THREE.CollisionSystem=function(){this.collisionNormal=new THREE.Vector3;this.colliders=[];this.hits=[]};THREE.Collisions=new THREE.CollisionSystem;THREE.CollisionSystem.prototype.merge=function(a){Array.prototype.push.apply(this.colliders,a.colliders);Array.prototype.push.apply(this.hits,a.hits)}; +THREE.CollisionSystem.prototype.rayCastAll=function(a){a.direction.normalize();this.hits.length=0;var b,c,e,f,h=0;b=0;for(c=this.colliders.length;bh?this.hits.push(f):this.hits.unshift(f),h=e;return this.hits}; +THREE.CollisionSystem.prototype.rayCastNearest=function(a){var b=this.rayCastAll(a);if(b.length==0)return null;for(var c=0;b[c]instanceof THREE.MeshCollider;){var e=this.rayMesh(a,b[c]);if(e.distb.length)return null;return b[c]}; +THREE.CollisionSystem.prototype.rayCast=function(a,b){if(b instanceof THREE.PlaneCollider)return this.rayPlane(a,b);else if(b instanceof THREE.SphereCollider)return this.raySphere(a,b);else if(b instanceof THREE.BoxCollider)return this.rayBox(a,b);else if(b instanceof THREE.MeshCollider&&b.box)return this.rayBox(a,b.box)}; +THREE.CollisionSystem.prototype.rayMesh=function(a,b){for(var c=this.makeRayLocal(a,b.mesh),e=Number.MAX_VALUE,f,h=0;h=l*f))return Number.MAX_VALUE;k/=l;l=THREE.CollisionSystem.__v3;l.copy(a.direction);l.multiplyScalar(k);l.addSelf(a.origin);Math.abs(h.x)> +Math.abs(h.y)?Math.abs(h.x)>Math.abs(h.z)?(a=l.y-b.y,h=c.y-b.y,f=e.y-b.y,l=l.z-b.z,c=c.z-b.z,e=e.z-b.z):(a=l.x-b.x,h=c.x-b.x,f=e.x-b.x,l=l.y-b.y,c=c.y-b.y,e=e.y-b.y):Math.abs(h.y)>Math.abs(h.z)?(a=l.x-b.x,h=c.x-b.x,f=e.x-b.x,l=l.z-b.z,c=c.z-b.z,e=e.z-b.z):(a=l.x-b.x,h=c.x-b.x,f=e.x-b.x,l=l.y-b.y,c=c.y-b.y,e=e.y-b.y);b=h*e-c*f;if(b==0)return Number.MAX_VALUE;b=1/b;e=(a*e-l*f)*b;if(!(e>=0))return Number.MAX_VALUE;b*=h*l-c*a;if(!(b>=0))return Number.MAX_VALUE;if(!(1-e-b>=0))return Number.MAX_VALUE;return k}; +THREE.CollisionSystem.prototype.makeRayLocal=function(a,b){var c=THREE.CollisionSystem.__m;THREE.Matrix4.makeInvert(b.matrixWorld,c);var e=THREE.CollisionSystem.__r;e.origin.copy(a.origin);e.direction.copy(a.direction);c.multiplyVector3(e.origin);c.rotateAxis(e.direction);e.direction.normalize();return e}; +THREE.CollisionSystem.prototype.rayBox=function(a,b){var c;b.dynamic&&b.mesh&&b.mesh.matrixWorld?c=this.makeRayLocal(a,b.mesh):(c=THREE.CollisionSystem.__r,c.origin.copy(a.origin),c.direction.copy(a.direction));var e=0,f=0,h=0,k=0,l=0,n=0,p=!0;c.origin.xb.max.x&&(e=b.max.x-c.origin.x,e/=c.direction.x,p=!1,k=1);c.origin.yb.max.y&&(f=b.max.y-c.origin.y,f/=c.direction.y, +p=!1,l=1);c.origin.zb.max.z&&(h=b.max.z-c.origin.z,h/=c.direction.z,p=!1,n=1);if(p)return-1;p=0;f>e&&(p=1,e=f);h>e&&(p=2,e=h);switch(p){case 0:l=c.origin.y+c.direction.y*e;if(lb.max.y)return Number.MAX_VALUE;c=c.origin.z+c.direction.z*e;if(cb.max.z)return Number.MAX_VALUE;b.normal.set(k,0,0);break;case 1:k=c.origin.x+c.direction.x*e;if(kb.max.x)return Number.MAX_VALUE;c=c.origin.z+c.direction.z* +e;if(cb.max.z)return Number.MAX_VALUE;b.normal.set(0,l,0);break;case 2:k=c.origin.x+c.direction.x*e;if(kb.max.x)return Number.MAX_VALUE;l=c.origin.y+c.direction.y*e;if(lb.max.y)return Number.MAX_VALUE;b.normal.set(0,0,n)}return e};THREE.CollisionSystem.prototype.rayPlane=function(a,b){var c=a.direction.dot(b.normal),e=b.point.dot(b.normal);if(c<0)c=(e-a.origin.dot(b.normal))/c;else return Number.MAX_VALUE;return c>0?c:Number.MAX_VALUE}; +THREE.CollisionSystem.prototype.raySphere=function(a,b){var c=b.center.clone().subSelf(a.origin);if(c.lengthSq=0)return Math.abs(e)-Math.sqrt(c);return Number.MAX_VALUE};THREE.CollisionSystem.__v1=new THREE.Vector3;THREE.CollisionSystem.__v2=new THREE.Vector3;THREE.CollisionSystem.__v3=new THREE.Vector3;THREE.CollisionSystem.__nr=new THREE.Vector3;THREE.CollisionSystem.__m=new THREE.Matrix4; +THREE.CollisionSystem.__r=new THREE.Ray;THREE.CollisionUtils={};THREE.CollisionUtils.MeshOBB=function(a){a.geometry.computeBoundingBox();var b=a.geometry.boundingBox,c=new THREE.Vector3(b.x[0],b.y[0],b.z[0]),b=new THREE.Vector3(b.x[1],b.y[1],b.z[1]),c=new THREE.BoxCollider(c,b);c.mesh=a;return c};THREE.CollisionUtils.MeshAABB=function(a){var b=THREE.CollisionUtils.MeshOBB(a);b.min.addSelf(a.position);b.max.addSelf(a.position);b.dynamic=!1;return b}; +THREE.CollisionUtils.MeshColliderWBox=function(a){return new THREE.MeshCollider(a,THREE.CollisionUtils.MeshOBB(a))}; +if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);var b=this,c=this.setSize,e=this.render,f=new THREE.PerspectiveCamera,h=new THREE.PerspectiveCamera,k=new THREE.Matrix4,l=new THREE.Matrix4,n,p,u;f.matrixAutoUpdate=h.matrixAutoUpdate=!1;var a={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},t=new THREE.WebGLRenderTarget(512,512,a),v=new THREE.WebGLRenderTarget(512,512,a),o=new THREE.PerspectiveCamera(53,1,1,1E4);o.position.z= +2;_material=new THREE.ShaderMaterial({uniforms:{mapLeft:{type:"t",value:0,texture:t},mapRight:{type:"t",value:1,texture:v}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D mapLeft;\nuniform sampler2D mapRight;\nvarying vec2 vUv;\nvoid main() {\nvec4 colorL, colorR;\nvec2 uv = vUv;\ncolorL = texture2D( mapLeft, uv );\ncolorR = texture2D( mapRight, uv );\ngl_FragColor = vec4( colorL.g * 0.7 + colorL.b * 0.3, colorR.g, colorR.b, colorL.a + colorR.a ) * 1.1;\n}"}); +var y=new THREE.Scene;y.add(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));this.setSize=function(a,e){c.call(b,a,e);t.width=a;t.height=e;v.width=a;v.height=e};this.render=function(a,c){c.update(null,!0);if(n!==c.aspect||p!==c.near||u!==c.fov){n=c.aspect;p=c.near;u=c.fov;var A=c.projectionMatrix.clone(),z=125/30*0.5,C=z*p/125,B=p*Math.tan(u*Math.PI/360),K;k.n14=z;l.n14=-z;z=-B*n+C;K=B*n+C;A.n11=2*p/(K-z);A.n13=(K+z)/(K-z);f.projectionMatrix=A.clone();z=-B*n-C;K=B*n-C;A.n11=2*p/(K-z);A.n13= +(K+z)/(K-z);h.projectionMatrix=A.clone()}f.matrix=c.matrixWorld.clone().multiplySelf(l);f.update(null,!0);f.position.copy(c.position);f.near=p;f.far=c.far;e.call(b,a,f,t,!0);h.matrix=c.matrixWorld.clone().multiplySelf(k);h.update(null,!0);h.position.copy(c.position);h.near=p;h.far=c.far;e.call(b,a,h,v,!0);e.call(b,y,o)}}; +if(THREE.WebGLRenderer)THREE.CrosseyedWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);this.autoClear=!1;var b=this,c=this.setSize,e=this.render,f,h,k=new THREE.PerspectiveCamera;k.target=new THREE.Vector3(0,0,0);var l=new THREE.PerspectiveCamera;l.target=new THREE.Vector3(0,0,0);b.separation=10;if(a&&a.separation!==void 0)b.separation=a.separation;this.setSize=function(a,e){c.call(b,a,e);f=a/2;h=e};this.render=function(a,c){this.clear();k.fov=c.fov;k.aspect=0.5*c.aspect;k.near=c.near;k.far= +c.far;k.updateProjectionMatrix();k.position.copy(c.position);k.target.copy(c.target);k.translateX(b.separation);k.lookAt(k.target);l.projectionMatrix=k.projectionMatrix;l.position.copy(c.position);l.target.copy(c.target);l.translateX(-b.separation);l.lookAt(l.target);this.setViewport(0,0,f,h);e.call(b,a,k);this.setViewport(f,0,f,h);e.call(b,a,l,!1)}}; diff --git a/build/custom/ThreeCanvas.js b/build/custom/ThreeCanvas.js index e0e2a720..f766930b 100644 --- a/build/custom/ThreeCanvas.js +++ b/build/custom/ThreeCanvas.js @@ -1,11 +1,11 @@ // ThreeCanvas.js r46dev - http://github.com/mrdoob/three.js var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array;THREE.Color=function(a){a!==void 0&&this.setHex(a);return this}; -THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var d,f,e;if(c==0)this.r=this.g=this.b=0;else switch(d=Math.floor(a*6),f=a*6-d,a=c*(1-b),e=c*(1-b*f),b=c*(1-b*(1-f)),d){case 1:this.r=e;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=e;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r= -c;this.g=a;this.b=e;break;case 6:case 0:this.r=c,this.g=b,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}}; -THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var d,f,e;if(c===0)this.r=this.g=this.b=0;else switch(d=Math.floor(a*6),f=a*6-d,a=c*(1-b),e=c*(1- +b*f),b=c*(1-b*(1-f)),d){case 1:this.r=e;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=e;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r=c;this.g=a;this.b=e;break;case 6:case 0:this.r=c,this.g=b,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+ +Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this}, divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, -equals:function(a){return a.x==this.x&&a.y==this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +equals:function(a){return a.x===this.x&&a.y===this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this}, addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this}, divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a):this.set(0,0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)}, @@ -14,81 +14,83 @@ Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&e+a<1}for(var d,f=[],e=0,g=a.children.length;ea.scale.x)return[];d={distance:e,point:a.position,face:null,object:a};f.push(d)}else if(a instanceof THREE.Mesh){e=b(this.origin, -this.direction,a.matrixWorld.getPosition());if(e==null||e>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;var h,l,m,j,i,o,n,p,k=a.geometry,v=k.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);e=0;for(g=k.faces.length;e0:o<0)))if(o=i.dot((new THREE.Vector3).sub(h,n))/o,n=n.addSelf(p.multiplyScalar(o)),d instanceof THREE.Face3)c(n,h,l,m)&&(d={distance:this.origin.distanceTo(n),point:n,face:d,object:a},f.push(d));else if(d instanceof THREE.Face4&&(c(n,h,l,j)||c(n,l,m,j)))d={distance:this.origin.distanceTo(n), -point:n,face:d,object:a},f.push(d)}return f}}; -THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b,c,d,f,e,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,j,i){h=!1;b=e;c=g;d=j;f=i;a()};this.addPoint=function(e,g){h?(h=!1,b=e,c=g,d=e,f=g):(b=be?d:e,f=f>g?f:g);a()};this.add3Points= -function(e,g,j,i,o,n){h?(h=!1,b=ej?e>o?e:o:j>o?j:o,f=g>i?g>n?g:n:i>n?i:n):(b=ej?e>o?e>d?e:d:o>d?o:d:j>o?j>d?j:d:o>d?o:d,f=g>i?g>n?g>f?g:f:n>f?n:f:i>n?i>f?i:f:n>f?n:f);a()};this.addRectangle=function(e){h?(h=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.objects)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&e+a<1}for(var d,f=[],e=0,g=a.children.length;ea.scale.x)return[];d={distance:e,point:a.position,face:null,object:a};f.push(d)}else if(a instanceof THREE.Mesh){e= +b(this.origin,this.direction,a.matrixWorld.getPosition());if(e===null||e>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;for(var h,m,k,l,i,n,j,r,t=a.geometry,w=t.vertices,e=0,g=t.faces.length;e0:n<0)))if(n=i.dot((new THREE.Vector3).sub(h,j))/n,j=j.addSelf(r.multiplyScalar(n)),d instanceof THREE.Face3)c(j,h,m,k)&&(d={distance:this.origin.distanceTo(j),point:j,face:d,object:a},f.push(d));else if(d instanceof THREE.Face4&&(c(j,h,m,l)||c(j,m,k,l)))d={distance:this.origin.distanceTo(j),point:j,face:d,object:a},f.push(d)}return f}}; +THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b,c,d,f,e,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,l,i){h=!1;b=e;c=g;d=l;f=i;a()};this.addPoint=function(e,g){h?(h=!1,b=e,c=g,d=e,f=g):(b=be?d:e,f=f>g?f:g);a()};this.add3Points= +function(e,g,l,i,n,j){h?(h=!1,b=el?e>n?e:n:l>n?l:n,f=g>i?g>j?g:j:i>j?i:j):(b=el?e>n?e>d?e:d:n>d?n:d:l>n?l>d?l:d:n>d?n:d,f=g>i?g>j?g>f?g:f:j>f?j:f:i>j?i>f?i:f:j>f?j:f);a()};this.addRectangle=function(e){h?(h=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> e.getBottom()?f:e.getBottom());a()};this.inflate=function(e){b-=e;c-=e;d+=e;f+=e;a()};this.minSelf=function(e){b=b>e.getLeft()?b:e.getLeft();c=c>e.getTop()?c:e.getTop();d=d=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;f=d=c=b=0;a()};this.isEmpty=function(){return h}};THREE.Matrix3=function(){this.m=[]}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b=this.m;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}}; -THREE.Matrix4=function(a,b,c,d,f,e,g,h,l,m,j,i,o,n,p,k){this.set(a!==void 0?a:1,b||0,c||0,d||0,f||0,e!==void 0?e:1,g||0,h||0,l||0,m||0,j!==void 0?j:1,i||0,o||0,n||0,p||0,k!==void 0?k:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,l,m,j,i,o,n,p,k){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=f;this.n22=e;this.n23=g;this.n24=h;this.n31=l;this.n32=m;this.n33=j;this.n34=i;this.n41=o;this.n42=n;this.n43=p;this.n44=k;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, -b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;e.sub(a,b).normalize();if(e.length()===0)e.z=1;d.cross(c,e).normalize();d.length()===0&&(e.x+=1.0E-4,d.cross(c,e).normalize());f.cross(e,d).normalize();this.n11=d.x;this.n12=f.x;this.n13=e.x;this.n21=d.y;this.n22=f.y;this.n23=e.y;this.n31=d.z;this.n32=f.z;this.n33=e.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,f=a.n13,e=a.n14,g=a.n21,h=a.n22,l=a.n23,m=a.n24,j=a.n31,i=a.n32,o=a.n33,n=a.n34,p=a.n41,k=a.n42,v=a.n43, -G=a.n44,I=b.n11,r=b.n12,M=b.n13,H=b.n14,N=b.n21,L=b.n22,O=b.n23,t=b.n24,x=b.n31,K=b.n32,R=b.n33,S=b.n34,P=b.n41,u=b.n42,A=b.n43,s=b.n44;this.n11=c*I+d*N+f*x+e*P;this.n12=c*r+d*L+f*K+e*u;this.n13=c*M+d*O+f*R+e*A;this.n14=c*H+d*t+f*S+e*s;this.n21=g*I+h*N+l*x+m*P;this.n22=g*r+h*L+l*K+m*u;this.n23=g*M+h*O+l*R+m*A;this.n24=g*H+h*t+l*S+m*s;this.n31=j*I+i*N+o*x+n*P;this.n32=j*r+i*L+o*K+n*u;this.n33=j*M+i*O+o*R+n*A;this.n34=j*H+i*t+o*S+n*s;this.n41=p*I+k*N+v*x+G*P;this.n42=p*r+k*L+v*K+G*u;this.n43=p*M+k* -O+v*R+G*A;this.n44=p*H+k*t+v*S+G*s;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= -a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,f=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*f;a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*f;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*f;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,f=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*f;a.y=this.n21*b+this.n22* -c+this.n23*d+this.n24*f;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*f;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*f;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33* -a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,f=this.n21,e=this.n22,g=this.n23,h=this.n24,l=this.n31,m=this.n32,j=this.n33,i=this.n34,o=this.n41,n=this.n42,p=this.n43,k=this.n44;return d*g*m*o-c*h*m*o-d*e*j*o+b*h*j*o+c*e*i*o-b*g*i*o-d*g*l*n+c*h*l*n+d*f*j*n-a*h*j*n-c*f*i*n+a*g*i*n+d*e*l*p-b*h*l*p-d*f*m*p+a*h*m*p+b*f*i*p-a*e*i*p-c*e*l*k+b*g*l*k+c*f*m*k-a*g*m*k-b*f*j*k+a*e*j*k},transpose:function(){var a; -a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42; -a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31; -a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34;a[b+15]=this.n44;return a}, -setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this}, -setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),f=1-c,e=a.x,g=a.y,h=a.z,l=f*e,m=f*g;this.set(l*e+c,l*g-d*h,l*h+d*g,0,l*g+d*h,m*g+c,m*h-d*e,0,l*h-d*g,m*h+d*e,f*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, -this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(a){var b=a.n11,c=a.n12,d=a.n13,f=a.n14,e=a.n21,g=a.n22,h=a.n23,l=a.n24,m=a.n31,j=a.n32,i=a.n33,o=a.n34,n=a.n41,p=a.n42,k=a.n43,v=a.n44;this.n11=h*o*p-l*i*p+l*j*k-g*o*k-h*j*v+g*i*v;this.n12=f*i*p-d*o*p-f*j*k+c*o*k+d*j*v-c*i*v;this.n13=d*l*p-f*h*p+f*g*k-c*l*k-d*g*v+c*h*v;this.n14=f*h*j-d*l*j-f*g*i+c*l*i+d*g*o-c*h*o;this.n21=l*i*n-h*o*n-l*m*k+e*o*k+h*m*v-e*i*v;this.n22=d*o*n-f*i*n+ -f*m*k-b*o*k-d*m*v+b*i*v;this.n23=f*h*n-d*l*n-f*e*k+b*l*k+d*e*v-b*h*v;this.n24=d*l*m-f*h*m+f*e*i-b*l*i-d*e*o+b*h*o;this.n31=g*o*n-l*j*n+l*m*p-e*o*p-g*m*v+e*j*v;this.n32=f*j*n-c*o*n-f*m*p+b*o*p+c*m*v-b*j*v;this.n33=d*l*n-f*g*n+f*e*p-b*l*p-c*e*v+b*g*v;this.n34=f*g*m-c*l*m-f*e*j+b*l*j+c*e*o-b*g*o;this.n41=h*j*n-g*i*n-h*m*p+e*i*p+g*m*k-e*j*k;this.n42=c*i*n-d*j*n+d*m*p-b*i*p-c*m*k+b*j*k;this.n43=d*g*n-c*h*n-d*e*p+b*h*p+c*e*k-b*g*k;this.n44=c*h*m-d*g*m+d*e*j-b*h*j-c*e*i+b*g*i;this.multiplyScalar(1/a.determinant()); -return this},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,f=a.z,e=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(f),f=Math.sin(f);switch(b){case "YXZ":var l=g*h,m=g*f,j=d*h,i=d*f;this.n11=l+i*c;this.n12=j*c-m;this.n13=e*d;this.n21=e*f;this.n22=e*h;this.n23=-c;this.n31=m*c-j;this.n32=i+l*c;this.n33=e*g;break;case "ZXY":l=g*h;m=g*f;j=d*h;i=d*f;this.n11=l-i*c;this.n12=-e*f;this.n13=j+m*c;this.n21=m+j*c;this.n22=e*h;this.n23=i-l*c;this.n31=-e*d;this.n32=c;this.n33=e*g;break;case "ZYX":l= -e*h;m=e*f;j=c*h;i=c*f;this.n11=g*h;this.n12=j*d-m;this.n13=l*d+i;this.n21=g*f;this.n22=i*d+l;this.n23=m*d-j;this.n31=-d;this.n32=c*g;this.n33=e*g;break;case "YZX":l=e*g;m=e*d;j=c*g;i=c*d;this.n11=g*h;this.n12=i-l*f;this.n13=j*f+m;this.n21=f;this.n22=e*h;this.n23=-c*h;this.n31=-d*h;this.n32=m*f+j;this.n33=l-i*f;break;case "XZY":l=e*g;m=e*d;j=c*g;i=c*d;this.n11=g*h;this.n12=-f;this.n13=d*h;this.n21=l*f+i;this.n22=e*h;this.n23=m*f-j;this.n31=j*f-m;this.n32=c*h;this.n33=i*f+l;break;default:l=e*h,m=e* -f,j=c*h,i=c*f,this.n11=g*h,this.n12=-g*f,this.n13=d,this.n21=m+j*d,this.n22=l-i*d,this.n23=-c*g,this.n31=i-l*d,this.n32=j+m*d,this.n33=e*g}return this},setRotationFromQuaternion:function(a){var b=a.x,c=a.y,d=a.z,f=a.w,e=b+b,g=c+c,h=d+d,a=b*e,l=b*g;b*=h;var m=c*g;c*=h;d*=h;e*=f;g*=f;f*=h;this.n11=1-(m+d);this.n12=l-f;this.n13=b+g;this.n21=l+f;this.n22=1-(a+d);this.n23=c-e;this.n31=b-g;this.n32=c+e;this.n33=1-(a+m);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*= -a;this.n21*=b;this.n22*=c;this.n23*=a;this.n31*=b;this.n32*=c;this.n33*=a;this.n41*=b;this.n42*=c;this.n43*=a;return this},compose:function(a,b,c){var d=THREE.Matrix4.__m1,f=THREE.Matrix4.__m2;d.identity();d.setRotationFromQuaternion(b);f.setScale(c.x,c.y,c.z);this.multiply(d,f);this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},decompose:function(a,b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;d.set(this.n11,this.n21,this.n31);f.set(this.n12,this.n22,this.n32);e.set(this.n13, -this.n23,this.n33);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=d.length();c.y=f.length();c.z=e.length();a.x=this.n14;a.y=this.n24;a.z=this.n34;d=THREE.Matrix4.__m1;d.copy(this);d.n11/=c.x;d.n21/=c.x;d.n31/=c.x;d.n12/=c.y;d.n22/=c.y;d.n32/=c.y;d.n13/=c.z;d.n23/=c.z;d.n33/=c.z;b.setFromRotationMatrix(d);return[a,b,c]},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34; -return this},extractRotation:function(a){var b=THREE.Matrix4.__v1,c=1/b.set(a.n11,a.n21,a.n31).length(),d=1/b.set(a.n12,a.n22,a.n32).length(),b=1/b.set(a.n13,a.n23,a.n33).length();this.n11=a.n11*c;this.n21=a.n21*c;this.n31=a.n31*c;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*b;this.n23=a.n23*b;this.n33=a.n33*b;return this}}; -THREE.Matrix4.makeInvert3x3=function(a){var b=a.m33,c=b.m,d=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,e=a.n32*a.n21-a.n31*a.n22,g=-a.n33*a.n12+a.n32*a.n13,h=a.n33*a.n11-a.n31*a.n13,l=-a.n32*a.n11+a.n31*a.n12,m=a.n23*a.n12-a.n22*a.n13,j=-a.n23*a.n11+a.n21*a.n13,i=a.n22*a.n11-a.n21*a.n12,a=a.n11*d+a.n21*g+a.n31*m;a==0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");a=1/a;c[0]=a*d;c[1]=a*f;c[2]=a*e;c[3]=a*g;c[4]=a*h;c[5]=a*l;c[6]=a*m;c[7]=a*j;c[8]=a*i;return b}; +THREE.Matrix4=function(a,b,c,d,f,e,g,h,m,k,l,i,n,j,r,t){this.set(a!==void 0?a:1,b||0,c||0,d||0,f||0,e!==void 0?e:1,g||0,h||0,m||0,k||0,l!==void 0?l:1,i||0,n||0,j||0,r||0,t!==void 0?t:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,m,k,l,i,n,j,r,t){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=f;this.n22=e;this.n23=g;this.n24=h;this.n31=m;this.n32=k;this.n33=l;this.n34=i;this.n41=n;this.n42=j;this.n43=r;this.n44=t;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, +b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;e.sub(a,b).normalize();if(e.length()===0)e.z=1;d.cross(c,e).normalize();d.length()===0&&(e.x+=1.0E-4,d.cross(c,e).normalize());f.cross(e,d).normalize();this.n11=d.x;this.n12=f.x;this.n13=e.x;this.n21=d.y;this.n22=f.y;this.n23=e.y;this.n31=d.z;this.n32=f.z;this.n33=e.z;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,f=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*f; +a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*f;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*f;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,f=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*f;a.y=this.n21*b+this.n22*c+this.n23*d+this.n24*f;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*f;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*f;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+ +c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},multiply:function(a,b){var c=a.n11,d=a.n12,f=a.n13,e=a.n14,g=a.n21,h=a.n22,m=a.n23,k=a.n24,l=a.n31,i=a.n32,n=a.n33,j=a.n34,r=a.n41,t=a.n42,w=a.n43,u=a.n44,M=b.n11,R=b.n12, +B=b.n13,N=b.n14,O=b.n21,s=b.n22,o=b.n23,C=b.n24,D=b.n31,T=b.n32,U=b.n33,F=b.n34,K=b.n41,I=b.n42,J=b.n43,P=b.n44;this.n11=c*M+d*O+f*D+e*K;this.n12=c*R+d*s+f*T+e*I;this.n13=c*B+d*o+f*U+e*J;this.n14=c*N+d*C+f*F+e*P;this.n21=g*M+h*O+m*D+k*K;this.n22=g*R+h*s+m*T+k*I;this.n23=g*B+h*o+m*U+k*J;this.n24=g*N+h*C+m*F+k*P;this.n31=l*M+i*O+n*D+j*K;this.n32=l*R+i*s+n*T+j*I;this.n33=l*B+i*o+n*U+j*J;this.n34=l*N+i*C+n*F+j*P;this.n41=r*M+t*O+w*D+u*K;this.n42=r*R+t*s+w*T+u*I;this.n43=r*B+t*o+w*U+u*J;this.n44=r*N+t* +C+w*F+u*P;return this},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*= +a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,f=this.n21,e=this.n22,g=this.n23,h=this.n24,m=this.n31,k=this.n32,l=this.n33,i=this.n34,n=this.n41,j=this.n42,r=this.n43,t=this.n44;return d*g*k*n-c*h*k*n-d*e*l*n+b*h*l*n+c*e*i*n-b*g*i*n-d*g*m*j+c*h*m*j+d*f*l*j-a*h*l*j-c*f*i*j+a*g*i*j+d*e*m*r-b*h*m*r-d*f*k*r+a*h*k*r+b*f*i*r-a*e*i*r-c*e*m*t+b*g*m*t+c*f*k*t-a*g*k*t-b*f*l*t+a*e*l*t}, +transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34; +a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11; +a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34; +a[b+15]=this.n44;return a},setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0, +0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),f=1-c,e=a.x,g=a.y,h=a.z,m=f*e,k=f*g;this.set(m*e+c,m*g-d*h,m*h+d*g,0,m*g+d*h,k*g+c,k*h-d*e,0,m*h-d*g,k*h+d*e,f*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){if(!this.position)this.position=new THREE.Vector3;this.position.set(this.n14,this.n24,this.n34);return this.position},getColumnX:function(){if(!this.columnX)this.columnX= +new THREE.Vector3;this.columnX.set(this.n11,this.n21,this.n31);return this.columnX},getColumnY:function(){if(!this.columnY)this.columnY=new THREE.Vector3;this.columnY.set(this.n12,this.n22,this.n32);return this.columnY},getColumnZ:function(){if(!this.columnZ)this.columnZ=new THREE.Vector3;this.columnZ.set(this.n13,this.n23,this.n33);return this.columnZ},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,f=a.z,e=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(f),f=Math.sin(f);switch(b){case "YXZ":var m= +g*h,k=g*f,l=d*h,i=d*f;this.n11=m+i*c;this.n12=l*c-k;this.n13=e*d;this.n21=e*f;this.n22=e*h;this.n23=-c;this.n31=k*c-l;this.n32=i+m*c;this.n33=e*g;break;case "ZXY":m=g*h;k=g*f;l=d*h;i=d*f;this.n11=m-i*c;this.n12=-e*f;this.n13=l+k*c;this.n21=k+l*c;this.n22=e*h;this.n23=i-m*c;this.n31=-e*d;this.n32=c;this.n33=e*g;break;case "ZYX":m=e*h;k=e*f;l=c*h;i=c*f;this.n11=g*h;this.n12=l*d-k;this.n13=m*d+i;this.n21=g*f;this.n22=i*d+m;this.n23=k*d-l;this.n31=-d;this.n32=c*g;this.n33=e*g;break;case "YZX":m=e*g;k= +e*d;l=c*g;i=c*d;this.n11=g*h;this.n12=i-m*f;this.n13=l*f+k;this.n21=f;this.n22=e*h;this.n23=-c*h;this.n31=-d*h;this.n32=k*f+l;this.n33=m-i*f;break;case "XZY":m=e*g;k=e*d;l=c*g;i=c*d;this.n11=g*h;this.n12=-f;this.n13=d*h;this.n21=m*f+i;this.n22=e*h;this.n23=k*f-l;this.n31=l*f-k;this.n32=c*h;this.n33=i*f+m;break;default:m=e*h,k=e*f,l=c*h,i=c*f,this.n11=g*h,this.n12=-g*f,this.n13=d,this.n21=k+l*d,this.n22=m-i*d,this.n23=-c*g,this.n31=i-m*d,this.n32=l+k*d,this.n33=e*g}return this},setRotationFromQuaternion:function(a){var b= +a.x,c=a.y,d=a.z,f=a.w,e=b+b,g=c+c,h=d+d,a=b*e,m=b*g;b*=h;var k=c*g;c*=h;d*=h;e*=f;g*=f;f*=h;this.n11=1-(k+d);this.n12=m-f;this.n13=b+g;this.n21=m+f;this.n22=1-(a+d);this.n23=c-e;this.n31=b-g;this.n32=c+e;this.n33=1-(a+k);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*=a;this.n21*=b;this.n22*=c;this.n23*=a;this.n31*=b;this.n32*=c;this.n33*=a;this.n41*=b;this.n42*=c;this.n43*=a;return this},compose:function(a,b,c){var d=THREE.Matrix4.__m1,f=THREE.Matrix4.__m2; +d.identity();d.setRotationFromQuaternion(b);f.setScale(c.x,c.y,c.z);this.multiply(d,f);this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},decompose:function(a,b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;d.set(this.n11,this.n21,this.n31);f.set(this.n12,this.n22,this.n32);e.set(this.n13,this.n23,this.n33);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=d.length(); +c.y=f.length();c.z=e.length();a.x=this.n14;a.y=this.n24;a.z=this.n34;d=THREE.Matrix4.__m1;d.copy(this);d.n11/=c.x;d.n21/=c.x;d.n31/=c.x;d.n12/=c.y;d.n22/=c.y;d.n32/=c.y;d.n13/=c.z;d.n23/=c.z;d.n33/=c.z;b.setFromRotationMatrix(d);return[a,b,c]},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34},extractRotation:function(a,b){var c=1/b.x,d=1/b.y,f=1/b.z;this.n11=a.n11*c;this.n21=a.n21*c;this.n31=a.n31*c;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*f;this.n23= +a.n23*f;this.n33=a.n33*f}}; +THREE.Matrix4.makeInvert=function(a,b){var c=a.n11,d=a.n12,f=a.n13,e=a.n14,g=a.n21,h=a.n22,m=a.n23,k=a.n24,l=a.n31,i=a.n32,n=a.n33,j=a.n34,r=a.n41,t=a.n42,w=a.n43,u=a.n44;b===void 0&&(b=new THREE.Matrix4);b.n11=m*j*t-k*n*t+k*i*w-h*j*w-m*i*u+h*n*u;b.n12=e*n*t-f*j*t-e*i*w+d*j*w+f*i*u-d*n*u;b.n13=f*k*t-e*m*t+e*h*w-d*k*w-f*h*u+d*m*u;b.n14=e*m*i-f*k*i-e*h*n+d*k*n+f*h*j-d*m*j;b.n21=k*n*r-m*j*r-k*l*w+g*j*w+m*l*u-g*n*u;b.n22=f*j*r-e*n*r+e*l*w-c*j*w-f*l*u+c*n*u;b.n23=e*m*r-f*k*r-e*g*w+c*k*w+f*g*u-c*m*u;b.n24= +f*k*l-e*m*l+e*g*n-c*k*n-f*g*j+c*m*j;b.n31=h*j*r-k*i*r+k*l*t-g*j*t-h*l*u+g*i*u;b.n32=e*i*r-d*j*r-e*l*t+c*j*t+d*l*u-c*i*u;b.n33=f*k*r-e*h*r+e*g*t-c*k*t-d*g*u+c*h*u;b.n34=e*h*l-d*k*l-e*g*i+c*k*i+d*g*j-c*h*j;b.n41=m*i*r-h*n*r-m*l*t+g*n*t+h*l*w-g*i*w;b.n42=d*n*r-f*i*r+f*l*t-c*n*t-d*l*w+c*i*w;b.n43=f*h*r-d*m*r-f*g*t+c*m*t+d*g*w-c*h*w;b.n44=d*m*l-f*h*l+f*g*i-c*m*i-d*g*n+c*h*n;b.multiplyScalar(1/a.determinant());return b}; +THREE.Matrix4.makeInvert3x3=function(a){var b=a.m33,c=b.m,d=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,e=a.n32*a.n21-a.n31*a.n22,g=-a.n33*a.n12+a.n32*a.n13,h=a.n33*a.n11-a.n31*a.n13,m=-a.n32*a.n11+a.n31*a.n12,k=a.n23*a.n12-a.n22*a.n13,l=-a.n23*a.n11+a.n21*a.n13,i=a.n22*a.n11-a.n21*a.n12,a=a.n11*d+a.n21*g+a.n31*k;a===0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");a=1/a;c[0]=a*d;c[1]=a*f;c[2]=a*e;c[3]=a*g;c[4]=a*h;c[5]=a*m;c[6]=a*k;c[7]=a*l;c[8]=a*i;return b}; THREE.Matrix4.makeFrustum=function(a,b,c,d,f,e){var g;g=new THREE.Matrix4;g.n11=2*f/(b-a);g.n12=0;g.n13=(b+a)/(b-a);g.n14=0;g.n21=0;g.n22=2*f/(d-c);g.n23=(d+c)/(d-c);g.n24=0;g.n31=0;g.n32=0;g.n33=-(e+f)/(e-f);g.n34=-2*e*f/(e-f);g.n41=0;g.n42=0;g.n43=-1;g.n44=0;return g};THREE.Matrix4.makePerspective=function(a,b,c,d){var f,a=c*Math.tan(a*Math.PI/360);f=-a;return THREE.Matrix4.makeFrustum(f*b,a*b,f,a,c,d)}; -THREE.Matrix4.makeOrtho=function(a,b,c,d,f,e){var g,h,l,m;g=new THREE.Matrix4;h=b-a;l=c-d;m=e-f;g.n11=2/h;g.n12=0;g.n13=0;g.n14=-((b+a)/h);g.n21=0;g.n22=2/l;g.n23=0;g.n24=-((c+d)/l);g.n31=0;g.n32=0;g.n33=-2/m;g.n34=-((e+f)/m);g.n41=0;g.n42=0;g.n43=0;g.n44=1;return g};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; +THREE.Matrix4.makeOrtho=function(a,b,c,d,f,e){var g,h,m,k;g=new THREE.Matrix4;h=b-a;m=c-d;k=e-f;g.n11=2/h;g.n12=0;g.n13=0;g.n14=-((b+a)/h);g.n21=0;g.n22=2/m;g.n23=0;g.n24=-((c+d)/m);g.n31=0;g.n32=0;g.n33=-2/k;g.n34=-((e+f)/k);g.n41=0;g.n42=0;g.n43=0;g.n44=1;return g};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; THREE.Object3D=function(){this.name="";this.id=THREE.Object3DCount++;this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder="XYZ";this.scale=new THREE.Vector3(1,1,1);this.flipSided=this.doubleSided=this.dynamic=!1;this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate= !0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.boundRadius=0;this.boundRadiusScale=1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this._vector=new THREE.Vector3}; THREE.Object3D.prototype={constructor:THREE.Object3D,translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(a,this.position,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},add:function(a){if(this.children.indexOf(a)=== --1)a.parent!==void 0&&a.parent.remove(a),a.parent=this,this.children.push(a)},remove:function(a){var b=this.children.indexOf(a);if(b!==-1)a.parent=void 0,this.children.splice(b,1)},getChildByName:function(a,b){var c,d,f;c=0;for(d=this.children.length;c=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),d -K&&d.positionScreen.z0&&I.z<1))V=v[k]=v[k]||new THREE.RenderableParticle,k++,p=V,p.x=I.x/I.w,p.y=I.y/I.w,p.z=I.z,p.rotation=w.rotation.z,p.scale.x=w.scale.x*Math.abs(p.x-(I.x+t.projectionMatrix.n11)/(I.w+t.projectionMatrix.n14)),p.scale.y=w.scale.y*Math.abs(p.y-(I.y+t.projectionMatrix.n22)/(I.w+t.projectionMatrix.n24)),p.materials=w.materials,G.elements.push(p);x&&G.elements.sort(b);return G}}; -THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +-1){a.parent!==void 0&&a.parent.remove(a);a.parent=this;this.children.push(a);for(var b=this;b.parent!==void 0;)b=b.parent;b!==void 0&&b instanceof THREE.Scene&&b.addChildRecurse(a)}},remove:function(a){var b=this,c=this.children.indexOf(a);if(c!==-1){a.parent=void 0;for(this.children.splice(c,1);b.parent!==void 0;)b=b.parent;b!==void 0&&b instanceof THREE.Scene&&b.removeChildRecurse(a)}},getChildByName:function(a,b){var c,d,f;c=0;for(d=this.children.length;c=0&&f>=0&&g>=0&&j>=0?!0:e<0&&f<0||g<0&&j<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-j)):j<0&&(d=Math.min(d,g/(g-j))),dJ&&g.positionScreen.z0&&s.z<1))v=R[M]=R[M]||new THREE.RenderableParticle,M++,u= +v,u.x=s.x/s.w,u.y=s.y/s.w,u.z=s.z,u.rotation=q.rotation.z,u.scale.x=q.scale.x*Math.abs(u.x-(s.x+e.projectionMatrix.n11)/(s.w+e.projectionMatrix.n14)),u.scale.y=q.scale.y*Math.abs(u.y-(s.y+e.projectionMatrix.n22)/(s.w+e.projectionMatrix.n24)),u.materials=q.materials,N.push(u);f&&N.sort(b);return N}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,f=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-f),f=Math.sin(-f),e=Math.cos(c),c=Math.sin(c),g=a*b,h=d*f;this.w=g*e-h*c;this.x=g*c+h*e;this.y=d*b*e+a*f*c;this.z=a*f*e-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); -this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a==0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+f*e+c*h-d*g;this.y=c*a+f*g+d*e-b*h;this.z=d*a+f*h+b*g-c*e;this.w=f*a-b*e-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,h=this.z,l=this.w,m=l*c+g*f-h*d,j=l*d+h*c-e*f,i=l*f+e*d-g*c,c=-e* -c-g*d-h*f;b.x=m*l+c*-e+j*-h-i*-g;b.y=j*l+c*-g+i*-e-m*-h;b.z=i*l+c*-h+m*-g-j*-e;return b}}; -THREE.Quaternion.slerp=function(a,b,c,d){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;f<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,f=-f):c.copy(b);if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var e=Math.acos(f),f=Math.sqrt(1-f*f);if(Math.abs(f)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-d)*e)/f;d=Math.sin(d*e)/f;c.w=a.w*b+c.w*d;c.x=a.x*b+c.x*d;c.y=a.y*b+c.y*d;c.z=a.z*b+c.z*d;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; -THREE.Face3=function(a,b,c,d,f,e){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materials=e instanceof Array?e:[e];this.centroid=new THREE.Vector3}; -THREE.Face4=function(a,b,c,d,f,e,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materials=g instanceof Array?g:[g];this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; -THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}};THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; +this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= +this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+f*e+c*h-d*g;this.y=c*a+f*g+d*e-b*h;this.z=d*a+f*h+b*g-c*e;this.w=f*a-b*e-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,h=this.z,m=this.w,k=m*c+g*f-h*d,l=m*d+h*c-e*f,i=m*f+e*d-g*c,c=-e* +c-g*d-h*f;b.x=k*m+c*-e+l*-h-i*-g;b.y=l*m+c*-g+i*-e-k*-h;b.z=i*m+c*-h+k*-g-l*-e;return b}};THREE.Quaternion.slerp=function(a,b,c,d){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var e=Math.acos(f),g=Math.sqrt(1-f*f);if(Math.abs(g)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;f=Math.sin((1-d)*e)/g;d=Math.sin(d*e)/g;c.w=a.w*f+b.w*d;c.x=a.x*f+b.x*d;c.y=a.y*f+b.y*d;c.z=a.z*f+b.z*d;return c}; +THREE.Vertex=function(a){this.position=a||new THREE.Vector3};THREE.Face3=function(a,b,c,d,f,e){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=e;this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,b,c,d,f,e,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; +THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}}; +THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,d=this.vertices.length;c0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, +c.vertexNormals[1].copy(d[c.b]),c.vertexNormals[2].copy(d[c.c]),c.vertexNormals[3].copy(d[c.d]))},computeTangents:function(){function a(a,b,c,d,e,f,o){h=a.vertices[b].position;m=a.vertices[c].position;k=a.vertices[d].position;l=g[e];i=g[f];n=g[o];j=m.x-h.x;r=k.x-h.x;t=m.y-h.y;w=k.y-h.y;u=m.z-h.z;M=k.z-h.z;R=i.u-l.u;B=n.u-l.u;N=i.v-l.v;O=n.v-l.v;s=1/(R*O-B*N);T.set((O*j-N*r)*s,(O*t-N*w)*s,(O*u-N*M)*s);U.set((R*r-B*j)*s,(R*w-B*t)*s,(R*M-B*u)*s);C[b].addSelf(T);C[c].addSelf(T);C[d].addSelf(T);D[b].addSelf(U); +D[c].addSelf(U);D[d].addSelf(U)}var b,c,d,f,e,g,h,m,k,l,i,n,j,r,t,w,u,M,R,B,N,O,s,o,C=[],D=[],T=new THREE.Vector3,U=new THREE.Vector3,F=new THREE.Vector3,K=new THREE.Vector3,I=new THREE.Vector3;b=0;for(c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,b=0,c=this.vertices.length;b0&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(v.r*255)+","+Math.floor(v.g*255)+","+Math.floor(v.b*255)+","+G+")"),k.fillRect(Math.floor(X.getX()), -Math.floor(X.getY()),Math.floor(X.getWidth()),Math.floor(X.getHeight()))),X.empty())};this.render=function(a,j){function i(a){var b,c,d,e;Y.setRGB(0,0,0);ua.setRGB(0,0,0);va.setRGB(0,0,0);b=0;for(c=a.length;b>1,o=i.height>> -1,g=e.scale.x*n,l=e.scale.y*p,h=g*q,j=l*o,W.set(a.x-h,a.y-j,a.x+h,a.y+j),ma.intersects(W)&&(k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(g,-l),k.translate(-q,-o),k.drawImage(i,0,0),k.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=e.scale.x*n,j=e.scale.y*p,W.set(a.x-h,a.y-j,a.x+h,a.y+j),ma.intersects(W)&&(d(g.color.getContextStyle()),f(g.color.getContextStyle()),k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(h,j),g.program(k),k.restore()))}function v(a,e, -f,g){b(g.opacity);c(g.blending);k.beginPath();k.moveTo(a.positionScreen.x,a.positionScreen.y);k.lineTo(e.positionScreen.x,e.positionScreen.y);k.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(N!=a)k.lineWidth=N=a;a=g.linecap;if(L!=a)k.lineCap=L=a;a=g.linejoin;if(O!=a)k.lineJoin=O=a;d(g.color.getContextStyle());k.stroke();W.inflate(g.linewidth*2)}}function G(a,d,f,g,h,k,i,q){e.info.render.vertices+=3;e.info.render.faces++;b(q.opacity);c(q.blending);u=a.positionScreen.x;A=a.positionScreen.y; -s=d.positionScreen.x;E=d.positionScreen.y;z=f.positionScreen.x;J=f.positionScreen.y;H(u,A,s,E,z,J);if(q instanceof THREE.MeshBasicMaterial)if(q.map)q.map.mapping instanceof THREE.UVMapping&&(Z=i.uvs[0],Da(u,A,s,E,z,J,Z[g].u,Z[g].v,Z[h].u,Z[h].v,Z[k].u,Z[k].v,q.map));else if(q.envMap){if(q.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=j.matrixWorldInverse,T.copy(i.vertexNormalsWorld[g]),Ea=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Fa=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,T.copy(i.vertexNormalsWorld[h]), -Ga=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ha=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,T.copy(i.vertexNormalsWorld[k]),Ia=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ja=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,Da(u,A,s,E,z,J,Ea,Fa,Ga,Ha,Ia,Ja,q.envMap)}else q.wireframe?ia(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(q.color);else if(q instanceof THREE.MeshLambertMaterial)q.map&&!q.wireframe&&(q.map.mapping instanceof THREE.UVMapping&&(Z=i.uvs[0],Da(u,A,s,E,z,J,Z[g].u,Z[g].v, -Z[h].u,Z[h].v,Z[k].u,Z[k].v,q.map)),c(THREE.SubtractiveBlending)),Ba?!q.wireframe&&q.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==3?(B.r=C.r=D.r=Y.r,B.g=C.g=D.g=Y.g,B.b=C.b=D.b=Y.b,o(l,i.v1.positionWorld,i.vertexNormalsWorld[0],B),o(l,i.v2.positionWorld,i.vertexNormalsWorld[1],C),o(l,i.v3.positionWorld,i.vertexNormalsWorld[2],D),B.r=Math.max(0,Math.min(q.color.r*B.r,1)),B.g=Math.max(0,Math.min(q.color.g*B.g,1)),B.b=Math.max(0,Math.min(q.color.b*B.b,1)),C.r=Math.max(0,Math.min(q.color.r* -C.r,1)),C.g=Math.max(0,Math.min(q.color.g*C.g,1)),C.b=Math.max(0,Math.min(q.color.b*C.b,1)),D.r=Math.max(0,Math.min(q.color.r*D.r,1)),D.g=Math.max(0,Math.min(q.color.g*D.g,1)),D.b=Math.max(0,Math.min(q.color.b*D.b,1)),Q.r=(C.r+D.r)*0.5,Q.g=(C.g+D.g)*0.5,Q.b=(C.b+D.b)*0.5,ca=xa(B,C,D,Q),oa(u,A,s,E,z,J,0,0,1,0,0,1,ca)):(y.r=Y.r,y.g=Y.g,y.b=Y.b,o(l,i.centroidWorld,i.normalWorld,y),y.r=Math.max(0,Math.min(q.color.r*y.r,1)),y.g=Math.max(0,Math.min(q.color.g*y.g,1)),y.b=Math.max(0,Math.min(q.color.b*y.b, -1)),q.wireframe?ia(y,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(y)):q.wireframe?ia(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(q.color);else if(q instanceof THREE.MeshDepthMaterial)ea=j.near,fa=j.far,B.r=B.g=B.b=1-na(a.positionScreen.z,ea,fa),C.r=C.g=C.b=1-na(d.positionScreen.z,ea,fa),D.r=D.g=D.b=1-na(f.positionScreen.z,ea,fa),Q.r=(C.r+D.r)*0.5,Q.g=(C.g+D.g)*0.5,Q.b=(C.b+D.b)*0.5,ca=xa(B,C,D,Q),oa(u,A,s,E,z,J,0,0,1,0,0,1,ca);else if(q instanceof THREE.MeshNormalMaterial)y.r= -pa(i.normalWorld.x),y.g=pa(i.normalWorld.y),y.b=pa(i.normalWorld.z),q.wireframe?ia(y,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(y)}function I(a,d,f,g,h,k,i,q,n){e.info.render.vertices+=4;e.info.render.faces++;b(q.opacity);c(q.blending);if(q.map||q.envMap)G(a,d,g,0,1,3,i,q,n),G(h,f,k,1,2,3,i,q,n);else if(u=a.positionScreen.x,A=a.positionScreen.y,s=d.positionScreen.x,E=d.positionScreen.y,z=f.positionScreen.x,J=f.positionScreen.y,w=g.positionScreen.x,V=g.positionScreen.y,$=h.positionScreen.x, -ga=h.positionScreen.y,ha=k.positionScreen.x,da=k.positionScreen.y,q instanceof THREE.MeshBasicMaterial)M(u,A,s,E,z,J,w,V),q.wireframe?ia(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(q.color);else if(q instanceof THREE.MeshLambertMaterial)Ba?!q.wireframe&&q.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==4?(B.r=C.r=D.r=Q.r=Y.r,B.g=C.g=D.g=Q.g=Y.g,B.b=C.b=D.b=Q.b=Y.b,o(l,i.v1.positionWorld,i.vertexNormalsWorld[0],B),o(l,i.v2.positionWorld,i.vertexNormalsWorld[1], -C),o(l,i.v4.positionWorld,i.vertexNormalsWorld[3],D),o(l,i.v3.positionWorld,i.vertexNormalsWorld[2],Q),B.r=Math.max(0,Math.min(q.color.r*B.r,1)),B.g=Math.max(0,Math.min(q.color.g*B.g,1)),B.b=Math.max(0,Math.min(q.color.b*B.b,1)),C.r=Math.max(0,Math.min(q.color.r*C.r,1)),C.g=Math.max(0,Math.min(q.color.g*C.g,1)),C.b=Math.max(0,Math.min(q.color.b*C.b,1)),D.r=Math.max(0,Math.min(q.color.r*D.r,1)),D.g=Math.max(0,Math.min(q.color.g*D.g,1)),D.b=Math.max(0,Math.min(q.color.b*D.b,1)),Q.r=Math.max(0,Math.min(q.color.r* -Q.r,1)),Q.g=Math.max(0,Math.min(q.color.g*Q.g,1)),Q.b=Math.max(0,Math.min(q.color.b*Q.b,1)),ca=xa(B,C,D,Q),H(u,A,s,E,w,V),oa(u,A,s,E,w,V,0,0,1,0,0,1,ca),H($,ga,z,J,ha,da),oa($,ga,z,J,ha,da,1,0,1,1,0,1,ca)):(y.r=Y.r,y.g=Y.g,y.b=Y.b,o(l,i.centroidWorld,i.normalWorld,y),y.r=Math.max(0,Math.min(q.color.r*y.r,1)),y.g=Math.max(0,Math.min(q.color.g*y.g,1)),y.b=Math.max(0,Math.min(q.color.b*y.b,1)),M(u,A,s,E,z,J,w,V),q.wireframe?ia(y,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(y)):(M(u, -A,s,E,z,J,w,V),q.wireframe?ia(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(q.color));else if(q instanceof THREE.MeshNormalMaterial)y.r=pa(i.normalWorld.x),y.g=pa(i.normalWorld.y),y.b=pa(i.normalWorld.z),M(u,A,s,E,z,J,w,V),q.wireframe?ia(y,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ja(y);else if(q instanceof THREE.MeshDepthMaterial)ea=j.near,fa=j.far,B.r=B.g=B.b=1-na(a.positionScreen.z,ea,fa),C.r=C.g=C.b=1-na(d.positionScreen.z,ea,fa),D.r=D.g=D.b=1-na(g.positionScreen.z, -ea,fa),Q.r=Q.g=Q.b=1-na(f.positionScreen.z,ea,fa),ca=xa(B,C,D,Q),H(u,A,s,E,w,V),oa(u,A,s,E,w,V,0,0,1,0,0,1,ca),H($,ga,z,J,ha,da),oa($,ga,z,J,ha,da,1,0,1,1,0,1,ca)}function H(a,b,c,d,e,f){k.beginPath();k.moveTo(a,b);k.lineTo(c,d);k.lineTo(e,f);k.lineTo(a,b);k.closePath()}function M(a,b,c,d,e,f,g,h){k.beginPath();k.moveTo(a,b);k.lineTo(c,d);k.lineTo(e,f);k.lineTo(g,h);k.lineTo(a,b);k.closePath()}function ia(a,b,c,e){if(N!=b)k.lineWidth=N=b;if(L!=c)k.lineCap=L=c;if(O!=e)k.lineJoin=O=e;d(a.getContextStyle()); -k.stroke();W.inflate(b*2)}function ja(a){f(a.getContextStyle());k.fill()}function Da(a,b,c,d,e,g,h,i,j,l,n,o,m){if(m.image.width!=0){if(m.needsUpdate==!0||Aa[m.id]==void 0){var p=m.wrapS==THREE.RepeatWrapping,r=m.wrapT==THREE.RepeatWrapping;Aa[m.id]=k.createPattern(m.image,p&&r?"repeat":p&&!r?"repeat-x":!p&&r?"repeat-y":"no-repeat");m.needsUpdate=!1}f(Aa[m.id]);var p=m.offset.x/m.repeat.x,r=m.offset.y/m.repeat.y,s=(m.image.width-1)*m.repeat.x,m=(m.image.height-1)*m.repeat.y,h=(h+p)*s,i=(i+r)*m,j= -(j+p)*s,l=(l+r)*m,n=(n+p)*s,o=(o+r)*m;c-=a;d-=b;e-=a;g-=b;j-=h;l-=i;n-=h;o-=i;p=1/(j*o-n*l);m=(o*c-l*e)*p;l=(o*d-l*g)*p;c=(j*e-n*c)*p;d=(j*g-n*d)*p;a=a-m*h-c*i;b=b-l*h-d*i;k.save();k.transform(m,l,c,d,a,b);k.fill();k.restore()}}function oa(a,b,c,d,e,f,g,h,i,j,l,m,n){var o,p;o=n.width-1;p=n.height-1;g*=o;h*=p;i*=o;j*=p;l*=o;m*=p;c-=a;d-=b;e-=a;f-=b;i-=g;j-=h;l-=g;m-=h;p=1/(i*m-l*j);o=(m*c-j*e)*p;j=(m*d-j*f)*p;c=(i*e-l*c)*p;d=(i*f-l*d)*p;a=a-o*g-c*h;b=b-j*g-d*h;k.save();k.transform(o,j,c,d,a,b);k.clip(); -k.drawImage(n,0,0);k.restore()}function xa(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);aa[0]=e<0?0:e>255?255:e;aa[1]=f<0?0:f>255?255:f;aa[2]=a<0?0:a>255?255:a;aa[4]=g<0?0:g>255?255:g;aa[5]=h<0?0:h>255?255:h;aa[6]=b<0?0:b>255?255:b;aa[8]=i<0?0:i>255?255:i;aa[9]=j<0?0:j>255?255:j;aa[10]=c<0?0:c>255?255:c;aa[12]=k<0?0:k>255?255:k;aa[13]=l<0?0:l>255?255:l;aa[14]=d<0? -0:d>255?255:d;sa.putImageData(Ca,0,0);wa.drawImage(ra,0,0);return ta}function na(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function pa(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function ka(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;e!=0&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}var ya,Ka,F,ba,la,qa,za,U;this.autoClear?this.clear():k.setTransform(1,0,0,-1,n,p);e.info.render.vertices=0;e.info.render.faces=0;g=m.projectScene(a,j,this.sortElements);h=g.elements;l=g.lights;(Ba=l.length>0)&&i(l);ya= -0;for(Ka=h.length;ya0&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b* +255)+","+t+")"),j.fillRect(Math.floor($.getX()),Math.floor($.getY()),Math.floor($.getWidth()),Math.floor($.getHeight()))),$.empty())};this.render=function(a,k){function l(a){var b,c,d,e=a.lights;aa.setRGB(0,0,0);ta.setRGB(0,0,0);ua.setRGB(0,0,0);a=0;for(b=e.length;a>1,o=l.height>>1,g=e.scale.x*i,m=e.scale.y*n,h=g*p,k=m*o,Y.set(a.x-h,a.y-k,a.x+h,a.y+k),ka.intersects(Y)&&(j.save(),j.translate(a.x,a.y),j.rotate(-e.rotation),j.scale(g,-m),j.translate(-p,-o),j.drawImage(l,0,0),j.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=e.scale.x*i,k=e.scale.y*n,Y.set(a.x-h,a.y-k,a.x+h,a.y+k),ka.intersects(Y)&&(d(g.color.getContextStyle()),f(g.color.getContextStyle()),j.save(),j.translate(a.x,a.y),j.rotate(-e.rotation),j.scale(h,k),g.program(j), +j.restore()))}function t(a,e,f,g){b(g.opacity);c(g.blending);j.beginPath();j.moveTo(a.positionScreen.x,a.positionScreen.y);j.lineTo(e.positionScreen.x,e.positionScreen.y);j.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(B!=a)j.lineWidth=B=a;a=g.linecap;if(N!=a)j.lineCap=N=a;a=g.linejoin;if(O!=a)j.lineJoin=O=a;d(g.color.getContextStyle());j.stroke();Y.inflate(g.linewidth*2)}}function u(a,d,f,g,j,h,i,p,l){e.info.render.vertices+=3;e.info.render.faces++;b(p.opacity);c(p.blending); +F=a.positionScreen.x;K=a.positionScreen.y;I=d.positionScreen.x;J=d.positionScreen.y;P=f.positionScreen.x;Q=f.positionScreen.y;M(F,K,I,J,P,Q);if(p instanceof THREE.MeshBasicMaterial)if(p.map)p.map.mapping instanceof THREE.UVMapping&&(W=i.uvs[0],Ca(F,K,I,J,P,Q,W[g].u,W[g].v,W[j].u,W[j].v,W[h].u,W[h].v,p.map));else if(p.envMap){if(p.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,S.copy(i.vertexNormalsWorld[0]),Da=(S.x*a.n11+S.y*a.n12+S.z*a.n13)*0.5+0.5,Ea=-(S.x*a.n21+ +S.y*a.n22+S.z*a.n23)*0.5+0.5,S.copy(i.vertexNormalsWorld[1]),Fa=(S.x*a.n11+S.y*a.n12+S.z*a.n13)*0.5+0.5,Ga=-(S.x*a.n21+S.y*a.n22+S.z*a.n23)*0.5+0.5,S.copy(i.vertexNormalsWorld[2]),Ha=(S.x*a.n11+S.y*a.n12+S.z*a.n13)*0.5+0.5,Ia=-(S.x*a.n21+S.y*a.n22+S.z*a.n23)*0.5+0.5,Ca(F,K,I,J,P,Q,Da,Ea,Fa,Ga,Ha,Ia,p.envMap)}else p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color);else if(p instanceof THREE.MeshLambertMaterial)p.map&&!p.wireframe&&(p.map.mapping instanceof +THREE.UVMapping&&(W=i.uvs[0],Ca(F,K,I,J,P,Q,W[g].u,W[g].v,W[j].u,W[j].v,W[h].u,W[h].v,p.map)),c(THREE.SubtractiveBlending)),Aa?!p.wireframe&&p.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==3?(x.r=q.r=v.r=aa.r,x.g=q.g=v.g=aa.g,x.b=q.b=v.b=aa.b,m(l,i.v1.positionWorld,i.vertexNormalsWorld[0],x),m(l,i.v2.positionWorld,i.vertexNormalsWorld[1],q),m(l,i.v3.positionWorld,i.vertexNormalsWorld[2],v),x.r=Math.max(0,Math.min(p.color.r*x.r,1)),x.g=Math.max(0,Math.min(p.color.g*x.g,1)),x.b=Math.max(0, +Math.min(p.color.b*x.b,1)),q.r=Math.max(0,Math.min(p.color.r*q.r,1)),q.g=Math.max(0,Math.min(p.color.g*q.g,1)),q.b=Math.max(0,Math.min(p.color.b*q.b,1)),v.r=Math.max(0,Math.min(p.color.r*v.r,1)),v.g=Math.max(0,Math.min(p.color.g*v.g,1)),v.b=Math.max(0,Math.min(p.color.b*v.b,1)),G.r=(q.r+v.r)*0.5,G.g=(q.g+v.g)*0.5,G.b=(q.b+v.b)*0.5,ba=wa(x,q,v,G),ma(F,K,I,J,P,Q,0,0,1,0,0,1,ba)):(ca.r=aa.r,ca.g=aa.g,ca.b=aa.b,m(l,i.centroidWorld,i.normalWorld,ca),z.r=Math.max(0,Math.min(p.color.r*ca.r,1)),z.g=Math.max(0, +Math.min(p.color.g*ca.g,1)),z.b=Math.max(0,Math.min(p.color.b*ca.b,1)),p.wireframe?ga(z,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(z)):p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color);else if(p instanceof THREE.MeshDepthMaterial)ea=k.near,Z=k.far,x.r=x.g=x.b=1-la(a.positionScreen.z,ea,Z),q.r=q.g=q.b=1-la(d.positionScreen.z,ea,Z),v.r=v.g=v.b=1-la(f.positionScreen.z,ea,Z),G.r=(q.r+v.r)*0.5,G.g=(q.g+v.g)*0.5,G.b=(q.b+v.b)*0.5,ba=wa(x, +q,v,G),ma(F,K,I,J,P,Q,0,0,1,0,0,1,ba);else if(p instanceof THREE.MeshNormalMaterial)z.r=na(i.normalWorld.x),z.g=na(i.normalWorld.y),z.b=na(i.normalWorld.z),p.wireframe?ga(z,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(z)}function w(a,d,f,g,j,h,i,p,l){e.info.render.vertices+=4;e.info.render.faces++;b(p.opacity);c(p.blending);if(p.map||p.envMap)u(a,d,g,0,1,3,i,p,l),u(j,f,h,1,2,3,i,p,l);else if(F=a.positionScreen.x,K=a.positionScreen.y,I=d.positionScreen.x,J=d.positionScreen.y,P=f.positionScreen.x, +Q=f.positionScreen.y,V=g.positionScreen.x,E=g.positionScreen.y,pa=j.positionScreen.x,y=j.positionScreen.y,L=h.positionScreen.x,H=h.positionScreen.y,p instanceof THREE.MeshBasicMaterial)R(F,K,I,J,P,Q,V,E),p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color);else if(p instanceof THREE.MeshLambertMaterial)Aa?!p.wireframe&&p.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==4?(x.r=q.r=v.r=G.r=aa.r,x.g=q.g=v.g=G.g=aa.g,x.b=q.b=v.b=G.b=aa.b,m(l,i.v1.positionWorld, +i.vertexNormalsWorld[0],x),m(l,i.v2.positionWorld,i.vertexNormalsWorld[1],q),m(l,i.v4.positionWorld,i.vertexNormalsWorld[3],v),m(l,i.v3.positionWorld,i.vertexNormalsWorld[2],G),x.r=Math.max(0,Math.min(p.color.r*x.r,1)),x.g=Math.max(0,Math.min(p.color.g*x.g,1)),x.b=Math.max(0,Math.min(p.color.b*x.b,1)),q.r=Math.max(0,Math.min(p.color.r*q.r,1)),q.g=Math.max(0,Math.min(p.color.g*q.g,1)),q.b=Math.max(0,Math.min(p.color.b*q.b,1)),v.r=Math.max(0,Math.min(p.color.r*v.r,1)),v.g=Math.max(0,Math.min(p.color.g* +v.g,1)),v.b=Math.max(0,Math.min(p.color.b*v.b,1)),G.r=Math.max(0,Math.min(p.color.r*G.r,1)),G.g=Math.max(0,Math.min(p.color.g*G.g,1)),G.b=Math.max(0,Math.min(p.color.b*G.b,1)),ba=wa(x,q,v,G),M(F,K,I,J,V,E),ma(F,K,I,J,V,E,0,0,1,0,0,1,ba),M(pa,y,P,Q,L,H),ma(pa,y,P,Q,L,H,1,0,1,1,0,1,ba)):(ca.r=aa.r,ca.g=aa.g,ca.b=aa.b,m(l,i.centroidWorld,i.normalWorld,ca),z.r=Math.max(0,Math.min(p.color.r*ca.r,1)),z.g=Math.max(0,Math.min(p.color.g*ca.g,1)),z.b=Math.max(0,Math.min(p.color.b*ca.b,1)),R(F,K,I,J,P,Q,V,E), +p.wireframe?ga(z,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(z)):(R(F,K,I,J,P,Q,V,E),p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color));else if(p instanceof THREE.MeshNormalMaterial)z.r=na(i.normalWorld.x),z.g=na(i.normalWorld.y),z.b=na(i.normalWorld.z),R(F,K,I,J,P,Q,V,E),p.wireframe?ga(z,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(z);else if(p instanceof THREE.MeshDepthMaterial)ea=k.near,Z=k.far,x.r=x.g=x.b=1-la(a.positionScreen.z, +ea,Z),q.r=q.g=q.b=1-la(d.positionScreen.z,ea,Z),v.r=v.g=v.b=1-la(g.positionScreen.z,ea,Z),G.r=G.g=G.b=1-la(f.positionScreen.z,ea,Z),ba=wa(x,q,v,G),M(F,K,I,J,V,E),ma(F,K,I,J,V,E,0,0,1,0,0,1,ba),M(pa,y,P,Q,L,H),ma(pa,y,P,Q,L,H,1,0,1,1,0,1,ba)}function M(a,b,c,d,e,f){j.beginPath();j.moveTo(a,b);j.lineTo(c,d);j.lineTo(e,f);j.lineTo(a,b);j.closePath()}function R(a,b,c,d,e,f,g,h){j.beginPath();j.moveTo(a,b);j.lineTo(c,d);j.lineTo(e,f);j.lineTo(g,h);j.lineTo(a,b);j.closePath()}function ga(a,b,c,e){if(B!= +b)j.lineWidth=B=b;if(N!=c)j.lineCap=N=c;if(O!=e)j.lineJoin=O=e;d(a.getContextStyle());j.stroke();Y.inflate(b*2)}function ha(a){f(a.getContextStyle());j.fill()}function Ca(a,b,c,d,e,g,h,i,l,k,m,o,n){if(n.image.width!=0){if(n.needsUpdate==!0||za[n.id]==void 0){var q=n.wrapS==THREE.RepeatWrapping,r=n.wrapT==THREE.RepeatWrapping;za[n.id]=j.createPattern(n.image,q&&r?"repeat":q&&!r?"repeat-x":!q&&r?"repeat-y":"no-repeat");n.needsUpdate=!1}f(za[n.id]);var q=n.offset.x/n.repeat.x,r=n.offset.y/n.repeat.y, +s=(n.image.width-1)*n.repeat.x,n=(n.image.height-1)*n.repeat.y,h=(h+q)*s,i=(i+r)*n,l=(l+q)*s,k=(k+r)*n,m=(m+q)*s,o=(o+r)*n;c-=a;d-=b;e-=a;g-=b;l-=h;k-=i;m-=h;o-=i;q=1/(l*o-m*k);n=(o*c-k*e)*q;k=(o*d-k*g)*q;c=(l*e-m*c)*q;d=(l*g-m*d)*q;a=a-n*h-c*i;b=b-k*h-d*i;j.save();j.transform(n,k,c,d,a,b);j.fill();j.restore()}}function ma(a,b,c,d,e,f,g,h,i,k,l,m,n){var o,q;o=n.width-1;q=n.height-1;g*=o;h*=q;i*=o;k*=q;l*=o;m*=q;c-=a;d-=b;e-=a;f-=b;i-=g;k-=h;l-=g;m-=h;q=1/(i*m-l*k);o=(m*c-k*e)*q;k=(m*d-k*f)*q;c=(i* +e-l*c)*q;d=(i*f-l*d)*q;a=a-o*g-c*h;b=b-k*g-d*h;j.save();j.transform(o,k,c,d,a,b);j.clip();j.drawImage(n,0,0);j.restore()}function wa(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);da[0]=e<0?0:e>255?255:e;da[1]=f<0?0:f>255?255:f;da[2]=a<0?0:a>255?255:a;da[4]=g<0?0:g>255?255:g;da[5]=h<0?0:h>255?255:h;da[6]=b<0?0:b>255?255:b;da[8]=i<0?0:i>255?255:i;da[9]=j<0?0:j>255?255: +j;da[10]=c<0?0:c>255?255:c;da[12]=k<0?0:k>255?255:k;da[13]=l<0?0:l>255?255:l;da[14]=d<0?0:d>255?255:d;ra.putImageData(Ba,0,0);va.drawImage(qa,0,0);return sa}function la(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function na(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function ia(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;e!=0&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}var xa,Ja,A,fa,ja,oa,ya,X;this.autoClear?this.clear():j.setTransform(1,0,0,-1,i,n);e.info.render.vertices=0;e.info.render.faces=0; +g=h.projectScene(a,k,this.sortElements);(Aa=a.lights.length>0)&&l(a);xa=0;for(Ja=g.length;xa>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}}; -THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var d,e,g;if(c===0)this.r=this.g=this.b=0;else switch(d=Math.floor(a*6),e=a*6-d,a=c*(1-b),g=c*(1- +b*e),b=c*(1-b*(1-e)),d){case 1:this.r=g;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=g;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r=c;this.g=a;this.b=g;break;case 6:case 0:this.r=c,this.g=b,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+ +Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this}, divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, -equals:function(a){return a.x==this.x&&a.y==this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +equals:function(a){return a.x===this.x&&a.y===this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this}, addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this}, divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a):this.set(0,0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)}, @@ -14,74 +14,79 @@ Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&f+a<1}for(var d,e=[],g=0,f=a.children.length;ga.scale.x)return[];d={distance:g,point:a.position,face:null,object:a};e.push(d)}else if(a instanceof THREE.Mesh){g=b(this.origin, -this.direction,a.matrixWorld.getPosition());if(g==null||g>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return e;var h,k,l,i,j,n,m,p,q=a.geometry,s=q.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);g=0;for(f=q.faces.length;g0:n<0)))if(n=j.dot((new THREE.Vector3).sub(h,m))/n,m=m.addSelf(p.multiplyScalar(n)),d instanceof THREE.Face3)c(m,h,k,l)&&(d={distance:this.origin.distanceTo(m),point:m,face:d,object:a},e.push(d));else if(d instanceof THREE.Face4&&(c(m,h,k,i)||c(m,k,l,i)))d={distance:this.origin.distanceTo(m), -point:m,face:d,object:a},e.push(d)}return e}}; -THREE.Rectangle=function(){function a(){g=d-b;f=e-c}var b,c,d,e,g,f,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return g};this.getHeight=function(){return f};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,i,j){h=!1;b=f;c=g;d=i;e=j;a()};this.addPoint=function(f,g){h?(h=!1,b=f,c=g,d=f,e=g):(b=bf?d:f,e=e>g?e:g);a()};this.add3Points= -function(f,g,i,j,n,m){h?(h=!1,b=fi?f>n?f:n:i>n?i:n,e=g>j?g>m?g:m:j>m?j:m):(b=fi?f>n?f>d?f:d:n>d?n:d:i>n?i>d?i:d:n>d?n:d,e=g>j?g>m?g>e?g:e:m>e?m:e:j>m?j>e?j:e:m>e?m:e);a()};this.addRectangle=function(f){h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=bf.getRight()?d:f.getRight(),e=e> +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.objects)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&f+a<1}for(var d,e=[],g=0,f=a.children.length;ga.scale.x)return[];d={distance:g,point:a.position,face:null,object:a};e.push(d)}else if(a instanceof THREE.Mesh){g= +b(this.origin,this.direction,a.matrixWorld.getPosition());if(g===null||g>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return e;for(var h,k,i,j,l,n,m,p,q=a.geometry,s=q.vertices,g=0,f=q.faces.length;g0:n<0)))if(n=l.dot((new THREE.Vector3).sub(h,m))/n,m=m.addSelf(p.multiplyScalar(n)),d instanceof THREE.Face3)c(m,h,k,i)&&(d={distance:this.origin.distanceTo(m),point:m,face:d,object:a},e.push(d));else if(d instanceof THREE.Face4&&(c(m,h,k,j)||c(m,k,i,j)))d={distance:this.origin.distanceTo(m),point:m,face:d,object:a},e.push(d)}return e}}; +THREE.Rectangle=function(){function a(){g=d-b;f=e-c}var b,c,d,e,g,f,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return g};this.getHeight=function(){return f};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,j,l){h=!1;b=f;c=g;d=j;e=l;a()};this.addPoint=function(f,g){h?(h=!1,b=f,c=g,d=f,e=g):(b=bf?d:f,e=e>g?e:g);a()};this.add3Points= +function(f,g,j,l,n,m){h?(h=!1,b=fj?f>n?f:n:j>n?j:n,e=g>l?g>m?g:m:l>m?l:m):(b=fj?f>n?f>d?f:d:n>d?n:d:j>n?j>d?j:d:n>d?n:d,e=g>l?g>m?g>e?g:e:m>e?m:e:l>m?l>e?l:e:m>e?m:e);a()};this.addRectangle=function(f){h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=bf.getRight()?d:f.getRight(),e=e> f.getBottom()?e:f.getBottom());a()};this.inflate=function(f){b-=f;c-=f;d+=f;e+=f;a()};this.minSelf=function(f){b=b>f.getLeft()?b:f.getLeft();c=c>f.getTop()?c:f.getTop();d=d=0&&Math.min(e,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}};THREE.Matrix3=function(){this.m=[]}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b=this.m;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}}; -THREE.Matrix4=function(a,b,c,d,e,g,f,h,k,l,i,j,n,m,p,q){this.set(a!==void 0?a:1,b||0,c||0,d||0,e||0,g!==void 0?g:1,f||0,h||0,k||0,l||0,i!==void 0?i:1,j||0,n||0,m||0,p||0,q!==void 0?q:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,g,f,h,k,l,i,j,n,m,p,q){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=e;this.n22=g;this.n23=f;this.n24=h;this.n31=k;this.n32=l;this.n33=i;this.n34=j;this.n41=n;this.n42=m;this.n43=p;this.n44=q;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, -b,c){var d=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();if(g.length()===0)g.z=1;d.cross(c,g).normalize();d.length()===0&&(g.x+=1.0E-4,d.cross(c,g).normalize());e.cross(g,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=g.x;this.n21=d.y;this.n22=e.y;this.n23=g.y;this.n31=d.z;this.n32=e.z;this.n33=g.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,e=a.n13,g=a.n14,f=a.n21,h=a.n22,k=a.n23,l=a.n24,i=a.n31,j=a.n32,n=a.n33,m=a.n34,p=a.n41,q=a.n42,s=a.n43, -x=a.n44,v=b.n11,o=b.n12,I=b.n13,B=b.n14,F=b.n21,G=b.n22,E=b.n23,z=b.n24,L=b.n31,M=b.n32,N=b.n33,H=b.n34,C=b.n41,u=b.n42,A=b.n43,r=b.n44;this.n11=c*v+d*F+e*L+g*C;this.n12=c*o+d*G+e*M+g*u;this.n13=c*I+d*E+e*N+g*A;this.n14=c*B+d*z+e*H+g*r;this.n21=f*v+h*F+k*L+l*C;this.n22=f*o+h*G+k*M+l*u;this.n23=f*I+h*E+k*N+l*A;this.n24=f*B+h*z+k*H+l*r;this.n31=i*v+j*F+n*L+m*C;this.n32=i*o+j*G+n*M+m*u;this.n33=i*I+j*E+n*N+m*A;this.n34=i*B+j*z+n*H+m*r;this.n41=p*v+q*F+s*L+x*C;this.n42=p*o+q*G+s*M+x*u;this.n43=p*I+q* -E+s*N+x*A;this.n44=p*B+q*z+s*H+x*r;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= -a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,e=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*e;a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*e;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*e;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,e=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*e;a.y=this.n21*b+this.n22* -c+this.n23*d+this.n24*e;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*e;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*e;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33* -a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,e=this.n21,g=this.n22,f=this.n23,h=this.n24,k=this.n31,l=this.n32,i=this.n33,j=this.n34,n=this.n41,m=this.n42,p=this.n43,q=this.n44;return d*f*l*n-c*h*l*n-d*g*i*n+b*h*i*n+c*g*j*n-b*f*j*n-d*f*k*m+c*h*k*m+d*e*i*m-a*h*i*m-c*e*j*m+a*f*j*m+d*g*k*p-b*h*k*p-d*e*l*p+a*h*l*p+b*e*j*p-a*g*j*p-c*g*k*q+b*f*k*q+c*e*l*q-a*f*l*q-b*e*i*q+a*g*i*q},transpose:function(){var a; -a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42; -a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31; -a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34;a[b+15]=this.n44;return a}, -setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this}, -setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,g=a.x,f=a.y,h=a.z,k=e*g,l=e*f;this.set(k*g+c,k*f-d*h,k*h+d*f,0,k*f+d*h,l*f+c,l*h-d*g,0,k*h-d*f,l*h+d*g,e*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, -this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(a){var b=a.n11,c=a.n12,d=a.n13,e=a.n14,g=a.n21,f=a.n22,h=a.n23,k=a.n24,l=a.n31,i=a.n32,j=a.n33,n=a.n34,m=a.n41,p=a.n42,q=a.n43,s=a.n44;this.n11=h*n*p-k*j*p+k*i*q-f*n*q-h*i*s+f*j*s;this.n12=e*j*p-d*n*p-e*i*q+c*n*q+d*i*s-c*j*s;this.n13=d*k*p-e*h*p+e*f*q-c*k*q-d*f*s+c*h*s;this.n14=e*h*i-d*k*i-e*f*j+c*k*j+d*f*n-c*h*n;this.n21=k*j*m-h*n*m-k*l*q+g*n*q+h*l*s-g*j*s;this.n22=d*n*m-e*j*m+ -e*l*q-b*n*q-d*l*s+b*j*s;this.n23=e*h*m-d*k*m-e*g*q+b*k*q+d*g*s-b*h*s;this.n24=d*k*l-e*h*l+e*g*j-b*k*j-d*g*n+b*h*n;this.n31=f*n*m-k*i*m+k*l*p-g*n*p-f*l*s+g*i*s;this.n32=e*i*m-c*n*m-e*l*p+b*n*p+c*l*s-b*i*s;this.n33=d*k*m-e*f*m+e*g*p-b*k*p-c*g*s+b*f*s;this.n34=e*f*l-c*k*l-e*g*i+b*k*i+c*g*n-b*f*n;this.n41=h*i*m-f*j*m-h*l*p+g*j*p+f*l*q-g*i*q;this.n42=c*j*m-d*i*m+d*l*p-b*j*p-c*l*q+b*i*q;this.n43=d*f*m-c*h*m-d*g*p+b*h*p+c*g*q-b*f*q;this.n44=c*h*l-d*f*l+d*g*i-b*h*i-c*g*j+b*f*j;this.multiplyScalar(1/a.determinant()); -return this},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,e=a.z,g=Math.cos(c),c=Math.sin(c),f=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);switch(b){case "YXZ":var k=f*h,l=f*e,i=d*h,j=d*e;this.n11=k+j*c;this.n12=i*c-l;this.n13=g*d;this.n21=g*e;this.n22=g*h;this.n23=-c;this.n31=l*c-i;this.n32=j+k*c;this.n33=g*f;break;case "ZXY":k=f*h;l=f*e;i=d*h;j=d*e;this.n11=k-j*c;this.n12=-g*e;this.n13=i+l*c;this.n21=l+i*c;this.n22=g*h;this.n23=j-k*c;this.n31=-g*d;this.n32=c;this.n33=g*f;break;case "ZYX":k= -g*h;l=g*e;i=c*h;j=c*e;this.n11=f*h;this.n12=i*d-l;this.n13=k*d+j;this.n21=f*e;this.n22=j*d+k;this.n23=l*d-i;this.n31=-d;this.n32=c*f;this.n33=g*f;break;case "YZX":k=g*f;l=g*d;i=c*f;j=c*d;this.n11=f*h;this.n12=j-k*e;this.n13=i*e+l;this.n21=e;this.n22=g*h;this.n23=-c*h;this.n31=-d*h;this.n32=l*e+i;this.n33=k-j*e;break;case "XZY":k=g*f;l=g*d;i=c*f;j=c*d;this.n11=f*h;this.n12=-e;this.n13=d*h;this.n21=k*e+j;this.n22=g*h;this.n23=l*e-i;this.n31=i*e-l;this.n32=c*h;this.n33=j*e+k;break;default:k=g*h,l=g* -e,i=c*h,j=c*e,this.n11=f*h,this.n12=-f*e,this.n13=d,this.n21=l+i*d,this.n22=k-j*d,this.n23=-c*f,this.n31=j-k*d,this.n32=i+l*d,this.n33=g*f}return this},setRotationFromQuaternion:function(a){var b=a.x,c=a.y,d=a.z,e=a.w,g=b+b,f=c+c,h=d+d,a=b*g,k=b*f;b*=h;var l=c*f;c*=h;d*=h;g*=e;f*=e;e*=h;this.n11=1-(l+d);this.n12=k-e;this.n13=b+f;this.n21=k+e;this.n22=1-(a+d);this.n23=c-g;this.n31=b-f;this.n32=c+g;this.n33=1-(a+l);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*= -a;this.n21*=b;this.n22*=c;this.n23*=a;this.n31*=b;this.n32*=c;this.n33*=a;this.n41*=b;this.n42*=c;this.n43*=a;return this},compose:function(a,b,c){var d=THREE.Matrix4.__m1,e=THREE.Matrix4.__m2;d.identity();d.setRotationFromQuaternion(b);e.setScale(c.x,c.y,c.z);this.multiply(d,e);this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},decompose:function(a,b,c){var d=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;d.set(this.n11,this.n21,this.n31);e.set(this.n12,this.n22,this.n32);g.set(this.n13, -this.n23,this.n33);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=d.length();c.y=e.length();c.z=g.length();a.x=this.n14;a.y=this.n24;a.z=this.n34;d=THREE.Matrix4.__m1;d.copy(this);d.n11/=c.x;d.n21/=c.x;d.n31/=c.x;d.n12/=c.y;d.n22/=c.y;d.n32/=c.y;d.n13/=c.z;d.n23/=c.z;d.n33/=c.z;b.setFromRotationMatrix(d);return[a,b,c]},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34; -return this},extractRotation:function(a){var b=THREE.Matrix4.__v1,c=1/b.set(a.n11,a.n21,a.n31).length(),d=1/b.set(a.n12,a.n22,a.n32).length(),b=1/b.set(a.n13,a.n23,a.n33).length();this.n11=a.n11*c;this.n21=a.n21*c;this.n31=a.n31*c;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*b;this.n23=a.n23*b;this.n33=a.n33*b;return this}}; -THREE.Matrix4.makeInvert3x3=function(a){var b=a.m33,c=b.m,d=a.n33*a.n22-a.n32*a.n23,e=-a.n33*a.n21+a.n31*a.n23,g=a.n32*a.n21-a.n31*a.n22,f=-a.n33*a.n12+a.n32*a.n13,h=a.n33*a.n11-a.n31*a.n13,k=-a.n32*a.n11+a.n31*a.n12,l=a.n23*a.n12-a.n22*a.n13,i=-a.n23*a.n11+a.n21*a.n13,j=a.n22*a.n11-a.n21*a.n12,a=a.n11*d+a.n21*f+a.n31*l;a==0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");a=1/a;c[0]=a*d;c[1]=a*e;c[2]=a*g;c[3]=a*f;c[4]=a*h;c[5]=a*k;c[6]=a*l;c[7]=a*i;c[8]=a*j;return b}; +THREE.Matrix4=function(a,b,c,d,e,g,f,h,k,i,j,l,n,m,p,q){this.set(a!==void 0?a:1,b||0,c||0,d||0,e||0,g!==void 0?g:1,f||0,h||0,k||0,i||0,j!==void 0?j:1,l||0,n||0,m||0,p||0,q!==void 0?q:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,g,f,h,k,i,j,l,n,m,p,q){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=e;this.n22=g;this.n23=f;this.n24=h;this.n31=k;this.n32=i;this.n33=j;this.n34=l;this.n41=n;this.n42=m;this.n43=p;this.n44=q;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, +b,c){var d=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();if(g.length()===0)g.z=1;d.cross(c,g).normalize();d.length()===0&&(g.x+=1.0E-4,d.cross(c,g).normalize());e.cross(g,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=g.x;this.n21=d.y;this.n22=e.y;this.n23=g.y;this.n31=d.z;this.n32=e.z;this.n33=g.z;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,e=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*e; +a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*e;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*e;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,e=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*e;a.y=this.n21*b+this.n22*c+this.n23*d+this.n24*e;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*e;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*e;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+ +c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},multiply:function(a,b){var c=a.n11,d=a.n12,e=a.n13,g=a.n14,f=a.n21,h=a.n22,k=a.n23,i=a.n24,j=a.n31,l=a.n32,n=a.n33,m=a.n34,p=a.n41,q=a.n42,s=a.n43,r=a.n44,J=b.n11,M=b.n12, +C=b.n13,D=b.n14,H=b.n21,v=b.n22,o=b.n23,K=b.n24,z=b.n31,E=b.n32,F=b.n33,Q=b.n34,R=b.n41,S=b.n42,T=b.n43,U=b.n44;this.n11=c*J+d*H+e*z+g*R;this.n12=c*M+d*v+e*E+g*S;this.n13=c*C+d*o+e*F+g*T;this.n14=c*D+d*K+e*Q+g*U;this.n21=f*J+h*H+k*z+i*R;this.n22=f*M+h*v+k*E+i*S;this.n23=f*C+h*o+k*F+i*T;this.n24=f*D+h*K+k*Q+i*U;this.n31=j*J+l*H+n*z+m*R;this.n32=j*M+l*v+n*E+m*S;this.n33=j*C+l*o+n*F+m*T;this.n34=j*D+l*K+n*Q+m*U;this.n41=p*J+q*H+s*z+r*R;this.n42=p*M+q*v+s*E+r*S;this.n43=p*C+q*o+s*F+r*T;this.n44=p*D+q* +K+s*Q+r*U;return this},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*= +a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,e=this.n21,g=this.n22,f=this.n23,h=this.n24,k=this.n31,i=this.n32,j=this.n33,l=this.n34,n=this.n41,m=this.n42,p=this.n43,q=this.n44;return d*f*i*n-c*h*i*n-d*g*j*n+b*h*j*n+c*g*l*n-b*f*l*n-d*f*k*m+c*h*k*m+d*e*j*m-a*h*j*m-c*e*l*m+a*f*l*m+d*g*k*p-b*h*k*p-d*e*i*p+a*h*i*p+b*e*l*p-a*g*l*p-c*g*k*q+b*f*k*q+c*e*i*q-a*f*i*q-b*e*j*q+a*g*j*q}, +transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34; +a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11; +a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34; +a[b+15]=this.n44;return a},setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0, +0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,g=a.x,f=a.y,h=a.z,k=e*g,i=e*f;this.set(k*g+c,k*f-d*h,k*h+d*f,0,k*f+d*h,i*f+c,i*h-d*g,0,k*h-d*f,i*h+d*g,e*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){if(!this.position)this.position=new THREE.Vector3;this.position.set(this.n14,this.n24,this.n34);return this.position},getColumnX:function(){if(!this.columnX)this.columnX= +new THREE.Vector3;this.columnX.set(this.n11,this.n21,this.n31);return this.columnX},getColumnY:function(){if(!this.columnY)this.columnY=new THREE.Vector3;this.columnY.set(this.n12,this.n22,this.n32);return this.columnY},getColumnZ:function(){if(!this.columnZ)this.columnZ=new THREE.Vector3;this.columnZ.set(this.n13,this.n23,this.n33);return this.columnZ},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,e=a.z,g=Math.cos(c),c=Math.sin(c),f=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);switch(b){case "YXZ":var k= +f*h,i=f*e,j=d*h,l=d*e;this.n11=k+l*c;this.n12=j*c-i;this.n13=g*d;this.n21=g*e;this.n22=g*h;this.n23=-c;this.n31=i*c-j;this.n32=l+k*c;this.n33=g*f;break;case "ZXY":k=f*h;i=f*e;j=d*h;l=d*e;this.n11=k-l*c;this.n12=-g*e;this.n13=j+i*c;this.n21=i+j*c;this.n22=g*h;this.n23=l-k*c;this.n31=-g*d;this.n32=c;this.n33=g*f;break;case "ZYX":k=g*h;i=g*e;j=c*h;l=c*e;this.n11=f*h;this.n12=j*d-i;this.n13=k*d+l;this.n21=f*e;this.n22=l*d+k;this.n23=i*d-j;this.n31=-d;this.n32=c*f;this.n33=g*f;break;case "YZX":k=g*f;i= +g*d;j=c*f;l=c*d;this.n11=f*h;this.n12=l-k*e;this.n13=j*e+i;this.n21=e;this.n22=g*h;this.n23=-c*h;this.n31=-d*h;this.n32=i*e+j;this.n33=k-l*e;break;case "XZY":k=g*f;i=g*d;j=c*f;l=c*d;this.n11=f*h;this.n12=-e;this.n13=d*h;this.n21=k*e+l;this.n22=g*h;this.n23=i*e-j;this.n31=j*e-i;this.n32=c*h;this.n33=l*e+k;break;default:k=g*h,i=g*e,j=c*h,l=c*e,this.n11=f*h,this.n12=-f*e,this.n13=d,this.n21=i+j*d,this.n22=k-l*d,this.n23=-c*f,this.n31=l-k*d,this.n32=j+i*d,this.n33=g*f}return this},setRotationFromQuaternion:function(a){var b= +a.x,c=a.y,d=a.z,e=a.w,g=b+b,f=c+c,h=d+d,a=b*g,k=b*f;b*=h;var i=c*f;c*=h;d*=h;g*=e;f*=e;e*=h;this.n11=1-(i+d);this.n12=k-e;this.n13=b+f;this.n21=k+e;this.n22=1-(a+d);this.n23=c-g;this.n31=b-f;this.n32=c+g;this.n33=1-(a+i);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*=a;this.n21*=b;this.n22*=c;this.n23*=a;this.n31*=b;this.n32*=c;this.n33*=a;this.n41*=b;this.n42*=c;this.n43*=a;return this},compose:function(a,b,c){var d=THREE.Matrix4.__m1,e=THREE.Matrix4.__m2; +d.identity();d.setRotationFromQuaternion(b);e.setScale(c.x,c.y,c.z);this.multiply(d,e);this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},decompose:function(a,b,c){var d=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;d.set(this.n11,this.n21,this.n31);e.set(this.n12,this.n22,this.n32);g.set(this.n13,this.n23,this.n33);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=d.length(); +c.y=e.length();c.z=g.length();a.x=this.n14;a.y=this.n24;a.z=this.n34;d=THREE.Matrix4.__m1;d.copy(this);d.n11/=c.x;d.n21/=c.x;d.n31/=c.x;d.n12/=c.y;d.n22/=c.y;d.n32/=c.y;d.n13/=c.z;d.n23/=c.z;d.n33/=c.z;b.setFromRotationMatrix(d);return[a,b,c]},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34},extractRotation:function(a,b){var c=1/b.x,d=1/b.y,e=1/b.z;this.n11=a.n11*c;this.n21=a.n21*c;this.n31=a.n31*c;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*e;this.n23= +a.n23*e;this.n33=a.n33*e}}; +THREE.Matrix4.makeInvert=function(a,b){var c=a.n11,d=a.n12,e=a.n13,g=a.n14,f=a.n21,h=a.n22,k=a.n23,i=a.n24,j=a.n31,l=a.n32,n=a.n33,m=a.n34,p=a.n41,q=a.n42,s=a.n43,r=a.n44;b===void 0&&(b=new THREE.Matrix4);b.n11=k*m*q-i*n*q+i*l*s-h*m*s-k*l*r+h*n*r;b.n12=g*n*q-e*m*q-g*l*s+d*m*s+e*l*r-d*n*r;b.n13=e*i*q-g*k*q+g*h*s-d*i*s-e*h*r+d*k*r;b.n14=g*k*l-e*i*l-g*h*n+d*i*n+e*h*m-d*k*m;b.n21=i*n*p-k*m*p-i*j*s+f*m*s+k*j*r-f*n*r;b.n22=e*m*p-g*n*p+g*j*s-c*m*s-e*j*r+c*n*r;b.n23=g*k*p-e*i*p-g*f*s+c*i*s+e*f*r-c*k*r;b.n24= +e*i*j-g*k*j+g*f*n-c*i*n-e*f*m+c*k*m;b.n31=h*m*p-i*l*p+i*j*q-f*m*q-h*j*r+f*l*r;b.n32=g*l*p-d*m*p-g*j*q+c*m*q+d*j*r-c*l*r;b.n33=e*i*p-g*h*p+g*f*q-c*i*q-d*f*r+c*h*r;b.n34=g*h*j-d*i*j-g*f*l+c*i*l+d*f*m-c*h*m;b.n41=k*l*p-h*n*p-k*j*q+f*n*q+h*j*s-f*l*s;b.n42=d*n*p-e*l*p+e*j*q-c*n*q-d*j*s+c*l*s;b.n43=e*h*p-d*k*p-e*f*q+c*k*q+d*f*s-c*h*s;b.n44=d*k*j-e*h*j+e*f*l-c*k*l-d*f*n+c*h*n;b.multiplyScalar(1/a.determinant());return b}; +THREE.Matrix4.makeInvert3x3=function(a){var b=a.m33,c=b.m,d=a.n33*a.n22-a.n32*a.n23,e=-a.n33*a.n21+a.n31*a.n23,g=a.n32*a.n21-a.n31*a.n22,f=-a.n33*a.n12+a.n32*a.n13,h=a.n33*a.n11-a.n31*a.n13,k=-a.n32*a.n11+a.n31*a.n12,i=a.n23*a.n12-a.n22*a.n13,j=-a.n23*a.n11+a.n21*a.n13,l=a.n22*a.n11-a.n21*a.n12,a=a.n11*d+a.n21*f+a.n31*i;a===0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");a=1/a;c[0]=a*d;c[1]=a*e;c[2]=a*g;c[3]=a*f;c[4]=a*h;c[5]=a*k;c[6]=a*i;c[7]=a*j;c[8]=a*l;return b}; THREE.Matrix4.makeFrustum=function(a,b,c,d,e,g){var f;f=new THREE.Matrix4;f.n11=2*e/(b-a);f.n12=0;f.n13=(b+a)/(b-a);f.n14=0;f.n21=0;f.n22=2*e/(d-c);f.n23=(d+c)/(d-c);f.n24=0;f.n31=0;f.n32=0;f.n33=-(g+e)/(g-e);f.n34=-2*g*e/(g-e);f.n41=0;f.n42=0;f.n43=-1;f.n44=0;return f};THREE.Matrix4.makePerspective=function(a,b,c,d){var e,a=c*Math.tan(a*Math.PI/360);e=-a;return THREE.Matrix4.makeFrustum(e*b,a*b,e,a,c,d)}; -THREE.Matrix4.makeOrtho=function(a,b,c,d,e,g){var f,h,k,l;f=new THREE.Matrix4;h=b-a;k=c-d;l=g-e;f.n11=2/h;f.n12=0;f.n13=0;f.n14=-((b+a)/h);f.n21=0;f.n22=2/k;f.n23=0;f.n24=-((c+d)/k);f.n31=0;f.n32=0;f.n33=-2/l;f.n34=-((g+e)/l);f.n41=0;f.n42=0;f.n43=0;f.n44=1;return f};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; +THREE.Matrix4.makeOrtho=function(a,b,c,d,e,g){var f,h,k,i;f=new THREE.Matrix4;h=b-a;k=c-d;i=g-e;f.n11=2/h;f.n12=0;f.n13=0;f.n14=-((b+a)/h);f.n21=0;f.n22=2/k;f.n23=0;f.n24=-((c+d)/k);f.n31=0;f.n32=0;f.n33=-2/i;f.n34=-((g+e)/i);f.n41=0;f.n42=0;f.n43=0;f.n44=1;return f};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; THREE.Object3D=function(){this.name="";this.id=THREE.Object3DCount++;this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder="XYZ";this.scale=new THREE.Vector3(1,1,1);this.flipSided=this.doubleSided=this.dynamic=!1;this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate= !0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.boundRadius=0;this.boundRadiusScale=1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this._vector=new THREE.Vector3}; THREE.Object3D.prototype={constructor:THREE.Object3D,translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(a,this.position,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},add:function(a){if(this.children.indexOf(a)=== --1)a.parent!==void 0&&a.parent.remove(a),a.parent=this,this.children.push(a)},remove:function(a){var b=this.children.indexOf(a);if(b!==-1)a.parent=void 0,this.children.splice(b,1)},getChildByName:function(a,b){var c,d,e;c=0;for(d=this.children.length;c=0&&e>=0&&g>=0&&h>=0?!0:f<0&&e<0||g<0&&h<0?!1:(f<0?c=Math.max(c,f/(f-e)):e<0&&(d=Math.min(d,f/(f-e))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),d -M&&d.positionScreen.z0&&v.z<1))J=s[q]=s[q]||new THREE.RenderableParticle,q++,p=J,p.x=v.x/v.w,p.y=v.y/v.w,p.z=v.z,p.rotation=t.rotation.z,p.scale.x=t.scale.x*Math.abs(p.x-(v.x+z.projectionMatrix.n11)/(v.w+z.projectionMatrix.n14)),p.scale.y=t.scale.y*Math.abs(p.y-(v.y+z.projectionMatrix.n22)/(v.w+z.projectionMatrix.n24)),p.materials=t.materials,x.elements.push(p);L&&x.elements.sort(b);return x}}; -THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +-1){a.parent!==void 0&&a.parent.remove(a);a.parent=this;this.children.push(a);for(var b=this;b.parent!==void 0;)b=b.parent;b!==void 0&&b instanceof THREE.Scene&&b.addChildRecurse(a)}},remove:function(a){var b=this,c=this.children.indexOf(a);if(c!==-1){a.parent=void 0;for(this.children.splice(c,1);b.parent!==void 0;)b=b.parent;b!==void 0&&b instanceof THREE.Scene&&b.removeChildRecurse(a)}},getChildByName:function(a,b){var c,d,e;c=0;for(d=this.children.length;c=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),dC&&f.positionScreen.z0&&v.z<1))L=M[J]=M[J]||new THREE.RenderableParticle,J++,r= +L,r.x=v.x/v.w,r.y=v.y/v.w,r.z=v.z,r.rotation=u.rotation.z,r.scale.x=u.scale.x*Math.abs(r.x-(v.x+e.projectionMatrix.n11)/(v.w+e.projectionMatrix.n14)),r.scale.y=u.scale.y*Math.abs(r.y-(v.y+e.projectionMatrix.n22)/(v.w+e.projectionMatrix.n24)),r.materials=u.materials,D.push(r);g&&D.sort(b);return D}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-e),e=Math.sin(-e),g=Math.cos(c),c=Math.sin(c),f=a*b,h=d*e;this.w=f*g-h*c;this.x=f*c+h*g;this.y=d*b*g+a*e*c;this.z=a*e*g-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); -this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a==0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,d=this.z,e=this.w,g=a.x,f=a.y,h=a.z,a=a.w;this.x=b*a+e*g+c*h-d*f;this.y=c*a+e*f+d*g-b*h;this.z=d*a+e*h+b*f-c*g;this.w=e*a-b*g-c*f-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,g=this.x,f=this.y,h=this.z,k=this.w,l=k*c+f*e-h*d,i=k*d+h*c-g*e,j=k*e+g*d-f*c,c=-g* -c-f*d-h*e;b.x=l*k+c*-g+i*-h-j*-f;b.y=i*k+c*-f+j*-g-l*-h;b.z=j*k+c*-h+l*-f-i*-g;return b}}; -THREE.Quaternion.slerp=function(a,b,c,d){var e=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;e<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,e=-e):c.copy(b);if(Math.abs(e)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var g=Math.acos(e),e=Math.sqrt(1-e*e);if(Math.abs(e)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-d)*g)/e;d=Math.sin(d*g)/e;c.w=a.w*b+c.w*d;c.x=a.x*b+c.x*d;c.y=a.y*b+c.y*d;c.z=a.z*b+c.z*d;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; -THREE.Face3=function(a,b,c,d,e,g){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materials=g instanceof Array?g:[g];this.centroid=new THREE.Vector3}; -THREE.Face4=function(a,b,c,d,e,g,f){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materials=f instanceof Array?f:[f];this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; +this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= +this.x,c=this.y,d=this.z,e=this.w,g=a.x,f=a.y,h=a.z,a=a.w;this.x=b*a+e*g+c*h-d*f;this.y=c*a+e*f+d*g-b*h;this.z=d*a+e*h+b*f-c*g;this.w=e*a-b*g-c*f-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,g=this.x,f=this.y,h=this.z,k=this.w,i=k*c+f*e-h*d,j=k*d+h*c-g*e,l=k*e+g*d-f*c,c=-g* +c-f*d-h*e;b.x=i*k+c*-g+j*-h-l*-f;b.y=j*k+c*-f+l*-g-i*-h;b.z=l*k+c*-h+i*-f-j*-g;return b}};THREE.Quaternion.slerp=function(a,b,c,d){var e=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(e)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var g=Math.acos(e),f=Math.sqrt(1-e*e);if(Math.abs(f)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;e=Math.sin((1-d)*g)/f;d=Math.sin(d*g)/f;c.w=a.w*e+b.w*d;c.x=a.x*e+b.x*d;c.y=a.y*e+b.y*d;c.z=a.z*e+b.z*d;return c}; +THREE.Vertex=function(a){this.position=a||new THREE.Vector3};THREE.Face3=function(a,b,c,d,e,g){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,b,c,d,e,g,f){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}}; -THREE.Camera=function(){if(arguments.length)return console.warn("DEPRECATED: Camera() is now PerspectiveCamera() or OrthographicCamera()."),new THREE.PerspectiveCamera(arguments[0],arguments[1],arguments[2],arguments[3]);THREE.Object3D.call(this);this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=new THREE.Matrix4;this.projectionMatrixInverse=new THREE.Matrix4};THREE.Camera.prototype=new THREE.Object3D;THREE.Camera.prototype.constructor=THREE.Camera; -THREE.Camera.prototype.lookAt=function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)};THREE.OrthographicCamera=function(a,b,c,d,e,g){THREE.Camera.call(this);this.left=a;this.right=b;this.top=c;this.bottom=d;this.near=e!==void 0?e:0.1;this.far=g!==void 0?g:2E3;this.updateProjectionMatrix()};THREE.OrthographicCamera.prototype=new THREE.Camera;THREE.OrthographicCamera.prototype.constructor=THREE.OrthographicCamera; -THREE.OrthographicCamera.prototype.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makeOrtho(this.left,this.right,this.top,this.bottom,this.near,this.far)};THREE.PerspectiveCamera=function(a,b,c,d){THREE.Camera.call(this);this.fov=a!==void 0?a:50;this.aspect=b!==void 0?b:1;this.near=c!==void 0?c:0.1;this.far=d!==void 0?d:2E3;this.updateProjectionMatrix()};THREE.PerspectiveCamera.prototype=new THREE.Camera;THREE.PerspectiveCamera.prototype.constructor=THREE.PerspectiveCamera; -THREE.PerspectiveCamera.prototype.setLens=function(a,b){this.fov=2*Math.atan((b!==void 0?b:43.25)/(a*2));this.fov*=180/Math.PI;this.updateProjectionMatrix()};THREE.PerspectiveCamera.prototype.setViewOffset=function(a,b,c,d,e,g){this.fullWidth=a;this.fullHeight=b;this.x=c;this.y=d;this.width=e;this.height=g;this.updateProjectionMatrix()}; +THREE.Camera=function(){if(arguments.length)return console.warn("DEPRECATED: Camera() is now PerspectiveCamera() or OrthographicCamera()."),new THREE.PerspectiveCamera(arguments[0],arguments[1],arguments[2],arguments[3]);THREE.Object3D.call(this);this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=new THREE.Matrix4};THREE.Camera.prototype=new THREE.Object3D;THREE.Camera.prototype.constructor=THREE.Camera; +THREE.Camera.prototype.lookAt=function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)}; +THREE.Camera.prototype.update=function(a,b,c){this.matrixAutoUpdate&&this.updateMatrix();if(b||this.matrixWorldNeedsUpdate)a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1,b=!0,THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse);for(a=0;a1&&(b-=1)}c===void 0&&(c={h:0,s:0,v:0});c.h=b;c.s=f;c.v=h;return c}, -clamp:function(a,c,b){return ab?b:a}};THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(a,c){var b,e,g=a.vertices.length,h=c instanceof THREE.Mesh?c.geometry:c,f=a.vertices,k=h.vertices,l=a.faces,m=h.faces,n=a.faceVertexUvs[0],h=h.faceVertexUvs[0];if(c instanceof THREE.Mesh)c.matrixAutoUpdate&&c.updateMatrix(),b=c.matrix,e=new THREE.Matrix4,e.extractRotation(b,c.scale);for(var o=0,p=k.length;o1&&(e=1-e,g=1-g);h=1-e-g;f.copy(a);f.multiplyScalar(e);k.copy(c);k.multiplyScalar(g);f.addSelf(k);k.copy(b);k.multiplyScalar(h);f.addSelf(k);return f},randomPointInFace:function(a,c,b){var e,g,h;if(a instanceof THREE.Face3)return e=c.vertices[a.a].position,g=c.vertices[a.b].position,h=c.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(e,g,h);else if(a instanceof THREE.Face4){e=c.vertices[a.a].position;g=c.vertices[a.b].position;h=c.vertices[a.c].position;var c=c.vertices[a.d].position, -f;b?a._area1&&a._area2?(b=a._area1,f=a._area2):(b=THREE.GeometryUtils.triangleArea(e,g,c),f=THREE.GeometryUtils.triangleArea(g,h,c),a._area1=b,a._area2=f):(b=THREE.GeometryUtils.triangleArea(e,g,c),f=THREE.GeometryUtils.triangleArea(g,h,c));return THREE.GeometryUtils.random()*(b+f) -a?b(c,f-1):m[f]1&&(b-=1)}c===void 0&&(c={h:0,s:0,v:0});c.h=b;c.s=g;c.v=h;return c}}; +THREE.ColorUtils.__hsv={h:0,s:0,v:0}; +THREE.GeometryUtils={merge:function(a,c){for(var b,e,f=a.vertices.length,h=c instanceof THREE.Mesh?c.geometry:c,g=a.vertices,k=h.vertices,l=a.faces,m=h.faces,n=a.faceVertexUvs[0],o=h.faceVertexUvs[0],u={},t=0;t1&&(e=1-e,f=1-f);h=1-e-f;g.copy(a);g.multiplyScalar(e);k.copy(c);k.multiplyScalar(f);g.addSelf(k);k.copy(b);k.multiplyScalar(h);g.addSelf(k);return g},randomPointInFace:function(a,c,b){var e,f,h;if(a instanceof THREE.Face3)return e=c.vertices[a.a].position,f=c.vertices[a.b].position, +h=c.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(e,f,h);else if(a instanceof THREE.Face4){e=c.vertices[a.a].position;f=c.vertices[a.b].position;h=c.vertices[a.c].position;var c=c.vertices[a.d].position,g;b?a._area1&&a._area2?(b=a._area1,g=a._area2):(b=THREE.GeometryUtils.triangleArea(e,f,c),g=THREE.GeometryUtils.triangleArea(f,h,c),a._area1=b,a._area2=g):(b=THREE.GeometryUtils.triangleArea(e,f,c),g=THREE.GeometryUtils.triangleArea(f,h,c));return THREE.GeometryUtils.random()*(b+ +g)a?b(e,g-1):m[g] 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#ifdef VERTEX_TEXTURES\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\nvec4 displacedPosition = vec4( vNormal.xyz * df, 0.0 ) + mvPosition;\ngl_Position = projectionMatrix * displacedPosition;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif", THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:1,texture:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vViewPosition;\nvoid main() {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vViewPosition;\nvoid main() {\nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( tFlip * wPos.x, wPos.yz ) );\n}"}}}; THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(a){return this.getPoint(this.getUtoTmapping(a))};THREE.Curve.prototype.getPoints=function(a){a||(a=5);var c,b=[];for(c=0;c<=a;c++)b.push(this.getPoint(c/a));return b};THREE.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var c,b=[];for(c=0;c<=a;c++)b.push(this.getPointAt(c/a));return b}; -THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1)return this.cacheArcLengths;var c=[],b,e=this.getPoint(0),g,h=0;c.push(0);for(g=1;g<=a;g++)b=this.getPoint(g/a),h+=b.distanceTo(e),c.push(h),e=b;return this.cacheArcLengths=c}; -THREE.Curve.prototype.getUtoTmapping=function(a,c){var b=this.getLengths(),e=0,g=b.length,h;h=c?c:a*b[g-1];time=Date.now();for(var f=0,k=g-1,l;f<=k;)if(e=Math.floor(f+(k-f)/2),l=b[e]-h,l<0)f=e+1;else if(l>0)k=e-1;else{k=e;break}e=k;if(b[e]==h)return e/(g-1);f=b[e];return b=(e+(h-f)/(b[e+1]-f))/(g-1)};THREE.Curve.prototype.getNormalVector=function(a){a=this.getTangent(a);return new THREE.Vector2(-a.y,a.x)}; +THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1)return this.cacheArcLengths;var c=[],b,e=this.getPoint(0),f,h=0;c.push(0);for(f=1;f<=a;f++)b=this.getPoint(f/a),h+=b.distanceTo(e),c.push(h),e=b;return this.cacheArcLengths=c}; +THREE.Curve.prototype.getUtoTmapping=function(a,c){var b=this.getLengths(),e=0,f=b.length,h;h=c?c:a*b[f-1];time=Date.now();for(var g=0,k=f-1,l;g<=k;)if(e=Math.floor(g+(k-g)/2),l=b[e]-h,l<0)g=e+1;else if(l>0)k=e-1;else{k=e;break}e=k;if(b[e]==h)return e/(f-1);g=b[e];return b=(e+(h-g)/(b[e+1]-g))/(f-1)};THREE.Curve.prototype.getNormalVector=function(a){a=this.getTangent(a);return new THREE.Vector2(-a.y,a.x)}; THREE.Curve.prototype.getTangent=function(a){var c=a-1.0E-4;a+=1.0E-4;c<0&&(c=0);a>1&&(a=1);var c=this.getPoint(c),a=this.getPoint(a),b=new THREE.Vector2;b.sub(a,c);return b.unit()};THREE.LineCurve=function(a,c){a instanceof THREE.Vector2?(this.v1=a,this.v2=c):THREE.LineCurve.oldConstructor.apply(this,arguments)};THREE.LineCurve.oldConstructor=function(a,c,b,e){this.constructor(new THREE.Vector2(a,c),new THREE.Vector2(b,e))};THREE.LineCurve.prototype=new THREE.Curve; THREE.LineCurve.prototype.constructor=THREE.LineCurve;THREE.LineCurve.prototype.getPoint=function(a){var c=new THREE.Vector2;c.sub(this.v2,this.v1);c.multiplyScalar(a).addSelf(this.v1);return c};THREE.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)};THREE.LineCurve.prototype.getTangent=function(){var a=new THREE.Vector2;a.sub(this.v2,this.v1);a.normalize();return a}; THREE.QuadraticBezierCurve=function(a,c,b){if(!(c instanceof THREE.Vector2))var e=Array.prototype.slice.call(arguments),a=new THREE.Vector2(e[0],e[1]),c=new THREE.Vector2(e[2],e[3]),b=new THREE.Vector2(e[4],e[5]);this.v0=a;this.v1=c;this.v2=b};THREE.QuadraticBezierCurve.prototype=new THREE.Curve;THREE.QuadraticBezierCurve.prototype.constructor=THREE.QuadraticBezierCurve; THREE.QuadraticBezierCurve.prototype.getPoint=function(a){var c;c=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(c,a)};THREE.QuadraticBezierCurve.prototype.getTangent=function(a){var c;c=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.y,this.v1.y,this.v2.y);c=new THREE.Vector2(c,a);c.normalize();return c}; -THREE.CubicBezierCurve=function(a,c,b,e){if(!(c instanceof THREE.Vector2))var g=Array.prototype.slice.call(arguments),a=new THREE.Vector2(g[0],g[1]),c=new THREE.Vector2(g[2],g[3]),b=new THREE.Vector2(g[4],g[5]),e=new THREE.Vector2(g[6],g[7]);this.v0=a;this.v1=c;this.v2=b;this.v3=e};THREE.CubicBezierCurve.prototype=new THREE.Curve;THREE.CubicBezierCurve.prototype.constructor=THREE.CubicBezierCurve; +THREE.CubicBezierCurve=function(a,c,b,e){if(!(c instanceof THREE.Vector2))var f=Array.prototype.slice.call(arguments),a=new THREE.Vector2(f[0],f[1]),c=new THREE.Vector2(f[2],f[3]),b=new THREE.Vector2(f[4],f[5]),e=new THREE.Vector2(f[6],f[7]);this.v0=a;this.v1=c;this.v2=b;this.v3=e};THREE.CubicBezierCurve.prototype=new THREE.Curve;THREE.CubicBezierCurve.prototype.constructor=THREE.CubicBezierCurve; THREE.CubicBezierCurve.prototype.getPoint=function(a){var c;c=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);return new THREE.Vector2(c,a)};THREE.CubicBezierCurve.prototype.getTangent=function(a){var c;c=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);c=new THREE.Vector2(c,a);c.normalize();return c}; THREE.SplineCurve=function(a){this.points=a};THREE.SplineCurve.prototype=new THREE.Curve;THREE.SplineCurve.prototype.constructor=THREE.SplineCurve; -THREE.SplineCurve.prototype.getPoint=function(a){var c=new THREE.Vector2,b=[],e=this.points,g;g=(e.length-1)*a;a=Math.floor(g);g-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,g);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,g);return c};THREE.ArcCurve=function(a,c,b,e,g,h){this.aX=a;this.aY=c;this.aRadius=b;this.aStartAngle=e;this.aEndAngle=g;this.aClockwise=h}; +THREE.SplineCurve.prototype.getPoint=function(a){var c=new THREE.Vector2,b=[],e=this.points,f;f=(e.length-1)*a;a=Math.floor(f);f-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,f);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,f);return c};THREE.ArcCurve=function(a,c,b,e,f,h){this.aX=a;this.aY=c;this.aRadius=b;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=h}; THREE.ArcCurve.prototype=new THREE.Curve;THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.ArcCurve.prototype.getPoint=function(a){var c=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);a=this.aStartAngle+a*c;return new THREE.Vector2(this.aX+this.aRadius*Math.cos(a),this.aY+this.aRadius*Math.sin(a))}; -THREE.Curve.Utils={tangentQuadraticBezier:function(a,c,b,e){return 2*(1-a)*(b-c)+2*a*(e-b)},tangentCubicBezier:function(a,c,b,e,g){return-3*c*(1-a)*(1-a)+3*b*(1-a)*(1-a)-6*a*b*(1-a)+6*a*e*(1-a)-3*a*a*e+3*a*a*g},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,c,b,e,g){var a=(b-a)*0.5,e=(e-c)*0.5,h=g*g;return(2*c-2*b+a+e)*g*h+(-3*c+3*b-2*a-e)*h+a*g+c}}; +THREE.Curve.Utils={tangentQuadraticBezier:function(a,c,b,e){return 2*(1-a)*(b-c)+2*a*(e-b)},tangentCubicBezier:function(a,c,b,e,f){return-3*c*(1-a)*(1-a)+3*b*(1-a)*(1-a)-6*a*b*(1-a)+6*a*e*(1-a)-3*a*a*e+3*a*a*f},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,c,b,e,f){var a=(b-a)*0.5,e=(e-c)*0.5,h=f*f;return(2*c-2*b+a+e)*f*h+(-3*c+3*b-2*a-e)*h+a*f+c}}; THREE.Curve.create=function(a,c){a.prototype=new THREE.Curve;a.prototype.constructor=a;a.prototype.getPoint=c;return a};THREE.LineCurve3=THREE.Curve.create(function(a,c){this.v1=a;this.v2=c},function(a){var c=new THREE.Vector3;c.sub(v2,v1);c.multiplyScalar(a);c.addSelf(this.v1);return c}); THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,c,b){this.v0=a;this.v1=c;this.v2=b},function(a){var c,b;c=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);b=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(c,b,a)}); THREE.CubicBezierCurve3=THREE.Curve.create(function(a,c,b,e){this.v0=a;this.v1=c;this.v2=b;this.v3=e},function(a){var c,b;c=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);b=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(c,b,a)}); -THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=a},function(a){var c=new THREE.Vector3,b=[],e=this.points,g;g=(e.length-1)*a;a=Math.floor(g);g-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,g);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,g);c.z=THREE.Curve.Utils.interpolate(e[b[0]].z,e[b[1]].z,e[b[2]].z,e[b[3]].z,g);return c}); +THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=a},function(a){var c=new THREE.Vector3,b=[],e=this.points,f;f=(e.length-1)*a;a=Math.floor(f);f-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,f);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,f);c.z=THREE.Curve.Utils.interpolate(e[b[0]].z,e[b[1]].z,e[b[2]].z,e[b[3]].z,f);return c}); THREE.CurvePath=function(){this.curves=[];this.bends=[]};THREE.CurvePath.prototype=new THREE.Curve;THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){}; THREE.CurvePath.prototype.getPoint=function(a){for(var c=a*this.getLength(),b=this.getCurveLengths(),a=0;a=c)return c=b[a]-c,a=this.curves[a],c=1-c/a.getLength(),a.getPointAt(c);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],c=0,b,e=this.curves.length;for(b=0;bc)c=h.x;else if(h.xb)b=h.y;else if(h.yc)c=h.x;else if(h.xb)b=h.y;else if(h.y0?(f=b[b.length-1],u=f.x,v=f.y):(f=this.actions[e-1].args,u=f[f.length-2],v=f[f.length-1]);for(f=1;f<=a;f++)y=f/a,h=THREE.Shape.Utils.b2(y,u,o,k),y=THREE.Shape.Utils.b2(y,v,p, -l),b.push(new THREE.Vector2(h,y));break;case THREE.PathActions.BEZIER_CURVE_TO:k=h[4];l=h[5];o=h[0];p=h[1];m=h[2];n=h[3];b.length>0?(f=b[b.length-1],u=f.x,v=f.y):(f=this.actions[e-1].args,u=f[f.length-2],v=f[f.length-1]);for(f=1;f<=a;f++)y=f/a,h=THREE.Shape.Utils.b3(y,u,o,m,k),y=THREE.Shape.Utils.b3(y,v,p,n,l),b.push(new THREE.Vector2(h,y));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[e-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];y=a*h[0].length;f=f.concat(h[0]);h=new THREE.SplineCurve(f); -for(f=1;f<=y;f++)b.push(h.getPointAt(f/y));break;case THREE.PathActions.ARC:f=this.actions[e-1].args;k=h[0];l=h[1];m=h[2];o=h[3];y=h[4];p=!!h[5];n=f[f.length-2];u=f[f.length-1];f.length==0&&(n=u=0);v=y-o;var t=a*2;for(f=1;f<=t;f++)y=f/t,p||(y=1-y),y=o+y*v,h=n+k+m*Math.cos(y),y=u+l+m*Math.sin(y),b.push(new THREE.Vector2(h,y))}c&&b.push(b[0]);return b};THREE.Path.prototype.transform=function(a,c){this.getBoundingBox();return this.getWrapPoints(this.getPoints(c),a)}; -THREE.Path.prototype.nltransform=function(a,c,b,e,g,h){var f=this.getPoints(),k,l,m,n,o;k=0;for(l=f.length;k0?(g=b[b.length-1],t=g.x,z=g.y):(g=this.actions[e-1].args,t=g[g.length-2],z=g[g.length-1]);for(g=1;g<=a;g++)v=g/a,h=THREE.Shape.Utils.b2(v,t,o,k),v=THREE.Shape.Utils.b2(v,z,u, +l),b.push(new THREE.Vector2(h,v));break;case THREE.PathActions.BEZIER_CURVE_TO:k=h[4];l=h[5];o=h[0];u=h[1];m=h[2];n=h[3];b.length>0?(g=b[b.length-1],t=g.x,z=g.y):(g=this.actions[e-1].args,t=g[g.length-2],z=g[g.length-1]);for(g=1;g<=a;g++)v=g/a,h=THREE.Shape.Utils.b3(v,t,o,m,k),v=THREE.Shape.Utils.b3(v,z,u,n,l),b.push(new THREE.Vector2(h,v));break;case THREE.PathActions.CSPLINE_THRU:g=this.actions[e-1].args;g=[new THREE.Vector2(g[g.length-2],g[g.length-1])];v=a*h[0].length;g=g.concat(h[0]);h=new THREE.SplineCurve(g); +for(g=1;g<=v;g++)b.push(h.getPointAt(g/v));break;case THREE.PathActions.ARC:g=this.actions[e-1].args;k=h[0];l=h[1];m=h[2];o=h[3];v=h[4];u=!!h[5];n=g[g.length-2];t=g[g.length-1];g.length==0&&(n=t=0);z=v-o;var p=a*2;for(g=1;g<=p;g++)v=g/p,u||(v=1-v),v=o+v*z,h=n+k+m*Math.cos(v),v=t+l+m*Math.sin(v),b.push(new THREE.Vector2(h,v))}c&&b.push(b[0]);return b};THREE.Path.prototype.transform=function(a,c){this.getBoundingBox();return this.getWrapPoints(this.getPoints(c),a)}; +THREE.Path.prototype.nltransform=function(a,c,b,e,f,h){var g=this.getPoints(),k,l,m,n,o;k=0;for(l=g.length;k=0?k-1:b.length-1;h=f-1>=0?f-1:m.length-1;var y=[m[f],b[k],b[g]];o=THREE.FontUtils.Triangulate.area(y);var t=[m[f],m[h],b[k]];p=THREE.FontUtils.Triangulate.area(t);u=k;n=f;k+=1;f+=-1;k< -0&&(k+=b.length);k%=b.length;f<0&&(f+=m.length);f%=m.length;g=k-1>=0?k-1:b.length-1;h=f-1>=0?f-1:m.length-1;y=[m[f],b[k],b[g]];y=THREE.FontUtils.Triangulate.area(y);t=[m[f],m[h],b[k]];t=THREE.FontUtils.Triangulate.area(t);o+p>y+t&&(k=u,f=n,k<0&&(k+=b.length),k%=b.length,f<0&&(f+=m.length),f%=m.length,g=k-1>=0?k-1:b.length-1,h=f-1>=0?f-1:m.length-1);o=b.slice(0,k);p=b.slice(k);u=m.slice(f);n=m.slice(0,f);h=[m[f],m[h],b[k]];v.push([m[f],b[k],b[g]]);v.push(h);b=o.concat(u).concat(n).concat(p)}return{shape:b, -isolatedPts:v,allpoints:e}},triangulateShape:function(a,c){var b=THREE.Shape.Utils.removeHoles(a,c),e=b.allpoints,g=b.isolatedPts,b=THREE.FontUtils.Triangulate(b.shape,!1),h,f,k,l,m={};h=0;for(f=e.length;h=0?k-1:b.length-1;h=g-1>=0?g-1:m.length-1;var v=[m[g],b[k],b[f]];o=THREE.FontUtils.Triangulate.area(v);var p=[m[g],m[h],b[k]];u=THREE.FontUtils.Triangulate.area(p);t=k;n=g;k+=1;g+=-1;k< +0&&(k+=b.length);k%=b.length;g<0&&(g+=m.length);g%=m.length;f=k-1>=0?k-1:b.length-1;h=g-1>=0?g-1:m.length-1;v=[m[g],b[k],b[f]];v=THREE.FontUtils.Triangulate.area(v);p=[m[g],m[h],b[k]];p=THREE.FontUtils.Triangulate.area(p);o+u>v+p&&(k=t,g=n,k<0&&(k+=b.length),k%=b.length,g<0&&(g+=m.length),g%=m.length,f=k-1>=0?k-1:b.length-1,h=g-1>=0?g-1:m.length-1);o=b.slice(0,k);u=b.slice(k);t=m.slice(g);n=m.slice(0,g);h=[m[g],m[h],b[k]];z.push([m[g],b[k],b[f]]);z.push(h);b=o.concat(t).concat(n).concat(u)}return{shape:b, +isolatedPts:z,allpoints:e}},triangulateShape:function(a,c){var b=THREE.Shape.Utils.removeHoles(a,c),e=b.allpoints,f=b.isolatedPts,b=THREE.FontUtils.Triangulate(b.shape,!1),h,g,k,l,m={};h=0;for(g=e.length;h1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+e+" on bone "+u),e=e<0?0:1;if(b==="pos")if(b=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)b.x=g[0]+(h[0]-g[0])*e,b.y=g[1]+(h[1]-g[1])*e,b.z=g[2]+(h[2]-g[2])*e;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= -this.getPrevKeyWith("pos",u,f.index-1).pos,this.points[1]=g,this.points[2]=h,this.points[3]=this.getNextKeyWith("pos",u,k.index+1).pos,e=e*0.33+0.33,g=this.interpolateCatmullRom(this.points,e),b.x=g[0],b.y=g[1],b.z=g[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)e=this.interpolateCatmullRom(this.points,e*1.01),this.target.set(e[0],e[1],e[2]),this.target.subSelf(b),this.target.y=0,this.target.normalize(),e=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,e,0)}else if(b=== -"rot")THREE.Quaternion.slerp(g,h,a.quaternion,e);else if(b==="scl")b=a.scale,b.x=g[0]+(h[0]-g[0])*e,b.y=g[1]+(h[1]-g[1])*e,b.z=g[2]+(h[2]-g[2])*e}}if(this.JITCompile&&n[0][m]===void 0){this.hierarchy[0].update(void 0,!0);for(u=0;ua.length-2?h:h+1;b[3]=h>a.length-3?h:h+2;h=a[b[0]];k=a[b[1]];l=a[b[2]];m=a[b[3]];b=g*g;f=g*b;e[0]=this.interpolate(h[0],k[0],l[0],m[0],g,b,f);e[1]=this.interpolate(h[1],k[1],l[1],m[1],g,b,f);e[2]=this.interpolate(h[2],k[2],l[2],m[2],g,b,f);return e}; -THREE.Animation.prototype.interpolate=function(a,c,b,e,g,h,f){a=(b-a)*0.5;e=(e-c)*0.5;return(2*(c-b)+a+e)*f+(-3*(c-b)-2*a-e)*h+a*g+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,b){var e=this.data.hierarchy[c].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?b=b1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+e+" on bone "+t),e=e<0?0:1;if(b==="pos")if(b=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)b.x=f[0]+(h[0]-f[0])*e,b.y=f[1]+(h[1]-f[1])*e,b.z=f[2]+(h[2]-f[2])*e;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= +this.getPrevKeyWith("pos",t,g.index-1).pos,this.points[1]=f,this.points[2]=h,this.points[3]=this.getNextKeyWith("pos",t,k.index+1).pos,e=e*0.33+0.33,f=this.interpolateCatmullRom(this.points,e),b.x=f[0],b.y=f[1],b.z=f[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)e=this.interpolateCatmullRom(this.points,e*1.01),this.target.set(e[0],e[1],e[2]),this.target.subSelf(b),this.target.y=0,this.target.normalize(),e=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,e,0)}else if(b=== +"rot")THREE.Quaternion.slerp(f,h,a.quaternion,e);else if(b==="scl")b=a.scale,b.x=f[0]+(h[0]-f[0])*e,b.y=f[1]+(h[1]-f[1])*e,b.z=f[2]+(h[2]-f[2])*e}}if(this.JITCompile&&n[0][m]===void 0){this.hierarchy[0].update(void 0,!0);for(t=0;ta.length-2?h:h+1;b[3]=h>a.length-3?h:h+2;h=a[b[0]];k=a[b[1]];l=a[b[2]];m=a[b[3]];b=f*f;g=f*b;e[0]=this.interpolate(h[0],k[0],l[0],m[0],f,b,g);e[1]=this.interpolate(h[1],k[1],l[1],m[1],f,b,g);e[2]=this.interpolate(h[2],k[2],l[2],m[2],f,b,g);return e}; +THREE.Animation.prototype.interpolate=function(a,c,b,e,f,h,g){a=(b-a)*0.5;e=(e-c)*0.5;return(2*(c-b)+a+e)*g+(-3*(c-b)-2*a-e)*h+a*f+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,b){var e=this.data.hierarchy[c].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?b=b0?b:0:b>=0?b:b+e.length;b>=0;b--)if(e[b][a]!==void 0)return e[b];return this.data.hierarchy[c].keys[e.length-1]}; THREE.CubeCamera=function(a,c,b,e){this.heightOffset=b;this.position=new THREE.Vector3(0,b,0);this.cameraPX=new THREE.PerspectiveCamera(90,1,a,c);this.cameraNX=new THREE.PerspectiveCamera(90,1,a,c);this.cameraPY=new THREE.PerspectiveCamera(90,1,a,c);this.cameraNY=new THREE.PerspectiveCamera(90,1,a,c);this.cameraPZ=new THREE.PerspectiveCamera(90,1,a,c);this.cameraNZ=new THREE.PerspectiveCamera(90,1,a,c);this.cameraPX.position=this.position;this.cameraNX.position=this.position;this.cameraPY.position= this.position;this.cameraNY.position=this.position;this.cameraPZ.position=this.position;this.cameraNZ.position=this.position;this.cameraPX.up.set(0,-1,0);this.cameraNX.up.set(0,-1,0);this.cameraPY.up.set(0,0,1);this.cameraNY.up.set(0,0,-1);this.cameraPZ.up.set(0,-1,0);this.cameraNZ.up.set(0,-1,0);this.targetPX=new THREE.Vector3(0,0,0);this.targetNX=new THREE.Vector3(0,0,0);this.targetPY=new THREE.Vector3(0,0,0);this.targetNY=new THREE.Vector3(0,0,0);this.targetPZ=new THREE.Vector3(0,0,0);this.targetNZ= new THREE.Vector3(0,0,0);this.renderTarget=new THREE.WebGLRenderTargetCube(e,e,{format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter});this.updatePosition=function(a){this.position.copy(a);this.position.y+=this.heightOffset;this.targetPX.copy(this.position);this.targetNX.copy(this.position);this.targetPY.copy(this.position);this.targetNY.copy(this.position);this.targetPZ.copy(this.position);this.targetNZ.copy(this.position);this.targetPX.x+=1;this.targetNX.x-=1;this.targetPY.y+= 1;this.targetNY.y-=1;this.targetPZ.z+=1;this.targetNZ.z-=1;this.cameraPX.lookAt(this.targetPX);this.cameraNX.lookAt(this.targetNX);this.cameraPY.lookAt(this.targetPY);this.cameraNY.lookAt(this.targetNY);this.cameraPZ.lookAt(this.targetPZ);this.cameraNZ.lookAt(this.targetNZ)};this.updateCubeMap=function(a,b){var e=this.renderTarget;e.activeCubeFace=0;a.render(b,this.cameraPX,e);e.activeCubeFace=1;a.render(b,this.cameraNX,e);e.activeCubeFace=2;a.render(b,this.cameraPY,e);e.activeCubeFace=3;a.render(b, this.cameraNY,e);e.activeCubeFace=4;a.render(b,this.cameraPZ,e);e.activeCubeFace=5;a.render(b,this.cameraNZ,e)}};THREE.FirstPersonCamera=function(){console.warn("DEPRECATED: FirstPersonCamera() is FirstPersonControls().")};THREE.PathCamera=function(){console.warn("DEPRECATED: PathCamera() is PathControls().")};THREE.FlyCamera=function(){console.warn("DEPRECATED: FlyCamera() is FlyControls().")};THREE.RollCamera=function(){console.warn("DEPRECATED: RollCamera() is RollControls().")}; -THREE.TrackballCamera=function(){console.warn("DEPRECATED: TrackballCamera() is TrackballControls().")};THREE.CombinedCamera=function(a,c,b,e,g,h,f){THREE.Camera.call(this);this.cameraO=new THREE.OrthographicCamera(a/-2,a/2,c/2,c/-2,h,f);this.cameraP=new THREE.PerspectiveCamera(b,a/c,e,g);this.toPerspective()};THREE.CombinedCamera.prototype=new THREE.Camera;THREE.CombinedCamera.prototype.constructor=THREE.CoolCamera; +THREE.TrackballCamera=function(){console.warn("DEPRECATED: TrackballCamera() is TrackballControls().")};THREE.CombinedCamera=function(a,c,b,e,f,h,g){THREE.Camera.call(this);this.cameraO=new THREE.OrthographicCamera(a/-2,a/2,c/2,c/-2,h,g);this.cameraP=new THREE.PerspectiveCamera(b,a/c,e,f);this.toPerspective()};THREE.CombinedCamera.prototype=new THREE.Camera;THREE.CombinedCamera.prototype.constructor=THREE.CoolCamera; THREE.CombinedCamera.prototype.toPerspective=function(){this.near=this.cameraP.near;this.far=this.cameraP.far;this.projectionMatrix=this.cameraP.projectionMatrix};THREE.CombinedCamera.prototype.toOrthographic=function(){this.near=this.cameraO.near;this.far=this.cameraO.far;this.projectionMatrix=this.cameraO.projectionMatrix};THREE.CombinedCamera.prototype.setFov=function(a){this.cameraP.fov=a;this.cameraP.updateProjectionMatrix();this.toPerspective()}; THREE.CombinedCamera.prototype.setLens=function(a,c){c||(c=43.25);var b=2*Math.atan(c/(a*2));b*=180/Math.PI;this.setFov(b);return b}; -THREE.FirstPersonControls=function(a,c){function b(a,b){return function(){b.apply(a,arguments)}}this.object=a;this.target=new THREE.Vector3(0,0,0);this.domElement=c!==void 0?c:document;this.movementSpeed=1;this.lookSpeed=0.0050;this.noFly=!1;this.lookVertical=!0;this.autoForward=!1;this.activeLook=!0;this.heightSpeed=!1;this.heightCoef=1;this.heightMin=0;this.constrainVertical=!1;this.verticalMin=0;this.verticalMax=Math.PI;this.lastUpdate=(new Date).getTime();this.theta=this.phi=this.lon=this.lat= -this.mouseY=this.mouseX=this.autoSpeedFactor=this.tdiff=0;this.mouseDragOn=this.freeze=this.moveRight=this.moveLeft=this.moveBackward=this.moveForward=!1;this.domElement===document?(this.viewHalfX=window.innerWidth/2,this.viewHalfY=window.innerHeight/2):(this.viewHalfX=this.domElement.offsetWidth/2,this.viewHalfY=this.domElement.offsetHeight/2,this.domElement.setAttribute("tabindex",-1));this.onMouseDown=function(a){this.domElement!==document&&this.domElement.focus();a.preventDefault();a.stopPropagation(); -if(this.activeLook)switch(a.button){case 0:this.moveForward=!0;break;case 2:this.moveBackward=!0}this.mouseDragOn=!0};this.onMouseUp=function(a){a.preventDefault();a.stopPropagation();if(this.activeLook)switch(a.button){case 0:this.moveForward=!1;break;case 2:this.moveBackward=!1}this.mouseDragOn=!1};this.onMouseMove=function(a){this.domElement===document?(this.mouseX=a.pageX-this.viewHalfX,this.mouseY=a.pageY-this.viewHalfY):(this.mouseX=a.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY= -a.pageY-this.domElement.offsetTop-this.viewHalfY)};this.onKeyDown=function(a){switch(a.keyCode){case 38:case 87:this.moveForward=!0;break;case 37:case 65:this.moveLeft=!0;break;case 40:case 83:this.moveBackward=!0;break;case 39:case 68:this.moveRight=!0;break;case 82:this.moveUp=!0;break;case 70:this.moveDown=!0;break;case 81:this.freeze=!this.freeze}};this.onKeyUp=function(a){switch(a.keyCode){case 38:case 87:this.moveForward=!1;break;case 37:case 65:this.moveLeft=!1;break;case 40:case 83:this.moveBackward= -!1;break;case 39:case 68:this.moveRight=!1;break;case 82:this.moveUp=!1;break;case 70:this.moveDown=!1}};this.update=function(){var a=(new Date).getTime();this.tdiff=(a-this.lastUpdate)/1E3;this.lastUpdate=a;if(!this.freeze){this.autoSpeedFactor=this.heightSpeed?this.tdiff*((this.object.position.ythis.heightMax?this.heightMax:this.object.position.y)-this.heightMin)*this.heightCoef:0;var b=this.tdiff*this.movementSpeed;(this.moveForward||this.autoForward&& -!this.moveBackward)&&this.object.translateZ(-(b+this.autoSpeedFactor));this.moveBackward&&this.object.translateZ(b);this.moveLeft&&this.object.translateX(-b);this.moveRight&&this.object.translateX(b);this.moveUp&&this.object.translateY(b);this.moveDown&&this.object.translateY(-b);b=this.tdiff*this.lookSpeed;this.activeLook||(b=0);this.lon+=this.mouseX*b;this.lookVertical&&(this.lat-=this.mouseY*b);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon* -Math.PI/180;var a=this.target,c=this.object.position;a.x=c.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=c.y+100*Math.cos(this.phi);a.z=c.z+100*Math.sin(this.phi)*Math.sin(this.theta)}a=1;this.constrainVertical&&(a=Math.PI/(this.verticalMax-this.verticalMin));this.lon+=this.mouseX*b;this.lookVertical&&(this.lat-=this.mouseY*b*a);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;if(this.constrainVertical)this.phi=(this.phi-0)*(this.verticalMax- -this.verticalMin)/(Math.PI-0)+this.verticalMin;a=this.target;c=this.object.position;a.x=c.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=c.y+100*Math.cos(this.phi);a.z=c.z+100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(a)};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},!1);this.domElement.addEventListener("mousemove",b(this,this.onMouseMove),!1);this.domElement.addEventListener("mousedown",b(this,this.onMouseDown),!1);this.domElement.addEventListener("mouseup", -b(this,this.onMouseUp),!1);this.domElement.addEventListener("keydown",b(this,this.onKeyDown),!1);this.domElement.addEventListener("keyup",b(this,this.onKeyUp),!1)}; -THREE.PathControls=function(a,c){function b(a){if((a*=2)<1)return 0.5*a*a;return-0.5*(--a*(a-2)-1)}function e(a,b){return function(){b.apply(a,arguments)}}function g(a,b,c,e){var f={name:c,fps:0.6,length:e,hierarchy:[]},h,g=b.getControlPointsArray(),k=b.getLength(),t=g.length,z=0;h=t-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:g[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[h]={time:e,pos:g[h],rot:[0,0,0,1],scl:[1,1,1]};for(h=1;h=0?a:a+f;a=this.verticalAngleMap.srcRange; -c=this.verticalAngleMap.dstRange;var e=c[1]-c[0];this.phi=b(((this.phi-a[0])*(c[1]-c[0])/(a[1]-a[0])+c[0]-c[0])/e)*e+c[0];a=this.horizontalAngleMap.srcRange;c=this.horizontalAngleMap.dstRange;e=c[1]-c[0];this.theta=b(((this.theta-a[0])*(c[1]-c[0])/(a[1]-a[0])+c[0]-c[0])/e)*e+c[0];a=this.target.position;a.x=100*Math.sin(this.phi)*Math.cos(this.theta);a.y=100*Math.cos(this.phi);a.z=100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(this.target.position)};this.onMouseMove=function(a){this.domElement=== -document?(this.mouseX=a.pageX-this.viewHalfX,this.mouseY=a.pageY-this.viewHalfY):(this.mouseX=a.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY=a.pageY-this.domElement.offsetTop-this.viewHalfY)};this.init=function(){this.spline=new THREE.Spline;this.spline.initFromArray(this.waypoints);this.useConstantSpeed&&this.spline.reparametrizeByArcLength(this.resamplingCoef);if(this.createDebugDummy){var a=new THREE.MeshLambertMaterial({color:30719}),b=new THREE.MeshLambertMaterial({color:65280}), -c=new THREE.CubeGeometry(10,10,20),f=new THREE.CubeGeometry(2,2,10);this.animationParent=new THREE.Mesh(c,a);a=new THREE.Mesh(f,b);a.position.set(0,10,0);this.animation=g(this.animationParent,this.spline,this.id,this.duration);this.animationParent.add(this.object);this.animationParent.add(this.target);this.animationParent.add(a)}else this.animation=g(this.animationParent,this.spline,this.id,this.duration),this.animationParent.add(this.target),this.animationParent.add(this.object);if(this.createDebugPath){var a= -this.debugPath,b=this.spline,c=h(b,10),f=h(b,10),k=new THREE.LineBasicMaterial({color:16711680,linewidth:3});lineObj=new THREE.Line(c,k);particleObj=new THREE.ParticleSystem(f,new THREE.ParticleBasicMaterial({color:16755200,size:3}));lineObj.scale.set(1,1,1);a.add(lineObj);particleObj.scale.set(1,1,1);a.add(particleObj);f=new THREE.SphereGeometry(1,16,8);k=new THREE.MeshBasicMaterial({color:65280});for(i=0;i=0?a:a+g;e=this.verticalAngleMap.srcRange; +a=this.verticalAngleMap.dstRange;e=THREE.Math.mapLinear(this.phi,e[0],e[1],a[0],a[1]);var c=a[1]-a[0];this.phi=b((e-a[0])/c)*c+a[0];e=this.horizontalAngleMap.srcRange;a=this.horizontalAngleMap.dstRange;e=THREE.Math.mapLinear(this.theta,e[0],e[1],a[0],a[1]);c=a[1]-a[0];this.theta=b((e-a[0])/c)*c+a[0];a=this.target.position;a.x=100*Math.sin(this.phi)*Math.cos(this.theta);a.y=100*Math.cos(this.phi);a.z=100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(this.target.position)};this.onMouseMove= +function(a){this.domElement===document?(this.mouseX=a.pageX-this.viewHalfX,this.mouseY=a.pageY-this.viewHalfY):(this.mouseX=a.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY=a.pageY-this.domElement.offsetTop-this.viewHalfY)};this.init=function(){this.spline=new THREE.Spline;this.spline.initFromArray(this.waypoints);this.useConstantSpeed&&this.spline.reparametrizeByArcLength(this.resamplingCoef);if(this.createDebugDummy){var a=new THREE.MeshLambertMaterial({color:30719}),b=new THREE.MeshLambertMaterial({color:65280}), +c=new THREE.CubeGeometry(10,10,20),g=new THREE.CubeGeometry(2,2,10);this.animationParent=new THREE.Mesh(c,a);a=new THREE.Mesh(g,b);a.position.set(0,10,0);this.animation=f(this.animationParent,this.spline,this.id,this.duration);this.animationParent.add(this.object);this.animationParent.add(this.target);this.animationParent.add(a)}else this.animation=f(this.animationParent,this.spline,this.id,this.duration),this.animationParent.add(this.target),this.animationParent.add(this.object);if(this.createDebugPath){var a= +this.debugPath,b=this.spline,c=h(b,10),g=h(b,10),k=new THREE.LineBasicMaterial({color:16711680,linewidth:3});lineObj=new THREE.Line(c,k);particleObj=new THREE.ParticleSystem(g,new THREE.ParticleBasicMaterial({color:16755200,size:3}));lineObj.scale.set(1,1,1);a.add(lineObj);particleObj.scale.set(1,1,1);a.add(particleObj);g=new THREE.SphereGeometry(1,16,8);k=new THREE.MeshBasicMaterial({color:65280});for(i=0;i0){var b=this.getContainerDimensions(),c=b.size[0]/2,f=b.size[1]/2;this.moveState.yawLeft=-(a.pageX-b.offset[0]-c)/c;this.moveState.pitchDown=(a.pageY-b.offset[1]-f)/f;this.updateRotationVector()}};this.mouseup=function(a){a.preventDefault();a.stopPropagation();if(this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else switch(a.button){case 0:this.moveForward= -!1;break;case 2:this.moveBackward=!1}this.updateRotationVector()};this.update=function(){var a=(new Date).getTime();if(this.lastUpdate==-1)this.lastUpdate=a;this.tdiff=(a-this.lastUpdate)/1E3;this.lastUpdate=a;var a=this.tdiff*this.movementSpeed,b=this.tdiff*this.rollSpeed;this.object.translateX(this.moveVector.x*a);this.object.translateY(this.moveVector.y*a);this.object.translateZ(this.moveVector.z*a);this.tmpQuaternion.set(this.rotationVector.x*b,this.rotationVector.y*b,this.rotationVector.z*b, -1).normalize();this.object.quaternion.multiplySelf(this.tmpQuaternion);this.object.matrix.setPosition(this.object.position);this.object.matrix.setRotationFromQuaternion(this.object.quaternion);this.object.matrixWorldNeedsUpdate=!0};this.updateMovementVector=function(){var a=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right;this.moveVector.y=-this.moveState.down+this.moveState.up;this.moveVector.z=-a+this.moveState.back}; -this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp;this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft;this.rotationVector.z=-this.moveState.rollRight+this.moveState.rollLeft};this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0, -0]}};this.domElement.addEventListener("mousemove",b(this,this.mousemove),!1);this.domElement.addEventListener("mousedown",b(this,this.mousedown),!1);this.domElement.addEventListener("mouseup",b(this,this.mouseup),!1);this.domElement.addEventListener("keydown",b(this,this.keydown),!1);this.domElement.addEventListener("keyup",b(this,this.keyup),!1);this.updateMovementVector();this.updateRotationVector()}; -THREE.RollControls=function(a,c){this.object=a;this.domElement=c!==void 0?c:document;this.mouseLook=!0;this.autoForward=!1;this.rollSpeed=this.movementSpeed=this.lookSpeed=1;this.constrainVertical=[-0.9,0.9];this.object.matrixAutoUpdate=!1;this.forward=new THREE.Vector3(0,0,1);this.roll=0;this.lastUpdate=-1;this.delta=0;var b=new THREE.Vector3,e=new THREE.Vector3,g=new THREE.Vector3,h=new THREE.Matrix4,f=!1,k=1,l=0,m=0,n=0,o=0,p=0,u=window.innerWidth/2,v=window.innerHeight/2;this.update=function(){var a= -(new Date).getTime();if(this.lastUpdate==-1)this.lastUpdate=a;this.delta=(a-this.lastUpdate)/1E3;this.lastUpdate=a;this.mouseLook&&(a=this.delta*this.lookSpeed,this.rotateHorizontally(a*o),this.rotateVertically(a*p));a=this.delta*this.movementSpeed;this.object.translateZ(-a*(l>0||this.autoForward&&!(l<0)?1:l));this.object.translateX(a*m);this.object.translateY(a*n);f&&(this.roll+=this.rollSpeed*this.delta*k);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize(); -else if(this.forward.y1?e.normalize():e.z=Math.sqrt(1-h*h);f.copy(b.object.position).subSelf(b.target);h=b.object.up.clone().setLength(e.y);h.addSelf(b.object.up.clone().crossSelf(f).setLength(e.x));h.addSelf(f.setLength(e.z));return h};this.rotateCamera=function(){var a=Math.acos(k.dot(l)/k.length()/l.length());if(a){var c=(new THREE.Vector3).cross(k,l).normalize(),e=new THREE.Quaternion;a*=b.rotateSpeed;e.setFromAxisAngle(c,-a);e.multiplyVector3(f); -e.multiplyVector3(b.object.up);e.multiplyVector3(l);b.staticMoving?k=l:(e.setFromAxisAngle(c,a*(b.dynamicDampingFactor-1)),e.multiplyVector3(k))}};this.zoomCamera=function(){var a=1+(n.y-m.y)*b.zoomSpeed;a!==1&&a>0&&(f.multiplyScalar(a),b.staticMoving?m=n:m.y+=(n.y-m.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=p.clone().subSelf(o);if(a.lengthSq()){a.multiplyScalar(f.length()*b.panSpeed);var c=f.clone().crossSelf(b.object.up).setLength(a.x);c.addSelf(b.object.up.clone().setLength(a.y)); -b.object.position.addSelf(c);b.target.addSelf(c);b.staticMoving?o=p:o.addSelf(a.sub(p,o).multiplyScalar(b.dynamicDampingFactor))}};this.checkDistances=function(){if(!b.noZoom||!b.noPan)b.object.position.lengthSq()>b.maxDistance*b.maxDistance&&b.object.position.setLength(b.maxDistance),f.lengthSq()0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(k=0;k0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(k=0;ka&&(a+=Math.PI*2),anglec=(b+a)/2,new THREE.Vector2(-Math.cos(anglec),-Math.sin(anglec));return e.multiplyScalar(g).addSelf(k).subSelf(a).clone()}function g(a){for(C=a.length;--C>=0;){R=C;S=C-1;S<0&&(S=a.length- -1);for(var b=0,c=u+n*2,b=0;b=0;J--){M=J/n;N=l*(1-M);M=m*Math.sin(M*Math.PI/2);C=0;for(F=x.length;C0){var b=this.getContainerDimensions(),c=b.size[0]/2,g=b.size[1]/2;this.moveState.yawLeft=-(a.pageX-b.offset[0]-c)/c;this.moveState.pitchDown=(a.pageY-b.offset[1]-g)/g;this.updateRotationVector()}};this.mouseup=function(a){a.preventDefault();a.stopPropagation();if(this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else switch(a.button){case 0:this.moveForward= +!1;break;case 2:this.moveBackward=!1}this.updateRotationVector()};this.update=function(a){var b=a*this.movementSpeed;a*=this.rollSpeed;this.object.translateX(this.moveVector.x*b);this.object.translateY(this.moveVector.y*b);this.object.translateZ(this.moveVector.z*b);this.tmpQuaternion.set(this.rotationVector.x*a,this.rotationVector.y*a,this.rotationVector.z*a,1).normalize();this.object.quaternion.multiplySelf(this.tmpQuaternion);this.object.matrix.setPosition(this.object.position);this.object.matrix.setRotationFromQuaternion(this.object.quaternion); +this.object.matrixWorldNeedsUpdate=!0};this.updateMovementVector=function(){var a=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right;this.moveVector.y=-this.moveState.down+this.moveState.up;this.moveVector.z=-a+this.moveState.back};this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp;this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft;this.rotationVector.z= +-this.moveState.rollRight+this.moveState.rollLeft};this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}};this.domElement.addEventListener("mousemove",b(this,this.mousemove),!1);this.domElement.addEventListener("mousedown",b(this,this.mousedown),!1);this.domElement.addEventListener("mouseup",b(this, +this.mouseup),!1);this.domElement.addEventListener("keydown",b(this,this.keydown),!1);this.domElement.addEventListener("keyup",b(this,this.keyup),!1);this.updateMovementVector();this.updateRotationVector()}; +THREE.RollControls=function(a,c){this.object=a;this.domElement=c!==void 0?c:document;this.mouseLook=!0;this.autoForward=!1;this.rollSpeed=this.movementSpeed=this.lookSpeed=1;this.constrainVertical=[-0.9,0.9];this.object.matrixAutoUpdate=!1;this.forward=new THREE.Vector3(0,0,1);this.roll=0;var b=new THREE.Vector3,e=new THREE.Vector3,f=new THREE.Vector3,h=new THREE.Matrix4,g=!1,k=1,l=0,m=0,n=0,o=0,u=0,t=window.innerWidth/2,z=window.innerHeight/2;this.update=function(a){if(this.mouseLook){var c=a*this.lookSpeed; +this.rotateHorizontally(c*o);this.rotateVertically(c*u)}c=a*this.movementSpeed;this.object.translateZ(-c*(l>0||this.autoForward&&!(l<0)?1:l));this.object.translateX(c*m);this.object.translateY(c*n);g&&(this.roll+=this.rollSpeed*a*k);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y1?c.normalize():c.z=Math.sqrt(1-e*e);h.copy(this.object.position).subSelf(this.target);e=this.object.up.clone().setLength(c.y);e.addSelf(this.object.up.clone().crossSelf(h).setLength(c.x));e.addSelf(h.setLength(c.z));return e};this.rotateCamera=function(){var a=Math.acos(g.dot(k)/g.length()/k.length());if(a){var b=(new THREE.Vector3).cross(g,k).normalize(),c=new THREE.Quaternion;a*=this.rotateSpeed;c.setFromAxisAngle(b, +-a);c.multiplyVector3(h);c.multiplyVector3(this.object.up);c.multiplyVector3(k);this.staticMoving?g=k:(c.setFromAxisAngle(b,a*(this.dynamicDampingFactor-1)),c.multiplyVector3(g))}};this.zoomCamera=function(){var a=1+(m.y-l.y)*this.zoomSpeed;a!==1&&a>0&&(h.multiplyScalar(a),this.staticMoving?l=m:l.y+=(m.y-l.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=o.clone().subSelf(n);if(a.lengthSq()){a.multiplyScalar(h.length()*this.panSpeed);var b=h.clone().crossSelf(this.object.up).setLength(a.x); +b.addSelf(this.object.up.clone().setLength(a.y));this.object.position.addSelf(b);this.target.addSelf(b);this.staticMoving?n=o:n.addSelf(a.sub(o,n).multiplyScalar(this.dynamicDampingFactor))}};this.checkDistances=function(){if(!this.noZoom||!this.noPan)this.object.position.lengthSq()>this.maxDistance*this.maxDistance&&this.object.position.setLength(this.maxDistance),h.lengthSq()0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,g,0)));for(k=0;k0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-g,0)));for(k=0;ka&&(a+=Math.PI*2),anglec=(b+a)/2,new THREE.Vector2(-Math.cos(anglec),-Math.sin(anglec));return e.multiplyScalar(f).addSelf(k).subSelf(a).clone()}function f(a){for(C=a.length;--C>=0;){S=C;T=C-1;T<0&&(T=a.length- +1);for(var b=0,c=t+n*2,b=0;b=0;J--){M=J/n;N=l*(1-M);M=m*Math.sin(M*Math.PI/2);C=0;for(F=x.length;C0||(n=this.vertices.push(new THREE.Vertex(new THREE.Vector3(o,k,p)))-1);m.push(n)}c.push(m)}for(var u,v,y,g=c.length,b=0;b0)for(e=0;e1&&(u= -this.vertices[f].position.clone(),v=this.vertices[l].position.clone(),y=this.vertices[m].position.clone(),u.normalize(),v.normalize(),y.normalize(),this.faces.push(new THREE.Face3(f,l,m,[new THREE.Vector3(u.x,u.y,u.z),new THREE.Vector3(v.x,v.y,v.z),new THREE.Vector3(y.x,y.y,y.z)])),this.faceVertexUvs[0].push([n,o,t]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};THREE.SphereGeometry.prototype=new THREE.Geometry; +THREE.SphereGeometry=function(a,c,b){THREE.Geometry.call(this);for(var a=a||50,e,f=Math.PI,h=Math.max(3,c||8),g=Math.max(2,b||6),c=[],b=0;b0||(n=this.vertices.push(new THREE.Vertex(new THREE.Vector3(o,k,u)))-1);m.push(n)}c.push(m)}for(var t,z,v,f=c.length,b=0;b0)for(e=0;e1&&(t= +this.vertices[g].position.clone(),z=this.vertices[l].position.clone(),v=this.vertices[m].position.clone(),t.normalize(),z.normalize(),v.normalize(),this.faces.push(new THREE.Face3(g,l,m,[new THREE.Vector3(t.x,t.y,t.z),new THREE.Vector3(z.x,z.y,z.z),new THREE.Vector3(v.x,v.y,v.z)])),this.faceVertexUvs[0].push([n,o,p]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};THREE.SphereGeometry.prototype=new THREE.Geometry; THREE.SphereGeometry.prototype.constructor=THREE.SphereGeometry; THREE.TextGeometry=function(a,c){var b=(new THREE.TextPath(a,c)).toShapes();c.amount=c.height!==void 0?c.height:50;if(c.bevelThickness===void 0)c.bevelThickness=10;if(c.bevelSize===void 0)c.bevelSize=8;if(c.bevelEnabled===void 0)c.bevelEnabled=!1;if(c.bend){var e=b[b.length-1].getBoundingBox().maxX;c.bendPath=new THREE.QuadraticBezierCurve(new THREE.Vector2(0,0),new THREE.Vector2(e/2,120),new THREE.Vector2(e,0))}THREE.ExtrudeGeometry.call(this,b,c)};THREE.TextGeometry.prototype=new THREE.ExtrudeGeometry; THREE.TextGeometry.prototype.constructor=THREE.TextGeometry; THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size:150,divisions:10,getFace:function(){return this.faces[this.face][this.weight][this.style]},getTextShapes:function(a,c){return(new TextPath(a,c)).toShapes()},loadFace:function(a){var c=a.familyName.toLowerCase();this.faces[c]=this.faces[c]||{};this.faces[c][a.cssFontWeight]=this.faces[c][a.cssFontWeight]||{};this.faces[c][a.cssFontWeight][a.cssFontStyle]=a;return this.faces[c][a.cssFontWeight][a.cssFontStyle]=a},drawText:function(a){for(var c= -this.getFace(),b=this.size/c.resolution,e=0,g=String(a).split(""),h=g.length,f=[],a=0;a0)for(m=0;m2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");if(e)return k;return h}l=m;g<=l&&(l=0);m=l+1;g<=m&&(m=0);n=m+1;g<=n&&(n=0);var p;a:{p=a;var u=l,v=m,y=n,t=g,z=f,x=void 0,w=void 0,A=void 0, -D=void 0,B=void 0,E=void 0,I=void 0,G=void 0,K=void 0,w=p[z[u]].x,A=p[z[u]].y,D=p[z[v]].x,B=p[z[v]].y,E=p[z[y]].x,I=p[z[y]].y;if(1.0E-10>(D-w)*(I-A)-(B-A)*(E-w))p=!1;else{for(x=0;x=0&&J>=0&&N>=0){p=!1;break a}}p=!0}}if(p){h.push([a[f[l]], -a[f[m]],a[f[n]]]);k.push([f[l],f[m],f[n]]);l=m;for(n=m+1;n0)for(m=0;m2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");if(e)return k;return h}l=m;f<=l&&(l=0);m=l+1;f<=m&&(m=0);n=m+1;f<=n&&(n=0);var u;a:{u=a;var t=l,z=m,v=n,p=f,y=g,x=void 0,w=void 0,A=void 0, +D=void 0,B=void 0,E=void 0,I=void 0,G=void 0,L=void 0,w=u[y[t]].x,A=u[y[t]].y,D=u[y[z]].x,B=u[y[z]].y,E=u[y[v]].x,I=u[y[v]].y;if(1.0E-10>(D-w)*(I-A)-(B-A)*(E-w))u=!1;else{for(x=0;x=0&&J>=0&&N>=0){u=!1;break a}}u=!0}}if(u){h.push([a[g[l]], +a[g[m]],a[g[n]]]);k.push([g[l],g[m],g[n]]);l=m;for(n=m+1;n0;)this.smooth(a)}; -THREE.SubdivisionModifier.prototype.smooth=function(a){function c(a,b,c,e,k,l){var m=new THREE.Face4(a,b,c,e,null,k.color,k.material);if(f.useOldVertexColors){m.vertexColors=[];for(var n,t,u,p=0;p<4;p++){u=l[p];n=new THREE.Color;n.setRGB(0,0,0);for(var v=0;v>7)-127;e|=(h&127)<<16|f<<8;if(e==0&&k==-127)return 0;return(1-2*(g>>7))*(1+e*Math.pow(2,-23))*Math.pow(2,k)}function g(a,b){var c=n(a,b),e=n(a,b+1),f=n(a,b+2);return(n(a,b+3)<<24)+(f<<16)+(e<<8)+c}function l(a,b){var c=n(a,b);return(n(a,b+1)<<8)+c}function m(a,b){var c=n(a,b);return c>127?c-256:c}function n(a,b){return a.charCodeAt(b)&255}function o(b){var c, -e,f;c=g(a,b);e=g(a,b+B);f=g(a,b+E);b=l(a,b+I);z.faces.push(new THREE.Face3(c,e,f,null,null,z.materials[b]))}function p(b){var c,e,f,h,m,o;c=g(a,b);e=g(a,b+B);f=g(a,b+E);h=l(a,b+I);m=g(a,b+G);o=g(a,b+K);b=g(a,b+C);h=z.materials[h];var n=A[o*3],p=A[o*3+1];o=A[o*3+2];var t=A[b*3],u=A[b*3+1],b=A[b*3+2];z.faces.push(new THREE.Face3(c,e,f,[new THREE.Vector3(A[m*3],A[m*3+1],A[m*3+2]),new THREE.Vector3(n,p,o),new THREE.Vector3(t,u,b)],null,h))}function u(b){var c,e,f,h;c=g(a,b);e=g(a,b+F);f=g(a,b+J);h=g(a, -b+M);b=l(a,b+N);z.faces.push(new THREE.Face4(c,e,f,h,null,null,z.materials[b]))}function v(b){var c,e,f,h,m,o,n,p;c=g(a,b);e=g(a,b+F);f=g(a,b+J);h=g(a,b+M);m=l(a,b+N);o=g(a,b+L);n=g(a,b+O);p=g(a,b+H);b=g(a,b+Q);m=z.materials[m];var t=A[n*3],u=A[n*3+1];n=A[n*3+2];var la=A[p*3],ma=A[p*3+1];p=A[p*3+2];var na=A[b*3],v=A[b*3+1],b=A[b*3+2];z.faces.push(new THREE.Face4(c,e,f,h,[new THREE.Vector3(A[o*3],A[o*3+1],A[o*3+2]),new THREE.Vector3(t,u,n),new THREE.Vector3(la,ma,p),new THREE.Vector3(na,v,b)],null, -m))}function y(b){var c,e,f,h;c=g(a,b);e=g(a,b+P);f=g(a,b+T);b=D[c*2];h=D[c*2+1];c=D[e*2];var l=z.faceVertexUvs[0];e=D[e*2+1];var m=D[f*2];f=D[f*2+1];var o=[];o.push(new THREE.UV(b,h));o.push(new THREE.UV(c,e));o.push(new THREE.UV(m,f));l.push(o)}function t(b){var c,e,f,h,l,m;c=g(a,b);e=g(a,b+X);f=g(a,b+R);h=g(a,b+S);b=D[c*2];l=D[c*2+1];c=D[e*2];m=D[e*2+1];e=D[f*2];var o=z.faceVertexUvs[0];f=D[f*2+1];var n=D[h*2];h=D[h*2+1];var p=[];p.push(new THREE.UV(b,l));p.push(new THREE.UV(c,m));p.push(new THREE.UV(e, -f));p.push(new THREE.UV(n,h));o.push(p)}var z=this,x=0,w,A=[],D=[],B,E,I,G,K,C,F,J,M,N,L,O,H,Q,P,T,X,R,S,W,U,Z,Y,$,V;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(z,e,b);w={signature:a.substr(x,8),header_bytes:n(a,x+8),vertex_coordinate_bytes:n(a,x+9),normal_coordinate_bytes:n(a,x+10),uv_coordinate_bytes:n(a,x+11),vertex_index_bytes:n(a,x+12),normal_index_bytes:n(a,x+13),uv_index_bytes:n(a,x+14),material_index_bytes:n(a,x+15),nvertices:g(a,x+16),nnormals:g(a,x+16+4),nuvs:g(a,x+16+ -8),ntri_flat:g(a,x+16+12),ntri_smooth:g(a,x+16+16),ntri_flat_uv:g(a,x+16+20),ntri_smooth_uv:g(a,x+16+24),nquad_flat:g(a,x+16+28),nquad_smooth:g(a,x+16+32),nquad_flat_uv:g(a,x+16+36),nquad_smooth_uv:g(a,x+16+40)};x+=w.header_bytes;B=w.vertex_index_bytes;E=w.vertex_index_bytes*2;I=w.vertex_index_bytes*3;G=w.vertex_index_bytes*3+w.material_index_bytes;K=w.vertex_index_bytes*3+w.material_index_bytes+w.normal_index_bytes;C=w.vertex_index_bytes*3+w.material_index_bytes+w.normal_index_bytes*2;F=w.vertex_index_bytes; -J=w.vertex_index_bytes*2;M=w.vertex_index_bytes*3;N=w.vertex_index_bytes*4;L=w.vertex_index_bytes*4+w.material_index_bytes;O=w.vertex_index_bytes*4+w.material_index_bytes+w.normal_index_bytes;H=w.vertex_index_bytes*4+w.material_index_bytes+w.normal_index_bytes*2;Q=w.vertex_index_bytes*4+w.material_index_bytes+w.normal_index_bytes*3;P=w.uv_index_bytes;T=w.uv_index_bytes*2;X=w.uv_index_bytes;R=w.uv_index_bytes*2;S=w.uv_index_bytes*3;b=w.vertex_index_bytes*3+w.material_index_bytes;V=w.vertex_index_bytes* -4+w.material_index_bytes;W=w.ntri_flat*b;U=w.ntri_smooth*(b+w.normal_index_bytes*3);Z=w.ntri_flat_uv*(b+w.uv_index_bytes*3);Y=w.ntri_smooth_uv*(b+w.normal_index_bytes*3+w.uv_index_bytes*3);$=w.nquad_flat*V;b=w.nquad_smooth*(V+w.normal_index_bytes*4);V=w.nquad_flat_uv*(V+w.uv_index_bytes*4);x+=function(b){for(var e,h,g,k=w.vertex_coordinate_bytes*3,l=b+w.nvertices*k;b=0){v=l.invBindMatrices[p];m.invBindMatrix=v;m.skinningMatrix=new THREE.Matrix4;m.skinningMatrix.multiply(m.world,v);m.weights=[];for(v=0;v1){l=new THREE.MeshFaceMaterial;for(j=0;j1?b.add(l):b=l}}b.name=a.id||"";a.matrix.decompose(b.position,b.rotation,b.scale);for(f=0;f1?c[1].substr(0,b):"0";c[1].length=0,g=f.indexOf("(")>=0,k;if(h)e=f.split("."),f=e.shift(),e.shift();else if(g){k=f.split("(");f=k.shift();for(e=0;eb){n=m.output[l];break}g=n!==void 0?n instanceof THREE.Matrix4?g.multiply(g,n):g.multiply(g,k.matrix):g.multiply(g,k.matrix)}else g=g.multiply(g,k.matrix);b=g;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};o.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a0&&(this[c.nodeName]=parseFloat(e[0].textContent))}}this.create();return this};K.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var e=this[c];if(e instanceof G)if(e.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source== -this.effect.surface.sid&&(e=fa[this.effect.surface.init_from]))a.map=THREE.ImageUtils.loadTexture(ja+e.init_from),a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}else c=="diffuse"?a.color=e.color.getHex():b||(a[c]=e.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=ka;return this.material=new THREE.MeshLambertMaterial(a)};C.prototype.parse=function(a){for(var b= -0;b=0,e=a.indexOf("(")>=0,f,h;if(c)b=a.split("."),a=b.shift(),h=b.shift();else if(e){f=a.split("(");a=f.shift();for(b=0;b>7)-127;e|=(f&127)<<16|g<<8;if(e==0&&k==-127)return 0;return(1-2*(h>>7))*(1+e*Math.pow(2,-23))*Math.pow(2,k)}function f(a,b){var c=n(a,b),e=n(a,b+1),g=n(a,b+2);return(n(a,b+3)<<24)+(g<<16)+(e<<8)+c}function l(a,b){var c=n(a,b);return(n(a,b+1)<<8)+c}function m(a,b){var c=n(a,b);return c>127?c-256:c}function n(a,b){return a.charCodeAt(b)&255}function o(b){var c, +e,g;c=f(a,b);e=f(a,b+B);g=f(a,b+E);b=l(a,b+I);y.faces.push(new THREE.Face3(c,e,g,null,null,b))}function u(b){var c,e,g,h,m,n,o;c=f(a,b);e=f(a,b+B);g=f(a,b+E);h=l(a,b+I);m=f(a,b+G);n=f(a,b+L);o=f(a,b+C);var b=A[n*3],p=A[n*3+1];n=A[n*3+2];var t=A[o*3],u=A[o*3+1];o=A[o*3+2];y.faces.push(new THREE.Face3(c,e,g,[new THREE.Vector3(A[m*3],A[m*3+1],A[m*3+2]),new THREE.Vector3(b,p,n),new THREE.Vector3(t,u,o)],null,h))}function t(b){var c,e,g,h;c=f(a,b);e=f(a,b+F);g=f(a,b+J);h=f(a,b+M);b=l(a,b+N);y.faces.push(new THREE.Face4(c, +e,g,h,null,null,b))}function z(b){var c,e,g,h,m,n,o,p,t;c=f(a,b);e=f(a,b+F);g=f(a,b+J);h=f(a,b+M);m=l(a,b+N);n=f(a,b+K);o=f(a,b+P);p=f(a,b+H);t=f(a,b+Q);var b=A[o*3],u=A[o*3+1];o=A[o*3+2];var la=A[p*3],ma=A[p*3+1];p=A[p*3+2];var na=A[t*3],v=A[t*3+1];t=A[t*3+2];y.faces.push(new THREE.Face4(c,e,g,h,[new THREE.Vector3(A[n*3],A[n*3+1],A[n*3+2]),new THREE.Vector3(b,u,o),new THREE.Vector3(la,ma,p),new THREE.Vector3(na,v,t)],null,m))}function v(b){var c,e,g,h;c=f(a,b);e=f(a,b+O);g=f(a,b+R);b=D[c*2];h=D[c* +2+1];c=D[e*2];var l=y.faceVertexUvs[0];e=D[e*2+1];var m=D[g*2];g=D[g*2+1];var o=[];o.push(new THREE.UV(b,h));o.push(new THREE.UV(c,e));o.push(new THREE.UV(m,g));l.push(o)}function p(b){var c,e,g,h,l,m;c=f(a,b);e=f(a,b+U);g=f(a,b+S);h=f(a,b+T);b=D[c*2];l=D[c*2+1];c=D[e*2];m=D[e*2+1];e=D[g*2];var o=y.faceVertexUvs[0];g=D[g*2+1];var n=D[h*2];h=D[h*2+1];var p=[];p.push(new THREE.UV(b,l));p.push(new THREE.UV(c,m));p.push(new THREE.UV(e,g));p.push(new THREE.UV(n,h));o.push(p)}var y=this,x=0,w,A=[],D=[], +B,E,I,G,L,C,F,J,M,N,K,P,H,Q,O,R,U,S,T,X,V,Z,Y,$,W;THREE.Geometry.call(this);THREE.Loader.prototype.initMaterials(y,e,b);w={signature:a.substr(x,8),header_bytes:n(a,x+8),vertex_coordinate_bytes:n(a,x+9),normal_coordinate_bytes:n(a,x+10),uv_coordinate_bytes:n(a,x+11),vertex_index_bytes:n(a,x+12),normal_index_bytes:n(a,x+13),uv_index_bytes:n(a,x+14),material_index_bytes:n(a,x+15),nvertices:f(a,x+16),nnormals:f(a,x+16+4),nuvs:f(a,x+16+8),ntri_flat:f(a,x+16+12),ntri_smooth:f(a,x+16+16),ntri_flat_uv:f(a, +x+16+20),ntri_smooth_uv:f(a,x+16+24),nquad_flat:f(a,x+16+28),nquad_smooth:f(a,x+16+32),nquad_flat_uv:f(a,x+16+36),nquad_smooth_uv:f(a,x+16+40)};x+=w.header_bytes;B=w.vertex_index_bytes;E=w.vertex_index_bytes*2;I=w.vertex_index_bytes*3;G=w.vertex_index_bytes*3+w.material_index_bytes;L=w.vertex_index_bytes*3+w.material_index_bytes+w.normal_index_bytes;C=w.vertex_index_bytes*3+w.material_index_bytes+w.normal_index_bytes*2;F=w.vertex_index_bytes;J=w.vertex_index_bytes*2;M=w.vertex_index_bytes*3;N=w.vertex_index_bytes* +4;K=w.vertex_index_bytes*4+w.material_index_bytes;P=w.vertex_index_bytes*4+w.material_index_bytes+w.normal_index_bytes;H=w.vertex_index_bytes*4+w.material_index_bytes+w.normal_index_bytes*2;Q=w.vertex_index_bytes*4+w.material_index_bytes+w.normal_index_bytes*3;O=w.uv_index_bytes;R=w.uv_index_bytes*2;U=w.uv_index_bytes;S=w.uv_index_bytes*2;T=w.uv_index_bytes*3;b=w.vertex_index_bytes*3+w.material_index_bytes;W=w.vertex_index_bytes*4+w.material_index_bytes;X=w.ntri_flat*b;V=w.ntri_smooth*(b+w.normal_index_bytes* +3);Z=w.ntri_flat_uv*(b+w.uv_index_bytes*3);Y=w.ntri_smooth_uv*(b+w.normal_index_bytes*3+w.uv_index_bytes*3);$=w.nquad_flat*W;b=w.nquad_smooth*(W+w.normal_index_bytes*4);W=w.nquad_flat_uv*(W+w.uv_index_bytes*4);x+=function(b){for(var e,f,h,k=w.vertex_coordinate_bytes*3,l=b+w.nvertices*k;b=0){v=l.invBindMatrices[p];m.invBindMatrix=v;m.skinningMatrix=new THREE.Matrix4;m.skinningMatrix.multiply(m.world,v);m.weights=[];for(v=0;v1){l=new THREE.MeshFaceMaterial;for(j=0;j1?c[1].substr(0,b):"0";c[1].length=0,h=g.indexOf("(")>=0,k;if(f)e=g.split("."),g=e.shift(),e.shift();else if(h){k=g.split("(");g=k.shift();for(e=0;eb){n=m.output[l];break}h=n!==void 0?n instanceof THREE.Matrix4?h.multiply(h,n):h.multiply(h,k.matrix):h.multiply(h,k.matrix)}else h=h.multiply(h,k.matrix);b=h;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix(); +return this};o.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a0&&(this[c.nodeName]=parseFloat(e[0].textContent))}}this.create();return this};L.prototype.create=function(){var a={},b=this.transparency!== +void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var e=this[c];if(e instanceof G)if(e.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(e=fa[this.effect.surface.init_from]))a.map=THREE.ImageUtils.loadTexture(ja+e.init_from),a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}else c=="diffuse"?a.color=e.color.getHex():b||(a[c]= +e.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=ka;return this.material=new THREE.MeshLambertMaterial(a)};C.prototype.parse=function(a){for(var b=0;b=0,e=a.indexOf("(")>=0,g,f;if(c)b=a.split("."),a=b.shift(),f=b.shift();else if(e){g=a.split("(");a=g.shift();for(b=0;b1&&(K=[new THREE.MeshFaceMaterial]);object=new THREE.Mesh(B,K);object.name=u;object.position.set(w[0],w[1],w[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=x.visible;H.scene.add(object);H.objects[u]=object;x.meshCollider&&(a=THREE.CollisionUtils.MeshColliderWBox(object),H.scene.collisions.colliders.push(a)); -if(x.castsShadow)a=new THREE.ShadowVolume(B),H.scene.add(a),a.position=object.position,a.rotation=object.rotation,a.scale=object.scale;x.trigger&&x.trigger.toLowerCase()!="none"&&(a={type:x.trigger,object:x},H.triggers[object.name]=a)}}else w=x.position,r=x.rotation,q=x.quaternion,s=x.scale,q=0,object=new THREE.Object3D,object.name=u,object.position.set(w[0],w[1],w[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0], -s[1],s[2]),object.visible=x.visible!==void 0?x.visible:!1,H.scene.add(object),H.objects[u]=object,H.empties[u]=object,x.trigger&&x.trigger.toLowerCase()!="none"&&(a={type:x.trigger,object:x},H.triggers[object.name]=a)}function l(a){return function(c){H.geometries[a]=c;k();M-=1;b.onLoadComplete();n()}}function m(a){return function(b){H.geometries[a]=b}}function n(){b.callbackProgress({totalModels:L,totalTextures:O,loadedModels:L-M,loadedTextures:O-N},H);b.onLoadProgress();M==0&&N==0&&c(H)}var o,p, -u,v,y,t,z,x,w,A,D,B,E,I,G,K,C,F,J,M,N,L,O,H;F=a.data;G=new THREE.BinaryLoader;J=new THREE.JSONLoader;N=M=0;H={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};a=!1;for(u in F.objects)if(x=F.objects[u],x.meshCollider){a=!0;break}if(a)H.scene.collisions=new THREE.CollisionSystem;if(F.transform){a=F.transform.position;A=F.transform.rotation;var Q=F.transform.scale;a&&H.scene.position.set(a[0],a[1],a[2]);A&&H.scene.rotation.set(A[0], -A[1],A[2]);Q&&H.scene.scale.set(Q[0],Q[1],Q[2]);(a||A||Q)&&H.scene.updateMatrix()}a=function(){N-=1;n();b.onLoadComplete()};for(y in F.cameras)A=F.cameras[y],A.type=="perspective"?E=new THREE.PerspectiveCamera(A.fov,A.aspect,A.near,A.far):A.type=="ortho"&&(E=new THREE.OrthographicCamera(A.left,A.right,A.top,A.bottom,A.near,A.far)),w=A.position,A=A.target,E.position.set(w[0],w[1],w[2]),E.target=new THREE.Vector3(A[0],A[1],A[2]),H.cameras[y]=E;for(v in F.lights)y=F.lights[v],E=y.color!==void 0?y.color: -16777215,A=y.intensity!==void 0?y.intensity:1,y.type=="directional"?(w=y.direction,C=new THREE.DirectionalLight(E,A),C.position.set(w[0],w[1],w[2]),C.position.normalize()):y.type=="point"?(w=y.position,d=y.distance,C=new THREE.PointLight(E,A,d),C.position.set(w[0],w[1],w[2])):y.type=="ambient"&&(C=new THREE.AmbientLight(E)),H.scene.add(C),H.lights[v]=C;for(t in F.fogs)v=F.fogs[t],v.type=="linear"?I=new THREE.Fog(0,v.near,v.far):v.type=="exp2"&&(I=new THREE.FogExp2(0,v.density)),A=v.color,I.color.setRGB(A[0], -A[1],A[2]),H.fogs[t]=I;if(H.cameras&&F.defaults.camera)H.currentCamera=H.cameras[F.defaults.camera];if(H.fogs&&F.defaults.fog)H.scene.fog=H.fogs[F.defaults.fog];A=F.defaults.bgcolor;H.bgColor=new THREE.Color;H.bgColor.setRGB(A[0],A[1],A[2]);H.bgColorAlpha=F.defaults.bgalpha;for(o in F.geometries)if(t=F.geometries[o],t.type=="bin_mesh"||t.type=="ascii_mesh")M+=1,b.onLoadStart();L=M;for(o in F.geometries)t=F.geometries[o],t.type=="cube"?(B=new THREE.CubeGeometry(t.width,t.height,t.depth,t.segmentsWidth, -t.segmentsHeight,t.segmentsDepth,null,t.flipped,t.sides),H.geometries[o]=B):t.type=="plane"?(B=new THREE.PlaneGeometry(t.width,t.height,t.segmentsWidth,t.segmentsHeight),H.geometries[o]=B):t.type=="sphere"?(B=new THREE.SphereGeometry(t.radius,t.segmentsWidth,t.segmentsHeight),H.geometries[o]=B):t.type=="cylinder"?(B=new THREE.CylinderGeometry(t.topRad,t.botRad,t.height,t.radSegs,t.heightSegs),H.geometries[o]=B):t.type=="torus"?(B=new THREE.TorusGeometry(t.radius,t.tube,t.segmentsR,t.segmentsT),H.geometries[o]= -B):t.type=="icosahedron"?(B=new THREE.IcosahedronGeometry(t.subdivisions),H.geometries[o]=B):t.type=="bin_mesh"?G.load({model:e(t.url,F.urlBaseType),callback:l(o)}):t.type=="ascii_mesh"?J.load({model:e(t.url,F.urlBaseType),callback:l(o)}):t.type=="embedded_mesh"&&(t=F.embeds[t.id])&&J.createModel(t,m(o),"");for(z in F.textures)if(o=F.textures[z],o.url instanceof Array){N+=o.url.length;for(G=0;G=57344&&(c-=2048);c++;for(var b=new Float32Array(8*c),e=1,g=0;g<8;g++){for(var h=0,f=0;f>1^-(k&1);b[8*f+g]=h}e+=c}c=a.length-e;h=new Uint16Array(c);for(g=f=0;g1&&(L=new THREE.MeshFaceMaterial);object=new THREE.Mesh(B,L);object.name=t;object.position.set(w[0],w[1],w[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=x.visible;H.scene.add(object);H.objects[t]=object;x.meshCollider&&(a=THREE.CollisionUtils.MeshColliderWBox(object),H.scene.collisions.colliders.push(a));if(x.castsShadow)a= +new THREE.ShadowVolume(B),H.scene.add(a),a.position=object.position,a.rotation=object.rotation,a.scale=object.scale;x.trigger&&x.trigger.toLowerCase()!="none"&&(a={type:x.trigger,object:x},H.triggers[object.name]=a)}}else w=x.position,r=x.rotation,q=x.quaternion,s=x.scale,q=0,object=new THREE.Object3D,object.name=t,object.position.set(w[0],w[1],w[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0],s[1],s[2]),object.visible= +x.visible!==void 0?x.visible:!1,H.scene.add(object),H.objects[t]=object,H.empties[t]=object,x.trigger&&x.trigger.toLowerCase()!="none"&&(a={type:x.trigger,object:x},H.triggers[object.name]=a)}function l(a){return function(c){H.geometries[a]=c;k();M-=1;b.onLoadComplete();n()}}function m(a){return function(b){H.geometries[a]=b}}function n(){b.callbackProgress({totalModels:K,totalTextures:P,loadedModels:K-M,loadedTextures:P-N},H);b.onLoadProgress();M==0&&N==0&&c(H)}var o,u,t,z,v,p,y,x,w,A,D,B,E,I,G, +L,C,F,J,M,N,K,P,H;F=a.data;G=new THREE.BinaryLoader;J=new THREE.JSONLoader;N=M=0;H={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};a=!1;for(t in F.objects)if(x=F.objects[t],x.meshCollider){a=!0;break}if(a)H.scene.collisions=new THREE.CollisionSystem;if(F.transform){a=F.transform.position;A=F.transform.rotation;var Q=F.transform.scale;a&&H.scene.position.set(a[0],a[1],a[2]);A&&H.scene.rotation.set(A[0],A[1],A[2]);Q&&H.scene.scale.set(Q[0], +Q[1],Q[2]);(a||A||Q)&&H.scene.updateMatrix()}a=function(){N-=1;n();b.onLoadComplete()};for(v in F.cameras)A=F.cameras[v],A.type=="perspective"?E=new THREE.PerspectiveCamera(A.fov,A.aspect,A.near,A.far):A.type=="ortho"&&(E=new THREE.OrthographicCamera(A.left,A.right,A.top,A.bottom,A.near,A.far)),w=A.position,A=A.target,E.position.set(w[0],w[1],w[2]),E.target=new THREE.Vector3(A[0],A[1],A[2]),H.cameras[v]=E;for(z in F.lights)v=F.lights[z],E=v.color!==void 0?v.color:16777215,A=v.intensity!==void 0?v.intensity: +1,v.type=="directional"?(w=v.direction,C=new THREE.DirectionalLight(E,A),C.position.set(w[0],w[1],w[2]),C.position.normalize()):v.type=="point"?(w=v.position,d=v.distance,C=new THREE.PointLight(E,A,d),C.position.set(w[0],w[1],w[2])):v.type=="ambient"&&(C=new THREE.AmbientLight(E)),H.scene.add(C),H.lights[z]=C;for(p in F.fogs)z=F.fogs[p],z.type=="linear"?I=new THREE.Fog(0,z.near,z.far):z.type=="exp2"&&(I=new THREE.FogExp2(0,z.density)),A=z.color,I.color.setRGB(A[0],A[1],A[2]),H.fogs[p]=I;if(H.cameras&& +F.defaults.camera)H.currentCamera=H.cameras[F.defaults.camera];if(H.fogs&&F.defaults.fog)H.scene.fog=H.fogs[F.defaults.fog];A=F.defaults.bgcolor;H.bgColor=new THREE.Color;H.bgColor.setRGB(A[0],A[1],A[2]);H.bgColorAlpha=F.defaults.bgalpha;for(o in F.geometries)if(p=F.geometries[o],p.type=="bin_mesh"||p.type=="ascii_mesh")M+=1,b.onLoadStart();K=M;for(o in F.geometries)p=F.geometries[o],p.type=="cube"?(B=new THREE.CubeGeometry(p.width,p.height,p.depth,p.segmentsWidth,p.segmentsHeight,p.segmentsDepth, +null,p.flipped,p.sides),H.geometries[o]=B):p.type=="plane"?(B=new THREE.PlaneGeometry(p.width,p.height,p.segmentsWidth,p.segmentsHeight),H.geometries[o]=B):p.type=="sphere"?(B=new THREE.SphereGeometry(p.radius,p.segmentsWidth,p.segmentsHeight),H.geometries[o]=B):p.type=="cylinder"?(B=new THREE.CylinderGeometry(p.topRad,p.botRad,p.height,p.radSegs,p.heightSegs),H.geometries[o]=B):p.type=="torus"?(B=new THREE.TorusGeometry(p.radius,p.tube,p.segmentsR,p.segmentsT),H.geometries[o]=B):p.type=="icosahedron"? +(B=new THREE.IcosahedronGeometry(p.subdivisions),H.geometries[o]=B):p.type=="bin_mesh"?G.load(e(p.url,F.urlBaseType),l(o)):p.type=="ascii_mesh"?J.load(e(p.url,F.urlBaseType),l(o)):p.type=="embedded_mesh"&&(p=F.embeds[p.id])&&J.createModel(p,m(o),"");for(y in F.textures)if(o=F.textures[y],o.url instanceof Array){N+=o.url.length;for(G=0;G=57344&&(c-=2048);c++;for(var b=new Float32Array(8*c),e=1,f=0;f<8;f++){for(var h=0,g=0;g>1^-(k&1);b[8*g+f]=h}e+=c}c=a.length-e;h=new Uint16Array(c);for(f=g=0;f=this.maxCount-3&&k(this)};this.begin=function(){this.count=0; -this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!=0){for(var c=this.count*3;cthis.size-1&&(l=this.size-1);var p=Math.floor(m-k);p<1&&(p=1);m=Math.floor(m+k);m>this.size-1&&(m=this.size-1);var u=Math.floor(n-k);u<1&&(u=1);k=Math.floor(n+k);k>this.size-1&&(k=this.size- -1);for(var v,y,t,z,x,w;o0&&(this.field[t+v]+=z)}}};this.addPlaneX=function(a,c){var g,h,f,k,l,m=this.size,n=this.yd,o=this.zd,p=this.field,u=m*Math.sqrt(a/c);u>m&&(u=m);for(g=0;g0)for(h=0;hn&&(v=n);for(h=0;h0){l=h*o;for(g=0;gsize&&(dist=size);for(f=0;f0){l=zd*f;for(h=0;h=this.maxCount-3&&k(this)};this.begin= +function(){this.count=0;this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var c=this.count*3;cthis.size-1&&(l=this.size-1);var u=Math.floor(m-k);u<1&&(u=1);m=Math.floor(m+k);m>this.size-1&&(m=this.size-1);var t=Math.floor(n-k);t<1&&(t=1);k=Math.floor(n+k); +k>this.size-1&&(k=this.size-1);for(var z,v,p,y,x,w;o0&&(this.field[p+z]+=y)}}};this.addPlaneX=function(a,c){var f,h,g,k,l,m=this.size,n=this.yd,o=this.zd,u=this.field,t=m*Math.sqrt(a/c);t>m&&(t=m);for(f=0;f0)for(h=0;hn&&(z=n);for(h=0;h0){l=h*o;for(f=0;fsize&&(dist=size);for(g=0;g0){l=zd*g;for(h=0;hh?this.hits.push(g):this.hits.unshift(g),h=e;return this.hits}; +THREE.CollisionSystem.prototype.rayCastAll=function(a){a.direction.normalize();this.hits.length=0;var c,b,e,f,h=0;c=0;for(b=this.colliders.length;ch?this.hits.push(f):this.hits.unshift(f),h=e;return this.hits}; THREE.CollisionSystem.prototype.rayCastNearest=function(a){var c=this.rayCastAll(a);if(c.length==0)return null;for(var b=0;c[b]instanceof THREE.MeshCollider;){var e=this.rayMesh(a,c[b]);if(e.distc.length)return null;return c[b]}; THREE.CollisionSystem.prototype.rayCast=function(a,c){if(c instanceof THREE.PlaneCollider)return this.rayPlane(a,c);else if(c instanceof THREE.SphereCollider)return this.raySphere(a,c);else if(c instanceof THREE.BoxCollider)return this.rayBox(a,c);else if(c instanceof THREE.MeshCollider&&c.box)return this.rayBox(a,c.box)}; -THREE.CollisionSystem.prototype.rayMesh=function(a,c){for(var b=this.makeRayLocal(a,c.mesh),e=Number.MAX_VALUE,g,h=0;h=k*g))return Number.MAX_VALUE;f/=k;k=THREE.CollisionSystem.__v3;k.copy(a.direction);k.multiplyScalar(f);k.addSelf(a.origin);Math.abs(h.x)> -Math.abs(h.y)?Math.abs(h.x)>Math.abs(h.z)?(a=k.y-c.y,h=b.y-c.y,g=e.y-c.y,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,h=b.x-c.x,g=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y):Math.abs(h.y)>Math.abs(h.z)?(a=k.x-c.x,h=b.x-c.x,g=e.x-c.x,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,h=b.x-c.x,g=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y);c=h*e-b*g;if(c==0)return Number.MAX_VALUE;c=1/c;e=(a*e-k*g)*c;if(!(e>=0))return Number.MAX_VALUE;c*=h*k-b*a;if(!(c>=0))return Number.MAX_VALUE;if(!(1-e-c>=0))return Number.MAX_VALUE;return f}; +THREE.CollisionSystem.prototype.rayMesh=function(a,c){for(var b=this.makeRayLocal(a,c.mesh),e=Number.MAX_VALUE,f,h=0;h=k*f))return Number.MAX_VALUE;g/=k;k=THREE.CollisionSystem.__v3;k.copy(a.direction);k.multiplyScalar(g);k.addSelf(a.origin);Math.abs(h.x)> +Math.abs(h.y)?Math.abs(h.x)>Math.abs(h.z)?(a=k.y-c.y,h=b.y-c.y,f=e.y-c.y,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,h=b.x-c.x,f=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y):Math.abs(h.y)>Math.abs(h.z)?(a=k.x-c.x,h=b.x-c.x,f=e.x-c.x,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,h=b.x-c.x,f=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y);c=h*e-b*f;if(c==0)return Number.MAX_VALUE;c=1/c;e=(a*e-k*f)*c;if(!(e>=0))return Number.MAX_VALUE;c*=h*k-b*a;if(!(c>=0))return Number.MAX_VALUE;if(!(1-e-c>=0))return Number.MAX_VALUE;return g}; THREE.CollisionSystem.prototype.makeRayLocal=function(a,c){var b=THREE.CollisionSystem.__m;THREE.Matrix4.makeInvert(c.matrixWorld,b);var e=THREE.CollisionSystem.__r;e.origin.copy(a.origin);e.direction.copy(a.direction);b.multiplyVector3(e.origin);b.rotateAxis(e.direction);e.direction.normalize();return e}; -THREE.CollisionSystem.prototype.rayBox=function(a,c){var b;c.dynamic&&c.mesh&&c.mesh.matrixWorld?b=this.makeRayLocal(a,c.mesh):(b=THREE.CollisionSystem.__r,b.origin.copy(a.origin),b.direction.copy(a.direction));var e=0,g=0,h=0,f=0,k=0,l=0,m=!0;b.origin.xc.max.x&&(e=c.max.x-b.origin.x,e/=b.direction.x,m=!1,f=1);b.origin.yc.max.y&&(g=c.max.y-b.origin.y,g/=b.direction.y, -m=!1,k=1);b.origin.zc.max.z&&(h=c.max.z-b.origin.z,h/=b.direction.z,m=!1,l=1);if(m)return-1;m=0;g>e&&(m=1,e=g);h>e&&(m=2,e=h);switch(m){case 0:k=b.origin.y+b.direction.y*e;if(kc.max.y)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(f,0,0);break;case 1:f=b.origin.x+b.direction.x*e;if(fc.max.x)return Number.MAX_VALUE;b=b.origin.z+b.direction.z* -e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(0,k,0);break;case 2:f=b.origin.x+b.direction.x*e;if(fc.max.x)return Number.MAX_VALUE;k=b.origin.y+b.direction.y*e;if(kc.max.y)return Number.MAX_VALUE;c.normal.set(0,0,l)}return e};THREE.CollisionSystem.prototype.rayPlane=function(a,c){var b=a.direction.dot(c.normal),e=c.point.dot(c.normal);if(b<0)b=(e-a.origin.dot(c.normal))/b;else return Number.MAX_VALUE;return b>0?b:Number.MAX_VALUE}; +THREE.CollisionSystem.prototype.rayBox=function(a,c){var b;c.dynamic&&c.mesh&&c.mesh.matrixWorld?b=this.makeRayLocal(a,c.mesh):(b=THREE.CollisionSystem.__r,b.origin.copy(a.origin),b.direction.copy(a.direction));var e=0,f=0,h=0,g=0,k=0,l=0,m=!0;b.origin.xc.max.x&&(e=c.max.x-b.origin.x,e/=b.direction.x,m=!1,g=1);b.origin.yc.max.y&&(f=c.max.y-b.origin.y,f/=b.direction.y, +m=!1,k=1);b.origin.zc.max.z&&(h=c.max.z-b.origin.z,h/=b.direction.z,m=!1,l=1);if(m)return-1;m=0;f>e&&(m=1,e=f);h>e&&(m=2,e=h);switch(m){case 0:k=b.origin.y+b.direction.y*e;if(kc.max.y)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(g,0,0);break;case 1:g=b.origin.x+b.direction.x*e;if(gc.max.x)return Number.MAX_VALUE;b=b.origin.z+b.direction.z* +e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(0,k,0);break;case 2:g=b.origin.x+b.direction.x*e;if(gc.max.x)return Number.MAX_VALUE;k=b.origin.y+b.direction.y*e;if(kc.max.y)return Number.MAX_VALUE;c.normal.set(0,0,l)}return e};THREE.CollisionSystem.prototype.rayPlane=function(a,c){var b=a.direction.dot(c.normal),e=c.point.dot(c.normal);if(b<0)b=(e-a.origin.dot(c.normal))/b;else return Number.MAX_VALUE;return b>0?b:Number.MAX_VALUE}; THREE.CollisionSystem.prototype.raySphere=function(a,c){var b=c.center.clone().subSelf(a.origin);if(b.lengthSq=0)return Math.abs(e)-Math.sqrt(b);return Number.MAX_VALUE};THREE.CollisionSystem.__v1=new THREE.Vector3;THREE.CollisionSystem.__v2=new THREE.Vector3;THREE.CollisionSystem.__v3=new THREE.Vector3;THREE.CollisionSystem.__nr=new THREE.Vector3;THREE.CollisionSystem.__m=new THREE.Matrix4; THREE.CollisionSystem.__r=new THREE.Ray;THREE.CollisionUtils={};THREE.CollisionUtils.MeshOBB=function(a){a.geometry.computeBoundingBox();var c=a.geometry.boundingBox,b=new THREE.Vector3(c.x[0],c.y[0],c.z[0]),c=new THREE.Vector3(c.x[1],c.y[1],c.z[1]),b=new THREE.BoxCollider(b,c);b.mesh=a;return b};THREE.CollisionUtils.MeshAABB=function(a){var c=THREE.CollisionUtils.MeshOBB(a);c.min.addSelf(a.position);c.max.addSelf(a.position);c.dynamic=!1;return c}; THREE.CollisionUtils.MeshColliderWBox=function(a){return new THREE.MeshCollider(a,THREE.CollisionUtils.MeshOBB(a))}; -if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);var c=this,b=this.setSize,e=this.render,g=new THREE.PerspectiveCamera,h=new THREE.PerspectiveCamera,f=new THREE.Matrix4,k=new THREE.Matrix4,l,m,n;g.matrixAutoUpdate=h.matrixAutoUpdate=!1;var a={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},o=new THREE.WebGLRenderTarget(512,512,a),p=new THREE.WebGLRenderTarget(512,512,a),u=new THREE.PerspectiveCamera(53,1,1,1E4);u.position.z= -2;_material=new THREE.ShaderMaterial({uniforms:{mapLeft:{type:"t",value:0,texture:o},mapRight:{type:"t",value:1,texture:p}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D mapLeft;\nuniform sampler2D mapRight;\nvarying vec2 vUv;\nvoid main() {\nvec4 colorL, colorR;\nvec2 uv = vUv;\ncolorL = texture2D( mapLeft, uv );\ncolorR = texture2D( mapRight, uv );\ngl_FragColor = vec4( colorL.g * 0.7 + colorL.b * 0.3, colorR.g, colorR.b, colorL.a + colorR.a ) * 1.1;\n}"}); -var v=new THREE.Scene;v.add(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));this.setSize=function(a,e){b.call(c,a,e);o.width=a;o.height=e;p.width=a;p.height=e};this.render=function(a,b){b.update(null,!0);if(l!==b.aspect||m!==b.near||n!==b.fov){l=b.aspect;m=b.near;n=b.fov;var z=b.projectionMatrix.clone(),x=125/30*0.5,w=x*m/125,A=m*Math.tan(n*Math.PI/360),D;f.n14=x;k.n14=-x;x=-A*l+w;D=A*l+w;z.n11=2*m/(D-x);z.n13=(D+x)/(D-x);g.projectionMatrix=z.clone();x=-A*l-w;D=A*l-w;z.n11=2*m/(D-x);z.n13= -(D+x)/(D-x);h.projectionMatrix=z.clone()}g.matrix=b.matrixWorld.clone().multiplySelf(k);g.update(null,!0);g.position.copy(b.position);g.near=m;g.far=b.far;e.call(c,a,g,o,!0);h.matrix=b.matrixWorld.clone().multiplySelf(f);h.update(null,!0);h.position.copy(b.position);h.near=m;h.far=b.far;e.call(c,a,h,p,!0);e.call(c,v,u)}}; -if(THREE.WebGLRenderer)THREE.CrosseyedWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);this.autoClear=!1;var c=this,b=this.setSize,e=this.render,g,h,f=new THREE.PerspectiveCamera;f.target=new THREE.Vector3(0,0,0);var k=new THREE.PerspectiveCamera;k.target=new THREE.Vector3(0,0,0);c.separation=10;if(a&&a.separation!==void 0)c.separation=a.separation;this.setSize=function(a,e){b.call(c,a,e);g=a/2;h=e};this.render=function(a,b){this.clear();f.fov=b.fov;f.aspect=0.5*b.aspect;f.near=b.near;f.far= -b.far;f.updateProjectionMatrix();f.position.copy(b.position);f.target.copy(b.target);f.translateX(c.separation);f.lookAt(f.target);k.projectionMatrix=f.projectionMatrix;k.position.copy(b.position);k.target.copy(b.target);k.translateX(-c.separation);k.lookAt(k.target);this.setViewport(0,0,g,h);e.call(c,a,f);this.setViewport(g,0,g,h);e.call(c,a,k,!1)}}; +if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);var c=this,b=this.setSize,e=this.render,f=new THREE.PerspectiveCamera,h=new THREE.PerspectiveCamera,g=new THREE.Matrix4,k=new THREE.Matrix4,l,m,n;f.matrixAutoUpdate=h.matrixAutoUpdate=!1;var a={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},o=new THREE.WebGLRenderTarget(512,512,a),u=new THREE.WebGLRenderTarget(512,512,a),t=new THREE.PerspectiveCamera(53,1,1,1E4);t.position.z= +2;_material=new THREE.ShaderMaterial({uniforms:{mapLeft:{type:"t",value:0,texture:o},mapRight:{type:"t",value:1,texture:u}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D mapLeft;\nuniform sampler2D mapRight;\nvarying vec2 vUv;\nvoid main() {\nvec4 colorL, colorR;\nvec2 uv = vUv;\ncolorL = texture2D( mapLeft, uv );\ncolorR = texture2D( mapRight, uv );\ngl_FragColor = vec4( colorL.g * 0.7 + colorL.b * 0.3, colorR.g, colorR.b, colorL.a + colorR.a ) * 1.1;\n}"}); +var z=new THREE.Scene;z.add(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));this.setSize=function(a,e){b.call(c,a,e);o.width=a;o.height=e;u.width=a;u.height=e};this.render=function(a,b){b.update(null,!0);if(l!==b.aspect||m!==b.near||n!==b.fov){l=b.aspect;m=b.near;n=b.fov;var y=b.projectionMatrix.clone(),x=125/30*0.5,w=x*m/125,A=m*Math.tan(n*Math.PI/360),D;g.n14=x;k.n14=-x;x=-A*l+w;D=A*l+w;y.n11=2*m/(D-x);y.n13=(D+x)/(D-x);f.projectionMatrix=y.clone();x=-A*l-w;D=A*l-w;y.n11=2*m/(D-x);y.n13= +(D+x)/(D-x);h.projectionMatrix=y.clone()}f.matrix=b.matrixWorld.clone().multiplySelf(k);f.update(null,!0);f.position.copy(b.position);f.near=m;f.far=b.far;e.call(c,a,f,o,!0);h.matrix=b.matrixWorld.clone().multiplySelf(g);h.update(null,!0);h.position.copy(b.position);h.near=m;h.far=b.far;e.call(c,a,h,u,!0);e.call(c,z,t)}}; +if(THREE.WebGLRenderer)THREE.CrosseyedWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);this.autoClear=!1;var c=this,b=this.setSize,e=this.render,f,h,g=new THREE.PerspectiveCamera;g.target=new THREE.Vector3(0,0,0);var k=new THREE.PerspectiveCamera;k.target=new THREE.Vector3(0,0,0);c.separation=10;if(a&&a.separation!==void 0)c.separation=a.separation;this.setSize=function(a,e){b.call(c,a,e);f=a/2;h=e};this.render=function(a,b){this.clear();g.fov=b.fov;g.aspect=0.5*b.aspect;g.near=b.near;g.far= +b.far;g.updateProjectionMatrix();g.position.copy(b.position);g.target.copy(b.target);g.translateX(c.separation);g.lookAt(g.target);k.projectionMatrix=g.projectionMatrix;k.position.copy(b.position);k.target.copy(b.target);k.translateX(-c.separation);k.lookAt(k.target);this.setViewport(0,0,f,h);e.call(c,a,g);this.setViewport(f,0,f,h);e.call(c,a,k,!1)}}; diff --git a/build/custom/ThreeSVG.js b/build/custom/ThreeSVG.js index 886a22cb..891f0648 100644 --- a/build/custom/ThreeSVG.js +++ b/build/custom/ThreeSVG.js @@ -1,11 +1,11 @@ // ThreeSVG.js r46dev - http://github.com/mrdoob/three.js var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array;THREE.Color=function(a){a!==void 0&&this.setHex(a);return this}; -THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var d,f,e;if(c==0)this.r=this.g=this.b=0;else switch(d=Math.floor(a*6),f=a*6-d,a=c*(1-b),e=c*(1-b*f),b=c*(1-b*(1-f)),d){case 1:this.r=e;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=e;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r= -c;this.g=a;this.b=e;break;case 6:case 0:this.r=c,this.g=b,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}}; -THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var d,f,e;if(c===0)this.r=this.g=this.b=0;else switch(d=Math.floor(a*6),f=a*6-d,a=c*(1-b),e=c*(1- +b*f),b=c*(1-b*(1-f)),d){case 1:this.r=e;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=e;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r=c;this.g=a;this.b=e;break;case 6:case 0:this.r=c,this.g=b,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+ +Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this}, divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, -equals:function(a){return a.x==this.x&&a.y==this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +equals:function(a){return a.x===this.x&&a.y===this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this}, addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this}, divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a):this.set(0,0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)}, @@ -14,81 +14,83 @@ Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&e+a<1}for(var d,f=[],e=0,g=a.children.length;ea.scale.x)return[];d={distance:e,point:a.position,face:null,object:a};f.push(d)}else if(a instanceof THREE.Mesh){e=b(this.origin, -this.direction,a.matrixWorld.getPosition());if(e==null||e>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;var h,k,n,j,i,m,l,q,p=a.geometry,s=p.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);e=0;for(g=p.faces.length;e0:m<0)))if(m=i.dot((new THREE.Vector3).sub(h,l))/m,l=l.addSelf(q.multiplyScalar(m)),d instanceof THREE.Face3)c(l,h,k,n)&&(d={distance:this.origin.distanceTo(l),point:l,face:d,object:a},f.push(d));else if(d instanceof THREE.Face4&&(c(l,h,k,j)||c(l,k,n,j)))d={distance:this.origin.distanceTo(l), -point:l,face:d,object:a},f.push(d)}return f}}; -THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b,c,d,f,e,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,j,i){h=!1;b=e;c=g;d=j;f=i;a()};this.addPoint=function(e,g){h?(h=!1,b=e,c=g,d=e,f=g):(b=be?d:e,f=f>g?f:g);a()};this.add3Points= -function(e,g,j,i,m,l){h?(h=!1,b=ej?e>m?e:m:j>m?j:m,f=g>i?g>l?g:l:i>l?i:l):(b=ej?e>m?e>d?e:d:m>d?m:d:j>m?j>d?j:d:m>d?m:d,f=g>i?g>l?g>f?g:f:l>f?l:f:i>l?i>f?i:f:l>f?l:f);a()};this.addRectangle=function(e){h?(h=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> -e.getBottom()?f:e.getBottom());a()};this.inflate=function(e){b-=e;c-=e;d+=e;f+=e;a()};this.minSelf=function(e){b=b>e.getLeft()?b:e.getLeft();c=c>e.getTop()?c:e.getTop();d=d=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;f=d=c=b=0;a()};this.isEmpty=function(){return h}};THREE.Matrix3=function(){this.m=[]}; +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.objects)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&e+a<1}for(var d,f=[],e=0,g=a.children.length;ea.scale.x)return[];d={distance:e,point:a.position,face:null,object:a};f.push(d)}else if(a instanceof THREE.Mesh){e= +b(this.origin,this.direction,a.matrixWorld.getPosition());if(e===null||e>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;for(var i,k,h,j,m,n,l,p,q=a.geometry,v=q.vertices,e=0,g=q.faces.length;e0:n<0)))if(n=m.dot((new THREE.Vector3).sub(i,l))/n,l=l.addSelf(p.multiplyScalar(n)),d instanceof THREE.Face3)c(l,i,k,h)&&(d={distance:this.origin.distanceTo(l),point:l,face:d,object:a},f.push(d));else if(d instanceof THREE.Face4&&(c(l,i,k,j)||c(l,k,h,j)))d={distance:this.origin.distanceTo(l),point:l,face:d,object:a},f.push(d)}return f}}; +THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b,c,d,f,e,g,i=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,j,m){i=!1;b=e;c=g;d=j;f=m;a()};this.addPoint=function(e,g){i?(i=!1,b=e,c=g,d=e,f=g):(b=be?d:e,f=f>g?f:g);a()};this.add3Points= +function(e,g,j,m,n,l){i?(i=!1,b=ej?e>n?e:n:j>n?j:n,f=g>m?g>l?g:l:m>l?m:l):(b=ej?e>n?e>d?e:d:n>d?n:d:j>n?j>d?j:d:n>d?n:d,f=g>m?g>l?g>f?g:f:l>f?l:f:m>l?m>f?m:f:l>f?l:f);a()};this.addRectangle=function(e){i?(i=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> +e.getBottom()?f:e.getBottom());a()};this.inflate=function(e){b-=e;c-=e;d+=e;f+=e;a()};this.minSelf=function(e){b=b>e.getLeft()?b:e.getLeft();c=c>e.getTop()?c:e.getTop();d=d=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){i=!0;f=d=c=b=0;a()};this.isEmpty=function(){return i}};THREE.Matrix3=function(){this.m=[]}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b=this.m;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}}; -THREE.Matrix4=function(a,b,c,d,f,e,g,h,k,n,j,i,m,l,q,p){this.set(a!==void 0?a:1,b||0,c||0,d||0,f||0,e!==void 0?e:1,g||0,h||0,k||0,n||0,j!==void 0?j:1,i||0,m||0,l||0,q||0,p!==void 0?p:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,k,n,j,i,m,l,q,p){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=f;this.n22=e;this.n23=g;this.n24=h;this.n31=k;this.n32=n;this.n33=j;this.n34=i;this.n41=m;this.n42=l;this.n43=q;this.n44=p;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, -b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;e.sub(a,b).normalize();if(e.length()===0)e.z=1;d.cross(c,e).normalize();d.length()===0&&(e.x+=1.0E-4,d.cross(c,e).normalize());f.cross(e,d).normalize();this.n11=d.x;this.n12=f.x;this.n13=e.x;this.n21=d.y;this.n22=f.y;this.n23=e.y;this.n31=d.z;this.n32=f.z;this.n33=e.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,f=a.n13,e=a.n14,g=a.n21,h=a.n22,k=a.n23,n=a.n24,j=a.n31,i=a.n32,m=a.n33,l=a.n34,q=a.n41,p=a.n42,s=a.n43, -v=a.n44,x=b.n11,o=b.n12,C=b.n13,F=b.n14,r=b.n21,B=b.n22,H=b.n23,D=b.n24,y=b.n31,L=b.n32,G=b.n33,I=b.n34,w=b.n41,z=b.n42,J=b.n43,u=b.n44;this.n11=c*x+d*r+f*y+e*w;this.n12=c*o+d*B+f*L+e*z;this.n13=c*C+d*H+f*G+e*J;this.n14=c*F+d*D+f*I+e*u;this.n21=g*x+h*r+k*y+n*w;this.n22=g*o+h*B+k*L+n*z;this.n23=g*C+h*H+k*G+n*J;this.n24=g*F+h*D+k*I+n*u;this.n31=j*x+i*r+m*y+l*w;this.n32=j*o+i*B+m*L+l*z;this.n33=j*C+i*H+m*G+l*J;this.n34=j*F+i*D+m*I+l*u;this.n41=q*x+p*r+s*y+v*w;this.n42=q*o+p*B+s*L+v*z;this.n43=q*C+p* -H+s*G+v*J;this.n44=q*F+p*D+s*I+v*u;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= -a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,f=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*f;a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*f;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*f;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,f=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*f;a.y=this.n21*b+this.n22* -c+this.n23*d+this.n24*f;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*f;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*f;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33* -a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,f=this.n21,e=this.n22,g=this.n23,h=this.n24,k=this.n31,n=this.n32,j=this.n33,i=this.n34,m=this.n41,l=this.n42,q=this.n43,p=this.n44;return d*g*n*m-c*h*n*m-d*e*j*m+b*h*j*m+c*e*i*m-b*g*i*m-d*g*k*l+c*h*k*l+d*f*j*l-a*h*j*l-c*f*i*l+a*g*i*l+d*e*k*q-b*h*k*q-d*f*n*q+a*h*n*q+b*f*i*q-a*e*i*q-c*e*k*p+b*g*k*p+c*f*n*p-a*g*n*p-b*f*j*p+a*e*j*p},transpose:function(){var a; -a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42; -a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31; -a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34;a[b+15]=this.n44;return a}, -setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this}, -setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),f=1-c,e=a.x,g=a.y,h=a.z,k=f*e,n=f*g;this.set(k*e+c,k*g-d*h,k*h+d*g,0,k*g+d*h,n*g+c,n*h-d*e,0,k*h-d*g,n*h+d*e,f*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, -this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(a){var b=a.n11,c=a.n12,d=a.n13,f=a.n14,e=a.n21,g=a.n22,h=a.n23,k=a.n24,n=a.n31,j=a.n32,i=a.n33,m=a.n34,l=a.n41,q=a.n42,p=a.n43,s=a.n44;this.n11=h*m*q-k*i*q+k*j*p-g*m*p-h*j*s+g*i*s;this.n12=f*i*q-d*m*q-f*j*p+c*m*p+d*j*s-c*i*s;this.n13=d*k*q-f*h*q+f*g*p-c*k*p-d*g*s+c*h*s;this.n14=f*h*j-d*k*j-f*g*i+c*k*i+d*g*m-c*h*m;this.n21=k*i*l-h*m*l-k*n*p+e*m*p+h*n*s-e*i*s;this.n22=d*m*l-f*i*l+ -f*n*p-b*m*p-d*n*s+b*i*s;this.n23=f*h*l-d*k*l-f*e*p+b*k*p+d*e*s-b*h*s;this.n24=d*k*n-f*h*n+f*e*i-b*k*i-d*e*m+b*h*m;this.n31=g*m*l-k*j*l+k*n*q-e*m*q-g*n*s+e*j*s;this.n32=f*j*l-c*m*l-f*n*q+b*m*q+c*n*s-b*j*s;this.n33=d*k*l-f*g*l+f*e*q-b*k*q-c*e*s+b*g*s;this.n34=f*g*n-c*k*n-f*e*j+b*k*j+c*e*m-b*g*m;this.n41=h*j*l-g*i*l-h*n*q+e*i*q+g*n*p-e*j*p;this.n42=c*i*l-d*j*l+d*n*q-b*i*q-c*n*p+b*j*p;this.n43=d*g*l-c*h*l-d*e*q+b*h*q+c*e*p-b*g*p;this.n44=c*h*n-d*g*n+d*e*j-b*h*j-c*e*i+b*g*i;this.multiplyScalar(1/a.determinant()); -return this},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,f=a.z,e=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(f),f=Math.sin(f);switch(b){case "YXZ":var k=g*h,n=g*f,j=d*h,i=d*f;this.n11=k+i*c;this.n12=j*c-n;this.n13=e*d;this.n21=e*f;this.n22=e*h;this.n23=-c;this.n31=n*c-j;this.n32=i+k*c;this.n33=e*g;break;case "ZXY":k=g*h;n=g*f;j=d*h;i=d*f;this.n11=k-i*c;this.n12=-e*f;this.n13=j+n*c;this.n21=n+j*c;this.n22=e*h;this.n23=i-k*c;this.n31=-e*d;this.n32=c;this.n33=e*g;break;case "ZYX":k= -e*h;n=e*f;j=c*h;i=c*f;this.n11=g*h;this.n12=j*d-n;this.n13=k*d+i;this.n21=g*f;this.n22=i*d+k;this.n23=n*d-j;this.n31=-d;this.n32=c*g;this.n33=e*g;break;case "YZX":k=e*g;n=e*d;j=c*g;i=c*d;this.n11=g*h;this.n12=i-k*f;this.n13=j*f+n;this.n21=f;this.n22=e*h;this.n23=-c*h;this.n31=-d*h;this.n32=n*f+j;this.n33=k-i*f;break;case "XZY":k=e*g;n=e*d;j=c*g;i=c*d;this.n11=g*h;this.n12=-f;this.n13=d*h;this.n21=k*f+i;this.n22=e*h;this.n23=n*f-j;this.n31=j*f-n;this.n32=c*h;this.n33=i*f+k;break;default:k=e*h,n=e* -f,j=c*h,i=c*f,this.n11=g*h,this.n12=-g*f,this.n13=d,this.n21=n+j*d,this.n22=k-i*d,this.n23=-c*g,this.n31=i-k*d,this.n32=j+n*d,this.n33=e*g}return this},setRotationFromQuaternion:function(a){var b=a.x,c=a.y,d=a.z,f=a.w,e=b+b,g=c+c,h=d+d,a=b*e,k=b*g;b*=h;var n=c*g;c*=h;d*=h;e*=f;g*=f;f*=h;this.n11=1-(n+d);this.n12=k-f;this.n13=b+g;this.n21=k+f;this.n22=1-(a+d);this.n23=c-e;this.n31=b-g;this.n32=c+e;this.n33=1-(a+n);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*= -a;this.n21*=b;this.n22*=c;this.n23*=a;this.n31*=b;this.n32*=c;this.n33*=a;this.n41*=b;this.n42*=c;this.n43*=a;return this},compose:function(a,b,c){var d=THREE.Matrix4.__m1,f=THREE.Matrix4.__m2;d.identity();d.setRotationFromQuaternion(b);f.setScale(c.x,c.y,c.z);this.multiply(d,f);this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},decompose:function(a,b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;d.set(this.n11,this.n21,this.n31);f.set(this.n12,this.n22,this.n32);e.set(this.n13, -this.n23,this.n33);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=d.length();c.y=f.length();c.z=e.length();a.x=this.n14;a.y=this.n24;a.z=this.n34;d=THREE.Matrix4.__m1;d.copy(this);d.n11/=c.x;d.n21/=c.x;d.n31/=c.x;d.n12/=c.y;d.n22/=c.y;d.n32/=c.y;d.n13/=c.z;d.n23/=c.z;d.n33/=c.z;b.setFromRotationMatrix(d);return[a,b,c]},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34; -return this},extractRotation:function(a){var b=THREE.Matrix4.__v1,c=1/b.set(a.n11,a.n21,a.n31).length(),d=1/b.set(a.n12,a.n22,a.n32).length(),b=1/b.set(a.n13,a.n23,a.n33).length();this.n11=a.n11*c;this.n21=a.n21*c;this.n31=a.n31*c;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*b;this.n23=a.n23*b;this.n33=a.n33*b;return this}}; -THREE.Matrix4.makeInvert3x3=function(a){var b=a.m33,c=b.m,d=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,e=a.n32*a.n21-a.n31*a.n22,g=-a.n33*a.n12+a.n32*a.n13,h=a.n33*a.n11-a.n31*a.n13,k=-a.n32*a.n11+a.n31*a.n12,n=a.n23*a.n12-a.n22*a.n13,j=-a.n23*a.n11+a.n21*a.n13,i=a.n22*a.n11-a.n21*a.n12,a=a.n11*d+a.n21*g+a.n31*n;a==0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");a=1/a;c[0]=a*d;c[1]=a*f;c[2]=a*e;c[3]=a*g;c[4]=a*h;c[5]=a*k;c[6]=a*n;c[7]=a*j;c[8]=a*i;return b}; +THREE.Matrix4=function(a,b,c,d,f,e,g,i,k,h,j,m,n,l,p,q){this.set(a!==void 0?a:1,b||0,c||0,d||0,f||0,e!==void 0?e:1,g||0,i||0,k||0,h||0,j!==void 0?j:1,m||0,n||0,l||0,p||0,q!==void 0?q:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,i,k,h,j,m,n,l,p,q){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=f;this.n22=e;this.n23=g;this.n24=i;this.n31=k;this.n32=h;this.n33=j;this.n34=m;this.n41=n;this.n42=l;this.n43=p;this.n44=q;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, +b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;e.sub(a,b).normalize();if(e.length()===0)e.z=1;d.cross(c,e).normalize();d.length()===0&&(e.x+=1.0E-4,d.cross(c,e).normalize());f.cross(e,d).normalize();this.n11=d.x;this.n12=f.x;this.n13=e.x;this.n21=d.y;this.n22=f.y;this.n23=e.y;this.n31=d.z;this.n32=f.z;this.n33=e.z;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,f=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*f; +a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*f;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*f;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,f=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*f;a.y=this.n21*b+this.n22*c+this.n23*d+this.n24*f;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*f;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*f;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+ +c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},multiply:function(a,b){var c=a.n11,d=a.n12,f=a.n13,e=a.n14,g=a.n21,i=a.n22,k=a.n23,h=a.n24,j=a.n31,m=a.n32,n=a.n33,l=a.n34,p=a.n41,q=a.n42,v=a.n43,u=a.n44,C=b.n11,K=b.n12, +t=b.n13,w=b.n14,z=b.n21,y=b.n22,o=b.n23,E=b.n24,D=b.n31,F=b.n32,G=b.n33,A=b.n34,M=b.n41,N=b.n42,O=b.n43,S=b.n44;this.n11=c*C+d*z+f*D+e*M;this.n12=c*K+d*y+f*F+e*N;this.n13=c*t+d*o+f*G+e*O;this.n14=c*w+d*E+f*A+e*S;this.n21=g*C+i*z+k*D+h*M;this.n22=g*K+i*y+k*F+h*N;this.n23=g*t+i*o+k*G+h*O;this.n24=g*w+i*E+k*A+h*S;this.n31=j*C+m*z+n*D+l*M;this.n32=j*K+m*y+n*F+l*N;this.n33=j*t+m*o+n*G+l*O;this.n34=j*w+m*E+n*A+l*S;this.n41=p*C+q*z+v*D+u*M;this.n42=p*K+q*y+v*F+u*N;this.n43=p*t+q*o+v*G+u*O;this.n44=p*w+q* +E+v*A+u*S;return this},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*= +a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,f=this.n21,e=this.n22,g=this.n23,i=this.n24,k=this.n31,h=this.n32,j=this.n33,m=this.n34,n=this.n41,l=this.n42,p=this.n43,q=this.n44;return d*g*h*n-c*i*h*n-d*e*j*n+b*i*j*n+c*e*m*n-b*g*m*n-d*g*k*l+c*i*k*l+d*f*j*l-a*i*j*l-c*f*m*l+a*g*m*l+d*e*k*p-b*i*k*p-d*f*h*p+a*i*h*p+b*f*m*p-a*e*m*p-c*e*k*q+b*g*k*q+c*f*h*q-a*g*h*q-b*f*j*q+a*e*j*q}, +transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34; +a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11; +a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34; +a[b+15]=this.n44;return a},setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0, +0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),f=1-c,e=a.x,g=a.y,i=a.z,k=f*e,h=f*g;this.set(k*e+c,k*g-d*i,k*i+d*g,0,k*g+d*i,h*g+c,h*i-d*e,0,k*i-d*g,h*i+d*e,f*i*i+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){if(!this.position)this.position=new THREE.Vector3;this.position.set(this.n14,this.n24,this.n34);return this.position},getColumnX:function(){if(!this.columnX)this.columnX= +new THREE.Vector3;this.columnX.set(this.n11,this.n21,this.n31);return this.columnX},getColumnY:function(){if(!this.columnY)this.columnY=new THREE.Vector3;this.columnY.set(this.n12,this.n22,this.n32);return this.columnY},getColumnZ:function(){if(!this.columnZ)this.columnZ=new THREE.Vector3;this.columnZ.set(this.n13,this.n23,this.n33);return this.columnZ},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,f=a.z,e=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),i=Math.cos(f),f=Math.sin(f);switch(b){case "YXZ":var k= +g*i,h=g*f,j=d*i,m=d*f;this.n11=k+m*c;this.n12=j*c-h;this.n13=e*d;this.n21=e*f;this.n22=e*i;this.n23=-c;this.n31=h*c-j;this.n32=m+k*c;this.n33=e*g;break;case "ZXY":k=g*i;h=g*f;j=d*i;m=d*f;this.n11=k-m*c;this.n12=-e*f;this.n13=j+h*c;this.n21=h+j*c;this.n22=e*i;this.n23=m-k*c;this.n31=-e*d;this.n32=c;this.n33=e*g;break;case "ZYX":k=e*i;h=e*f;j=c*i;m=c*f;this.n11=g*i;this.n12=j*d-h;this.n13=k*d+m;this.n21=g*f;this.n22=m*d+k;this.n23=h*d-j;this.n31=-d;this.n32=c*g;this.n33=e*g;break;case "YZX":k=e*g;h= +e*d;j=c*g;m=c*d;this.n11=g*i;this.n12=m-k*f;this.n13=j*f+h;this.n21=f;this.n22=e*i;this.n23=-c*i;this.n31=-d*i;this.n32=h*f+j;this.n33=k-m*f;break;case "XZY":k=e*g;h=e*d;j=c*g;m=c*d;this.n11=g*i;this.n12=-f;this.n13=d*i;this.n21=k*f+m;this.n22=e*i;this.n23=h*f-j;this.n31=j*f-h;this.n32=c*i;this.n33=m*f+k;break;default:k=e*i,h=e*f,j=c*i,m=c*f,this.n11=g*i,this.n12=-g*f,this.n13=d,this.n21=h+j*d,this.n22=k-m*d,this.n23=-c*g,this.n31=m-k*d,this.n32=j+h*d,this.n33=e*g}return this},setRotationFromQuaternion:function(a){var b= +a.x,c=a.y,d=a.z,f=a.w,e=b+b,g=c+c,i=d+d,a=b*e,k=b*g;b*=i;var h=c*g;c*=i;d*=i;e*=f;g*=f;f*=i;this.n11=1-(h+d);this.n12=k-f;this.n13=b+g;this.n21=k+f;this.n22=1-(a+d);this.n23=c-e;this.n31=b-g;this.n32=c+e;this.n33=1-(a+h);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*=a;this.n21*=b;this.n22*=c;this.n23*=a;this.n31*=b;this.n32*=c;this.n33*=a;this.n41*=b;this.n42*=c;this.n43*=a;return this},compose:function(a,b,c){var d=THREE.Matrix4.__m1,f=THREE.Matrix4.__m2; +d.identity();d.setRotationFromQuaternion(b);f.setScale(c.x,c.y,c.z);this.multiply(d,f);this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},decompose:function(a,b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;d.set(this.n11,this.n21,this.n31);f.set(this.n12,this.n22,this.n32);e.set(this.n13,this.n23,this.n33);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=d.length(); +c.y=f.length();c.z=e.length();a.x=this.n14;a.y=this.n24;a.z=this.n34;d=THREE.Matrix4.__m1;d.copy(this);d.n11/=c.x;d.n21/=c.x;d.n31/=c.x;d.n12/=c.y;d.n22/=c.y;d.n32/=c.y;d.n13/=c.z;d.n23/=c.z;d.n33/=c.z;b.setFromRotationMatrix(d);return[a,b,c]},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34},extractRotation:function(a,b){var c=1/b.x,d=1/b.y,f=1/b.z;this.n11=a.n11*c;this.n21=a.n21*c;this.n31=a.n31*c;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*f;this.n23= +a.n23*f;this.n33=a.n33*f}}; +THREE.Matrix4.makeInvert=function(a,b){var c=a.n11,d=a.n12,f=a.n13,e=a.n14,g=a.n21,i=a.n22,k=a.n23,h=a.n24,j=a.n31,m=a.n32,n=a.n33,l=a.n34,p=a.n41,q=a.n42,v=a.n43,u=a.n44;b===void 0&&(b=new THREE.Matrix4);b.n11=k*l*q-h*n*q+h*m*v-i*l*v-k*m*u+i*n*u;b.n12=e*n*q-f*l*q-e*m*v+d*l*v+f*m*u-d*n*u;b.n13=f*h*q-e*k*q+e*i*v-d*h*v-f*i*u+d*k*u;b.n14=e*k*m-f*h*m-e*i*n+d*h*n+f*i*l-d*k*l;b.n21=h*n*p-k*l*p-h*j*v+g*l*v+k*j*u-g*n*u;b.n22=f*l*p-e*n*p+e*j*v-c*l*v-f*j*u+c*n*u;b.n23=e*k*p-f*h*p-e*g*v+c*h*v+f*g*u-c*k*u;b.n24= +f*h*j-e*k*j+e*g*n-c*h*n-f*g*l+c*k*l;b.n31=i*l*p-h*m*p+h*j*q-g*l*q-i*j*u+g*m*u;b.n32=e*m*p-d*l*p-e*j*q+c*l*q+d*j*u-c*m*u;b.n33=f*h*p-e*i*p+e*g*q-c*h*q-d*g*u+c*i*u;b.n34=e*i*j-d*h*j-e*g*m+c*h*m+d*g*l-c*i*l;b.n41=k*m*p-i*n*p-k*j*q+g*n*q+i*j*v-g*m*v;b.n42=d*n*p-f*m*p+f*j*q-c*n*q-d*j*v+c*m*v;b.n43=f*i*p-d*k*p-f*g*q+c*k*q+d*g*v-c*i*v;b.n44=d*k*j-f*i*j+f*g*m-c*k*m-d*g*n+c*i*n;b.multiplyScalar(1/a.determinant());return b}; +THREE.Matrix4.makeInvert3x3=function(a){var b=a.m33,c=b.m,d=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,e=a.n32*a.n21-a.n31*a.n22,g=-a.n33*a.n12+a.n32*a.n13,i=a.n33*a.n11-a.n31*a.n13,k=-a.n32*a.n11+a.n31*a.n12,h=a.n23*a.n12-a.n22*a.n13,j=-a.n23*a.n11+a.n21*a.n13,m=a.n22*a.n11-a.n21*a.n12,a=a.n11*d+a.n21*g+a.n31*h;a===0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");a=1/a;c[0]=a*d;c[1]=a*f;c[2]=a*e;c[3]=a*g;c[4]=a*i;c[5]=a*k;c[6]=a*h;c[7]=a*j;c[8]=a*m;return b}; THREE.Matrix4.makeFrustum=function(a,b,c,d,f,e){var g;g=new THREE.Matrix4;g.n11=2*f/(b-a);g.n12=0;g.n13=(b+a)/(b-a);g.n14=0;g.n21=0;g.n22=2*f/(d-c);g.n23=(d+c)/(d-c);g.n24=0;g.n31=0;g.n32=0;g.n33=-(e+f)/(e-f);g.n34=-2*e*f/(e-f);g.n41=0;g.n42=0;g.n43=-1;g.n44=0;return g};THREE.Matrix4.makePerspective=function(a,b,c,d){var f,a=c*Math.tan(a*Math.PI/360);f=-a;return THREE.Matrix4.makeFrustum(f*b,a*b,f,a,c,d)}; -THREE.Matrix4.makeOrtho=function(a,b,c,d,f,e){var g,h,k,n;g=new THREE.Matrix4;h=b-a;k=c-d;n=e-f;g.n11=2/h;g.n12=0;g.n13=0;g.n14=-((b+a)/h);g.n21=0;g.n22=2/k;g.n23=0;g.n24=-((c+d)/k);g.n31=0;g.n32=0;g.n33=-2/n;g.n34=-((e+f)/n);g.n41=0;g.n42=0;g.n43=0;g.n44=1;return g};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; +THREE.Matrix4.makeOrtho=function(a,b,c,d,f,e){var g,i,k,h;g=new THREE.Matrix4;i=b-a;k=c-d;h=e-f;g.n11=2/i;g.n12=0;g.n13=0;g.n14=-((b+a)/i);g.n21=0;g.n22=2/k;g.n23=0;g.n24=-((c+d)/k);g.n31=0;g.n32=0;g.n33=-2/h;g.n34=-((e+f)/h);g.n41=0;g.n42=0;g.n43=0;g.n44=1;return g};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; THREE.Object3D=function(){this.name="";this.id=THREE.Object3DCount++;this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder="XYZ";this.scale=new THREE.Vector3(1,1,1);this.flipSided=this.doubleSided=this.dynamic=!1;this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate= !0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.boundRadius=0;this.boundRadiusScale=1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this._vector=new THREE.Vector3}; THREE.Object3D.prototype={constructor:THREE.Object3D,translate:function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(a,this.position,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},add:function(a){if(this.children.indexOf(a)=== --1)a.parent!==void 0&&a.parent.remove(a),a.parent=this,this.children.push(a)},remove:function(a){var b=this.children.indexOf(a);if(b!==-1)a.parent=void 0,this.children.splice(b,1)},getChildByName:function(a,b){var c,d,f;c=0;for(d=this.children.length;c=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),d -L&&d.positionScreen.z0&&x.z<1))P=s[p]=s[p]||new THREE.RenderableParticle,p++,q=P,q.x=x.x/x.w,q.y=x.y/x.w,q.z=x.z,q.rotation=A.rotation.z,q.scale.x=A.scale.x*Math.abs(q.x-(x.x+D.projectionMatrix.n11)/(x.w+D.projectionMatrix.n14)),q.scale.y=A.scale.y*Math.abs(q.y-(x.y+D.projectionMatrix.n22)/(x.w+D.projectionMatrix.n24)),q.materials=A.materials,v.elements.push(q);y&&v.elements.sort(b);return v}}; -THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; -THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,f=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-f),f=Math.sin(-f),e=Math.cos(c),c=Math.sin(c),g=a*b,h=d*f;this.w=g*e-h*c;this.x=g*c+h*e;this.y=d*b*e+a*f*c;this.z=a*f*e-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); +-1){a.parent!==void 0&&a.parent.remove(a);a.parent=this;this.children.push(a);for(var b=this;b.parent!==void 0;)b=b.parent;b!==void 0&&b instanceof THREE.Scene&&b.addChildRecurse(a)}},remove:function(a){var b=this,c=this.children.indexOf(a);if(c!==-1){a.parent=void 0;for(this.children.splice(c,1);b.parent!==void 0;)b=b.parent;b!==void 0&&b instanceof THREE.Scene&&b.removeChildRecurse(a)}},getChildByName:function(a,b){var c,d,f;c=0;for(d=this.children.length;c=0&&f>=0&&g>=0&&i>=0?!0:e<0&&f<0||g<0&&i<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-i)):i<0&&(d=Math.min(d,g/(g-i))),dt&&g.positionScreen.z0&&y.z<1))Q=K[C]=K[C]||new THREE.RenderableParticle,C++,u= +Q,u.x=y.x/y.w,u.y=y.y/y.w,u.z=y.z,u.rotation=B.rotation.z,u.scale.x=B.scale.x*Math.abs(u.x-(y.x+e.projectionMatrix.n11)/(y.w+e.projectionMatrix.n14)),u.scale.y=B.scale.y*Math.abs(u.y-(y.y+e.projectionMatrix.n22)/(y.w+e.projectionMatrix.n24)),u.materials=B.materials,w.push(u);f&&w.sort(b);return w}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,f=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-f),f=Math.sin(-f),e=Math.cos(c),c=Math.sin(c),g=a*b,i=d*f;this.w=g*e-i*c;this.x=g*c+i*e;this.y=d*b*e+a*f*c;this.z=a*f*e-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); -this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a==0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+f*e+c*h-d*g;this.y=c*a+f*g+d*e-b*h;this.z=d*a+f*h+b*g-c*e;this.w=f*a-b*e-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,h=this.z,k=this.w,n=k*c+g*f-h*d,j=k*d+h*c-e*f,i=k*f+e*d-g*c,c=-e* -c-g*d-h*f;b.x=n*k+c*-e+j*-h-i*-g;b.y=j*k+c*-g+i*-e-n*-h;b.z=i*k+c*-h+n*-g-j*-e;return b}}; -THREE.Quaternion.slerp=function(a,b,c,d){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;f<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,f=-f):c.copy(b);if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var e=Math.acos(f),f=Math.sqrt(1-f*f);if(Math.abs(f)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-d)*e)/f;d=Math.sin(d*e)/f;c.w=a.w*b+c.w*d;c.x=a.x*b+c.x*d;c.y=a.y*b+c.y*d;c.z=a.z*b+c.z*d;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; -THREE.Face3=function(a,b,c,d,f,e){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materials=e instanceof Array?e:[e];this.centroid=new THREE.Vector3}; -THREE.Face4=function(a,b,c,d,f,e,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materials=g instanceof Array?g:[g];this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; -THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}};THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; +this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= +this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,i=a.z,a=a.w;this.x=b*a+f*e+c*i-d*g;this.y=c*a+f*g+d*e-b*i;this.z=d*a+f*i+b*g-c*e;this.w=f*a-b*e-c*g-d*i;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,i=this.z,k=this.w,h=k*c+g*f-i*d,j=k*d+i*c-e*f,m=k*f+e*d-g*c,c=-e* +c-g*d-i*f;b.x=h*k+c*-e+j*-i-m*-g;b.y=j*k+c*-g+m*-e-h*-i;b.z=m*k+c*-i+h*-g-j*-e;return b}};THREE.Quaternion.slerp=function(a,b,c,d){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var e=Math.acos(f),g=Math.sqrt(1-f*f);if(Math.abs(g)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;f=Math.sin((1-d)*e)/g;d=Math.sin(d*e)/g;c.w=a.w*f+b.w*d;c.x=a.x*f+b.x*d;c.y=a.y*f+b.y*d;c.z=a.z*f+b.z*d;return c}; +THREE.Vertex=function(a){this.position=a||new THREE.Vector3};THREE.Face3=function(a,b,c,d,f,e){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=e;this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,b,c,d,f,e,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; +THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}}; +THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,d=this.vertices.length;c0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, +c.vertexNormals[1].copy(d[c.b]),c.vertexNormals[2].copy(d[c.c]),c.vertexNormals[3].copy(d[c.d]))},computeTangents:function(){function a(a,b,c,d,e,f,o){i=a.vertices[b].position;k=a.vertices[c].position;h=a.vertices[d].position;j=g[e];m=g[f];n=g[o];l=k.x-i.x;p=h.x-i.x;q=k.y-i.y;v=h.y-i.y;u=k.z-i.z;C=h.z-i.z;K=m.u-j.u;t=n.u-j.u;w=m.v-j.v;z=n.v-j.v;y=1/(K*z-t*w);F.set((z*l-w*p)*y,(z*q-w*v)*y,(z*u-w*C)*y);G.set((K*p-t*l)*y,(K*v-t*q)*y,(K*C-t*u)*y);E[b].addSelf(F);E[c].addSelf(F);E[d].addSelf(F);D[b].addSelf(G); +D[c].addSelf(G);D[d].addSelf(G)}var b,c,d,f,e,g,i,k,h,j,m,n,l,p,q,v,u,C,K,t,w,z,y,o,E=[],D=[],F=new THREE.Vector3,G=new THREE.Vector3,A=new THREE.Vector3,M=new THREE.Vector3,N=new THREE.Vector3;b=0;for(c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,b=0,c=this.vertices.length;b1?1:a}var e=this,g,h,k,n=new THREE.Projector,j=document.createElementNS("http://www.w3.org/2000/svg","svg"),i,m,l,q,p,s,v,x,o=new THREE.Rectangle,C=new THREE.Rectangle, -F=!1,r=new THREE.Color,B=new THREE.Color,H=new THREE.Color,D=new THREE.Color,y,L=new THREE.Vector3,G=[],I=[],w,z,J,u=1;this.domElement=j;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setQuality=function(a){switch(a){case "high":u=1;break;case "low":u=0}};this.setSize=function(a,b){i=a;m=b;l=i/2;q=m/2;j.setAttribute("viewBox",-l+" "+-q+" "+i+" "+m);j.setAttribute("width",i);j.setAttribute("height",m);o.set(-l,-q,l,q)};this.clear=function(){for(;j.childNodes.length> -0;)j.removeChild(j.childNodes[0])};this.render=function(a,d){var f,i,m,r,y,G,t,E;this.autoClear&&this.clear();e.info.render.vertices=0;e.info.render.faces=0;g=n.projectScene(a,d,this.sortElements);h=g.elements;k=g.lights;J=z=0;if(F=k.length>0){f=k;B.setRGB(0,0,0);H.setRGB(0,0,0);D.setRGB(0,0,0);i=0;for(m=f.length;i0&&(c.r+=f.color.r*g,c.g+=f.color.g*g,c.b+=f.color.b*g)):f instanceof THREE.PointLight&&(D.sub(f.position,b.centroidWorld),D.normalize(),g=b.normalWorld.dot(D)*f.intensity,g>0&&(c.r+=f.color.r*g,c.g+=f.color.g*g,c.b+=f.color.b*g))}function b(b,c,g,i,h,j){e.info.render.vertices+=3;e.info.render.faces++;A=d(M++); +A.setAttribute("d","M "+b.positionScreen.x+" "+b.positionScreen.y+" L "+c.positionScreen.x+" "+c.positionScreen.y+" L "+g.positionScreen.x+","+g.positionScreen.y+"z");h instanceof THREE.MeshBasicMaterial?t.copy(h.color):h instanceof THREE.MeshLambertMaterial?K?(w.r=z.r,w.g=z.g,w.b=z.b,a(j,i,w),t.r=Math.max(0,Math.min(h.color.r*w.r,1)),t.g=Math.max(0,Math.min(h.color.g*w.g,1)),t.b=Math.max(0,Math.min(h.color.b*w.b,1))):t.copy(h.color):h instanceof THREE.MeshDepthMaterial?(E=1-h.__2near/(h.__farPlusNear- +i.z*h.__farMinusNear),t.setRGB(E,E,E)):h instanceof THREE.MeshNormalMaterial&&t.setRGB(f(i.normalWorld.x),f(i.normalWorld.y),f(i.normalWorld.z));h.wireframe?A.setAttribute("style","fill: none; stroke: "+t.getContextStyle()+"; stroke-width: "+h.wireframeLinewidth+"; stroke-opacity: "+h.opacity+"; stroke-linecap: "+h.wireframeLinecap+"; stroke-linejoin: "+h.wireframeLinejoin):A.setAttribute("style","fill: "+t.getContextStyle()+"; fill-opacity: "+h.opacity);k.appendChild(A)}function c(b,c,g,i,h,j,l){e.info.render.vertices+= +4;e.info.render.faces++;A=d(M++);A.setAttribute("d","M "+b.positionScreen.x+" "+b.positionScreen.y+" L "+c.positionScreen.x+" "+c.positionScreen.y+" L "+g.positionScreen.x+","+g.positionScreen.y+" L "+i.positionScreen.x+","+i.positionScreen.y+"z");j instanceof THREE.MeshBasicMaterial?t.copy(j.color):j instanceof THREE.MeshLambertMaterial?K?(w.r=z.r,w.g=z.g,w.b=z.b,a(l,h,w),t.r=Math.max(0,Math.min(j.color.r*w.r,1)),t.g=Math.max(0,Math.min(j.color.g*w.g,1)),t.b=Math.max(0,Math.min(j.color.b*w.b,1))): +t.copy(j.color):j instanceof THREE.MeshDepthMaterial?(E=1-j.__2near/(j.__farPlusNear-h.z*j.__farMinusNear),t.setRGB(E,E,E)):j instanceof THREE.MeshNormalMaterial&&t.setRGB(f(h.normalWorld.x),f(h.normalWorld.y),f(h.normalWorld.z));j.wireframe?A.setAttribute("style","fill: none; stroke: "+t.getContextStyle()+"; stroke-width: "+j.wireframeLinewidth+"; stroke-opacity: "+j.opacity+"; stroke-linecap: "+j.wireframeLinecap+"; stroke-linejoin: "+j.wireframeLinejoin):A.setAttribute("style","fill: "+t.getContextStyle()+ +"; fill-opacity: "+j.opacity);k.appendChild(A)}function d(a){F[a]==null&&(F[a]=document.createElementNS("http://www.w3.org/2000/svg","path"),O==0&&F[a].setAttribute("shape-rendering","crispEdges"));return F[a]}function f(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}var e=this,g=null,i=new THREE.Projector,k=document.createElementNS("http://www.w3.org/2000/svg","svg"),h,j,m,n,l,p,q,v,u=new THREE.Rectangle,C=new THREE.Rectangle,K=!1,t=new THREE.Color(16777215),w=new THREE.Color(16777215),z=new THREE.Color(0), +y=new THREE.Color(0),o=new THREE.Color(0),E,D=new THREE.Vector3,F=[],G=[],A,M,N,O=1;this.domElement=k;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setQuality=function(a){switch(a){case "high":O=1;break;case "low":O=0}};this.setSize=function(a,b){h=a;j=b;m=h/2;n=j/2;k.setAttribute("viewBox",-m+" "+-n+" "+h+" "+j);k.setAttribute("width",h);k.setAttribute("height",j);u.set(-m,-n,m,n)};this.clear=function(){for(;k.childNodes.length>0;)k.removeChild(k.childNodes[0])}; +this.render=function(a,d){var f,h,j,r,t,w,s,x;this.autoClear&&this.clear();e.info.render.vertices=0;e.info.render.faces=0;g=i.projectScene(a,d,this.sortElements);N=M=0;if(K=a.lights.length>0){s=a.lights;z.setRGB(0,0,0);y.setRGB(0,0,0);o.setRGB(0,0,0);f=0;for(h=s.length;f>16&255)/255;this.g=(b>>8&255)/255;this.b=(b&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}}; -THREE.Vector2=function(b,c){this.x=b||0;this.y=c||0}; -THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(b,c){this.x=b;this.y=c;return this},copy:function(b){this.x=b.x;this.y=b.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(b,c){this.x=b.x+c.x;this.y=b.y+c.y;return this},addSelf:function(b){this.x+=b.x;this.y+=b.y;return this},sub:function(b,c){this.x=b.x-c.x;this.y=b.y-c.y;return this},subSelf:function(b){this.x-=b.x;this.y-=b.y;return this},multiplyScalar:function(b){this.x*=b;this.y*=b;return this}, -divideScalar:function(b){b?(this.x/=b,this.y/=b):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(b){return Math.sqrt(this.distanceToSquared(b))},distanceToSquared:function(b){var c=this.x-b.x,b=this.y-b.y;return c*c+b*b},setLength:function(b){return this.normalize().multiplyScalar(b)}, -equals:function(b){return b.x==this.x&&b.y==this.y}};THREE.Vector3=function(b,c,d){this.x=b||0;this.y=c||0;this.z=d||0}; -THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(b,c,d){this.x=b;this.y=c;this.z=d;return this},setX:function(b){this.x=b;return this},setY:function(b){this.y=b;return this},setZ:function(b){this.z=b;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(b,c){this.x=b.x+c.x;this.y=b.y+c.y;this.z=b.z+c.z;return this},addSelf:function(b){this.x+=b.x;this.y+=b.y;this.z+=b.z;return this}, -addScalar:function(b){this.x+=b;this.y+=b;this.z+=b;return this},sub:function(b,c){this.x=b.x-c.x;this.y=b.y-c.y;this.z=b.z-c.z;return this},subSelf:function(b){this.x-=b.x;this.y-=b.y;this.z-=b.z;return this},multiply:function(b,c){this.x=b.x*c.x;this.y=b.y*c.y;this.z=b.z*c.z;return this},multiplySelf:function(b){this.x*=b.x;this.y*=b.y;this.z*=b.z;return this},multiplyScalar:function(b){this.x*=b;this.y*=b;this.z*=b;return this},divideSelf:function(b){this.x/=b.x;this.y/=b.y;this.z/=b.z;return this}, -divideScalar:function(b){b?(this.x/=b,this.y/=b,this.z/=b):this.set(0,0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y+this.z*b.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(b){return this.normalize().multiplyScalar(b)}, -cross:function(b,c){this.x=b.y*c.z-b.z*c.y;this.y=b.z*c.x-b.x*c.z;this.z=b.x*c.y-b.y*c.x;return this},crossSelf:function(b){return this.set(this.y*b.z-this.z*b.y,this.z*b.x-this.x*b.z,this.x*b.y-this.y*b.x)},distanceTo:function(b){return Math.sqrt(this.distanceToSquared(b))},distanceToSquared:function(b){return(new THREE.Vector3).sub(this,b).lengthSq()},setPositionFromMatrix:function(b){this.x=b.n14;this.y=b.n24;this.z=b.n34},setRotationFromMatrix:function(b){var c=Math.cos(this.y);this.y=Math.asin(b.n13); -Math.abs(c)>1.0E-5?(this.x=Math.atan2(-b.n23/c,b.n33/c),this.z=Math.atan2(-b.n12/c,b.n11/c)):(this.x=0,this.z=Math.atan2(b.n21,b.n22))},isZero:function(){return this.lengthSq()<1.0E-4}};THREE.Vector4=function(b,c,d,e){this.x=b||0;this.y=c||0;this.z=d||0;this.w=e!==void 0?e:1}; -THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(b,c,d,e){this.x=b;this.y=c;this.z=d;this.w=e;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;this.w=b.w!==void 0?b.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(b,c){this.x=b.x+c.x;this.y=b.y+c.y;this.z=b.z+c.z;this.w=b.w+c.w;return this},addSelf:function(b){this.x+=b.x;this.y+=b.y;this.z+=b.z;this.w+=b.w;return this},sub:function(b,c){this.x=b.x-c.x;this.y=b.y-c.y;this.z=b.z- -c.z;this.w=b.w-c.w;return this},subSelf:function(b){this.x-=b.x;this.y-=b.y;this.z-=b.z;this.w-=b.w;return this},multiplyScalar:function(b){this.x*=b;this.y*=b;this.z*=b;this.w*=b;return this},divideScalar:function(b){b?(this.x/=b,this.y/=b,this.z/=b,this.w/=b):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y+this.z*b.z+this.w*b.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, -normalize:function(){return this.divideScalar(this.length())},setLength:function(b){return this.normalize().multiplyScalar(b)},lerpSelf:function(b,c){this.x+=(b.x-this.x)*c;this.y+=(b.y-this.y)*c;this.z+=(b.z-this.z)*c;this.w+=(b.w-this.w)*c;return this}};THREE.Ray=function(b,c){this.origin=b||new THREE.Vector3;this.direction=c||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(b){return this.intersectObjects(b.children)},intersectObjects:function(b){var c,d,e=[];c=0;for(d=b.length;c0&&b>0&&i+b<1}for(var e,h=[],i=0,j=b.children.length;ib.scale.x)return[];e={distance:i,point:b.position,face:null,object:b};h.push(e)}else if(b instanceof THREE.Mesh){i=c(this.origin, -this.direction,b.matrixWorld.getPosition());if(i==null||i>b.geometry.boundingSphere.radius*Math.max(b.scale.x,Math.max(b.scale.y,b.scale.z)))return h;var k,o,s,p,n,v,w,D,F=b.geometry,J=F.vertices;b.matrixRotationWorld.extractRotation(b.matrixWorld);i=0;for(j=F.faces.length;i0:v<0)))if(v=n.dot((new THREE.Vector3).sub(k,w))/v,w=w.addSelf(D.multiplyScalar(v)),e instanceof THREE.Face3)d(w,k,o,s)&&(e={distance:this.origin.distanceTo(w),point:w,face:e,object:b},h.push(e));else if(e instanceof THREE.Face4&&(d(w,k,o,p)||d(w,o,s,p)))e={distance:this.origin.distanceTo(w), -point:w,face:e,object:b},h.push(e)}return h}}; -THREE.Rectangle=function(){function b(){i=e-c;j=h-d}var c,d,e,h,i,j,k=!0;this.getX=function(){return c};this.getY=function(){return d};this.getWidth=function(){return i};this.getHeight=function(){return j};this.getLeft=function(){return c};this.getTop=function(){return d};this.getRight=function(){return e};this.getBottom=function(){return h};this.set=function(i,j,p,n){k=!1;c=i;d=j;e=p;h=n;b()};this.addPoint=function(i,j){k?(k=!1,c=i,d=j,e=i,h=j):(c=ci?e:i,h=h>j?h:j);b()};this.add3Points= -function(i,j,p,n,v,w){k?(k=!1,c=ip?i>v?i:v:p>v?p:v,h=j>n?j>w?j:w:n>w?n:w):(c=ip?i>v?i>e?i:e:v>e?v:e:p>v?p>e?p:e:v>e?v:e,h=j>n?j>w?j>h?j:h:w>h?w:h:n>w?n>h?n:h:w>h?w:h);b()};this.addRectangle=function(i){k?(k=!1,c=i.getLeft(),d=i.getTop(),e=i.getRight(),h=i.getBottom()):(c=ci.getRight()?e:i.getRight(),h=h> -i.getBottom()?h:i.getBottom());b()};this.inflate=function(i){c-=i;d-=i;e+=i;h+=i;b()};this.minSelf=function(i){c=c>i.getLeft()?c:i.getLeft();d=d>i.getTop()?d:i.getTop();e=e=0&&Math.min(h,b.getBottom())-Math.max(d,b.getTop())>=0};this.empty=function(){k=!0;h=e=d=c=0;b()};this.isEmpty=function(){return k}};THREE.Matrix3=function(){this.m=[]}; -THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var b,c=this.m;b=c[1];c[1]=c[3];c[3]=b;b=c[2];c[2]=c[6];c[6]=b;b=c[5];c[5]=c[7];c[7]=b;return this},transposeIntoArray:function(b){var c=this.m;b[0]=c[0];b[1]=c[3];b[2]=c[6];b[3]=c[1];b[4]=c[4];b[5]=c[7];b[6]=c[2];b[7]=c[5];b[8]=c[8];return this}}; -THREE.Matrix4=function(b,c,d,e,h,i,j,k,o,s,p,n,v,w,D,F){this.set(b!==void 0?b:1,c||0,d||0,e||0,h||0,i!==void 0?i:1,j||0,k||0,o||0,s||0,p!==void 0?p:1,n||0,v||0,w||0,D||0,F!==void 0?F:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(b,c,d,e,h,i,j,k,o,s,p,n,v,w,D,F){this.n11=b;this.n12=c;this.n13=d;this.n14=e;this.n21=h;this.n22=i;this.n23=j;this.n24=k;this.n31=o;this.n32=s;this.n33=p;this.n34=n;this.n41=v;this.n42=w;this.n43=D;this.n44=F;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(b){this.set(b.n11,b.n12,b.n13,b.n14,b.n21,b.n22,b.n23,b.n24,b.n31,b.n32,b.n33,b.n34,b.n41,b.n42,b.n43,b.n44);return this},lookAt:function(b, -c,d){var e=THREE.Matrix4.__v1,h=THREE.Matrix4.__v2,i=THREE.Matrix4.__v3;i.sub(b,c).normalize();if(i.length()===0)i.z=1;e.cross(d,i).normalize();e.length()===0&&(i.x+=1.0E-4,e.cross(d,i).normalize());h.cross(i,e).normalize();this.n11=e.x;this.n12=h.x;this.n13=i.x;this.n21=e.y;this.n22=h.y;this.n23=i.y;this.n31=e.z;this.n32=h.z;this.n33=i.z;return this},multiply:function(b,c){var d=b.n11,e=b.n12,h=b.n13,i=b.n14,j=b.n21,k=b.n22,o=b.n23,s=b.n24,p=b.n31,n=b.n32,v=b.n33,w=b.n34,D=b.n41,F=b.n42,J=b.n43, -I=b.n44,ga=c.n11,u=c.n12,ha=c.n13,P=c.n14,U=c.n21,V=c.n22,O=c.n23,G=c.n24,ra=c.n31,oa=c.n32,sa=c.n33,fa=c.n34,ia=c.n41,A=c.n42,E=c.n43,f=c.n44;this.n11=d*ga+e*U+h*ra+i*ia;this.n12=d*u+e*V+h*oa+i*A;this.n13=d*ha+e*O+h*sa+i*E;this.n14=d*P+e*G+h*fa+i*f;this.n21=j*ga+k*U+o*ra+s*ia;this.n22=j*u+k*V+o*oa+s*A;this.n23=j*ha+k*O+o*sa+s*E;this.n24=j*P+k*G+o*fa+s*f;this.n31=p*ga+n*U+v*ra+w*ia;this.n32=p*u+n*V+v*oa+w*A;this.n33=p*ha+n*O+v*sa+w*E;this.n34=p*P+n*G+v*fa+w*f;this.n41=D*ga+F*U+J*ra+I*ia;this.n42= -D*u+F*V+J*oa+I*A;this.n43=D*ha+F*O+J*sa+I*E;this.n44=D*P+F*G+J*fa+I*f;return this},multiplySelf:function(b){return this.multiply(this,b)},multiplyToArray:function(b,c,d){this.multiply(b,c);d[0]=this.n11;d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34;d[15]=this.n44;return this},multiplyScalar:function(b){this.n11*=b;this.n12*=b;this.n13*=b;this.n14*= -b;this.n21*=b;this.n22*=b;this.n23*=b;this.n24*=b;this.n31*=b;this.n32*=b;this.n33*=b;this.n34*=b;this.n41*=b;this.n42*=b;this.n43*=b;this.n44*=b;return this},multiplyVector3:function(b){var c=b.x,d=b.y,e=b.z,h=1/(this.n41*c+this.n42*d+this.n43*e+this.n44);b.x=(this.n11*c+this.n12*d+this.n13*e+this.n14)*h;b.y=(this.n21*c+this.n22*d+this.n23*e+this.n24)*h;b.z=(this.n31*c+this.n32*d+this.n33*e+this.n34)*h;return b},multiplyVector4:function(b){var c=b.x,d=b.y,e=b.z,h=b.w;b.x=this.n11*c+this.n12*d+this.n13* -e+this.n14*h;b.y=this.n21*c+this.n22*d+this.n23*e+this.n24*h;b.z=this.n31*c+this.n32*d+this.n33*e+this.n34*h;b.w=this.n41*c+this.n42*d+this.n43*e+this.n44*h;return b},rotateAxis:function(b){var c=b.x,d=b.y,e=b.z;b.x=c*this.n11+d*this.n12+e*this.n13;b.y=c*this.n21+d*this.n22+e*this.n23;b.z=c*this.n31+d*this.n32+e*this.n33;b.normalize();return b},crossVector:function(b){var c=new THREE.Vector4;c.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;c.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24* -b.w;c.z=this.n31*b.x+this.n32*b.y+this.n33*b.z+this.n34*b.w;c.w=b.w?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return c},determinant:function(){var b=this.n11,c=this.n12,d=this.n13,e=this.n14,h=this.n21,i=this.n22,j=this.n23,k=this.n24,o=this.n31,s=this.n32,p=this.n33,n=this.n34,v=this.n41,w=this.n42,D=this.n43,F=this.n44;return e*j*s*v-d*k*s*v-e*i*p*v+c*k*p*v+d*i*n*v-c*j*n*v-e*j*o*w+d*k*o*w+e*h*p*w-b*k*p*w-d*h*n*w+b*j*n*w+e*i*o*D-c*k*o*D-e*h*s*D+b*k*s*D+c*h*n*D-b*i*n*D-d*i*o*F+c*j*o*F+ -d*h*s*F-b*j*s*F-c*h*p*F+b*i*p*F},transpose:function(){var b;b=this.n21;this.n21=this.n12;this.n12=b;b=this.n31;this.n31=this.n13;this.n13=b;b=this.n32;this.n32=this.n23;this.n23=b;b=this.n41;this.n41=this.n14;this.n14=b;b=this.n42;this.n42=this.n24;this.n24=b;b=this.n43;this.n43=this.n34;this.n43=b;return this},clone:function(){var b=new THREE.Matrix4;b.n11=this.n11;b.n12=this.n12;b.n13=this.n13;b.n14=this.n14;b.n21=this.n21;b.n22=this.n22;b.n23=this.n23;b.n24=this.n24;b.n31=this.n31;b.n32=this.n32; -b.n33=this.n33;b.n34=this.n34;b.n41=this.n41;b.n42=this.n42;b.n43=this.n43;b.n44=this.n44;return b},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(b){b[0]= -this.n11;b[1]=this.n21;b[2]=this.n31;b[3]=this.n41;b[4]=this.n12;b[5]=this.n22;b[6]=this.n32;b[7]=this.n42;b[8]=this.n13;b[9]=this.n23;b[10]=this.n33;b[11]=this.n43;b[12]=this.n14;b[13]=this.n24;b[14]=this.n34;b[15]=this.n44;return b},flattenToArrayOffset:function(b,c){b[c]=this.n11;b[c+1]=this.n21;b[c+2]=this.n31;b[c+3]=this.n41;b[c+4]=this.n12;b[c+5]=this.n22;b[c+6]=this.n32;b[c+7]=this.n42;b[c+8]=this.n13;b[c+9]=this.n23;b[c+10]=this.n33;b[c+11]=this.n43;b[c+12]=this.n14;b[c+13]=this.n24;b[c+14]= -this.n34;b[c+15]=this.n44;return b},setTranslation:function(b,c,d){this.set(1,0,0,b,0,1,0,c,0,0,1,d,0,0,0,1);return this},setScale:function(b,c,d){this.set(b,0,0,0,0,c,0,0,0,0,d,0,0,0,0,1);return this},setRotationX:function(b){var c=Math.cos(b),b=Math.sin(b);this.set(1,0,0,0,0,c,-b,0,0,b,c,0,0,0,0,1);return this},setRotationY:function(b){var c=Math.cos(b),b=Math.sin(b);this.set(c,0,b,0,0,1,0,0,-b,0,c,0,0,0,0,1);return this},setRotationZ:function(b){var c=Math.cos(b),b=Math.sin(b);this.set(c,-b,0, -0,b,c,0,0,0,0,1,0,0,0,0,1);return this},setRotationAxis:function(b,c){var d=Math.cos(c),e=Math.sin(c),h=1-d,i=b.x,j=b.y,k=b.z,o=h*i,s=h*j;this.set(o*i+d,o*j-e*k,o*k+e*j,0,o*j+e*k,s*j+d,s*k-e*i,0,o*k-e*j,s*k+e*i,h*k*k+d,0,0,0,0,1);return this},setPosition:function(b){this.n14=b.x;this.n24=b.y;this.n34=b.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, -this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(b){var c=b.n11,d=b.n12,e=b.n13,h=b.n14,i=b.n21,j=b.n22,k=b.n23,o=b.n24,s=b.n31,p=b.n32,n=b.n33,v=b.n34,w=b.n41,D=b.n42,F=b.n43,J=b.n44;this.n11=k*v*D-o*n*D+o*p*F-j*v*F-k*p*J+j*n*J;this.n12=h*n*D-e*v*D-h*p*F+d*v*F+e*p*J-d*n*J;this.n13=e*o*D-h*k*D+h*j*F-d*o*F-e*j*J+d*k*J;this.n14=h*k*p-e*o*p-h*j*n+d*o*n+e*j*v-d*k*v;this.n21=o*n*w-k*v*w-o*s*F+i*v*F+k*s*J-i*n*J;this.n22=e*v*w-h*n*w+ -h*s*F-c*v*F-e*s*J+c*n*J;this.n23=h*k*w-e*o*w-h*i*F+c*o*F+e*i*J-c*k*J;this.n24=e*o*s-h*k*s+h*i*n-c*o*n-e*i*v+c*k*v;this.n31=j*v*w-o*p*w+o*s*D-i*v*D-j*s*J+i*p*J;this.n32=h*p*w-d*v*w-h*s*D+c*v*D+d*s*J-c*p*J;this.n33=e*o*w-h*j*w+h*i*D-c*o*D-d*i*J+c*j*J;this.n34=h*j*s-d*o*s-h*i*p+c*o*p+d*i*v-c*j*v;this.n41=k*p*w-j*n*w-k*s*D+i*n*D+j*s*F-i*p*F;this.n42=d*n*w-e*p*w+e*s*D-c*n*D-d*s*F+c*p*F;this.n43=e*j*w-d*k*w-e*i*D+c*k*D+d*i*F-c*j*F;this.n44=d*k*s-e*j*s+e*i*p-c*k*p-d*i*n+c*j*n;this.multiplyScalar(1/b.determinant()); -return this},setRotationFromEuler:function(b,c){var d=b.x,e=b.y,h=b.z,i=Math.cos(d),d=Math.sin(d),j=Math.cos(e),e=Math.sin(e),k=Math.cos(h),h=Math.sin(h);switch(c){case "YXZ":var o=j*k,s=j*h,p=e*k,n=e*h;this.n11=o+n*d;this.n12=p*d-s;this.n13=i*e;this.n21=i*h;this.n22=i*k;this.n23=-d;this.n31=s*d-p;this.n32=n+o*d;this.n33=i*j;break;case "ZXY":o=j*k;s=j*h;p=e*k;n=e*h;this.n11=o-n*d;this.n12=-i*h;this.n13=p+s*d;this.n21=s+p*d;this.n22=i*k;this.n23=n-o*d;this.n31=-i*e;this.n32=d;this.n33=i*j;break;case "ZYX":o= -i*k;s=i*h;p=d*k;n=d*h;this.n11=j*k;this.n12=p*e-s;this.n13=o*e+n;this.n21=j*h;this.n22=n*e+o;this.n23=s*e-p;this.n31=-e;this.n32=d*j;this.n33=i*j;break;case "YZX":o=i*j;s=i*e;p=d*j;n=d*e;this.n11=j*k;this.n12=n-o*h;this.n13=p*h+s;this.n21=h;this.n22=i*k;this.n23=-d*k;this.n31=-e*k;this.n32=s*h+p;this.n33=o-n*h;break;case "XZY":o=i*j;s=i*e;p=d*j;n=d*e;this.n11=j*k;this.n12=-h;this.n13=e*k;this.n21=o*h+n;this.n22=i*k;this.n23=s*h-p;this.n31=p*h-s;this.n32=d*k;this.n33=n*h+o;break;default:o=i*k,s=i* -h,p=d*k,n=d*h,this.n11=j*k,this.n12=-j*h,this.n13=e,this.n21=s+p*e,this.n22=o-n*e,this.n23=-d*j,this.n31=n-o*e,this.n32=p+s*e,this.n33=i*j}return this},setRotationFromQuaternion:function(b){var c=b.x,d=b.y,e=b.z,h=b.w,i=c+c,j=d+d,k=e+e,b=c*i,o=c*j;c*=k;var s=d*j;d*=k;e*=k;i*=h;j*=h;h*=k;this.n11=1-(s+e);this.n12=o-h;this.n13=c+j;this.n21=o+h;this.n22=1-(b+e);this.n23=d-i;this.n31=c-j;this.n32=d+i;this.n33=1-(b+s);return this},scale:function(b){var c=b.x,d=b.y,b=b.z;this.n11*=c;this.n12*=d;this.n13*= -b;this.n21*=c;this.n22*=d;this.n23*=b;this.n31*=c;this.n32*=d;this.n33*=b;this.n41*=c;this.n42*=d;this.n43*=b;return this},compose:function(b,c,d){var e=THREE.Matrix4.__m1,h=THREE.Matrix4.__m2;e.identity();e.setRotationFromQuaternion(c);h.setScale(d.x,d.y,d.z);this.multiply(e,h);this.n14=b.x;this.n24=b.y;this.n34=b.z;return this},decompose:function(b,c,d){var e=THREE.Matrix4.__v1,h=THREE.Matrix4.__v2,i=THREE.Matrix4.__v3;e.set(this.n11,this.n21,this.n31);h.set(this.n12,this.n22,this.n32);i.set(this.n13, -this.n23,this.n33);b=b instanceof THREE.Vector3?b:new THREE.Vector3;c=c instanceof THREE.Quaternion?c:new THREE.Quaternion;d=d instanceof THREE.Vector3?d:new THREE.Vector3;d.x=e.length();d.y=h.length();d.z=i.length();b.x=this.n14;b.y=this.n24;b.z=this.n34;e=THREE.Matrix4.__m1;e.copy(this);e.n11/=d.x;e.n21/=d.x;e.n31/=d.x;e.n12/=d.y;e.n22/=d.y;e.n32/=d.y;e.n13/=d.z;e.n23/=d.z;e.n33/=d.z;c.setFromRotationMatrix(e);return[b,c,d]},extractPosition:function(b){this.n14=b.n14;this.n24=b.n24;this.n34=b.n34; -return this},extractRotation:function(b){var c=THREE.Matrix4.__v1,d=1/c.set(b.n11,b.n21,b.n31).length(),e=1/c.set(b.n12,b.n22,b.n32).length(),c=1/c.set(b.n13,b.n23,b.n33).length();this.n11=b.n11*d;this.n21=b.n21*d;this.n31=b.n31*d;this.n12=b.n12*e;this.n22=b.n22*e;this.n32=b.n32*e;this.n13=b.n13*c;this.n23=b.n23*c;this.n33=b.n33*c;return this}}; -THREE.Matrix4.makeInvert3x3=function(b){var c=b.m33,d=c.m,e=b.n33*b.n22-b.n32*b.n23,h=-b.n33*b.n21+b.n31*b.n23,i=b.n32*b.n21-b.n31*b.n22,j=-b.n33*b.n12+b.n32*b.n13,k=b.n33*b.n11-b.n31*b.n13,o=-b.n32*b.n11+b.n31*b.n12,s=b.n23*b.n12-b.n22*b.n13,p=-b.n23*b.n11+b.n21*b.n13,n=b.n22*b.n11-b.n21*b.n12,b=b.n11*e+b.n21*j+b.n31*s;b==0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");b=1/b;d[0]=b*e;d[1]=b*h;d[2]=b*i;d[3]=b*j;d[4]=b*k;d[5]=b*o;d[6]=b*s;d[7]=b*p;d[8]=b*n;return c}; -THREE.Matrix4.makeFrustum=function(b,c,d,e,h,i){var j;j=new THREE.Matrix4;j.n11=2*h/(c-b);j.n12=0;j.n13=(c+b)/(c-b);j.n14=0;j.n21=0;j.n22=2*h/(e-d);j.n23=(e+d)/(e-d);j.n24=0;j.n31=0;j.n32=0;j.n33=-(i+h)/(i-h);j.n34=-2*i*h/(i-h);j.n41=0;j.n42=0;j.n43=-1;j.n44=0;return j};THREE.Matrix4.makePerspective=function(b,c,d,e){var h,b=d*Math.tan(b*Math.PI/360);h=-b;return THREE.Matrix4.makeFrustum(h*c,b*c,h,b,d,e)}; -THREE.Matrix4.makeOrtho=function(b,c,d,e,h,i){var j,k,o,s;j=new THREE.Matrix4;k=c-b;o=d-e;s=i-h;j.n11=2/k;j.n12=0;j.n13=0;j.n14=-((c+b)/k);j.n21=0;j.n22=2/o;j.n23=0;j.n24=-((d+e)/o);j.n31=0;j.n32=0;j.n33=-2/s;j.n34=-((i+h)/s);j.n41=0;j.n42=0;j.n43=0;j.n44=1;return j};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; +var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array;THREE.Color=function(a){a!==void 0&&this.setHex(a);return this}; +THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var e,f,h;if(c===0)this.r=this.g=this.b=0;else switch(e=Math.floor(a*6),f=a*6-e,a=c*(1-b),h=c*(1- +b*f),b=c*(1-b*(1-f)),e){case 1:this.r=h;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=h;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r=c;this.g=a;this.b=h;break;case 6:case 0:this.r=c,this.g=b,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+ +Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this}, +divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, +equals:function(a){return a.x===this.x&&a.y===this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this}, +addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this}, +divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a):this.set(0,0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)}, +cross:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y=a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},crossSelf:function(a){return this.set(this.y*a.z-this.z*a.y,this.z*a.x-this.x*a.z,this.x*a.y-this.y*a.x)},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){return(new THREE.Vector3).sub(this,a).lengthSq()},setPositionFromMatrix:function(a){this.x=a.n14;this.y=a.n24;this.z=a.n34},setRotationFromMatrix:function(a){var b=Math.cos(this.y);this.y=Math.asin(a.n13); +Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12/b,a.n11/b)):(this.x=0,this.z=Math.atan2(a.n21,a.n22))},isZero:function(){return this.lengthSq()<1.0E-4}};THREE.Vector4=function(a,b,c,e){this.x=a||0;this.y=b||0;this.z=c||0;this.w=e!==void 0?e:1}; +THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,e){this.x=a;this.y=b;this.z=c;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- +b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, +normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.objects)},intersectObjects:function(a){var b,c,e=[];b=0;for(c=a.length;b0&&a>0&&h+a<1}for(var e,f=[],h=0,i=a.children.length;ha.scale.x)return[];e={distance:h,point:a.position,face:null,object:a};f.push(e)}else if(a instanceof THREE.Mesh){h= +b(this.origin,this.direction,a.matrixWorld.getPosition());if(h===null||h>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;for(var j,m,k,o,p,l,t,A,C=a.geometry,E=C.vertices,h=0,i=C.faces.length;h0:l<0)))if(l=p.dot((new THREE.Vector3).sub(j,t))/l,t=t.addSelf(A.multiplyScalar(l)),e instanceof THREE.Face3)c(t,j,m,k)&&(e={distance:this.origin.distanceTo(t),point:t,face:e,object:a},f.push(e));else if(e instanceof THREE.Face4&&(c(t,j,m,o)||c(t,m,k,o)))e={distance:this.origin.distanceTo(t),point:t,face:e,object:a},f.push(e)}return f}}; +THREE.Rectangle=function(){function a(){h=e-b;i=f-c}var b,c,e,f,h,i,j=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return h};this.getHeight=function(){return i};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return e};this.getBottom=function(){return f};this.set=function(h,i,o,p){j=!1;b=h;c=i;e=o;f=p;a()};this.addPoint=function(h,i){j?(j=!1,b=h,c=i,e=h,f=i):(b=bh?e:h,f=f>i?f:i);a()};this.add3Points= +function(h,i,o,p,l,t){j?(j=!1,b=ho?h>l?h:l:o>l?o:l,f=i>p?i>t?i:t:p>t?p:t):(b=ho?h>l?h>e?h:e:l>e?l:e:o>l?o>e?o:e:l>e?l:e,f=i>p?i>t?i>f?i:f:t>f?t:f:p>t?p>f?p:f:t>f?t:f);a()};this.addRectangle=function(h){j?(j=!1,b=h.getLeft(),c=h.getTop(),e=h.getRight(),f=h.getBottom()):(b=bh.getRight()?e:h.getRight(),f=f> +h.getBottom()?f:h.getBottom());a()};this.inflate=function(h){b-=h;c-=h;e+=h;f+=h;a()};this.minSelf=function(h){b=b>h.getLeft()?b:h.getLeft();c=c>h.getTop()?c:h.getTop();e=e=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){j=!0;f=e=c=b=0;a()};this.isEmpty=function(){return j}};THREE.Matrix3=function(){this.m=[]}; +THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b=this.m;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}}; +THREE.Matrix4=function(a,b,c,e,f,h,i,j,m,k,o,p,l,t,A,C){this.set(a!==void 0?a:1,b||0,c||0,e||0,f||0,h!==void 0?h:1,i||0,j||0,m||0,k||0,o!==void 0?o:1,p||0,l||0,t||0,A||0,C!==void 0?C:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,e,f,h,i,j,m,k,o,p,l,t,A,C){this.n11=a;this.n12=b;this.n13=c;this.n14=e;this.n21=f;this.n22=h;this.n23=i;this.n24=j;this.n31=m;this.n32=k;this.n33=o;this.n34=p;this.n41=l;this.n42=t;this.n43=A;this.n44=C;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, +b,c){var e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,h=THREE.Matrix4.__v3;h.sub(a,b).normalize();if(h.length()===0)h.z=1;e.cross(c,h).normalize();e.length()===0&&(h.x+=1.0E-4,e.cross(c,h).normalize());f.cross(h,e).normalize();this.n11=e.x;this.n12=f.x;this.n13=h.x;this.n21=e.y;this.n22=f.y;this.n23=h.y;this.n31=e.z;this.n32=f.z;this.n33=h.z;return this},multiplyVector3:function(a){var b=a.x,c=a.y,e=a.z,f=1/(this.n41*b+this.n42*c+this.n43*e+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*e+this.n14)*f; +a.y=(this.n21*b+this.n22*c+this.n23*e+this.n24)*f;a.z=(this.n31*b+this.n32*c+this.n33*e+this.n34)*f;return a},multiplyVector4:function(a){var b=a.x,c=a.y,e=a.z,f=a.w;a.x=this.n11*b+this.n12*c+this.n13*e+this.n14*f;a.y=this.n21*b+this.n22*c+this.n23*e+this.n24*f;a.z=this.n31*b+this.n32*c+this.n33*e+this.n34*f;a.w=this.n41*b+this.n42*c+this.n43*e+this.n44*f;return a},rotateAxis:function(a){var b=a.x,c=a.y,e=a.z;a.x=b*this.n11+c*this.n12+e*this.n13;a.y=b*this.n21+c*this.n22+e*this.n23;a.z=b*this.n31+ +c*this.n32+e*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},multiply:function(a,b){var c=a.n11,e=a.n12,f=a.n13,h=a.n14,i=a.n21,j=a.n22,m=a.n23,k=a.n24,o=a.n31,p=a.n32,l=a.n33,t=a.n34,A=a.n41,C=a.n42,E=a.n43,B=a.n44,va=b.n11,wa= +b.n12,pa=b.n13,qa=b.n14,N=b.n21,F=b.n22,z=b.n23,W=b.n24,U=b.n31,ja=b.n32,$=b.n33,xa=b.n34,Q=b.n41,G=b.n42,d=b.n43,ta=b.n44;this.n11=c*va+e*N+f*U+h*Q;this.n12=c*wa+e*F+f*ja+h*G;this.n13=c*pa+e*z+f*$+h*d;this.n14=c*qa+e*W+f*xa+h*ta;this.n21=i*va+j*N+m*U+k*Q;this.n22=i*wa+j*F+m*ja+k*G;this.n23=i*pa+j*z+m*$+k*d;this.n24=i*qa+j*W+m*xa+k*ta;this.n31=o*va+p*N+l*U+t*Q;this.n32=o*wa+p*F+l*ja+t*G;this.n33=o*pa+p*z+l*$+t*d;this.n34=o*qa+p*W+l*xa+t*ta;this.n41=A*va+C*N+E*U+B*Q;this.n42=A*wa+C*F+E*ja+B*G;this.n43= +A*pa+C*z+E*$+B*d;this.n44=A*qa+C*W+E*xa+B*ta;return this},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*= +a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,e=this.n14,f=this.n21,h=this.n22,i=this.n23,j=this.n24,m=this.n31,k=this.n32,o=this.n33,p=this.n34,l=this.n41,t=this.n42,A=this.n43,C=this.n44;return e*i*k*l-c*j*k*l-e*h*o*l+b*j*o*l+c*h*p*l-b*i*p*l-e*i*m*t+c*j*m*t+e*f*o*t-a*j*o*t-c*f*p*t+a*i*p*t+e*h*m*A-b*j*m*A-e*f*k*A+a*j*k*A+b*f*p*A-a*h*p*A-c*h*m*C+b*i* +m*C+c*f*k*C-a*i*k*C-b*f*o*C+a*h*o*C},transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32; +a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]= +this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]= +this.n34;a[b+15]=this.n44;return a},setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0, +0,a,b,0,0,0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,b){var c=Math.cos(b),e=Math.sin(b),f=1-c,h=a.x,i=a.y,j=a.z,m=f*h,k=f*i;this.set(m*h+c,m*i-e*j,m*j+e*i,0,m*i+e*j,k*i+c,k*j-e*h,0,m*j-e*i,k*j+e*h,f*j*j+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){if(!this.position)this.position=new THREE.Vector3;this.position.set(this.n14,this.n24,this.n34);return this.position},getColumnX:function(){if(!this.columnX)this.columnX= +new THREE.Vector3;this.columnX.set(this.n11,this.n21,this.n31);return this.columnX},getColumnY:function(){if(!this.columnY)this.columnY=new THREE.Vector3;this.columnY.set(this.n12,this.n22,this.n32);return this.columnY},getColumnZ:function(){if(!this.columnZ)this.columnZ=new THREE.Vector3;this.columnZ.set(this.n13,this.n23,this.n33);return this.columnZ},setRotationFromEuler:function(a,b){var c=a.x,e=a.y,f=a.z,h=Math.cos(c),c=Math.sin(c),i=Math.cos(e),e=Math.sin(e),j=Math.cos(f),f=Math.sin(f);switch(b){case "YXZ":var m= +i*j,k=i*f,o=e*j,p=e*f;this.n11=m+p*c;this.n12=o*c-k;this.n13=h*e;this.n21=h*f;this.n22=h*j;this.n23=-c;this.n31=k*c-o;this.n32=p+m*c;this.n33=h*i;break;case "ZXY":m=i*j;k=i*f;o=e*j;p=e*f;this.n11=m-p*c;this.n12=-h*f;this.n13=o+k*c;this.n21=k+o*c;this.n22=h*j;this.n23=p-m*c;this.n31=-h*e;this.n32=c;this.n33=h*i;break;case "ZYX":m=h*j;k=h*f;o=c*j;p=c*f;this.n11=i*j;this.n12=o*e-k;this.n13=m*e+p;this.n21=i*f;this.n22=p*e+m;this.n23=k*e-o;this.n31=-e;this.n32=c*i;this.n33=h*i;break;case "YZX":m=h*i;k= +h*e;o=c*i;p=c*e;this.n11=i*j;this.n12=p-m*f;this.n13=o*f+k;this.n21=f;this.n22=h*j;this.n23=-c*j;this.n31=-e*j;this.n32=k*f+o;this.n33=m-p*f;break;case "XZY":m=h*i;k=h*e;o=c*i;p=c*e;this.n11=i*j;this.n12=-f;this.n13=e*j;this.n21=m*f+p;this.n22=h*j;this.n23=k*f-o;this.n31=o*f-k;this.n32=c*j;this.n33=p*f+m;break;default:m=h*j,k=h*f,o=c*j,p=c*f,this.n11=i*j,this.n12=-i*f,this.n13=e,this.n21=k+o*e,this.n22=m-p*e,this.n23=-c*i,this.n31=p-m*e,this.n32=o+k*e,this.n33=h*i}return this},setRotationFromQuaternion:function(a){var b= +a.x,c=a.y,e=a.z,f=a.w,h=b+b,i=c+c,j=e+e,a=b*h,m=b*i;b*=j;var k=c*i;c*=j;e*=j;h*=f;i*=f;f*=j;this.n11=1-(k+e);this.n12=m-f;this.n13=b+i;this.n21=m+f;this.n22=1-(a+e);this.n23=c-h;this.n31=b-i;this.n32=c+h;this.n33=1-(a+k);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*=a;this.n21*=b;this.n22*=c;this.n23*=a;this.n31*=b;this.n32*=c;this.n33*=a;this.n41*=b;this.n42*=c;this.n43*=a;return this},compose:function(a,b,c){var e=THREE.Matrix4.__m1,f=THREE.Matrix4.__m2; +e.identity();e.setRotationFromQuaternion(b);f.setScale(c.x,c.y,c.z);this.multiply(e,f);this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},decompose:function(a,b,c){var e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,h=THREE.Matrix4.__v3;e.set(this.n11,this.n21,this.n31);f.set(this.n12,this.n22,this.n32);h.set(this.n13,this.n23,this.n33);a=a instanceof THREE.Vector3?a:new THREE.Vector3;b=b instanceof THREE.Quaternion?b:new THREE.Quaternion;c=c instanceof THREE.Vector3?c:new THREE.Vector3;c.x=e.length(); +c.y=f.length();c.z=h.length();a.x=this.n14;a.y=this.n24;a.z=this.n34;e=THREE.Matrix4.__m1;e.copy(this);e.n11/=c.x;e.n21/=c.x;e.n31/=c.x;e.n12/=c.y;e.n22/=c.y;e.n32/=c.y;e.n13/=c.z;e.n23/=c.z;e.n33/=c.z;b.setFromRotationMatrix(e);return[a,b,c]},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34},extractRotation:function(a,b){var c=1/b.x,e=1/b.y,f=1/b.z;this.n11=a.n11*c;this.n21=a.n21*c;this.n31=a.n31*c;this.n12=a.n12*e;this.n22=a.n22*e;this.n32=a.n32*e;this.n13=a.n13*f;this.n23= +a.n23*f;this.n33=a.n33*f}}; +THREE.Matrix4.makeInvert=function(a,b){var c=a.n11,e=a.n12,f=a.n13,h=a.n14,i=a.n21,j=a.n22,m=a.n23,k=a.n24,o=a.n31,p=a.n32,l=a.n33,t=a.n34,A=a.n41,C=a.n42,E=a.n43,B=a.n44;b===void 0&&(b=new THREE.Matrix4);b.n11=m*t*C-k*l*C+k*p*E-j*t*E-m*p*B+j*l*B;b.n12=h*l*C-f*t*C-h*p*E+e*t*E+f*p*B-e*l*B;b.n13=f*k*C-h*m*C+h*j*E-e*k*E-f*j*B+e*m*B;b.n14=h*m*p-f*k*p-h*j*l+e*k*l+f*j*t-e*m*t;b.n21=k*l*A-m*t*A-k*o*E+i*t*E+m*o*B-i*l*B;b.n22=f*t*A-h*l*A+h*o*E-c*t*E-f*o*B+c*l*B;b.n23=h*m*A-f*k*A-h*i*E+c*k*E+f*i*B-c*m*B;b.n24= +f*k*o-h*m*o+h*i*l-c*k*l-f*i*t+c*m*t;b.n31=j*t*A-k*p*A+k*o*C-i*t*C-j*o*B+i*p*B;b.n32=h*p*A-e*t*A-h*o*C+c*t*C+e*o*B-c*p*B;b.n33=f*k*A-h*j*A+h*i*C-c*k*C-e*i*B+c*j*B;b.n34=h*j*o-e*k*o-h*i*p+c*k*p+e*i*t-c*j*t;b.n41=m*p*A-j*l*A-m*o*C+i*l*C+j*o*E-i*p*E;b.n42=e*l*A-f*p*A+f*o*C-c*l*C-e*o*E+c*p*E;b.n43=f*j*A-e*m*A-f*i*C+c*m*C+e*i*E-c*j*E;b.n44=e*m*o-f*j*o+f*i*p-c*m*p-e*i*l+c*j*l;b.multiplyScalar(1/a.determinant());return b}; +THREE.Matrix4.makeInvert3x3=function(a){var b=a.m33,c=b.m,e=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,h=a.n32*a.n21-a.n31*a.n22,i=-a.n33*a.n12+a.n32*a.n13,j=a.n33*a.n11-a.n31*a.n13,m=-a.n32*a.n11+a.n31*a.n12,k=a.n23*a.n12-a.n22*a.n13,o=-a.n23*a.n11+a.n21*a.n13,p=a.n22*a.n11-a.n21*a.n12,a=a.n11*e+a.n21*i+a.n31*k;a===0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");a=1/a;c[0]=a*e;c[1]=a*f;c[2]=a*h;c[3]=a*i;c[4]=a*j;c[5]=a*m;c[6]=a*k;c[7]=a*o;c[8]=a*p;return b}; +THREE.Matrix4.makeFrustum=function(a,b,c,e,f,h){var i;i=new THREE.Matrix4;i.n11=2*f/(b-a);i.n12=0;i.n13=(b+a)/(b-a);i.n14=0;i.n21=0;i.n22=2*f/(e-c);i.n23=(e+c)/(e-c);i.n24=0;i.n31=0;i.n32=0;i.n33=-(h+f)/(h-f);i.n34=-2*h*f/(h-f);i.n41=0;i.n42=0;i.n43=-1;i.n44=0;return i};THREE.Matrix4.makePerspective=function(a,b,c,e){var f,a=c*Math.tan(a*Math.PI/360);f=-a;return THREE.Matrix4.makeFrustum(f*b,a*b,f,a,c,e)}; +THREE.Matrix4.makeOrtho=function(a,b,c,e,f,h){var i,j,m,k;i=new THREE.Matrix4;j=b-a;m=c-e;k=h-f;i.n11=2/j;i.n12=0;i.n13=0;i.n14=-((b+a)/j);i.n21=0;i.n22=2/m;i.n23=0;i.n24=-((c+e)/m);i.n31=0;i.n32=0;i.n33=-2/k;i.n34=-((h+f)/k);i.n41=0;i.n42=0;i.n43=0;i.n44=1;return i};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3;THREE.Matrix4.__m1=new THREE.Matrix4;THREE.Matrix4.__m2=new THREE.Matrix4; THREE.Object3D=function(){this.name="";this.id=THREE.Object3DCount++;this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder="XYZ";this.scale=new THREE.Vector3(1,1,1);this.flipSided=this.doubleSided=this.dynamic=!1;this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate= !0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.boundRadius=0;this.boundRadiusScale=1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this._vector=new THREE.Vector3}; -THREE.Object3D.prototype={constructor:THREE.Object3D,translate:function(b,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(b))},translateX:function(b){this.translate(b,this._vector.set(1,0,0))},translateY:function(b){this.translate(b,this._vector.set(0,1,0))},translateZ:function(b){this.translate(b,this._vector.set(0,0,1))},lookAt:function(b){this.matrix.lookAt(b,this.position,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},add:function(b){if(this.children.indexOf(b)=== --1)b.parent!==void 0&&b.parent.remove(b),b.parent=this,this.children.push(b)},remove:function(b){var c=this.children.indexOf(b);if(c!==-1)b.parent=void 0,this.children.splice(c,1)},getChildByName:function(b,c){var d,e,h;d=0;for(e=this.children.length;d=0&&h>=0&&j>=0&&k>=0?!0:i<0&&h<0||j<0&&k<0?!1:(i<0?d=Math.max(d,i/(i-h)):h<0&&(e=Math.min(e,i/(i-h))),j<0?d=Math.max(d,j/(j-k)):k<0&&(e=Math.min(e,j/(j-k))),eoa&&e.positionScreen.z0&&ga.z<1))X=J[F]=J[F]||new THREE.RenderableParticle,F++,D=X,D.x=ga.x/ga.w,D.y=ga.y/ga.w,D.z=ga.z,D.rotation=L.rotation.z,D.scale.x=L.scale.x*Math.abs(D.x-(ga.x+G.projectionMatrix.n11)/(ga.w+G.projectionMatrix.n14)),D.scale.y=L.scale.y* -Math.abs(D.y-(ga.y+G.projectionMatrix.n22)/(ga.w+G.projectionMatrix.n24)),D.materials=L.materials,I.elements.push(D);ra&&I.elements.sort(c);return I}};THREE.Quaternion=function(b,c,d,e){this.set(b||0,c||0,d||0,e!==void 0?e:1)}; -THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(b,c,d,e){this.x=b;this.y=c;this.z=d;this.w=e;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;this.w=b.w;return this},setFromEuler:function(b){var c=Math.PI/360,d=b.x*c,e=b.y*c,h=b.z*c,b=Math.cos(e),e=Math.sin(e),c=Math.cos(-h),h=Math.sin(-h),i=Math.cos(d),d=Math.sin(d),j=b*c,k=e*h;this.w=j*i-k*d;this.x=j*d+k*i;this.y=e*c*i+b*h*d;this.z=b*h*i-e*c*d;return this},setFromAxisAngle:function(b,c){var d=c/2,e=Math.sin(d); -this.x=b.x*e;this.y=b.y*e;this.z=b.z*e;this.w=Math.cos(d);return this},setFromRotationMatrix:function(b){var c=Math.pow(b.determinant(),1/3);this.w=Math.sqrt(Math.max(0,c+b.n11+b.n22+b.n33))/2;this.x=Math.sqrt(Math.max(0,c+b.n11-b.n22-b.n33))/2;this.y=Math.sqrt(Math.max(0,c-b.n11+b.n22-b.n33))/2;this.z=Math.sqrt(Math.max(0,c-b.n11-b.n22+b.n33))/2;this.x=b.n32-b.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=b.n13-b.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=b.n21-b.n12<0?-Math.abs(this.z):Math.abs(this.z); -this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var b=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);b==0?this.w=this.z=this.y=this.x=0:(b=1/b,this.x*=b,this.y*=b,this.z*=b,this.w*=b);return this},multiplySelf:function(b){var c= -this.x,d=this.y,e=this.z,h=this.w,i=b.x,j=b.y,k=b.z,b=b.w;this.x=c*b+h*i+d*k-e*j;this.y=d*b+h*j+e*i-c*k;this.z=e*b+h*k+c*j-d*i;this.w=h*b-c*i-d*j-e*k;return this},multiply:function(b,c){this.x=b.x*c.w+b.y*c.z-b.z*c.y+b.w*c.x;this.y=-b.x*c.z+b.y*c.w+b.z*c.x+b.w*c.y;this.z=b.x*c.y-b.y*c.x+b.z*c.w+b.w*c.z;this.w=-b.x*c.x-b.y*c.y-b.z*c.z+b.w*c.w;return this},multiplyVector3:function(b,c){c||(c=b);var d=b.x,e=b.y,h=b.z,i=this.x,j=this.y,k=this.z,o=this.w,s=o*d+j*h-k*e,p=o*e+k*d-i*h,n=o*h+i*e-j*d,d=-i* -d-j*e-k*h;c.x=s*o+d*-i+p*-k-n*-j;c.y=p*o+d*-j+n*-i-s*-k;c.z=n*o+d*-k+s*-j-p*-i;return c}}; -THREE.Quaternion.slerp=function(b,c,d,e){var h=b.w*c.w+b.x*c.x+b.y*c.y+b.z*c.z;h<0?(d.w=-c.w,d.x=-c.x,d.y=-c.y,d.z=-c.z,h=-h):d.copy(c);if(Math.abs(h)>=1)return d.w=b.w,d.x=b.x,d.y=b.y,d.z=b.z,d;var i=Math.acos(h),h=Math.sqrt(1-h*h);if(Math.abs(h)<0.0010)return d.w=0.5*(b.w+c.w),d.x=0.5*(b.x+c.x),d.y=0.5*(b.y+c.y),d.z=0.5*(b.z+c.z),d;c=Math.sin((1-e)*i)/h;e=Math.sin(e*i)/h;d.w=b.w*c+d.w*e;d.x=b.x*c+d.x*e;d.y=b.y*c+d.y*e;d.z=b.z*c+d.z*e;return d};THREE.Vertex=function(b){this.position=b||new THREE.Vector3}; -THREE.Face3=function(b,c,d,e,h,i){this.a=b;this.b=c;this.c=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materials=i instanceof Array?i:[i];this.centroid=new THREE.Vector3}; -THREE.Face4=function(b,c,d,e,h,i,j){this.a=b;this.b=c;this.c=d;this.d=e;this.normal=h instanceof THREE.Vector3?h:new THREE.Vector3;this.vertexNormals=h instanceof Array?h:[];this.color=i instanceof THREE.Color?i:new THREE.Color;this.vertexColors=i instanceof Array?i:[];this.vertexTangents=[];this.materials=j instanceof Array?j:[j];this.centroid=new THREE.Vector3};THREE.UV=function(b,c){this.u=b||0;this.v=c||0}; -THREE.UV.prototype={constructor:THREE.UV,set:function(b,c){this.u=b;this.v=c;return this},copy:function(b){this.u=b.u;this.v=b.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}};THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; -THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(b){var c=new THREE.Matrix4;c.extractRotation(b,new THREE.Vector3(1,1,1));for(var d=0,e=this.vertices.length;d0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x], -y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var c=1,d=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=b.position.x;if(b.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=b.position.y;if(b.position.z< -this.boundingBox.z[0])this.boundingBox.z[0]=b.position.z;else if(b.position.z>this.boundingBox.z[1])this.boundingBox.z[1]=b.position.z}}},computeBoundingSphere:function(){for(var b=0,c=0,d=this.vertices.length;cthis.points.length-2?i:i+1;d[3]=i>this.points.length-3?i:i+2;s=this.points[d[0]];p=this.points[d[1]]; -n=this.points[d[2]];v=this.points[d[3]];k=j*j;o=j*k;e.x=c(s.x,p.x,n.x,v.x,j,k,o);e.y=c(s.y,p.y,n.y,v.y,j,k,o);e.z=c(s.z,p.z,n.z,v.z,j,k,o);return e};this.getControlPointsArray=function(){var b,c,d=this.points.length,e=[];for(b=0;b=0&&h>=0&&f>=0&&i>=0?!0:e<0&&h<0||f<0&&i<0?!1:(e<0?c=Math.max(c,e/(e-h)):h<0&&(d=Math.min(d,e/(e-h))),f<0?c=Math.max(c,f/(f-i)):i<0&&(d=Math.min(d,f/(f-i))),dd&&i.positionScreen.z0&&F.z<1))za=wa[va]=wa[va]||new THREE.RenderableParticle,va++,B=za,B.x=F.x/F.w,B.y=F.y/F.w,B.z=F.z,B.rotation=O.rotation.z,B.scale.x=O.scale.x*Math.abs(B.x-(F.x+h.projectionMatrix.n11)/(F.w+h.projectionMatrix.n14)),B.scale.y=O.scale.y*Math.abs(B.y-(F.y+h.projectionMatrix.n22)/(F.w+h.projectionMatrix.n24)),B.materials=O.materials,qa.push(B);f&&qa.sort(b);return qa}};THREE.Quaternion=function(a,b,c,e){this.set(a||0,b||0,c||0,e!==void 0?e:1)}; +THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,e){this.x=a;this.y=b;this.z=c;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,e=a.y*b,f=a.z*b,a=Math.cos(e),e=Math.sin(e),b=Math.cos(-f),f=Math.sin(-f),h=Math.cos(c),c=Math.sin(c),i=a*b,j=e*f;this.w=i*h-j*c;this.x=i*c+j*h;this.y=e*b*h+a*f*c;this.z=a*f*h-e*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,e=Math.sin(c); +this.x=a.x*e;this.y=a.y*e;this.z=a.z*e;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); +this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= +this.x,c=this.y,e=this.z,f=this.w,h=a.x,i=a.y,j=a.z,a=a.w;this.x=b*a+f*h+c*j-e*i;this.y=c*a+f*i+e*h-b*j;this.z=e*a+f*j+b*i-c*h;this.w=f*a-b*h-c*i-e*j;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,f=a.z,h=this.x,i=this.y,j=this.z,m=this.w,k=m*c+i*f-j*e,o=m*e+j*c-h*f,p=m*f+h*e-i*c,c=-h* +c-i*e-j*f;b.x=k*m+c*-h+o*-j-p*-i;b.y=o*m+c*-i+p*-h-k*-j;b.z=p*m+c*-j+k*-i-o*-h;return b}};THREE.Quaternion.slerp=function(a,b,c,e){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var h=Math.acos(f),i=Math.sqrt(1-f*f);if(Math.abs(i)<0.0010)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;f=Math.sin((1-e)*h)/i;e=Math.sin(e*h)/i;c.w=a.w*f+b.w*e;c.x=a.x*f+b.x*e;c.y=a.y*f+b.y*e;c.z=a.z*f+b.z*e;return c}; +THREE.Vertex=function(a){this.position=a||new THREE.Vector3};THREE.Face3=function(a,b,c,e,f,h){this.a=a;this.b=b;this.c=c;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=h;this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,b,c,e,f,h,i){this.a=a;this.b=b;this.c=c;this.d=e;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materialIndex=i;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; +THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}}; +THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; +THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,e=this.vertices.length;c0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x], +y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.z< +this.boundingBox.z[0])this.boundingBox.z[0]=a.position.z;else if(a.position.z>this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,b=0,c=this.vertices.length;bthis.points.length-2?h:h+1;c[3]=h>this.points.length-3?h:h+2;k=this.points[c[0]];o=this.points[c[1]]; +p=this.points[c[2]];l=this.points[c[3]];j=i*i;m=i*j;e.x=b(k.x,o.x,p.x,l.x,i,j,m);e.y=b(k.y,o.y,p.y,l.y,i,j,m);e.z=b(k.z,o.z,p.z,l.z,i,j,m);return e};this.getControlPointsArray=function(){var a,b,c=this.points.length,e=[];for(a=0;a1){b=d.matrixWorldInverse;b=-(b.n31*this.position.x+b.n32*this.position.y+b.n33*this.position.z+b.n34);this.LODs[0].object3D.visible=!0;for(var e=1;e=this.LODs[e].visibleAtDistance)this.LODs[e-1].object3D.visible=!1, -this.LODs[e].object3D.visible=!0;else break;for(;e1){a=c.matrixWorldInverse;a=-(a.n31*this.position.x+a.n32*this.position.y+a.n33*this.position.z+a.n34);this.LODs[0].object3D.visible=!0;for(var e=1;e=this.LODs[e].visibleAtDistance)this.LODs[e-1].object3D.visible=!1, +this.LODs[e].object3D.visible=!0;else break;for(;e 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif", -lights_vertex:"if ( !enableLighting ) {\nvLightWeighting = vec3( 1.0 );\n} else {\nvLightWeighting = ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nfloat directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat pointLightWeighting = max( dot( transformedNormal, lVector ), 0.0 );\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting * lDistance;\n}\n#endif\n}", -lights_phong_pars_vertex:"#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif",lights_phong_vertex:"#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif", -lights_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",lights_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec3 pointVector = normalize( vPointLight[ i ].xyz );\nvec3 pointHalfVector = normalize( vPointLight[ i ].xyz + viewPosition );\nfloat pointDistance = vPointLight[ i ].w;\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\nfloat pointSpecularWeight = pow( pointDotNormalHalf, shininess );\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * pointDistance;\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = pow( dirDotNormalHalf, shininess );\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;", -color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\nvColor = color;\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#endif", +envmap_pars_fragment:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform float flipEnvMap;\nuniform int combine;\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * vReflect.x, vReflect.yz ) );\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\nif ( combine == 1 ) {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity );\n} else {\ngl_FragColor.xyz = gl_FragColor.xyz * cubeColor.xyz;\n}\n#endif", +envmap_pars_vertex:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = mat3( objectMatrix[ 0 ].xyz, objectMatrix[ 1 ].xyz, objectMatrix[ 2 ].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refractionRatio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif", +map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, gl_PointCoord );\n#endif",map_pars_vertex:"#ifdef USE_MAP\nvarying vec2 vUv;\nuniform vec4 offsetRepeat;\n#endif",map_pars_fragment:"#ifdef USE_MAP\nvarying vec2 vUv;\nuniform sampler2D map;\n#endif",map_vertex:"#ifdef USE_MAP\nvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",map_fragment:"#ifdef USE_MAP\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( map, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( map, vUv );\n#endif\n#endif", +lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\nuniform sampler2D lightMap;\n#endif",lightmap_pars_vertex:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\n#endif",lightmap_fragment:"#ifdef USE_LIGHTMAP\ngl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n#endif",lightmap_vertex:"#ifdef USE_LIGHTMAP\nvUv2 = uv2;\n#endif",lights_lambert_pars_vertex:"uniform vec3 ambient;\nuniform vec3 diffuse;\nuniform bool enableLighting;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif", +lights_lambert_vertex:"if ( !enableLighting ) {\nvLightWeighting = vec3( 1.0 );\n} else {\nvLightWeighting = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nfloat directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat pointLightWeighting = max( dot( transformedNormal, lVector ), 0.0 );\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting * lDistance;\n}\n#endif\nvLightWeighting = vLightWeighting * diffuse + ambient * ambientLightColor;\n}", +lights_phong_pars_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif",lights_phong_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif", +lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;", +lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDistance = lDistance;\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointDiffuseWeight = max( dot( normal, lVector ), 0.0 );\nfloat pointSpecularWeight = pow( pointDotNormalHalf, shininess );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * pointDistance;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = pow( dirDotNormalHalf, shininess );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif", +color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#endif", morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\nuniform float morphTargetInfluences[ 8 ];\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0, 0.0, 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\nmorphed += position;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( morphed, 1.0 );\n#endif", default_vertex:"#ifndef USE_MORPHTARGETS\n#ifndef USE_SKINNING\ngl_Position = projectionMatrix * mvPosition;\n#endif\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform float shadowDarkness;\nuniform float shadowBias;\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif", -shadowmap_fragment:"#ifdef USE_SHADOWMAP\n#ifdef SHADOWMAP_SOFT\nconst float xPixelOffset = 1.0 / SHADOWMAP_WIDTH;\nconst float yPixelOffset = 1.0 / SHADOWMAP_HEIGHT;\n#endif\nvec4 shadowColor = vec4( 1.0 );\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nshadowCoord.z += shadowBias;\nif ( shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0 ) {\n#ifdef SHADOWMAP_SOFT\nfloat shadow = 0.0;\nfor ( float y = -1.25; y <= 1.25; y += 1.25 )\nfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\nvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadow += 1.0;\n}\nshadow /= 9.0;\nshadowColor = shadowColor * vec4( vec3( ( 1.0 - shadowDarkness * shadow ) ), 1.0 );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec4( vec3( shadowDarkness ), 1.0 );\n#endif\n}\n}\ngl_FragColor = gl_FragColor * shadowColor;\n#endif", -shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( position, 1.0 );\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif"}; -THREE.UniformsUtils={merge:function(b){var c,d,e,h={};for(c=0;c= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0 ) {\n#ifdef SHADOWMAP_SOFT\nfloat shadow = 0.0;\nfor ( float y = -1.25; y <= 1.25; y += 1.25 )\nfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\nvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadow += 1.0;\n}\nshadow /= 9.0;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( shadowDarkness );\n#endif\n}\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( position, 1.0 );\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; +THREE.UniformsUtils={merge:function(a){var b,c,e,f={};for(b=0;b=0)c&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglVertexBuffer),f.vertexAttribPointer(b.position,3,f.FLOAT,!1,0,0));else if(j.morphTargetBase){e=i.program.attributes;j.morphTargetBase!== --1?(f.bindBuffer(f.ARRAY_BUFFER,h.__webglMorphTargetsBuffers[j.morphTargetBase]),f.vertexAttribPointer(e.position,3,f.FLOAT,!1,0,0)):e.position>=0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglVertexBuffer),f.vertexAttribPointer(e.position,3,f.FLOAT,!1,0,0));if(j.morphTargetForcedOrder.length)for(var x=0,o=j.morphTargetForcedOrder,n=j.morphTargetInfluences;xC&&(r=p,C=n[r]);f.bindBuffer(f.ARRAY_BUFFER,h.__webglMorphTargetsBuffers[r]);f.vertexAttribPointer(e["morphTarget"+x],3,f.FLOAT,!1,0,0);j.__webglMorphTargetInfluences[x]=C;o[r]=1;C=-1;x++}}i.program.uniforms.morphTargetInfluences!==null&&f.uniform1fv(i.program.uniforms.morphTargetInfluences, -j.__webglMorphTargetInfluences)}if(c){if(h.__webglCustomAttributes)for(k in h.__webglCustomAttributes)b[k]>=0&&(e=h.__webglCustomAttributes[k],f.bindBuffer(f.ARRAY_BUFFER,e.buffer),f.vertexAttribPointer(b[k],e.size,f.FLOAT,!1,0,0));b.color>=0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglColorBuffer),f.vertexAttribPointer(b.color,3,f.FLOAT,!1,0,0));b.normal>=0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglNormalBuffer),f.vertexAttribPointer(b.normal,3,f.FLOAT,!1,0,0));b.tangent>=0&&(f.bindBuffer(f.ARRAY_BUFFER, -h.__webglTangentBuffer),f.vertexAttribPointer(b.tangent,4,f.FLOAT,!1,0,0));b.uv>=0&&(h.__webglUVBuffer?(f.bindBuffer(f.ARRAY_BUFFER,h.__webglUVBuffer),f.vertexAttribPointer(b.uv,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(b.uv)):f.disableVertexAttribArray(b.uv));b.uv2>=0&&(h.__webglUV2Buffer?(f.bindBuffer(f.ARRAY_BUFFER,h.__webglUV2Buffer),f.vertexAttribPointer(b.uv2,2,f.FLOAT,!1,0,0),f.enableVertexAttribArray(b.uv2)):f.disableVertexAttribArray(b.uv2));i.skinning&&b.skinVertexA>=0&&b.skinVertexB>= -0&&b.skinIndex>=0&&b.skinWeight>=0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinVertexABuffer),f.vertexAttribPointer(b.skinVertexA,4,f.FLOAT,!1,0,0),f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinVertexBBuffer),f.vertexAttribPointer(b.skinVertexB,4,f.FLOAT,!1,0,0),f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinIndicesBuffer),f.vertexAttribPointer(b.skinIndex,4,f.FLOAT,!1,0,0),f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinWeightsBuffer),f.vertexAttribPointer(b.skinWeight,4,f.FLOAT,!1,0,0))}j instanceof THREE.Mesh?(i.wireframe? -(f.lineWidth(i.wireframeLinewidth),c&&f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,h.__webglLineBuffer),f.drawElements(f.LINES,h.__webglLineCount,f.UNSIGNED_SHORT,0)):(c&&f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,h.__webglFaceBuffer),f.drawElements(f.TRIANGLES,h.__webglFaceCount,f.UNSIGNED_SHORT,0)),E.info.render.calls++,E.info.render.vertices+=h.__webglFaceCount,E.info.render.faces+=h.__webglFaceCount/3):j instanceof THREE.Line?(j=j.type==THREE.LineStrip?f.LINE_STRIP:f.LINES,f.lineWidth(i.linewidth),f.drawArrays(j, -0,h.__webglLineCount),E.info.render.calls++):j instanceof THREE.ParticleSystem?(f.drawArrays(f.POINTS,0,h.__webglParticleCount),E.info.render.calls++):j instanceof THREE.Ribbon&&(f.drawArrays(f.TRIANGLE_STRIP,0,h.__webglVertexCount),E.info.render.calls++)}}function h(b,c,d){if(!b.__webglVertexBuffer)b.__webglVertexBuffer=f.createBuffer();if(!b.__webglNormalBuffer)b.__webglNormalBuffer=f.createBuffer();b.hasPos&&(f.bindBuffer(f.ARRAY_BUFFER,b.__webglVertexBuffer),f.bufferData(f.ARRAY_BUFFER,b.positionArray, -f.DYNAMIC_DRAW),f.enableVertexAttribArray(c.attributes.position),f.vertexAttribPointer(c.attributes.position,3,f.FLOAT,!1,0,0));if(b.hasNormal){f.bindBuffer(f.ARRAY_BUFFER,b.__webglNormalBuffer);if(d==THREE.FlatShading){var e,h,i,j,k,o,n,C,r,p,B=b.count*3;for(p=0;p0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglColorBuffer),f.bufferData(f.ARRAY_BUFFER,na,k));sa&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglNormalBuffer),f.bufferData(f.ARRAY_BUFFER, -U,k));ua&&qa.hasTangents&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglTangentBuffer),f.bufferData(f.ARRAY_BUFFER,$,k));ma&&V>0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglUVBuffer),f.bufferData(f.ARRAY_BUFFER,fa,k));ma&&W>0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglUV2Buffer),f.bufferData(f.ARRAY_BUFFER,ia,k));pa&&(f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,h.__webglFaceBuffer),f.bufferData(f.ELEMENT_ARRAY_BUFFER,ha,k),f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,h.__webglLineBuffer),f.bufferData(f.ELEMENT_ARRAY_BUFFER,X,k)); -y>0&&(f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinVertexABuffer),f.bufferData(f.ARRAY_BUFFER,aa,k),f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinVertexBBuffer),f.bufferData(f.ARRAY_BUFFER,ca,k),f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinIndicesBuffer),f.bufferData(f.ARRAY_BUFFER,da,k),f.bindBuffer(f.ARRAY_BUFFER,h.__webglSkinWeightsBuffer),f.bufferData(f.ARRAY_BUFFER,ea,k));x&&(delete h.__inittedArrays,delete h.__colorArray,delete h.__normalArray,delete h.__tangentArray,delete h.__uvArray,delete h.__uv2Array, -delete h.__faceArray,delete h.__vertexArray,delete h.__lineArray,delete h.__skinVertexAArray,delete h.__skinVertexBArray,delete h.__skinIndexArray,delete h.__skinWeightArray)}}d.__dirtyVertices=!1;d.__dirtyMorphTargets=!1;d.__dirtyElements=!1;d.__dirtyUvs=!1;d.__dirtyNormals=!1;d.__dirtyTangents=!1;d.__dirtyColors=!1;u(e)}else if(b instanceof THREE.Ribbon){d=b.geometry;if(d.__dirtyVertices||d.__dirtyColors){b=d;e=f.DYNAMIC_DRAW;p=b.vertices;j=b.colors;t=p.length;h=j.length;H=b.__vertexArray;k=b.__colorArray; -D=b.__dirtyColors;if(b.__dirtyVertices){for(x=0;x65535&&(n[k].counter+=1,o=n[k].hash+"_"+n[k].counter,b.geometryGroups[o]==void 0&&(b.geometryGroups[o]={faces:[],materials:j,vertices:0,numMorphTargets:r})),b.geometryGroups[o].faces.push(e),b.geometryGroups[o].vertices+=i;b.geometryGroupsList=[];for(var p in b.geometryGroups)b.geometryGroups[p].id=ua++,b.geometryGroupsList.push(b.geometryGroups[p])} -function U(b,c,d){b.push({buffer:c,object:d,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function V(b){if(b!=xa){switch(b){case THREE.AdditiveBlending:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.SRC_ALPHA,f.ONE);break;case THREE.SubtractiveBlending:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.ZERO,f.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.ZERO,f.SRC_COLOR);break;default:f.blendEquationSeparate(f.FUNC_ADD,f.FUNC_ADD),f.blendFuncSeparate(f.SRC_ALPHA, -f.ONE_MINUS_SRC_ALPHA,f.ONE,f.ONE_MINUS_SRC_ALPHA)}xa=b}}function O(b,c,d){(d.width&d.width-1)==0&&(d.height&d.height-1)==0?(f.texParameteri(b,f.TEXTURE_WRAP_S,A(c.wrapS)),f.texParameteri(b,f.TEXTURE_WRAP_T,A(c.wrapT)),f.texParameteri(b,f.TEXTURE_MAG_FILTER,A(c.magFilter)),f.texParameteri(b,f.TEXTURE_MIN_FILTER,A(c.minFilter)),f.generateMipmap(b)):(f.texParameteri(b,f.TEXTURE_WRAP_S,f.CLAMP_TO_EDGE),f.texParameteri(b,f.TEXTURE_WRAP_T,f.CLAMP_TO_EDGE),f.texParameteri(b,f.TEXTURE_MAG_FILTER,ia(c.magFilter)), -f.texParameteri(b,f.TEXTURE_MIN_FILTER,ia(c.minFilter)))}function G(b,c){if(b.needsUpdate){if(!b.__webglInit)b.__webglInit=!0,b.__webglTexture=f.createTexture(),E.info.memory.textures++;f.activeTexture(f.TEXTURE0+c);f.bindTexture(f.TEXTURE_2D,b.__webglTexture);b instanceof THREE.DataTexture?f.texImage2D(f.TEXTURE_2D,0,A(b.format),b.image.width,b.image.height,0,A(b.format),f.UNSIGNED_BYTE,b.image.data):f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,b.image);O(f.TEXTURE_2D,b,b.image);b.needsUpdate= -!1}else f.activeTexture(f.TEXTURE0+c),f.bindTexture(f.TEXTURE_2D,b.__webglTexture)}function ra(b,c){f.bindRenderbuffer(f.RENDERBUFFER,b);c.depthBuffer&&!c.stencilBuffer?(f.renderbufferStorage(f.RENDERBUFFER,f.DEPTH_COMPONENT16,c.width,c.height),f.framebufferRenderbuffer(f.FRAMEBUFFER,f.DEPTH_ATTACHMENT,f.RENDERBUFFER,b)):c.depthBuffer&&c.stencilBuffer?(f.renderbufferStorage(f.RENDERBUFFER,f.DEPTH_STENCIL,c.width,c.height),f.framebufferRenderbuffer(f.FRAMEBUFFER,f.DEPTH_STENCIL_ATTACHMENT,f.RENDERBUFFER, -b)):f.renderbufferStorage(f.RENDERBUFFER,f.RGBA4,c.width,c.height)}function oa(b){var c=b instanceof THREE.WebGLRenderTargetCube;if(b&&!b.__webglFramebuffer){if(b.depthBuffer===void 0)b.depthBuffer=!0;if(b.stencilBuffer===void 0)b.stencilBuffer=!0;b.__webglTexture=f.createTexture();if(c){b.__webglFramebuffer=[];b.__webglRenderbuffer=[];f.bindTexture(f.TEXTURE_CUBE_MAP,b.__webglTexture);O(f.TEXTURE_CUBE_MAP,b,b);for(var d=0;d<6;d++){b.__webglFramebuffer[d]=f.createFramebuffer();b.__webglRenderbuffer[d]= -f.createRenderbuffer();f.texImage2D(f.TEXTURE_CUBE_MAP_POSITIVE_X+d,0,A(b.format),b.width,b.height,0,A(b.format),A(b.type),null);var e=b,h=f.TEXTURE_CUBE_MAP_POSITIVE_X+d;f.bindFramebuffer(f.FRAMEBUFFER,b.__webglFramebuffer[d]);f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,h,e.__webglTexture,0);ra(b.__webglRenderbuffer[d],b)}}else b.__webglFramebuffer=f.createFramebuffer(),b.__webglRenderbuffer=f.createRenderbuffer(),f.bindTexture(f.TEXTURE_2D,b.__webglTexture),O(f.TEXTURE_2D,b,b),f.texImage2D(f.TEXTURE_2D, -0,A(b.format),b.width,b.height,0,A(b.format),A(b.type),null),d=f.TEXTURE_2D,f.bindFramebuffer(f.FRAMEBUFFER,b.__webglFramebuffer),f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,d,b.__webglTexture,0),f.bindRenderbuffer(f.RENDERBUFFER,b.__webglRenderbuffer),ra(b.__webglRenderbuffer,b);c?f.bindTexture(f.TEXTURE_CUBE_MAP,null):f.bindTexture(f.TEXTURE_2D,null);f.bindRenderbuffer(f.RENDERBUFFER,null);f.bindFramebuffer(f.FRAMEBUFFER,null)}b?(c=c?b.__webglFramebuffer[b.activeCubeFace]:b.__webglFramebuffer, -d=b.width,b=b.height,h=e=0):(c=null,d=Na,b=Ja,e=Ra,h=Sa);c!=Y&&(f.bindFramebuffer(f.FRAMEBUFFER,c),f.viewport(e,h,d,b),Y=c)}function sa(b){b instanceof THREE.WebGLRenderTargetCube?(f.bindTexture(f.TEXTURE_CUBE_MAP,b.__webglTexture),f.generateMipmap(f.TEXTURE_CUBE_MAP),f.bindTexture(f.TEXTURE_CUBE_MAP,null)):(f.bindTexture(f.TEXTURE_2D,b.__webglTexture),f.generateMipmap(f.TEXTURE_2D),f.bindTexture(f.TEXTURE_2D,null))}function fa(b,c){var d;b=="fragment"?d=f.createShader(f.FRAGMENT_SHADER):b=="vertex"&& -(d=f.createShader(f.VERTEX_SHADER));f.shaderSource(d,c);f.compileShader(d);if(!f.getShaderParameter(d,f.COMPILE_STATUS))return console.error(f.getShaderInfoLog(d)),console.error(c),null;return d}function ia(b){switch(b){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return f.NEAREST;default:return f.LINEAR}}function A(b){switch(b){case THREE.RepeatWrapping:return f.REPEAT;case THREE.ClampToEdgeWrapping:return f.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return f.MIRRORED_REPEAT; -case THREE.NearestFilter:return f.NEAREST;case THREE.NearestMipMapNearestFilter:return f.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return f.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return f.LINEAR;case THREE.LinearMipMapNearestFilter:return f.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return f.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return f.BYTE;case THREE.UnsignedByteType:return f.UNSIGNED_BYTE;case THREE.ShortType:return f.SHORT;case THREE.UnsignedShortType:return f.UNSIGNED_SHORT; -case THREE.IntType:return f.INT;case THREE.UnsignedShortType:return f.UNSIGNED_INT;case THREE.FloatType:return f.FLOAT;case THREE.AlphaFormat:return f.ALPHA;case THREE.RGBFormat:return f.RGB;case THREE.RGBAFormat:return f.RGBA;case THREE.LuminanceFormat:return f.LUMINANCE;case THREE.LuminanceAlphaFormat:return f.LUMINANCE_ALPHA}return 0}var E=this,f,W=[],Q=null,Y=null,L=-1,X=null,ua=0,Ka=null,La=null,xa=null,ta=null,va=null,Va=null,Wa=null,Xa=null,Ra=0,Sa=0,Na=0,Ja=0,pa=[new THREE.Vector4,new THREE.Vector4, -new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],ya=new THREE.Matrix4,Oa=new Float32Array(16),Pa=new Float32Array(16),Ba=new THREE.Vector4,Ua={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},b=b||{},Ca=b.canvas!==void 0?b.canvas:document.createElement("canvas"),T=b.stencil!==void 0?b.stencil:!0,bb=b.preserveDrawingBuffer!==void 0?b.preserveDrawingBuffer:!1,cb=b.antialias!==void 0?b.antialias:!1,ma=b.clearColor!== -void 0?new THREE.Color(b.clearColor):new THREE.Color(0),za=b.clearAlpha!==void 0?b.clearAlpha:0,Ta=b.maxLights!==void 0?b.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=Ca;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar= -5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=!0;var la,Ma=[],b=THREE.ShaderLib.depthRGBA,$a=THREE.UniformsUtils.clone(b.uniforms),Qa=new THREE.ShaderMaterial({fragmentShader:b.fragmentShader,vertexShader:b.vertexShader,uniforms:$a}),Ya=new THREE.ShaderMaterial({fragmentShader:b.fragmentShader,vertexShader:b.vertexShader,uniforms:$a,morphTargets:!0});Qa._shadowPass=!0;Ya._shadowPass=!0;try{if(!(f=Ca.getContext("experimental-webgl",{antialias:cb,stencil:T, -preserveDrawingBuffer:bb})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+f.getParameter(f.VERSION)+" | "+f.getParameter(f.VENDOR)+" | "+f.getParameter(f.RENDERER)+" | "+f.getParameter(f.SHADING_LANGUAGE_VERSION))}catch(db){console.error(db)}f.clearColor(0,0,0,1);f.clearDepth(1);f.clearStencil(0);f.enable(f.DEPTH_TEST);f.depthFunc(f.LEQUAL);f.frontFace(f.CCW);f.cullFace(f.BACK);f.enable(f.CULL_FACE);f.enable(f.BLEND);f.blendEquation(f.FUNC_ADD);f.blendFunc(f.SRC_ALPHA, -f.ONE_MINUS_SRC_ALPHA);f.clearColor(ma.r,ma.g,ma.b,za);this.context=f;var ab=f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,t={};t.vertices=new Float32Array(16);t.faces=new Uint16Array(6);T=0;t.vertices[T++]=-1;t.vertices[T++]=-1;t.vertices[T++]=0;t.vertices[T++]=1;t.vertices[T++]=1;t.vertices[T++]=-1;t.vertices[T++]=1;t.vertices[T++]=1;t.vertices[T++]=1;t.vertices[T++]=1;t.vertices[T++]=1;t.vertices[T++]=0;t.vertices[T++]=-1;t.vertices[T++]=1;t.vertices[T++]=0;T=t.vertices[T++]=0;t.faces[T++]= -0;t.faces[T++]=1;t.faces[T++]=2;t.faces[T++]=0;t.faces[T++]=2;t.faces[T++]=3;t.vertexBuffer=f.createBuffer();t.elementBuffer=f.createBuffer();f.bindBuffer(f.ARRAY_BUFFER,t.vertexBuffer);f.bufferData(f.ARRAY_BUFFER,t.vertices,f.STATIC_DRAW);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,t.elementBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,t.faces,f.STATIC_DRAW);t.program=f.createProgram();f.attachShader(t.program,fa("fragment",THREE.ShaderLib.sprite.fragmentShader));f.attachShader(t.program,fa("vertex",THREE.ShaderLib.sprite.vertexShader)); -f.linkProgram(t.program);t.attributes={};t.uniforms={};t.attributes.position=f.getAttribLocation(t.program,"position");t.attributes.uv=f.getAttribLocation(t.program,"uv");t.uniforms.uvOffset=f.getUniformLocation(t.program,"uvOffset");t.uniforms.uvScale=f.getUniformLocation(t.program,"uvScale");t.uniforms.rotation=f.getUniformLocation(t.program,"rotation");t.uniforms.scale=f.getUniformLocation(t.program,"scale");t.uniforms.alignment=f.getUniformLocation(t.program,"alignment");t.uniforms.color=f.getUniformLocation(t.program, -"color");t.uniforms.map=f.getUniformLocation(t.program,"map");t.uniforms.opacity=f.getUniformLocation(t.program,"opacity");t.uniforms.useScreenCoordinates=f.getUniformLocation(t.program,"useScreenCoordinates");t.uniforms.affectedByDistance=f.getUniformLocation(t.program,"affectedByDistance");t.uniforms.screenPosition=f.getUniformLocation(t.program,"screenPosition");t.uniforms.modelViewMatrix=f.getUniformLocation(t.program,"modelViewMatrix");t.uniforms.projectionMatrix=f.getUniformLocation(t.program, -"projectionMatrix");var Za=!1;this.setSize=function(b,c){Ca.width=b;Ca.height=c;this.setViewport(0,0,Ca.width,Ca.height)};this.setViewport=function(b,c,d,e){Ra=b;Sa=c;Na=d;Ja=e;f.viewport(Ra,Sa,Na,Ja)};this.setScissor=function(b,c,d,e){f.scissor(b,c,d,e)};this.enableScissorTest=function(b){b?f.enable(f.SCISSOR_TEST):f.disable(f.SCISSOR_TEST)};this.setClearColorHex=function(b,c){ma.setHex(b);za=c;f.clearColor(ma.r,ma.g,ma.b,za)};this.setClearColor=function(b,c){ma.copy(b);za=c;f.clearColor(ma.r,ma.g, -ma.b,za)};this.getClearColor=function(){return ma};this.getClearAlpha=function(){return za};this.clear=function(b,c,d){var e=0;if(b==void 0||b)e|=f.COLOR_BUFFER_BIT;if(c==void 0||c)e|=f.DEPTH_BUFFER_BIT;if(d==void 0||d)e|=f.STENCIL_BUFFER_BIT;f.clear(e)};this.getContext=function(){return f};this.deallocateObject=function(b){if(b.__webglInit)if(b.__webglInit=!1,delete b._modelViewMatrix,delete b._normalMatrixArray,delete b._modelViewMatrixArray,delete b._objectMatrixArray,b instanceof THREE.Mesh)for(g in b.geometry.geometryGroups){var c= -b.geometry.geometryGroups[g];f.deleteBuffer(c.__webglVertexBuffer);f.deleteBuffer(c.__webglNormalBuffer);f.deleteBuffer(c.__webglTangentBuffer);f.deleteBuffer(c.__webglColorBuffer);f.deleteBuffer(c.__webglUVBuffer);f.deleteBuffer(c.__webglUV2Buffer);f.deleteBuffer(c.__webglSkinVertexABuffer);f.deleteBuffer(c.__webglSkinVertexBBuffer);f.deleteBuffer(c.__webglSkinIndicesBuffer);f.deleteBuffer(c.__webglSkinWeightsBuffer);f.deleteBuffer(c.__webglFaceBuffer);f.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d= -0,e=c.numMorphTargets;d=0&&f.enableVertexAttribArray(s.position);s.color>=0&&f.enableVertexAttribArray(s.color);s.normal>=0&&f.enableVertexAttribArray(s.normal);s.tangent>=0&&f.enableVertexAttribArray(s.tangent);b.skinning&&s.skinVertexA>=0&&s.skinVertexB>=0&&s.skinIndex>=0&&s.skinWeight>=0&&(f.enableVertexAttribArray(s.skinVertexA), -f.enableVertexAttribArray(s.skinVertexB),f.enableVertexAttribArray(s.skinIndex),f.enableVertexAttribArray(s.skinWeight));if(b.attributes)for(i in b.attributes)s[i]!==void 0&&s[i]>=0&&f.enableVertexAttribArray(s[i]);if(b.morphTargets)for(i=b.numSupportedMorphTargets=0;i=0&&(f.enableVertexAttribArray(s[t]),b.numSupportedMorphTargets++);b.uniformsList=[];for(h in b.uniforms)b.uniformsList.push([b.uniforms[h],h])};this.clearTarget=function(b,d,c,e){oa(b); -this.clear(d,c,e)};this.render=function(b,c,n,t){var u,A,wa,x,R,G,C,r,S,B=b.fog;L=-1;this.shadowMapEnabled&&F(b,c);E.info.render.calls=0;E.info.render.vertices=0;E.info.render.faces=0;c.parent==null&&(console.warn("Camera is not on the Scene. Adding it..."),b.add(c));b.updateMatrixWorld();c.matrixWorldInverse.getInverse(c.matrixWorld);c.matrixWorldInverse.flattenToArray(Pa);c.projectionMatrix.flattenToArray(Oa);ya.multiply(c.projectionMatrix,c.matrixWorldInverse);s(ya);this.initWebGLObjects(b);S= -b.__webglLights;oa(n);(this.autoClear||t)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);R=b.__webglObjects.length;for(t=0;t=0;t--)if(u=b.__webglObjects[t],u.render){C=u.object;r=u.buffer;wa=u.opaque;i(C);for(u=0;u0||s.faceVertexUvs.length>0)h.__uvArray=new Float32Array(j*2);if(s.faceUvs.length>1||s.faceVertexUvs.length>1)h.__uv2Array=new Float32Array(j*2)}if(i.geometry.skinWeights.length&& -i.geometry.skinIndices.length)h.__skinVertexAArray=new Float32Array(j*4),h.__skinVertexBArray=new Float32Array(j*4),h.__skinIndexArray=new Float32Array(j*4),h.__skinWeightArray=new Float32Array(j*4);h.__faceArray=new Uint16Array(v*3+(i.geometry.edgeFaces?i.geometry.edgeFaces.length*6:0));h.__lineArray=new Uint16Array(w*2);if(h.numMorphTargets){h.__morphTargetsArrays=[];s=0;for(t=h.numMorphTargets;s=0)return a.geometry.materials[d.materialIndex]}function c(a,b,c){var e,h,f,i=a.vertices,u=i.length,v=a.colors,q=v.length,j=a.__vertexArray,k=a.__colorArray,m=a.__sortArray,P=a.__dirtyVertices,o=a.__dirtyColors,p=a.__webglCustomAttributesList,l;if(p){f=0;for(e=p.length;f=0)b&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer),d.vertexAttribPointer(a.position,3,d.FLOAT,!1,0,0));else if(i.morphTargetBase){c=h.program.attributes;i.morphTargetBase!==-1?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[i.morphTargetBase]),d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0)):c.position>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer), +d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0));if(i.morphTargetForcedOrder.length){j=0;var v=i.morphTargetForcedOrder;for(u=i.morphTargetInfluences;jq&&(k=m,q=u[k]);d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[k]);d.vertexAttribPointer(c["morphTarget"+j],3,d.FLOAT,!1,0,0);i.__webglMorphTargetInfluences[j]=q;v[k]=1;q=-1;j++}}h.program.uniforms.morphTargetInfluences!==null&&d.uniform1fv(h.program.uniforms.morphTargetInfluences,i.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){j=0;for(u=f.__webglCustomAttributesList.length;j= +0&&(d.bindBuffer(d.ARRAY_BUFFER,c.buffer),d.vertexAttribPointer(a[c.buffer.belongsToAttribute],c.size,d.FLOAT,!1,0,0))}a.color>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglColorBuffer),d.vertexAttribPointer(a.color,3,d.FLOAT,!1,0,0));a.normal>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglNormalBuffer),d.vertexAttribPointer(a.normal,3,d.FLOAT,!1,0,0));a.tangent>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglTangentBuffer),d.vertexAttribPointer(a.tangent,4,d.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(d.bindBuffer(d.ARRAY_BUFFER, +f.__webglUVBuffer),d.vertexAttribPointer(a.uv,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv)):d.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglUV2Buffer),d.vertexAttribPointer(a.uv2,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv2)):d.disableVertexAttribArray(a.uv2));h.skinning&&a.skinVertexA>=0&&a.skinVertexB>=0&&a.skinIndex>=0&&a.skinWeight>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexABuffer),d.vertexAttribPointer(a.skinVertexA,4, +d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),d.vertexAttribPointer(a.skinVertexB,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),d.vertexAttribPointer(a.skinIndex,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),d.vertexAttribPointer(a.skinWeight,4,d.FLOAT,!1,0,0))}i instanceof THREE.Mesh?(h.wireframe?(d.lineWidth(h.wireframeLinewidth),b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),d.drawElements(d.LINES,f.__webglLineCount, +d.UNSIGNED_SHORT,0)):(b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),d.drawElements(d.TRIANGLES,f.__webglFaceCount,d.UNSIGNED_SHORT,0)),G.info.render.calls++,G.info.render.vertices+=f.__webglFaceCount,G.info.render.faces+=f.__webglFaceCount/3):i instanceof THREE.Line?(i=i.type===THREE.LineStrip?d.LINE_STRIP:d.LINES,d.lineWidth(h.linewidth),d.drawArrays(i,0,f.__webglLineCount),G.info.render.calls++):i instanceof THREE.ParticleSystem?(d.drawArrays(d.POINTS,0,f.__webglParticleCount),G.info.render.calls++): +i instanceof THREE.Ribbon&&(d.drawArrays(d.TRIANGLE_STRIP,0,f.__webglVertexCount),G.info.render.calls++)}}function h(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=d.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=d.createBuffer();a.hasPos&&(d.bindBuffer(d.ARRAY_BUFFER,a.__webglVertexBuffer),d.bufferData(d.ARRAY_BUFFER,a.positionArray,d.DYNAMIC_DRAW),d.enableVertexAttribArray(b.attributes.position),d.vertexAttribPointer(b.attributes.position,3,d.FLOAT,!1,0,0));if(a.hasNormal){d.bindBuffer(d.ARRAY_BUFFER, +a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,f,h,i,j,v,k,m,p,o,l=a.count*3;for(o=0;o=0)b=b.geometry.materials[d],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=c)b.transparent?(a.transparent= +b,a.opaque=null):(a.opaque=b,a.transparent=null)}function A(a,b){return b.z-a.z}function C(a){var b,c,k,m=0,K,l,u,v,q=a.lights;ra||(ra=new THREE.PerspectiveCamera(G.shadowCameraFov,G.shadowMapWidth/G.shadowMapHeight,G.shadowCameraNear,G.shadowCameraFar));b=0;for(c=q.length;b=0;d--)a[d].object===b&&a.splice(d,1)}function qa(a,b,d){a.push({buffer:b,object:d,opaque:null,transparent:null})}function N(a){if(a!==ka){switch(a){case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD, +d.FUNC_ADD),d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}ka=a}}function F(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(d.texParameteri(a,d.TEXTURE_WRAP_S,Q(b.wrapS)),d.texParameteri(a,d.TEXTURE_WRAP_T,Q(b.wrapT)),d.texParameteri(a,d.TEXTURE_MAG_FILTER,Q(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,Q(b.minFilter)),d.generateMipmap(a)):(d.texParameteri(a,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE), +d.texParameteri(a,d.TEXTURE_MAG_FILTER,xa(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,xa(b.minFilter)))}function z(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=d.createTexture(),G.info.memory.textures++;d.activeTexture(d.TEXTURE0+b);d.bindTexture(d.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture?d.texImage2D(d.TEXTURE_2D,0,Q(a.format),a.image.width,a.image.height,0,Q(a.format),d.UNSIGNED_BYTE,a.image.data):d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA, +d.UNSIGNED_BYTE,a.image);F(d.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+b),d.bindTexture(d.TEXTURE_2D,a.__webglTexture)}function W(a,b){d.bindRenderbuffer(d.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_ATTACHMENT,d.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_STENCIL,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER, +d.DEPTH_STENCIL_ATTACHMENT,d.RENDERBUFFER,a)):d.renderbufferStorage(d.RENDERBUFFER,d.RGBA4,b.width,b.height)}function U(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=d.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture);F(d.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]= +d.createFramebuffer();a.__webglRenderbuffer[c]=d.createRenderbuffer();d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,Q(a.format),a.width,a.height,0,Q(a.format),Q(a.type),null);var e=a,f=d.TEXTURE_CUBE_MAP_POSITIVE_X+c;d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer[c]);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,f,e.__webglTexture,0);W(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=d.createFramebuffer(),a.__webglRenderbuffer=d.createRenderbuffer(),d.bindTexture(d.TEXTURE_2D, +a.__webglTexture),F(d.TEXTURE_2D,a,a),d.texImage2D(d.TEXTURE_2D,0,Q(a.format),a.width,a.height,0,Q(a.format),Q(a.type),null),c=d.TEXTURE_2D,d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,c,a.__webglTexture,0),d.bindRenderbuffer(d.RENDERBUFFER,a.__webglRenderbuffer),W(a.__webglRenderbuffer,a);b?d.bindTexture(d.TEXTURE_CUBE_MAP,null):d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER, +null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=Ca,a=ya,e=Ha,f=Aa);b!==ua&&(d.bindFramebuffer(d.FRAMEBUFFER,b),d.viewport(e,f,c,a),ua=b)}function ja(a){a instanceof THREE.WebGLRenderTargetCube?(d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture),d.generateMipmap(d.TEXTURE_CUBE_MAP),d.bindTexture(d.TEXTURE_CUBE_MAP,null)):(d.bindTexture(d.TEXTURE_2D,a.__webglTexture),d.generateMipmap(d.TEXTURE_2D),d.bindTexture(d.TEXTURE_2D,null))}function $(a, +b){var c;a==="fragment"?c=d.createShader(d.FRAGMENT_SHADER):a==="vertex"&&(c=d.createShader(d.VERTEX_SHADER));d.shaderSource(c,b);d.compileShader(c);if(!d.getShaderParameter(c,d.COMPILE_STATUS))return console.error(d.getShaderInfoLog(c)),console.error(b),null;return c}function xa(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST;default:return d.LINEAR}}function Q(a){switch(a){case THREE.RepeatWrapping:return d.REPEAT; +case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return d.BYTE; +case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;case THREE.AlphaFormat:return d.ALPHA;case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0}var G=this,d,ta=[],Wa= +null,ua=null,J=-1,R=null,S=0,T=null,X=null,ka=null,aa=null,O=null,za=null,La=null,Ra=null,Ha=0,Aa=0,Ca=0,ya=0,ha=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Da=new THREE.Matrix4,Ta=new Float32Array(16),Ua=new Float32Array(16),Ja=new THREE.Vector4,Ya={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},Ba=a.canvas!==void 0?a.canvas:document.createElement("canvas"), +I=a.stencil!==void 0?a.stencil:!0,cb=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,db=a.antialias!==void 0?a.antialias:!1,Y=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),Fa=a.clearAlpha!==void 0?a.clearAlpha:0,Xa=a.maxLights!==void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=Ba;this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth= +this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var ra,Sa=[],a=THREE.ShaderLib.depthRGBA,ab=THREE.UniformsUtils.clone(a.uniforms),Va=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader, +vertexShader:a.vertexShader,uniforms:ab}),Za=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:ab,morphTargets:!0});Va._shadowPass=!0;Za._shadowPass=!0;try{if(!(d=Ba.getContext("experimental-webgl",{antialias:db,stencil:I,preserveDrawingBuffer:cb})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+d.getParameter(d.VERSION)+" | "+d.getParameter(d.VENDOR)+" | "+d.getParameter(d.RENDERER)+" | "+d.getParameter(d.SHADING_LANGUAGE_VERSION))}catch(eb){console.error(eb)}d.clearColor(0, +0,0,1);d.clearDepth(1);d.clearStencil(0);d.enable(d.DEPTH_TEST);d.depthFunc(d.LEQUAL);d.frontFace(d.CCW);d.cullFace(d.BACK);d.enable(d.CULL_FACE);d.enable(d.BLEND);d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA);d.clearColor(Y.r,Y.g,Y.b,Fa);this.context=d;var bb=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,r={};r.vertices=new Float32Array(16);r.faces=new Uint16Array(6);I=0;r.vertices[I++]=-1;r.vertices[I++]=-1;r.vertices[I++]=0;r.vertices[I++]=1;r.vertices[I++]=1; +r.vertices[I++]=-1;r.vertices[I++]=1;r.vertices[I++]=1;r.vertices[I++]=1;r.vertices[I++]=1;r.vertices[I++]=1;r.vertices[I++]=0;r.vertices[I++]=-1;r.vertices[I++]=1;r.vertices[I++]=0;I=r.vertices[I++]=0;r.faces[I++]=0;r.faces[I++]=1;r.faces[I++]=2;r.faces[I++]=0;r.faces[I++]=2;r.faces[I++]=3;r.vertexBuffer=d.createBuffer();r.elementBuffer=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,r.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,r.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,r.elementBuffer); +d.bufferData(d.ELEMENT_ARRAY_BUFFER,r.faces,d.STATIC_DRAW);r.program=d.createProgram();d.attachShader(r.program,$("fragment",THREE.ShaderLib.sprite.fragmentShader));d.attachShader(r.program,$("vertex",THREE.ShaderLib.sprite.vertexShader));d.linkProgram(r.program);r.attributes={};r.uniforms={};r.attributes.position=d.getAttribLocation(r.program,"position");r.attributes.uv=d.getAttribLocation(r.program,"uv");r.uniforms.uvOffset=d.getUniformLocation(r.program,"uvOffset");r.uniforms.uvScale=d.getUniformLocation(r.program, +"uvScale");r.uniforms.rotation=d.getUniformLocation(r.program,"rotation");r.uniforms.scale=d.getUniformLocation(r.program,"scale");r.uniforms.alignment=d.getUniformLocation(r.program,"alignment");r.uniforms.color=d.getUniformLocation(r.program,"color");r.uniforms.map=d.getUniformLocation(r.program,"map");r.uniforms.opacity=d.getUniformLocation(r.program,"opacity");r.uniforms.useScreenCoordinates=d.getUniformLocation(r.program,"useScreenCoordinates");r.uniforms.affectedByDistance=d.getUniformLocation(r.program, +"affectedByDistance");r.uniforms.screenPosition=d.getUniformLocation(r.program,"screenPosition");r.uniforms.modelViewMatrix=d.getUniformLocation(r.program,"modelViewMatrix");r.uniforms.projectionMatrix=d.getUniformLocation(r.program,"projectionMatrix");var $a=!1;this.setSize=function(a,b){Ba.width=a;Ba.height=b;this.setViewport(0,0,Ba.width,Ba.height)};this.setViewport=function(a,b,c,e){Ha=a;Aa=b;Ca=c;ya=e;d.viewport(Ha,Aa,Ca,ya)};this.setScissor=function(a,b,c,e){d.scissor(a,b,c,e)};this.enableScissorTest= +function(a){a?d.enable(d.SCISSOR_TEST):d.disable(d.SCISSOR_TEST)};this.setClearColorHex=function(a,b){Y.setHex(a);Fa=b;d.clearColor(Y.r,Y.g,Y.b,Fa)};this.setClearColor=function(a,b){Y.copy(a);Fa=b;d.clearColor(Y.r,Y.g,Y.b,Fa)};this.getClearColor=function(){return Y};this.getClearAlpha=function(){return Fa};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=d.COLOR_BUFFER_BIT;if(b===void 0||b)e|=d.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=d.STENCIL_BUFFER_BIT;d.clear(e)};this.getContext=function(){return d}; +this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(g in a.geometry.geometryGroups){var b=a.geometry.geometryGroups[g];d.deleteBuffer(b.__webglVertexBuffer);d.deleteBuffer(b.__webglNormalBuffer);d.deleteBuffer(b.__webglTangentBuffer);d.deleteBuffer(b.__webglColorBuffer);d.deleteBuffer(b.__webglUVBuffer);d.deleteBuffer(b.__webglUV2Buffer);d.deleteBuffer(b.__webglSkinVertexABuffer); +d.deleteBuffer(b.__webglSkinVertexBBuffer);d.deleteBuffer(b.__webglSkinIndicesBuffer);d.deleteBuffer(b.__webglSkinWeightsBuffer);d.deleteBuffer(b.__webglFaceBuffer);d.deleteBuffer(b.__webglLineBuffer);if(b.numMorphTargets)for(var c=0,e=b.numMorphTargets;c=0&&d.enableVertexAttribArray(l.position);l.color>=0&&d.enableVertexAttribArray(l.color);l.normal>=0&&d.enableVertexAttribArray(l.normal); +l.tangent>=0&&d.enableVertexAttribArray(l.tangent);a.skinning&&l.skinVertexA>=0&&l.skinVertexB>=0&&l.skinIndex>=0&&l.skinWeight>=0&&(d.enableVertexAttribArray(l.skinVertexA),d.enableVertexAttribArray(l.skinVertexB),d.enableVertexAttribArray(l.skinIndex),d.enableVertexAttribArray(l.skinWeight));if(a.attributes)for(h in a.attributes)l[h]!==void 0&&l[h]>=0&&d.enableVertexAttribArray(l[h]);if(a.morphTargets)for(h=a.numSupportedMorphTargets=0;h=0&&(d.enableVertexAttribArray(l[r]), +a.numSupportedMorphTargets++);a.uniformsList=[];for(f in a.uniforms)a.uniformsList.push([a.uniforms[f],f])};this.clearTarget=function(a,b,c,d){U(a);this.clear(b,c,d)};this.updateShadowMap=function(a,b){C(a,b)};this.render=function(a,b,c,r){var Ia,K,Ea,u,v,q,z,Pa=a.lights,Qa=a.fog;J=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&C(a,b);G.info.render.calls=0;G.info.render.vertices=0;G.info.render.faces=0;if(b.matrixAutoUpdate){for(Ea=b;Ea.parent;)Ea= +Ea.parent;Ea.update(void 0,!0)}a.update(void 0,!1,b);b.matrixWorldInverse.flattenToArray(Ua);b.projectionMatrix.flattenToArray(Ta);Da.multiply(b.projectionMatrix,b.matrixWorldInverse);o(Da);U(c);(this.autoClear||r)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);Ea=a.__webglObjects.length;for(r=0;r=0;r--)if(v=a.__webglObjects[r],v.render&&(q=v.object,z=v.buffer,K=v.opaque))i(q),j(K.depthTest),m(K.depthWrite),k(K.polygonOffset,K.polygonOffsetFactor,K.polygonOffsetUnits), +f(b,Pa,Qa,K,z,q);for(r=0;r65535&&(r[l].counter+=1,p=r[l].hash+"_"+r[l].counter,j.geometryGroups[p]===void 0&&(j.geometryGroups[p]={faces:[], +materialIndex:q,vertices:0,numMorphTargets:t})),j.geometryGroups[p].faces.push(k),j.geometryGroups[p].vertices+=o;j.geometryGroupsList=[];k=void 0;for(k in j.geometryGroups)j.geometryGroups[k].id=S++,j.geometryGroupsList.push(j.geometryGroups[k])}for(h in i.geometryGroups)if(j=i.geometryGroups[h],!j.__webglVertexBuffer){k=j;k.__webglVertexBuffer=d.createBuffer();k.__webglNormalBuffer=d.createBuffer();k.__webglTangentBuffer=d.createBuffer();k.__webglColorBuffer=d.createBuffer();k.__webglUVBuffer=d.createBuffer(); +k.__webglUV2Buffer=d.createBuffer();k.__webglSkinVertexABuffer=d.createBuffer();k.__webglSkinVertexBBuffer=d.createBuffer();k.__webglSkinIndicesBuffer=d.createBuffer();k.__webglSkinWeightsBuffer=d.createBuffer();k.__webglFaceBuffer=d.createBuffer();k.__webglLineBuffer=d.createBuffer();if(k.numMorphTargets){q=m=void 0;k.__webglMorphTargetsBuffers=[];m=0;for(q=k.numMorphTargets;m0||t.faceVertexUvs.length>0)j.__uvArray=new Float32Array(k*2);if(t.faceUvs.length>1||t.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(k*2)}if(q.geometry.skinWeights.length&&q.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(k*4),j.__skinVertexBArray=new Float32Array(k*4),j.__skinIndexArray= +new Float32Array(k*4),j.__skinWeightArray=new Float32Array(k*4);j.__faceArray=new Uint16Array(l*3);j.__lineArray=new Uint16Array(p*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];t=0;for(z=j.numMorphTargets;t=0;i--)f[i]===h&&f.splice(i,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&pa(f.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(f=a.__webglObjects.length;e0&&(d.bindBuffer(d.ARRAY_BUFFER,q.__webglColorBuffer),d.bufferData(d.ARRAY_BUFFER,oa,l));za&&(d.bindBuffer(d.ARRAY_BUFFER,q.__webglNormalBuffer),d.bufferData(d.ARRAY_BUFFER,W,l));Aa&&sa.hasTangents&&(d.bindBuffer(d.ARRAY_BUFFER,q.__webglTangentBuffer),d.bufferData(d.ARRAY_BUFFER,ca,l));ta&&X>0&&(d.bindBuffer(d.ARRAY_BUFFER, +q.__webglUVBuffer),d.bufferData(d.ARRAY_BUFFER,ja,l));ta&&$>0&&(d.bindBuffer(d.ARRAY_BUFFER,q.__webglUV2Buffer),d.bufferData(d.ARRAY_BUFFER,ka,l));ya&&(d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,q.__webglFaceBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,ha,l),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,q.__webglLineBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,Y,l));x>0&&(d.bindBuffer(d.ARRAY_BUFFER,q.__webglSkinVertexABuffer),d.bufferData(d.ARRAY_BUFFER,da,l),d.bindBuffer(d.ARRAY_BUFFER,q.__webglSkinVertexBBuffer), +d.bufferData(d.ARRAY_BUFFER,ea,l),d.bindBuffer(d.ARRAY_BUFFER,q.__webglSkinIndicesBuffer),d.bufferData(d.ARRAY_BUFFER,fa,l),d.bindBuffer(d.ARRAY_BUFFER,q.__webglSkinWeightsBuffer),d.bufferData(d.ARRAY_BUFFER,ga,l));p&&(delete q.__inittedArrays,delete q.__colorArray,delete q.__normalArray,delete q.__tangentArray,delete q.__uvArray,delete q.__uv2Array,delete q.__faceArray,delete q.__vertexArray,delete q.__lineArray,delete q.__skinVertexAArray,delete q.__skinVertexBArray,delete q.__skinIndexArray,delete q.__skinWeightArray)}h.__dirtyVertices= +!1;h.__dirtyMorphTargets=!1;h.__dirtyElements=!1;h.__dirtyUvs=!1;h.__dirtyNormals=!1;h.__dirtyColors=!1;h.__dirtyTangents=!1;j.attributes&&wa(j)}else if(i instanceof THREE.Ribbon){if(h.__dirtyVertices||h.__dirtyColors){i=h;j=d.DYNAMIC_DRAW;k=r=p=p=void 0;t=i.vertices;m=i.colors;o=t.length;q=m.length;A=i.__vertexArray;l=i.__colorArray;C=i.__dirtyColors;if(i.__dirtyVertices){for(p=0;p 0 ) { - this.wheelOrientation = clamp( this.wheelOrientation - delta * this.WHEEL_ANGULAR_DECCELERATION, 0, this.MAX_WHEEL_ROTATION ); + this.wheelOrientation = THREE.Math.clamp( this.wheelOrientation - delta * this.WHEEL_ANGULAR_DECCELERATION, 0, this.MAX_WHEEL_ROTATION ); } else { - this.wheelOrientation = clamp( this.wheelOrientation + delta * this.WHEEL_ANGULAR_DECCELERATION, - this.MAX_WHEEL_ROTATION, 0 ); + this.wheelOrientation = THREE.Math.clamp( this.wheelOrientation + delta * this.WHEEL_ANGULAR_DECCELERATION, - this.MAX_WHEEL_ROTATION, 0 ); } @@ -360,12 +360,10 @@ THREE.Car = function () { }; - function clamp( x, a, b ) { return x < a ? a : ( x > b ? b : x ); } - function quadraticEaseOut( k ) { return - k * ( k - 2 ); } function cubicEaseOut( k ) { return --k * k * k + 1; } function circularEaseOut( k ) { return Math.sqrt( 1 - --k * k ); } function sinusoidalEaseOut( k ) { return Math.sin( k * Math.PI / 2 ); } - function exponentialEaseOut( k ) { return k == 1 ? 1 : - Math.pow( 2, - 10 * k ) + 1; } + function exponentialEaseOut( k ) { return k === 1 ? 1 : - Math.pow( 2, - 10 * k ) + 1; } }; diff --git a/examples/js/postprocessing/BloomPass.js b/examples/js/postprocessing/BloomPass.js index ef4e5d05..ca2de01a 100644 --- a/examples/js/postprocessing/BloomPass.js +++ b/examples/js/postprocessing/BloomPass.js @@ -65,7 +65,7 @@ THREE.BloomPass.prototype = { // Render quad with blured scene into texture (convolution pass 1) - THREE.EffectComposer.quad.materials[ 0 ] = this.materialConvolution; + THREE.EffectComposer.quad.material = this.materialConvolution; this.convolutionUniforms[ "tDiffuse" ].texture = readBuffer; this.convolutionUniforms[ "uImageIncrement" ].value = THREE.BloomPass.blurX; @@ -82,7 +82,7 @@ THREE.BloomPass.prototype = { // Render original scene with superimposed blur to texture - THREE.EffectComposer.quad.materials[ 0 ] = this.materialScreen; + THREE.EffectComposer.quad.material = this.materialScreen; this.screenUniforms[ "tDiffuse" ].texture = this.renderTargetY; diff --git a/examples/js/postprocessing/DotScreenPass.js b/examples/js/postprocessing/DotScreenPass.js index e945955c..0cafe262 100644 --- a/examples/js/postprocessing/DotScreenPass.js +++ b/examples/js/postprocessing/DotScreenPass.js @@ -35,7 +35,7 @@ THREE.DotScreenPass.prototype = { this.uniforms[ "tDiffuse" ].texture = readBuffer; this.uniforms[ "tSize" ].value.set( readBuffer.width, readBuffer.height ); - THREE.EffectComposer.quad.materials[ 0 ] = this.material; + THREE.EffectComposer.quad.material = this.material; if ( this.renderToScreen ) { diff --git a/examples/js/postprocessing/FilmPass.js b/examples/js/postprocessing/FilmPass.js index 3575d2bd..3ff68843 100644 --- a/examples/js/postprocessing/FilmPass.js +++ b/examples/js/postprocessing/FilmPass.js @@ -34,7 +34,7 @@ THREE.FilmPass.prototype = { this.uniforms[ "tDiffuse" ].texture = readBuffer; this.uniforms[ "time" ].value += delta; - THREE.EffectComposer.quad.materials[ 0 ] = this.material; + THREE.EffectComposer.quad.material = this.material; if ( this.renderToScreen ) { diff --git a/examples/js/postprocessing/SavePass.js b/examples/js/postprocessing/SavePass.js index 056608c8..ea4478f5 100644 --- a/examples/js/postprocessing/SavePass.js +++ b/examples/js/postprocessing/SavePass.js @@ -43,7 +43,7 @@ THREE.SavePass.prototype = { } - THREE.EffectComposer.quad.materials[ 0 ] = this.material; + THREE.EffectComposer.quad.material = this.material; renderer.render( THREE.EffectComposer.scene, THREE.EffectComposer.camera, this.renderTarget, this.clear ); diff --git a/examples/js/postprocessing/ShaderPass.js b/examples/js/postprocessing/ShaderPass.js index 1c173e84..13c9e755 100644 --- a/examples/js/postprocessing/ShaderPass.js +++ b/examples/js/postprocessing/ShaderPass.js @@ -34,7 +34,7 @@ THREE.ShaderPass.prototype = { } - THREE.EffectComposer.quad.materials[ 0 ] = this.material; + THREE.EffectComposer.quad.material = this.material; if ( this.renderToScreen ) { diff --git a/examples/js/postprocessing/TexturePass.js b/examples/js/postprocessing/TexturePass.js index ea5d8ac6..e0fb1383 100644 --- a/examples/js/postprocessing/TexturePass.js +++ b/examples/js/postprocessing/TexturePass.js @@ -28,7 +28,7 @@ THREE.TexturePass.prototype = { render: function ( renderer, writeBuffer, readBuffer, delta ) { - THREE.EffectComposer.quad.materials[ 0 ] = this.material; + THREE.EffectComposer.quad.material = this.material; renderer.render( THREE.EffectComposer.scene, THREE.EffectComposer.camera, readBuffer ); diff --git a/examples/misc_camera_path.html b/examples/misc_camera_path.html index 4f4b1211..c75c1061 100644 --- a/examples/misc_camera_path.html +++ b/examples/misc_camera_path.html @@ -54,6 +54,8 @@ var cross; + var clock = new THREE.Clock(); + init(); animate(); @@ -71,7 +73,7 @@ controls.useConstantSpeed = true; //controls.createDebugPath = true; //controls.createDebugDummy = true; - controls.lookSpeed = 0.0006; + controls.lookSpeed = 0.06; controls.lookVertical = true; controls.lookHorizontal = true; controls.verticalAngleMap = { srcRange: [ 0, 2 * Math.PI ], dstRange: [ 1.1, 3.8 ] }; @@ -156,9 +158,11 @@ function render() { - THREE.AnimationHandler.update( 1/60 ); + var delta = clock.getDelta(); - controls.update(); + THREE.AnimationHandler.update( delta ); + + controls.update( delta ); renderer.render( scene, camera ); } diff --git a/examples/misc_camera_roll.html b/examples/misc_camera_roll.html index 9a1387ce..a22f30a4 100644 --- a/examples/misc_camera_roll.html +++ b/examples/misc_camera_roll.html @@ -53,6 +53,8 @@ var cross; + var clock = new THREE.Clock(); + init(); animate(); @@ -140,7 +142,7 @@ function render() { - controls.update(); + controls.update( clock.getDelta() ); renderer.render( scene, camera ); } diff --git a/examples/misc_lights_test.html b/examples/misc_lights_test.html index b055c366..55dd440f 100644 --- a/examples/misc_lights_test.html +++ b/examples/misc_lights_test.html @@ -59,7 +59,7 @@ var windowHalfX = window.innerWidth / 2; var windowHalfY = window.innerHeight / 2; - var render_canvas = 1, render_gl = 1; + var render_canvas = 0, render_gl = 1; var has_gl = 0; var bcanvas = document.getElementById( 'rcanvas' ); @@ -115,22 +115,17 @@ scene.add( ambient ); directionalLight = new THREE.DirectionalLight( 0xffffff ); - directionalLight.position.y = -70; - directionalLight.position.z = 100; - directionalLight.position.normalize(); + directionalLight.position.set( 0, -70, 100 ).normalize(); scene.add( directionalLight ); pointLight = new THREE.PointLight( 0xffaa00 ); - pointLight.position.x = 0; - pointLight.position.y = 0; - pointLight.position.z = 0; scene.add( pointLight ); lightMesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { color: 0xffaa00 } ) ); lightMesh.scale.x = lightMesh.scale.y = lightMesh.scale.z = 0.05; lightMesh.position = pointLight.position; lightMesh.overdraw = true; - scene.add(lightMesh); + scene.add( lightMesh ); if ( render_canvas ) { diff --git a/examples/misc_lookat.html b/examples/misc_lookat.html index 7ce9350e..caacd8f9 100644 --- a/examples/misc_lookat.html +++ b/examples/misc_lookat.html @@ -119,7 +119,7 @@ function render() { - var time = new Date().getTime() * 0.0005; + var time = Date.now() * 0.0005; sphere.position.x = Math.sin( time * 0.7 ) * 2000; sphere.position.y = Math.cos( time * 0.5 ) * 2000; diff --git a/examples/misc_materials_multimaterials.html b/examples/misc_materials_multimaterials.html index c0e72467..c30e8452 100644 --- a/examples/misc_materials_multimaterials.html +++ b/examples/misc_materials_multimaterials.html @@ -67,7 +67,7 @@ var windowHalfX = window.innerWidth / 2; var windowHalfY = window.innerHeight / 2; - var render_canvas = 1, render_gl = 1; + var render_canvas = 0, render_gl = 1; var has_gl = 0; var bcanvas = document.getElementById( 'rcanvas' ); @@ -96,19 +96,28 @@ // SPHERES + var m1 = new THREE.MeshLambertMaterial( { color: 0xffffff } ); + var m2 = new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, wireframeLinewidth: 1.5, transparent: true } ); + sphere = new THREE.SphereGeometry( 100, 16, 8 ); for ( var i = 0; i < 10; i ++ ) { - mesh = new THREE.Mesh( sphere, [ new THREE.MeshLambertMaterial( { color: 0xffffff } ), new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, wireframeLinewidth: 1.5 } ) ] ); + var group = new THREE.Object3D(); - mesh.position.x = 500 * ( Math.random() - 0.5 ); - mesh.position.y = 500 * ( Math.random() - 0.5 ); - mesh.position.z = 500 * ( Math.random() - 0.5 ); + group.position.x = 500 * ( Math.random() - 0.5 ); + group.position.y = 500 * ( Math.random() - 0.5 ); + group.position.z = 500 * ( Math.random() - 0.5 ); - mesh.scale.x = mesh.scale.y = mesh.scale.z = 0.25 * ( Math.random() + 0.5 ); + group.scale.x = group.scale.y = group.scale.z = 0.25 * ( Math.random() + 0.5 ); - scene.add( mesh ); + scene.add( group ); + + var mesh1 = new THREE.Mesh( sphere, m1 ); + var mesh2 = new THREE.Mesh( sphere, m2 ); + + group.add( mesh1 ); + group.add( mesh2 ); } @@ -119,8 +128,7 @@ scene.add( ambient ); directionalLight = new THREE.DirectionalLight( 0xffffff ); - directionalLight.position.set( 0, -70, 100 ); - directionalLight.position.normalize(); + directionalLight.position.set( 0, -70, 100 ).normalize(); scene.add( directionalLight ); mesh = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color: 0xff0000 } ) ); @@ -129,15 +137,19 @@ scene.add( mesh ); if ( render_gl ) { + try { + webglRenderer = new THREE.WebGLRenderer(); webglRenderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); webglRenderer.domElement.style.position = "relative"; container.appendChild( webglRenderer.domElement ); has_gl = 1; + } catch (e) { } + } if ( render_canvas ) { @@ -160,10 +172,10 @@ //var loader = new THREE.BinaryLoader(), var loader = new THREE.JSONLoader(), - callback = function( geometry ) { createScene( geometry) }; + callback = function( geometry ) { createScene( geometry ) }; - loader.load( { model: "obj/female02/Female02_slim.js", callback: callback } ); - //loader.load( { model: "obj/female02/Female02_bin.js", callback: callback } ); + loader.load( "obj/female02/Female02_slim.js", callback ); + //loader.load( "obj/female02/Female02_bin.js", callback ); } @@ -208,26 +220,16 @@ xm1.map.needsUpdate = true; xm2.map.needsUpdate = true; - geometry.materials[0].push( xm1 ); // goes to faces with material 0 - geometry.materials[1].push( xm2 ); // goes to faces with material 1 + geometry.materials[ 0 ] = xm1; // goes to faces with material 0 + geometry.materials[ 1 ] = xm2; // goes to faces with material 1 - geometry.materials[4].push( new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.5, transparent: true } ) ); + geometry.materials[ 4 ] = new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.5, transparent: true } ); - var materials = [ new THREE.MeshFaceMaterial() ]; - - // full-mesh wireframe overlay - //materials.push( new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true, wireframeLinewidth: 1.5 } ) ); - - // full-mesh color overlay - //materials.push( new THREE.MeshBasicMaterial { color: 0xff0000, opacity: 0.5 } ) ); - - zmesh = new THREE.Mesh( geometry, materials ); - zmesh.position.x = -80; - zmesh.position.z = 50; - zmesh.position.y = FLOOR; + zmesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial() ); + zmesh.position.set( -80, FLOOR, 50 ); zmesh.scale.x = zmesh.scale.y = zmesh.scale.z = 3; zmesh.overdraw = true; - scene.add(zmesh); + scene.add( zmesh ); // PLANES with all materials from the model @@ -246,7 +248,7 @@ mesh.position.z = -100; mesh.scale.x = mesh.scale.y = mesh.scale.z = 1; mesh.doubleSided = true; - scene.add(mesh); + scene.add( mesh ); // number var x = document.createElement( "canvas" ); @@ -256,7 +258,7 @@ xc.shadowBlur = 7; xc.fillStyle = "orange"; xc.font = "50pt arial bold"; - xc.fillText(i, 10, 64); + xc.fillText( i, 10, 64 ); var xm = new THREE.MeshBasicMaterial( { map: new THREE.Texture( x ), transparent: true } ); xm.map.needsUpdate = true; @@ -267,12 +269,12 @@ mesh.position.z = - 99; mesh.scale.x = mesh.scale.y = mesh.scale.z = 1; mesh.doubleSided = true; - scene.add(mesh); + scene.add( mesh ); } } - function onDocumentMouseMove(event) { + function onDocumentMouseMove( event ) { mouseX = ( event.clientX - windowHalfX ); mouseY = ( event.clientY - windowHalfY ); @@ -294,6 +296,7 @@ camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; + camera.lookAt( target ); if ( render_canvas ) canvasRenderer.render( scene, camera ); diff --git a/examples/misc_sound.html b/examples/misc_sound.html index 47c36158..e3787aa3 100644 --- a/examples/misc_sound.html +++ b/examples/misc_sound.html @@ -60,6 +60,8 @@ var sound1, sound2; + var clock = new THREE.Clock(); + var Sound = function ( sources, radius, volume ) { var audio = document.createElement( 'audio' ); @@ -190,12 +192,13 @@ function render() { - var time = new Date().getTime() * 0.005; + var delta = clock.getDelta(), + time = clock.getElapsedTime() * 5; - controls.update(); + controls.update( delta ); - material_sphere1.color.setHSV( 0.0, 0.3 + 0.7 * ( 1 + Math.cos(time) ) / 2, 1 ); - material_sphere2.color.setHSV( 0.1, 0.3 + 0.7 * ( 1 + Math.sin(time) ) / 2, 1 ); + material_sphere1.color.setHSV( 0.0, 0.3 + 0.7 * ( 1 + Math.cos( time ) ) / 2, 1 ); + material_sphere2.color.setHSV( 0.1, 0.3 + 0.7 * ( 1 + Math.sin( time ) ) / 2, 1 ); renderer.clear(); renderer.render( scene, camera ); diff --git a/examples/misc_ubiquity_test.html b/examples/misc_ubiquity_test.html index 3d56632e..43a601d2 100644 --- a/examples/misc_ubiquity_test.html +++ b/examples/misc_ubiquity_test.html @@ -32,7 +32,7 @@ var camera, scene; var canvasRenderer, svgRenderer, webglRenderer; - var mesh, qrcode; + var mesh, group, qrcode; var mouseX = 0, mouseY = 0; @@ -97,7 +97,7 @@ var geometry = new THREE.Geometry(); - for (var i = 0; i < 100; i ++) { + for ( var i = 0; i < 100; i ++ ) { var v = new THREE.Vector3( Math.random() * 1000 - 500, Math.random() * 1000 - 500, Math.random() * 1000 - 500 ); @@ -109,19 +109,28 @@ v1.position.addSelf( v ); v2.position.addSelf( v ); - var face = new THREE.Face3( geometry.vertices.push( v0 ) - 1, geometry.vertices.push( v1 ) - 1, geometry.vertices.push( v2 ) - 1, null, new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } ) ); + var face = new THREE.Face3( geometry.vertices.push( v0 ) - 1, geometry.vertices.push( v1 ) - 1, geometry.vertices.push( v2 ) - 1, null, null, geometry.materials.length ); + + geometry.materials.push( new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } ) ); geometry.faces.push( face ); + } geometry.computeFaceNormals(); geometry.computeCentroids(); - mesh = new THREE.Mesh( geometry, [ new THREE.MeshFaceMaterial(), new THREE.MeshBasicMaterial( { color: 0xff0000, opacity: 0.5, transparent: true, wireframe: true, wireframeLinewidth: 10 } ) ] ); - mesh.doubleSided = true; - mesh.scale.x = mesh.scale.y = mesh.scale.z = 2; - scene.add( mesh ); + group = new THREE.Object3D(); + group.scale.x = group.scale.y = group.scale.z = 2; + scene.add( group ); + mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial() ); + mesh.doubleSided = true; + group.add( mesh ); + + mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { color: 0xff0000, opacity: 0.5, transparent: true, wireframe: true, wireframeLinewidth: 10 } ) ); + mesh.doubleSided = true; + group.add( mesh ); // LIGHTS @@ -178,15 +187,15 @@ camera.position.y += ( - mouseY - camera.position.y ) * .05; camera.lookAt( scene.position ); - mesh.rotation.y += 0.01; + group.rotation.y += 0.01; /* qrcode.rotation.x += 0.01; qrcode.rotation.z += 0.02; */ - canvasRenderer.render( scene, camera ); - svgRenderer.render( scene, camera ); + //canvasRenderer.render( scene, camera ); + //svgRenderer.render( scene, camera ); webglRenderer.render( scene, camera ); } diff --git a/examples/models/animated/sittingBox.js b/examples/models/animated/sittingBox.js new file mode 100644 index 00000000..2a008bd2 --- /dev/null +++ b/examples/models/animated/sittingBox.js @@ -0,0 +1,103 @@ +/* + * File generated with Blender 2.58 Exporter + * https://github.com/mrdoob/three.js/tree/master/utils/exporters/blender/ + * + * vertices: 1226 + * faces: 1008 + * normals: 0 + * uvs: 0 + * colors: 0 + * materials: 1 + * edges: 0 + * morphTargets: 31 + * + */ + +var model = { + + "version" : 2, + + "scale" : 100.000000, + + "materials": [ { + "DbgColor" : 15658734, + "DbgIndex" : 0, + "DbgName" : "default", + "vertexColors" : false + }, + + { + "DbgColor" : 15597568, + "DbgIndex" : 1, + "DbgName" : "Material", + "colorAmbient" : [0.0, 0.0, 0.0], + "colorDiffuse" : [0.434594637671033, 0.434594637671033, 0.434594637671033], + "colorSpecular" : [0.10135135054588318, 0.10135135054588318, 0.10135135054588318], + "shading" : "Lambert", + "specularCoef" : 50, + "transparency" : 1.0, + "vertexColors" : false + }, + + { + "DbgColor" : 15597568, + "DbgIndex" : 1, + "DbgName" : "Material", + "colorAmbient" : [0.0, 0.0, 0.0], + "colorDiffuse" : [0.434594637671033, 0.434594637671033, 0.434594637671033], + "colorSpecular" : [0.10135135054588318, 0.10135135054588318, 0.10135135054588318], + "shading" : "Lambert", + "specularCoef" : 50, + "transparency" : 1.0, + "vertexColors" : false + }], + + "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-2,65,-5,-12,63,-3,0,71,6,-12,70,8,-5,76,-11,-15,74,-9,-3,82,2,-14,80,4,0,68,0,-13,66,2,-3,81,-5,-16,79,-3,-2,61,3,-8,60,5,-2,64,11,-6,64,11,-1,77,4,-13,74,7,-3,71,-10,-15,69,-8,0,75,-3,-16,72,0,-5,72,11,-7,63,-6,-9,82,4,-11,76,-12,-6,67,1,-10,82,-5,-5,61,4,-4,64,11,-7,77,8,-9,69,-11,-1,75,4,-13,73,7,-2,68,-8,-14,66,-6,0,72,-1,-15,69,1,-6,75,8,-8,66,-9,20,45,10,-31,35,7,20,49,8,-33,38,5,17,52,7,-32,43,3,13,53,7,-30,46,4,11,51,9,-27,45,6,11,47,11,-25,42,9,13,44,13,-25,38,10,17,43,12,-28,35,10,13,26,-22,-9,24,-23,12,31,-26,-11,28,-26,9,36,-26,-11,34,-27,5,39,-23,-10,39,-23,2,38,-18,-8,40,-18,2,32,-14,-5,35,-14,6,26,-14,-5,29,-13,10,25,-18,-6,25,-17,16,37,-15,-19,31,-16,15,32,-13,-16,28,-14,12,42,-16,-19,37,-17,7,43,-16,-15,41,-17,3,40,-13,-11,41,-14,3,35,-11,-8,37,-11,7,30,-9,-8,31,-9,12,29,-11,-12,27,-11,18,43,-4,-26,35,-6,18,39,-2,-23,31,-4,14,47,-5,-25,40,-7,10,48,-4,-22,43,-6,7,46,-2,-19,44,-4,7,41,0,-16,40,-1,10,37,0,-16,35,0,15,36,0,-19,31,-1,28,13,15,-30,10,31,30,15,18,-33,12,32,30,16,21,-34,15,35,27,16,24,-33,17,37,24,15,23,-29,17,37,22,13,20,-26,15,36,23,12,17,-25,12,33,25,12,14,-27,10,31,19,45,5,-30,34,5,22,47,9,-34,36,7,21,48,14,-35,39,11,18,48,17,-33,42,13,14,47,16,-29,42,14,11,45,12,-25,40,12,11,44,8,-23,37,9,15,44,5,-25,34,6,24,38,10,-34,28,14,22,36,6,-29,26,12,24,39,15,-35,32,17,21,39,19,-33,34,20,16,37,18,-28,35,21,14,35,14,-24,33,19,14,34,9,-23,29,15,17,34,6,-25,26,12,26,31,12,-33,23,19,24,29,8,-29,21,17,26,32,17,-35,26,22,23,31,20,-33,29,25,18,30,19,-28,29,26,16,28,15,-24,27,24,16,27,11,-23,24,20,20,28,8,-25,21,17,28,22,15,-33,17,26,26,21,12,-30,15,25,28,23,19,-34,20,29,25,23,22,-33,22,31,22,22,21,-29,22,32,19,20,18,-26,21,30,20,19,14,-24,18,27,22,19,12,-26,16,25,17,49,17,-32,40,14,19,53,12,-35,42,9,14,54,13,-31,46,10,12,48,15,-27,42,13,16,44,14,-27,37,12,21,47,12,-33,36,9,15,54,8,-32,45,4,10,51,9,-26,45,7,12,45,10,-24,40,8,17,44,8,-28,36,5,19,50,7,-32,39,3,14,48,5,-27,41,2,19,52,15,-34,41,12,16,52,16,-32,43,13,16,54,13,-34,45,9,20,48,15,-33,38,12,21,50,13,-35,39,9,14,49,17,-29,41,14,12,51,15,-29,45,12,17,46,16,-30,38,13,14,45,15,-27,39,13,19,45,14,-30,35,11,21,48,9,-33,37,6,19,51,10,-33,41,6,17,54,10,-34,44,6,14,55,11,-32,46,7,11,53,12,-29,46,9,11,50,12,-27,44,10,12,46,13,-25,41,10,14,43,12,-25,38,10,17,43,11,-27,35,9,20,45,10,-31,35,7,17,52,7,-32,42,3,12,53,8,-29,46,5,10,47,9,-24,43,7,14,44,8,-25,37,6,19,46,7,-30,37,4,17,49,5,-30,40,2,14,51,6,-29,44,3,11,50,7,-26,44,4,12,46,7,-25,41,4,15,46,6,-27,38,3,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-33,-9,37,-31,10,38,-27,-10,35,-25,8,36,-22,-7,34,-20,1,34,-18,0,38,-34,5,52,-31,-9,50,-29,8,51,-25,-11,49,-23,5,50,-19,-7,48,-18,0,49,-16,-1,51,-31,9,45,-26,-10,42,-24,7,46,-32,-9,44,-30,7,43,-20,-6,41,-18,0,42,-17,-1,45,-32,4,56,-28,-9,51,-28,9,51,-26,-10,45,-26,7,45,-25,-5,41,-24,1,41,-24,-2,55,-28,4,60,-22,-10,54,-21,8,56,-18,-12,49,-17,7,51,-13,-7,45,-12,0,47,-12,-4,58,-23,9,53,-22,-11,46,-21,4,58,-25,-10,52,-25,7,48,-17,-6,44,-17,1,44,-16,-3,57,-26,3,60,-22,-11,55,-22,8,56,-18,-12,49,-17,7,51,-13,-7,46,-12,0,47,-12,-4,58,-23,0,66,-9,-10,62,-8,3,63,-8,-11,58,-8,1,59,-8,-7,56,-7,-2,56,-7,-5,66,-9,-2,65,-8,-8,63,-8,0,62,-7,-8,59,-8,0,59,-7,-6,57,-7,-2,56,-7,-5,66,-8,-3,65,-3,-8,63,-3,-1,63,-2,-8,61,-3,-1,60,-2,-6,58,-3,-3,58,-2,-6,65,-3,-3,64,-3,-7,63,-3,-1,63,-1,-8,60,-2,-1,60,0,-6,58,0,-3,58,0,-5,65,-4,-4,67,-1,-9,65,-2,-2,65,0,-9,62,-1,-2,61,0,-7,60,0,-4,59,0,-7,67,-2,16,57,-7,-17,57,-10,14,55,-7,-15,55,-9,12,54,-7,-14,56,-6,10,56,-6,-14,58,-4,9,59,-6,-15,60,-4,11,61,-6,-17,61,-5,13,61,-6,-18,61,-8,16,60,-7,-18,59,-10,18,55,11,-31,47,0,17,53,11,-29,46,0,15,53,11,-28,46,2,13,54,12,-28,48,3,13,56,12,-29,50,4,14,58,12,-30,51,3,17,58,12,-31,51,1,18,57,11,-32,49,0,16,53,4,-24,49,-3,18,55,4,-25,50,-4,14,53,4,-22,49,0,11,54,5,-22,51,1,11,57,5,-24,53,1,13,59,5,-25,55,0,16,59,5,-27,54,-2,18,58,4,-27,53,-4,15,54,0,-20,52,-5,17,56,-1,-22,53,-7,13,53,0,-18,52,-3,11,55,0,-18,54,-1,10,58,0,-20,56,-1,12,60,0,-21,58,-2,15,60,0,-23,57,-4,17,59,0,-23,56,-6,15,54,-4,-17,54,-7,16,56,-4,-19,55,-8,12,54,-3,-16,54,-5,10,56,-3,-16,56,-3,10,58,-3,-17,58,-2,11,60,-3,-19,60,-4,14,61,-3,-20,59,-6,16,59,-4,-20,57,-8,5,49,26,-24,43,18,4,49,25,-23,44,18,3,48,24,-21,44,17,4,47,23,-21,44,16,5,46,23,-21,42,16,6,46,24,-22,41,16,7,47,26,-24,41,17,6,48,26,-25,42,17,17,58,14,-34,49,3,16,58,13,-33,51,3,15,57,11,-30,51,1,15,55,11,-29,49,0,17,53,11,-30,47,0,18,53,12,-31,46,0,19,55,14,-33,46,1,19,57,15,-34,47,2,7,51,22,-25,46,14,8,51,23,-27,45,14,6,50,20,-24,46,13,7,49,20,-23,45,12,8,48,20,-23,43,11,9,48,21,-25,42,11,10,49,22,-26,42,12,10,50,23,-27,43,13,13,57,15,-31,50,6,15,57,17,-32,48,6,12,55,14,-29,50,5,13,53,13,-27,48,3,15,51,13,-28,46,2,16,51,14,-29,44,2,17,53,16,-31,44,3,16,55,17,-32,46,5,15,58,14,-32,50,3,17,58,15,-34,49,3,13,56,12,-30,50,3,14,54,12,-29,49,2,16,53,12,-29,47,1,18,53,13,-31,45,0,19,54,14,-33,46,1,18,56,15,-34,47,2,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,14,60,-11,-18,61,-11,12,56,-10,-16,56,-10,0,55,-11,-4,55,-11,4,62,-17,-7,62,-17,13,62,-5,-17,63,-5,11,56,-4,-16,56,-4,0,56,-8,-3,55,-7,5,65,-7,-8,65,-7,7,54,-11,-12,54,-11,11,58,-15,-15,58,-15,7,58,-4,-12,58,-4,9,64,-5,-13,64,-5,13,57,-11,-17,58,-11,3,59,-17,-7,59,-16,13,59,-3,-17,59,-3,6,59,-11,-10,59,-11,10,55,-14,-15,56,-14,8,60,-4,-12,60,-3,11,55,-7,-15,55,-7,14,62,-8,-17,63,-8,0,55,-9,-3,54,-9,4,65,-12,-8,65,-12,6,54,-7,-11,54,-7,10,64,-11,-13,65,-10,10,55,-10,-14,55,-10,12,59,-13,-16,60,-13,9,57,-3,-14,57,-3,11,63,-5,-15,63,-5,11,56,-12,-16,57,-12,10,60,-3,-14,60,-3,9,55,-7,-13,55,-7,12,63,-9,-15,64,-9,-2,39,31,-17,34,25,-3,39,29,-16,33,22,1,43,25,-21,37,19,3,43,27,-22,39,21,-3,41,31,-15,36,24,-5,41,29,-14,34,22,0,45,26,-19,39,18,0,46,28,-18,41,20,1,46,29,-19,42,21,0,46,27,-18,41,19,-3,41,31,-14,36,22,-2,41,33,-14,37,25,4,43,28,-22,39,23,2,43,26,-21,38,20,-1,38,30,-16,34,23,0,38,32,-17,35,26,1,39,33,-17,36,27,0,38,31,-16,35,25,4,43,27,-22,38,22,5,44,29,-22,40,23,0,40,34,-15,38,26,-1,40,32,-14,37,24,1,46,29,-19,42,20,3,46,30,-20,43,22,4,46,31,-21,43,24,2,46,30,-20,43,21,0,40,33,-14,39,24,2,40,34,-15,40,27,6,44,29,-22,41,25,4,44,28,-22,40,22,1,38,31,-16,37,25,3,39,33,-16,38,27,6,44,30,-23,42,24,1,43,25,-22,38,18,3,45,23,-23,40,17,6,46,27,-24,43,21,5,46,31,-21,43,23,0,46,25,-19,39,18,1,47,24,-20,41,16,5,48,28,-23,44,20,1,47,29,-19,42,20,3,48,26,-21,43,18,4,42,28,-23,39,22,5,45,25,-24,41,19,3,36,32,-15,37,29,2,36,31,-14,36,28,1,40,31,-16,37,25,3,40,32,-17,38,26,3,36,33,-13,38,29,1,36,33,-13,37,27,0,39,33,-15,38,25,2,39,34,-15,39,26,2,35,32,-13,36,28,3,35,33,-13,37,29,2,36,32,-14,36,28,3,36,32,-14,37,29,4,36,31,-14,36,30,3,35,31,-14,35,29,4,35,32,-13,36,30,2,34,31,-12,35,29,3,35,31,-12,35,29,4,35,31,-13,35,30,2,35,32,-14,34,29,3,35,32,-14,35,30,3,37,32,-14,34,31,2,37,31,-13,33,30,4,37,31,-13,34,32,3,36,30,-13,33,31,2,35,29,-12,29,30,3,35,30,-12,30,31,1,36,30,-13,30,29,2,36,31,-14,30,30,1,35,32,-14,32,30,0,34,31,-13,31,28,2,33,31,-12,32,30,1,33,30,-12,31,29,0,33,31,-12,32,28,2,33,32,-12,33,30,1,35,30,-13,32,28,2,35,32,-14,32,29,1,36,33,-14,34,28,0,36,32,-13,33,27,0,35,34,-12,34,29,0,34,32,-12,34,27,0,40,34,-15,38,26,-1,39,33,-14,37,24,0,35,33,-12,34,27,0,35,34,-12,35,28,1,40,32,-17,36,26,0,40,31,-16,35,25,0,35,31,-13,33,27,1,36,33,-14,34,29,0,36,32,-13,32,27,-1,35,31,-13,31,25,-2,40,30,-16,34,23,0,40,31,-16,35,25,-2,35,33,-11,33,27,-3,35,32,-11,32,25,-4,40,31,-14,36,23,-2,40,33,-14,36,25,-2,34,31,-11,32,26,-1,35,33,-11,32,27,-2,36,31,-12,31,26,-1,36,33,-13,32,27,0,36,31,-12,30,28,-1,36,30,-12,29,27,0,35,31,-10,31,28,0,34,30,-10,30,27,0,35,29,-10,29,27,0,35,30,-10,30,29,-1,36,30,-11,29,27,0,36,31,-12,30,29,0,38,30,-11,28,29,0,38,29,-11,27,28,1,37,29,-10,28,30,0,37,28,-10,27,29,-1,37,28,-9,28,27,0,37,29,-10,28,28,-1,37,28,-11,28,27,-1,37,29,-11,28,28,-1,36,30,-12,29,27,-2,36,29,-11,29,26,0,35,30,-10,30,27,-1,35,29,-10,29,26,-2,35,29,-10,30,25,-1,35,31,-11,31,27,-2,36,29,-12,29,25,-1,37,30,-12,30,27,-3,37,31,-13,31,26,-4,37,30,-12,30,25,-2,35,32,-11,32,26,-4,35,30,-11,31,24,-4,41,31,-15,36,24,-5,40,30,-15,34,22,-4,36,31,-12,32,24,-3,36,32,-12,33,26,-2,41,30,-16,34,24,-3,40,28,-16,33,22,-3,36,30,-13,31,24,-2,36,31,-13,32,26,-2,35,29,-10,30,26,-2,36,29,-11,29,26,-1,36,30,-12,30,27,-1,35,30,-10,30,27,-4,35,31,-11,31,24,-4,36,30,-13,30,24,-2,36,31,-13,31,26,-3,36,32,-12,32,26,-1,35,33,-11,33,27,-1,36,32,-13,32,27,-2,35,31,-12,31,26,-3,35,32,-11,32,25,0,35,31,-10,30,29,0,36,31,-12,30,28,-1,36,30,-11,29,27,0,35,30,-10,30,27,0,35,33,-12,34,27,0,36,32,-13,33,27,1,36,33,-14,34,29,0,35,34,-12,35,29,1,33,31,-12,32,29,0,34,31,-13,31,28,2,35,32,-14,32,30,2,33,32,-12,32,30,3,36,33,-13,37,29,3,36,32,-14,37,29,2,36,32,-14,36,28,1,35,33,-13,37,28,4,34,32,-13,36,30,4,35,32,-14,35,30,2,35,31,-14,35,29,3,34,31,-12,35,29,-2,41,25,-16,36,18,-1,41,28,-18,35,20,0,39,26,-19,34,18,0,39,24,-17,35,16,-3,38,26,-15,32,19,-2,38,28,-17,33,20,0,37,27,-18,32,19,-1,37,25,-16,31,17,2,42,27,-22,37,21,-1,43,29,-17,38,21,2,44,23,-21,38,16,0,45,24,-20,40,17,-1,38,25,-17,33,17,-2,39,26,-16,34,18,0,38,27,-19,33,18,-1,40,28,-18,34,20,-1,36,26,-16,30,18,-3,37,27,-15,31,20,0,36,27,-18,32,19,-2,37,28,-17,32,20,-2,35,29,-18,30,22,-1,34,29,-18,29,21,-3,34,28,-17,29,22,-2,33,28,-17,28,20,-2,40,25,-16,35,18,-1,40,28,-18,34,20,0,39,27,-19,33,18,0,39,24,-17,34,16,0,37,27,-18,32,19,-1,36,25,-16,31,18,-2,38,28,-17,32,20,-3,37,26,-15,32,19,0,44,27,-19,38,19,5,60,-13,-11,54,-12,1,63,-15,-10,59,-15,7,55,-10,-9,49,-9,0,51,-9,-5,62,-16,4,55,-11,-8,55,-11,7,60,-16,-11,60,-16,3,56,-6,-7,56,-6,7,64,-6,-10,64,-6,6,57,-15,-11,57,-15,6,61,-6,-10,60,-6,2,54,-8,-7,54,-8,7,65,-11,-10,65,-11], + + "morphTargets": [{ "name": "animation_000000", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,66,-7,-17,67,-7,-6,70,5,-17,71,5,-5,78,-11,-16,79,-11,-5,81,3,-15,82,3,-5,67,0,-19,69,0,-3,81,-4,-17,83,-4,-10,61,1,-15,62,1,-10,63,8,-14,63,8,-4,75,5,-17,76,5,-5,73,-11,-17,74,-11,-3,75,-3,-19,77,-3,-11,71,10,-12,66,-9,-10,83,4,-11,80,-12,-12,68,0,-10,84,-5,-12,61,1,-12,63,8,-11,76,7,-11,73,-13,-5,73,4,-17,74,4,-6,69,-10,-18,70,-9,-3,71,-2,-19,73,-1,-11,74,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-27,42,8,11,51,9,-25,46,7,7,51,9,-22,48,8,4,48,10,-18,46,10,5,44,12,-17,42,12,8,41,14,-19,38,13,12,41,14,-22,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-10,36,-26,3,38,-23,-7,39,-22,0,36,-18,-4,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,26,-14,10,25,-18,-8,24,-18,14,38,-14,-17,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-15,4,42,-15,-11,42,-15,1,38,-13,-7,40,-13,2,33,-11,-5,35,-10,6,29,-10,-7,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-20,43,-4,5,46,-3,-16,45,-3,3,43,-2,-12,44,-2,3,39,0,-11,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,38,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-26,11,33,25,12,14,-28,10,31,14,45,7,-25,36,8,16,47,11,-28,39,10,15,47,16,-28,42,14,12,46,19,-25,44,17,8,44,18,-21,43,17,6,42,13,-18,40,15,7,41,9,-18,37,11,10,43,6,-21,35,8,20,38,12,-30,31,16,18,36,8,-27,28,13,19,38,17,-30,34,20,16,37,20,-27,36,23,12,35,19,-22,35,23,10,33,15,-19,32,20,11,32,9,-19,29,16,14,33,7,-22,27,13,23,31,13,-31,25,20,21,29,9,-28,23,18,22,31,18,-31,28,24,19,30,21,-28,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,22,30,23,22,22,-30,23,33,20,20,21,-26,22,33,18,19,18,-23,20,31,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-25,42,17,12,51,15,-27,45,12,6,51,15,-22,48,14,6,45,16,-19,43,16,11,42,16,-22,37,14,15,46,14,-27,39,12,8,52,10,-23,48,8,4,48,11,-18,46,10,7,42,11,-18,40,10,12,43,9,-22,38,8,13,49,9,-26,42,7,8,46,7,-20,43,5,12,50,17,-27,44,15,9,49,18,-24,45,17,9,52,15,-25,48,13,13,46,17,-26,40,15,14,49,15,-28,42,13,8,46,18,-22,42,17,6,48,17,-20,46,16,11,44,18,-23,39,16,8,43,17,-20,40,15,13,43,15,-25,37,13,15,47,12,-27,40,9,12,50,12,-26,44,10,11,52,12,-26,47,10,7,52,13,-23,48,12,5,50,13,-20,48,13,5,47,13,-19,45,13,6,43,14,-18,41,13,9,41,13,-19,38,12,12,41,12,-22,37,11,15,44,12,-25,38,10,11,51,9,-25,46,7,6,50,10,-20,48,9,4,45,10,-17,43,10,10,42,10,-20,38,9,13,45,9,-25,40,7,11,48,7,-23,43,5,8,49,7,-22,46,6,6,47,8,-19,45,7,7,44,8,-18,41,7,10,44,7,-21,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,64,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-9,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,59,-6,5,57,-6,-17,61,-4,4,59,-5,-20,62,-4,5,62,-4,-22,62,-5,8,62,-4,-23,60,-7,10,61,-5,-22,58,-8,12,53,12,-22,45,5,11,51,12,-20,45,6,9,51,12,-19,46,7,7,52,12,-20,48,8,7,54,13,-22,49,9,8,56,13,-24,48,8,10,56,13,-25,47,6,12,55,13,-24,45,5,11,53,5,-18,49,0,12,55,5,-21,49,0,8,52,5,-17,51,2,6,53,5,-18,53,4,5,55,6,-21,54,4,7,58,6,-23,53,3,9,59,6,-24,52,1,12,57,6,-23,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,57,0,9,60,1,-24,55,-2,11,59,1,-22,53,-3,10,55,-3,-17,55,-5,11,58,-2,-19,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,59,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,60,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-11,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,59,8,10,56,15,-24,45,10,9,56,14,-26,46,9,8,55,13,-26,46,7,9,53,12,-24,45,5,10,52,12,-22,43,5,12,52,13,-22,42,7,13,53,14,-22,43,9,12,55,16,-23,44,11,1,47,22,-17,56,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-14,54,5,4,44,21,-13,54,6,5,45,23,-13,54,8,4,46,24,-14,55,9,6,54,16,-24,49,8,8,54,18,-22,48,10,6,53,15,-23,49,6,7,51,13,-22,47,5,9,49,13,-20,46,5,10,49,15,-19,45,6,11,50,16,-19,45,8,10,52,18,-20,46,10,8,55,15,-25,47,9,10,56,16,-24,46,10,7,54,13,-25,47,6,8,52,12,-23,46,5,10,51,12,-22,44,5,12,51,13,-21,43,7,12,53,15,-21,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-23,62,-10,7,56,-8,-21,57,-9,-3,56,-12,-9,56,-13,1,63,-18,-14,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,57,-3,-5,57,-9,-8,56,-9,0,66,-8,-13,66,-8,3,55,-10,-17,55,-11,8,58,-13,-21,59,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-6,8,58,-9,-22,59,-10,0,60,-17,-13,60,-18,7,60,-1,-20,60,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,56,-10,9,59,-11,-22,60,-12,4,58,-2,-17,58,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,67,0,-4,31,25,-16,66,-1,-1,38,23,-10,63,2,0,38,25,-11,64,4,-4,31,28,-18,65,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-14,61,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,66,0,0,31,27,-17,68,1,1,31,28,-17,68,2,0,31,26,-17,67,1,0,38,25,-11,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-18,68,4,2,39,28,-11,66,8,-1,38,23,-10,62,2,-1,41,23,-8,60,4,2,42,27,-9,63,8,1,40,30,-13,64,9,-4,39,25,-13,60,3,-3,42,25,-11,59,4,0,43,28,-11,62,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-18,70,3,2,29,26,-18,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-20,70,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-20,69,1,4,29,28,-19,70,2,2,29,27,-18,69,2,4,30,27,-18,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-19,71,2,3,27,26,-19,70,1,4,27,26,-18,71,0,5,28,26,-18,72,1,3,28,27,-17,70,1,4,29,27,-17,71,2,4,30,26,-16,72,1,3,30,25,-16,72,0,5,29,25,-17,73,1,4,29,25,-17,72,0,2,25,24,-18,73,-3,3,25,25,-19,74,-2,2,26,24,-18,72,-2,3,27,25,-18,73,-1,2,26,27,-19,72,0,1,26,26,-19,71,-1,2,25,27,-20,72,-1,1,25,26,-20,71,-2,1,25,26,-20,71,-2,2,25,27,-20,72,0,1,26,25,-19,70,-1,2,26,26,-19,71,0,1,28,28,-20,70,0,0,27,26,-19,69,0,1,26,29,-21,70,0,0,26,27,-21,69,-1,0,31,29,-19,67,3,-1,31,28,-19,66,1,0,27,28,-21,69,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-19,69,0,2,28,27,-20,70,0,-1,26,28,-20,70,-1,-2,26,27,-20,68,-3,-2,31,26,-16,66,0,-1,31,27,-17,67,1,-2,26,29,-21,69,-1,-4,26,28,-21,67,-2,-4,31,27,-19,65,0,-2,31,29,-19,66,1,-4,25,28,-21,68,-3,-2,25,29,-22,70,-2,-2,26,27,-20,68,-2,-1,26,28,-20,69,-1,-1,24,28,-20,71,-2,-2,24,26,-19,70,-4,-2,23,29,-21,71,-3,-3,23,28,-21,70,-4,-2,23,27,-20,71,-5,-1,23,28,-21,72,-3,-2,24,26,-19,70,-4,-1,24,28,-20,71,-2,0,22,27,-18,72,-3,-1,22,26,-18,71,-4,0,21,27,-19,73,-4,-1,21,26,-19,72,-5,-6,22,28,-19,71,-6,-5,22,29,-19,72,-6,-5,22,27,-18,71,-6,-4,22,28,-18,72,-5,-4,24,28,-19,71,-4,-5,24,27,-19,70,-5,-5,24,29,-20,71,-4,-6,24,28,-20,70,-6,-6,25,28,-20,69,-5,-5,25,29,-20,70,-4,-5,24,27,-19,69,-5,-4,25,28,-19,70,-4,-4,26,28,-19,69,-2,-5,26,27,-18,68,-4,-5,26,29,-20,69,-3,-6,26,28,-20,68,-4,-4,32,28,-18,66,0,-5,31,26,-18,64,0,-6,27,27,-20,67,-3,-5,28,29,-20,68,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-4,-4,27,28,-19,69,-2,-6,24,28,-20,70,-5,-5,24,27,-19,69,-5,-4,24,28,-19,71,-4,-5,24,29,-20,71,-4,-6,27,28,-20,67,-4,-5,26,27,-18,68,-4,-4,27,28,-19,69,-2,-5,27,29,-20,69,-2,-2,26,29,-22,69,-1,-1,26,28,-20,69,-1,-3,26,27,-20,68,-3,-4,26,28,-21,68,-3,-1,23,29,-21,71,-3,-1,24,28,-20,71,-2,-2,24,26,-19,70,-4,-3,23,27,-21,70,-4,0,26,28,-21,69,0,0,27,26,-20,69,0,1,28,28,-20,70,0,1,27,29,-21,70,0,1,25,26,-20,71,-2,1,26,26,-19,71,-1,2,26,27,-19,72,0,2,25,27,-20,72,0,4,29,28,-20,70,3,4,30,27,-18,70,3,2,29,27,-18,69,2,2,28,28,-20,69,1,5,28,27,-19,71,2,4,28,27,-18,71,2,3,28,26,-18,70,1,4,27,26,-19,71,0,-4,34,22,-15,61,0,-2,34,25,-14,64,0,0,35,23,-12,63,-1,-2,35,21,-13,60,-1,-4,31,22,-16,63,-3,-2,32,24,-14,64,-2,-1,32,22,-13,64,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-14,61,-3,-4,33,22,-15,62,-2,0,33,23,-12,63,-2,-2,33,24,-14,64,-1,-2,31,20,-14,63,-5,-3,30,22,-16,64,-4,0,31,22,-13,64,-3,-2,31,24,-14,65,-2,-1,28,23,-14,67,-4,0,28,22,-13,66,-4,-2,27,22,-15,67,-5,-1,28,21,-14,66,-6,-4,34,22,-15,61,-1,-2,33,24,-14,64,0,0,34,23,-12,63,-2,-2,34,21,-13,60,-2,-1,32,22,-13,64,-3,-2,31,20,-14,63,-5,-2,31,24,-14,64,-2,-4,31,22,-16,63,-4,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-12,57,-7,2,66,-6,-15,66,-7,3,58,-15,-16,58,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-16,66,-12] }, + { "name": "animation_000001", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,65,-7,-17,67,-7,-5,70,5,-17,71,6,-5,78,-11,-16,79,-11,-5,81,3,-15,82,3,-5,67,0,-18,69,0,-3,81,-4,-17,83,-4,-10,61,1,-15,62,1,-10,63,8,-14,63,8,-4,75,5,-17,76,5,-5,73,-11,-17,74,-11,-2,74,-3,-19,77,-3,-11,71,10,-12,66,-9,-10,83,4,-10,80,-12,-12,68,0,-9,84,-5,-12,61,1,-12,63,8,-10,76,7,-11,73,-13,-5,73,4,-17,75,4,-6,69,-10,-18,70,-9,-3,71,-2,-19,73,-1,-11,74,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-28,41,8,11,51,9,-26,46,7,7,51,9,-23,48,7,4,48,10,-20,47,9,5,44,12,-18,43,11,8,41,14,-20,38,12,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-11,35,-26,3,38,-23,-8,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,27,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-12,42,-15,1,38,-13,-8,41,-13,2,33,-11,-6,35,-10,6,29,-10,-8,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-21,42,-5,5,46,-3,-17,45,-4,3,43,-2,-13,44,-2,3,39,0,-12,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-34,14,33,29,16,22,-34,16,36,26,15,24,-31,18,38,23,14,23,-28,17,38,22,12,20,-26,15,36,23,11,16,-26,12,34,25,12,14,-28,11,32,14,45,7,-26,36,7,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,16,8,44,18,-22,43,17,6,42,13,-19,40,14,7,41,9,-19,37,10,10,43,6,-22,35,8,20,38,12,-31,31,16,18,36,8,-27,28,13,19,38,17,-31,35,20,16,37,20,-28,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-20,29,16,14,33,7,-23,27,13,23,31,13,-32,25,20,21,29,9,-29,23,18,22,31,18,-32,29,24,19,30,21,-29,30,27,15,28,20,-24,29,27,13,26,16,-21,27,25,14,26,11,-21,24,21,18,27,8,-24,22,18,26,23,16,-33,19,27,25,21,13,-30,17,25,26,23,20,-33,22,30,23,22,22,-30,23,33,20,20,21,-27,23,33,18,19,18,-24,20,31,19,18,14,-24,17,28,22,19,12,-26,16,26,11,47,19,-26,42,16,12,51,15,-29,45,12,6,51,15,-24,48,14,6,45,16,-20,43,15,11,42,16,-22,38,14,15,46,14,-28,39,12,8,52,10,-25,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,7,13,49,9,-27,42,6,8,46,7,-21,43,5,12,50,17,-28,44,15,9,49,18,-25,45,16,9,52,15,-27,47,13,13,46,17,-27,40,15,14,49,15,-29,42,12,8,46,18,-23,43,17,6,48,17,-22,46,15,11,44,18,-24,39,16,8,43,17,-21,40,15,13,43,15,-25,38,13,15,47,12,-28,40,9,12,50,12,-27,44,9,11,52,12,-27,47,10,7,52,13,-24,49,11,5,50,13,-21,48,12,5,47,13,-20,45,12,6,43,14,-19,42,13,9,41,13,-20,38,12,12,41,12,-23,37,11,15,44,12,-26,37,9,11,51,9,-26,45,6,6,50,10,-22,48,8,4,45,10,-18,43,10,10,42,10,-20,38,8,13,45,9,-25,40,6,11,48,7,-24,43,5,8,49,7,-23,46,6,6,47,8,-20,45,7,7,44,8,-19,42,7,10,44,7,-22,40,5,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,63,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-9,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,60,-6,5,57,-6,-17,62,-4,4,59,-5,-19,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,61,-7,10,61,-5,-22,59,-8,12,53,12,-23,45,5,11,51,12,-21,45,6,9,51,12,-20,47,7,7,52,12,-21,48,8,7,54,13,-23,49,8,8,56,13,-25,49,8,10,56,13,-26,47,6,12,55,13,-25,46,5,11,53,5,-19,50,0,12,55,5,-21,49,0,8,52,5,-18,51,2,6,53,5,-19,53,4,5,55,6,-21,54,4,7,58,6,-24,54,3,9,59,6,-25,52,1,12,57,6,-24,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,58,0,9,60,1,-24,56,-2,11,59,1,-23,54,-4,10,55,-3,-17,56,-5,11,58,-2,-20,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,59,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-12,58,4,1,41,24,-11,57,6,2,42,26,-11,58,7,1,43,26,-11,58,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,6,9,53,12,-25,45,5,10,52,12,-24,44,5,12,52,13,-23,43,7,13,53,14,-23,43,9,12,55,16,-24,44,10,1,47,22,-17,56,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-15,54,4,4,44,21,-14,53,6,5,45,23,-14,53,8,4,46,24,-15,54,9,6,54,16,-24,50,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-23,48,4,9,49,13,-21,46,4,10,49,15,-20,45,6,11,50,16,-20,45,8,10,52,18,-21,47,10,8,55,15,-26,48,8,10,56,16,-25,46,10,7,54,13,-25,48,6,8,52,12,-24,46,5,10,51,12,-23,45,5,12,51,13,-22,43,6,12,53,15,-22,43,9,12,54,16,-24,44,10,30,14,16,-33,15,32,31,14,23,-34,15,39,24,14,24,-28,15,42,23,14,17,-26,16,34,35,2,24,-38,3,39,30,4,12,-32,6,28,23,4,22,-26,5,38,23,4,15,-25,6,31,25,2,31,-30,2,47,25,7,31,-30,7,48,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-32,14,42,26,14,15,-29,15,32,25,4,12,-28,6,29,29,8,30,-33,9,46,31,14,19,-34,15,36,23,14,21,-26,15,38,33,4,17,-35,5,33,22,4,17,-25,6,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,33,22,0,17,-25,1,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,1,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,1,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,1,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,6,34,33,4,17,-35,5,33,22,0,17,-25,1,34,33,0,17,-35,0,33,25,4,12,-28,6,29,25,0,12,-28,1,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,6,31,23,4,22,-26,5,38,30,4,12,-32,6,28,35,2,24,-38,3,39,23,0,14,-25,1,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,1,28,10,61,-9,-22,62,-10,7,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,1,63,-18,-13,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-16,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,61,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,59,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,67,0,-4,31,25,-16,66,-1,-1,38,23,-10,62,2,0,38,25,-10,64,4,-4,31,28,-18,66,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,60,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,66,0,0,31,27,-16,68,1,1,31,28,-17,68,2,0,31,26,-16,67,1,0,38,25,-10,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-18,68,4,2,39,28,-11,65,8,-1,38,23,-10,62,2,-1,41,23,-8,60,4,2,42,27,-9,63,9,1,40,30,-12,64,9,-4,39,25,-12,60,3,-3,42,25,-11,58,4,0,43,28,-10,61,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-18,70,3,2,29,26,-18,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-19,70,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-19,70,1,4,29,28,-19,70,3,2,29,27,-18,69,2,4,30,27,-18,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-19,71,2,3,27,26,-19,71,1,4,27,26,-18,71,1,5,28,26,-18,72,2,3,28,27,-17,70,1,4,29,27,-17,71,2,4,30,26,-16,72,1,3,30,25,-16,72,0,5,29,25,-17,73,1,4,29,25,-17,72,0,2,25,24,-18,73,-3,3,25,25,-18,74,-2,2,26,24,-17,72,-2,3,27,25,-18,73,-1,2,26,27,-19,72,0,1,26,26,-18,71,-1,2,25,27,-20,72,-1,1,25,26,-20,71,-2,1,25,26,-20,71,-1,2,25,27,-20,72,0,1,26,25,-18,70,-1,2,26,26,-19,71,0,1,28,28,-19,70,1,0,27,26,-19,69,0,1,26,29,-21,70,0,0,26,27,-21,69,0,0,31,29,-19,67,3,-1,31,28,-19,66,2,0,27,28,-21,69,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-19,69,0,2,28,27,-19,70,0,-1,26,28,-20,70,-1,-2,26,27,-19,68,-3,-2,31,26,-16,66,0,-1,31,27,-16,67,1,-2,26,29,-21,69,-1,-4,26,28,-21,68,-2,-4,31,27,-18,65,0,-2,31,29,-19,66,1,-4,25,28,-21,68,-3,-2,25,29,-21,70,-1,-2,26,27,-19,68,-2,-1,26,28,-20,69,-1,-1,24,28,-19,71,-2,-2,24,26,-19,70,-4,-2,23,29,-21,71,-3,-3,23,28,-21,70,-4,-2,23,27,-20,71,-4,-1,23,28,-20,72,-3,-2,24,26,-19,70,-4,-1,24,28,-19,71,-2,0,22,27,-18,72,-3,-1,22,26,-18,71,-4,0,21,27,-19,73,-4,-1,21,26,-18,72,-5,-6,22,28,-18,72,-6,-5,22,29,-19,72,-5,-5,22,27,-17,71,-6,-4,22,28,-18,72,-5,-4,24,28,-18,71,-4,-5,24,27,-18,70,-5,-5,24,29,-20,71,-4,-6,24,28,-19,70,-5,-6,25,28,-19,69,-5,-5,25,29,-20,70,-4,-5,24,27,-18,69,-5,-4,25,28,-18,71,-3,-4,26,28,-18,69,-2,-5,26,27,-18,68,-4,-5,26,29,-20,69,-2,-6,26,28,-20,68,-4,-4,32,28,-18,66,0,-5,31,26,-17,64,0,-6,27,27,-19,67,-3,-5,28,29,-20,68,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-3,-4,27,28,-18,69,-2,-6,24,28,-19,70,-5,-5,24,27,-18,70,-5,-4,24,28,-18,71,-4,-5,24,29,-20,71,-4,-6,27,28,-20,68,-4,-5,26,27,-18,68,-4,-4,27,28,-18,69,-2,-5,27,29,-20,69,-2,-2,26,29,-21,69,-1,-1,26,28,-20,70,-1,-3,26,27,-20,68,-2,-4,26,28,-21,68,-2,-1,23,29,-21,72,-3,-1,24,28,-19,71,-2,-2,24,26,-19,70,-4,-3,23,27,-20,70,-4,0,26,28,-21,69,0,0,27,26,-19,69,0,1,28,28,-19,70,0,1,27,29,-21,70,0,1,25,26,-20,71,-2,1,26,26,-18,71,-1,2,26,27,-19,72,0,2,25,27,-20,72,0,4,29,28,-20,70,3,4,30,27,-18,70,3,2,29,27,-18,69,2,2,28,28,-20,69,2,5,28,27,-18,71,2,4,28,27,-17,71,2,3,28,26,-17,70,1,4,27,26,-19,71,1,-4,34,22,-14,61,0,-2,34,25,-13,64,0,0,35,23,-11,62,-1,-2,35,21,-13,60,-1,-4,31,22,-15,63,-3,-2,32,24,-14,64,-2,-1,32,22,-12,63,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-13,61,-3,-4,33,22,-15,62,-1,0,33,23,-12,63,-2,-2,33,24,-14,64,0,-2,31,20,-14,63,-5,-3,30,22,-15,64,-4,0,31,22,-12,64,-3,-2,31,24,-14,64,-2,-1,28,23,-14,67,-4,0,28,22,-12,66,-4,-2,27,22,-14,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,61,-1,-2,33,24,-14,63,0,0,34,23,-12,62,-2,-2,34,21,-13,60,-2,-1,32,22,-12,64,-3,-2,31,20,-14,63,-4,-2,31,24,-14,64,-2,-4,31,22,-15,63,-3,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,62,-16,-1,58,-6,-11,57,-7,2,66,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000002", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,65,-7,-17,67,-7,-5,69,5,-17,71,6,-5,78,-11,-15,79,-11,-4,80,3,-14,82,3,-5,67,0,-18,69,0,-2,81,-4,-16,83,-4,-10,61,1,-15,62,1,-11,63,8,-14,63,8,-4,74,5,-17,77,5,-5,73,-11,-17,75,-11,-2,74,-3,-18,77,-3,-11,71,10,-12,66,-9,-9,83,4,-10,80,-12,-11,68,0,-9,84,-5,-13,61,1,-12,63,8,-10,76,7,-11,73,-13,-4,73,4,-17,75,4,-5,69,-10,-17,71,-9,-3,70,-2,-19,73,-1,-10,74,7,-12,69,-11,15,44,12,-26,37,10,14,48,10,-28,41,8,11,51,9,-26,46,7,7,51,9,-23,48,7,4,48,10,-20,46,9,5,44,12,-18,43,11,8,41,14,-20,38,12,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-11,35,-26,3,38,-23,-8,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,27,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-12,42,-15,1,38,-13,-8,41,-13,2,33,-11,-6,35,-10,6,29,-10,-8,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-21,42,-5,5,46,-3,-17,45,-4,3,43,-2,-13,44,-2,3,39,0,-12,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-25,11,33,25,12,14,-28,10,31,14,45,7,-26,36,7,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-22,43,17,6,42,13,-19,40,14,7,41,9,-19,37,10,10,43,6,-22,35,8,20,38,12,-31,31,16,18,36,8,-27,28,13,19,38,17,-31,34,20,16,37,20,-28,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-20,29,16,14,33,7,-23,27,13,23,31,13,-32,25,20,21,29,9,-28,22,18,22,31,18,-32,28,24,19,30,21,-29,30,27,15,28,20,-24,29,27,13,26,16,-21,26,24,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-26,42,17,12,51,15,-29,45,12,6,51,15,-24,48,14,6,45,16,-20,43,15,11,42,16,-22,37,14,15,46,14,-28,39,12,8,52,10,-25,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-27,42,6,8,46,7,-21,43,5,12,50,17,-28,44,15,9,49,18,-25,45,16,9,52,15,-27,47,13,13,46,17,-27,40,15,14,49,15,-29,42,12,8,46,18,-23,42,17,6,48,17,-22,46,15,11,44,18,-24,39,16,8,43,17,-21,40,15,13,43,15,-25,37,13,15,47,12,-28,40,9,12,50,12,-27,44,9,11,52,12,-27,47,10,7,52,13,-24,48,11,5,50,13,-21,48,12,5,47,13,-20,45,12,6,43,14,-19,41,13,9,41,13,-20,38,12,12,41,12,-23,37,11,15,44,12,-26,37,9,11,51,9,-26,45,6,6,50,10,-22,48,8,4,45,10,-18,43,10,10,42,10,-20,38,8,13,45,9,-25,39,6,11,48,7,-24,43,5,8,49,7,-23,46,6,6,47,8,-20,45,7,7,44,8,-19,41,7,10,44,7,-22,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,63,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-8,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,60,-6,5,57,-6,-17,62,-4,4,59,-5,-19,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,61,-7,10,61,-5,-22,59,-8,12,53,12,-23,45,5,11,51,12,-21,45,6,9,51,12,-20,47,7,7,52,12,-21,48,8,7,54,13,-23,49,8,8,56,13,-25,49,8,10,56,13,-26,47,6,12,55,13,-25,46,5,11,53,5,-19,50,0,12,55,5,-21,49,0,8,52,5,-18,51,2,6,53,5,-19,53,4,5,55,6,-21,54,4,7,58,6,-24,54,3,9,59,6,-25,52,1,12,57,6,-24,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,58,0,9,60,1,-24,56,-2,11,59,1,-23,54,-4,10,55,-3,-17,56,-5,11,58,-2,-20,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,59,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-12,58,4,1,41,24,-11,57,6,2,42,26,-11,58,7,1,43,26,-11,58,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,6,9,53,12,-25,45,5,10,52,12,-24,44,5,12,52,13,-23,43,7,13,53,14,-23,43,9,12,55,16,-24,44,10,1,47,22,-17,56,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-15,54,4,4,44,21,-14,53,6,5,45,23,-14,53,8,4,46,24,-15,54,9,6,54,16,-24,50,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-23,48,4,9,49,13,-21,46,4,10,49,15,-20,45,6,11,50,16,-20,45,8,10,52,18,-21,47,10,8,55,15,-26,48,8,10,56,16,-25,46,10,7,54,13,-25,48,6,8,52,12,-24,46,5,10,51,12,-23,45,5,12,51,13,-22,43,6,12,53,15,-22,43,9,12,54,16,-24,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,1,63,-18,-13,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-16,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,61,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,59,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,67,0,-4,31,25,-16,66,-1,-1,38,23,-10,62,2,0,38,25,-10,64,4,-4,31,28,-18,66,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,66,0,0,31,27,-16,68,1,1,31,28,-17,68,2,0,31,26,-16,67,1,0,38,25,-10,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-18,68,4,2,39,28,-11,65,8,-1,38,23,-10,62,2,-1,41,23,-8,60,4,2,42,27,-9,63,9,1,40,30,-12,64,9,-4,39,25,-12,60,3,-3,42,25,-11,58,4,0,43,28,-10,61,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-18,70,3,2,29,26,-18,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-20,70,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-20,70,1,4,29,28,-19,70,3,2,29,27,-18,69,2,4,30,27,-18,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-19,71,2,3,27,26,-19,71,1,4,27,26,-19,71,1,5,28,26,-19,72,2,3,28,27,-18,70,1,4,29,27,-18,71,2,4,30,26,-17,72,1,3,30,25,-17,72,0,5,29,25,-17,73,1,4,29,25,-17,72,0,2,25,24,-18,73,-3,3,25,25,-18,74,-2,2,26,24,-17,72,-2,3,27,25,-17,73,-1,2,26,27,-18,72,0,1,26,26,-18,71,-1,2,25,27,-20,72,-1,1,25,26,-20,71,-2,1,25,26,-20,71,-1,2,25,27,-20,72,0,1,26,25,-18,70,-1,2,26,26,-19,71,0,1,28,28,-19,70,1,0,27,26,-19,69,0,1,26,29,-21,71,0,0,26,27,-21,69,0,0,31,29,-19,67,3,-1,31,28,-19,66,2,0,27,28,-21,69,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-19,69,0,2,28,27,-19,71,0,-1,26,28,-20,70,-1,-2,26,27,-19,69,-3,-2,31,26,-16,66,0,-1,31,27,-16,67,1,-2,26,29,-21,69,-1,-4,26,28,-21,68,-2,-4,31,27,-18,65,0,-2,31,29,-19,66,1,-4,25,28,-21,69,-3,-2,25,29,-21,70,-1,-2,26,27,-19,68,-2,-1,26,28,-20,70,-1,-1,24,28,-19,71,-2,-2,24,26,-19,70,-4,-2,23,29,-21,71,-3,-3,23,28,-20,70,-4,-2,23,27,-20,71,-4,-1,23,28,-20,72,-3,-2,24,26,-19,70,-4,-1,24,28,-19,71,-2,0,22,27,-18,72,-3,-1,22,26,-18,72,-4,0,21,27,-18,73,-4,-1,21,26,-18,72,-5,-6,22,28,-18,72,-6,-5,22,29,-18,72,-5,-5,22,27,-17,71,-6,-4,22,28,-18,72,-5,-4,24,28,-18,71,-4,-5,24,27,-18,70,-5,-5,24,29,-19,71,-4,-6,24,28,-19,70,-5,-6,25,28,-19,69,-5,-5,25,29,-20,71,-4,-5,24,27,-18,70,-5,-4,25,28,-18,71,-3,-4,26,28,-18,69,-2,-5,26,27,-18,68,-4,-5,26,29,-20,69,-2,-6,26,28,-19,68,-4,-4,32,28,-18,66,0,-5,31,26,-17,64,0,-6,27,27,-19,67,-3,-5,28,29,-20,69,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-3,-4,27,28,-18,69,-2,-6,24,28,-19,70,-5,-5,24,27,-18,70,-5,-4,24,28,-18,71,-4,-5,24,29,-20,71,-4,-6,27,28,-19,68,-4,-5,26,27,-18,68,-4,-4,27,28,-18,69,-2,-5,27,29,-20,69,-2,-2,26,29,-21,69,-1,-1,26,28,-20,70,-1,-3,26,27,-19,68,-2,-4,26,28,-21,68,-2,-1,23,29,-21,72,-3,-1,24,28,-19,71,-2,-2,24,26,-19,70,-4,-3,23,27,-20,71,-4,0,26,28,-21,69,0,0,27,26,-19,69,0,1,28,28,-19,70,0,1,27,29,-21,70,0,1,25,26,-20,71,-2,1,26,26,-18,71,-1,2,26,27,-19,72,0,2,25,27,-20,72,0,4,29,28,-20,70,3,4,30,27,-18,70,3,2,29,27,-18,69,2,2,28,28,-20,69,2,5,28,27,-19,72,2,4,28,27,-18,71,2,3,28,26,-18,70,1,4,27,26,-19,71,1,-4,34,22,-14,61,0,-2,34,25,-13,64,0,0,35,23,-11,62,-1,-2,35,21,-13,60,-1,-4,31,22,-15,63,-3,-2,32,24,-14,64,-2,-1,32,22,-12,63,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-13,61,-3,-4,33,22,-15,62,-1,0,33,23,-12,63,-2,-2,33,24,-14,64,0,-2,31,20,-14,63,-5,-3,30,22,-15,64,-4,0,31,22,-12,64,-3,-2,31,24,-14,65,-2,-1,28,23,-14,67,-4,0,28,22,-12,66,-4,-2,27,22,-14,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,61,-1,-2,33,24,-14,64,0,0,34,23,-12,62,-2,-2,34,21,-13,60,-2,-1,32,22,-12,64,-3,-2,31,20,-14,63,-4,-2,31,24,-14,64,-2,-4,31,22,-15,63,-3,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,62,-16,-1,58,-6,-11,57,-7,2,66,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000003", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,65,-7,-17,67,-7,-5,69,5,-17,71,5,-5,78,-11,-15,79,-11,-4,80,3,-14,82,3,-5,67,0,-18,69,0,-2,81,-4,-16,83,-4,-10,61,1,-15,62,1,-11,63,8,-14,63,8,-3,74,4,-16,77,5,-5,73,-11,-17,75,-11,-2,74,-3,-18,77,-3,-11,71,10,-12,66,-9,-9,83,4,-10,80,-12,-11,68,0,-9,84,-5,-13,61,1,-12,63,8,-10,76,7,-11,73,-13,-4,73,4,-16,75,4,-5,69,-10,-17,71,-9,-3,70,-2,-19,73,-1,-10,74,7,-12,69,-11,15,44,12,-26,37,10,14,48,10,-28,41,8,11,51,9,-26,46,7,7,51,9,-23,48,7,4,48,10,-19,46,9,5,44,12,-18,43,12,8,41,14,-20,38,12,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-11,35,-26,3,38,-23,-8,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,27,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-12,42,-15,1,38,-13,-8,41,-13,2,33,-11,-6,35,-10,6,29,-10,-8,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-21,42,-5,5,46,-3,-17,45,-4,3,43,-2,-13,44,-2,3,39,0,-12,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-25,11,33,25,12,14,-28,10,31,14,45,7,-26,36,7,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-22,43,17,6,42,13,-19,40,14,7,41,9,-18,37,10,10,43,6,-21,35,8,20,38,12,-31,31,16,18,36,8,-27,28,13,19,38,17,-31,34,20,16,37,20,-28,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-20,29,16,14,33,7,-23,27,13,23,31,13,-32,25,20,21,29,9,-28,22,18,22,31,18,-32,28,24,19,30,21,-29,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-26,42,17,12,51,15,-29,45,12,6,51,15,-24,48,14,6,45,16,-20,43,15,11,42,16,-22,37,14,15,46,14,-28,39,12,8,52,10,-24,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-27,42,6,8,46,7,-21,43,5,12,50,17,-28,44,15,9,49,18,-25,45,16,9,52,15,-26,47,13,13,46,17,-27,40,15,14,49,15,-29,42,12,8,46,18,-23,42,17,6,48,17,-22,46,15,11,44,18,-24,39,16,8,43,17,-21,40,15,13,43,15,-25,37,13,15,47,12,-28,40,9,12,50,12,-27,44,9,11,52,12,-27,47,10,7,52,13,-24,48,11,5,50,13,-21,48,12,5,47,13,-20,45,12,6,43,14,-19,41,13,9,41,13,-20,38,12,12,41,12,-23,37,11,15,44,12,-26,37,9,11,51,9,-26,45,6,6,50,10,-22,48,9,4,45,10,-18,43,10,10,42,10,-20,38,8,13,45,9,-25,39,6,11,48,7,-24,43,5,8,49,7,-23,46,6,6,47,8,-20,45,7,7,44,8,-19,41,7,10,44,7,-22,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,63,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-8,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,60,-6,5,57,-6,-17,62,-4,4,59,-5,-19,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,61,-7,10,61,-5,-22,59,-8,12,53,12,-23,45,5,11,51,12,-21,45,6,9,51,12,-20,47,7,7,52,12,-21,48,8,7,54,13,-23,49,8,8,56,13,-25,49,8,10,56,13,-26,47,6,12,55,13,-25,46,5,11,53,5,-19,50,0,12,55,5,-21,49,0,8,52,5,-18,51,2,6,53,5,-19,53,4,5,55,6,-21,54,4,7,58,6,-24,54,3,9,59,6,-25,52,1,12,57,6,-24,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,58,0,9,60,1,-24,56,-2,11,59,1,-23,54,-4,10,55,-3,-17,56,-5,11,58,-2,-20,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,59,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-12,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,58,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,6,9,53,12,-25,45,5,10,52,12,-23,44,5,12,52,13,-23,43,7,13,53,14,-23,43,9,12,55,16,-24,44,10,1,47,22,-17,57,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-15,54,4,4,44,21,-14,53,6,5,45,23,-14,53,8,4,46,24,-15,54,9,6,54,16,-24,50,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-23,48,4,9,49,13,-21,46,4,10,49,15,-20,45,6,11,50,16,-20,45,8,10,52,18,-21,47,10,8,55,15,-26,48,8,10,56,16,-25,46,10,7,54,13,-25,48,6,8,52,12,-24,46,5,10,51,12,-23,45,5,12,51,13,-22,43,6,12,53,15,-22,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,1,63,-18,-13,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-16,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,61,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,59,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-15,68,0,-4,31,25,-15,66,-1,-1,38,23,-10,62,2,0,38,25,-10,64,4,-4,31,28,-18,66,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-10,63,3,-2,31,25,-16,67,0,0,31,27,-16,68,1,1,31,28,-17,69,2,0,31,26,-16,67,1,0,38,25,-10,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-18,65,2,-2,39,29,-13,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-11,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-17,68,4,2,39,28,-10,65,8,-1,38,23,-10,62,2,-1,41,23,-8,60,4,2,42,27,-9,63,9,1,40,30,-12,64,9,-4,39,25,-12,60,3,-3,42,25,-11,58,4,0,43,28,-10,61,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-18,70,3,2,29,26,-18,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-19,70,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-19,70,1,4,29,28,-19,71,3,2,29,27,-18,69,2,4,30,27,-18,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-19,72,2,3,27,26,-19,71,1,4,27,26,-18,71,1,5,28,26,-18,72,2,3,28,27,-17,71,1,4,29,27,-17,71,2,4,30,26,-16,73,1,3,30,25,-17,72,0,5,29,25,-17,73,1,4,29,25,-17,73,0,2,25,24,-18,73,-3,3,25,25,-18,74,-2,2,26,24,-17,72,-2,3,27,25,-17,73,-1,2,26,27,-18,72,0,1,26,26,-18,71,-1,2,25,27,-19,73,-1,1,24,26,-19,72,-2,1,25,26,-20,71,-1,2,25,27,-20,72,0,1,26,25,-18,71,-1,2,26,26,-18,72,0,1,28,28,-19,70,1,0,27,26,-19,69,0,1,26,29,-21,71,0,0,26,27,-20,70,0,0,31,29,-19,67,3,-1,31,28,-19,66,2,0,27,28,-20,69,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-16,67,1,0,27,26,-19,70,0,2,28,27,-19,71,0,-1,26,28,-19,70,-1,-2,26,27,-19,69,-3,-2,31,26,-16,66,0,-1,31,27,-16,67,1,-2,26,29,-21,69,-1,-4,26,28,-21,68,-2,-4,31,27,-18,65,0,-2,31,29,-18,66,1,-4,25,28,-21,69,-3,-2,25,29,-21,70,-1,-2,26,27,-19,69,-2,-1,26,28,-19,70,-1,-1,24,28,-19,71,-2,-2,24,26,-19,70,-4,-2,23,29,-20,72,-3,-3,23,28,-20,70,-4,-2,23,27,-20,71,-4,-1,23,28,-20,72,-3,-2,24,26,-19,70,-4,-1,24,28,-19,71,-2,0,22,27,-17,73,-3,-1,22,26,-17,72,-4,0,21,27,-18,73,-4,-1,21,26,-18,72,-5,-5,22,28,-18,72,-6,-5,22,29,-18,73,-5,-5,22,27,-17,71,-6,-4,22,28,-17,72,-5,-4,24,28,-18,71,-4,-5,24,27,-18,70,-5,-5,24,29,-19,71,-4,-6,24,28,-19,70,-5,-6,25,28,-19,70,-5,-5,25,29,-19,71,-4,-5,24,27,-18,70,-5,-4,25,28,-18,71,-3,-4,26,28,-18,70,-2,-5,26,27,-18,68,-4,-5,26,29,-20,70,-3,-6,26,28,-19,68,-4,-4,32,28,-18,66,0,-5,31,26,-17,65,0,-6,27,27,-19,67,-3,-5,28,29,-19,69,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-3,-4,27,28,-18,69,-2,-6,24,28,-19,70,-5,-5,24,27,-18,70,-5,-4,24,28,-18,71,-4,-5,24,29,-19,71,-4,-6,27,28,-19,68,-4,-5,26,27,-18,68,-4,-4,27,28,-18,69,-2,-5,27,29,-20,69,-2,-2,26,29,-21,70,-1,-1,26,28,-19,70,-1,-3,26,27,-19,69,-2,-4,26,28,-21,68,-3,-1,23,29,-20,72,-3,-1,24,28,-19,71,-2,-2,24,26,-19,70,-4,-3,23,27,-20,71,-4,0,26,28,-21,69,0,0,27,26,-19,69,0,1,28,28,-19,70,0,1,27,29,-21,70,0,1,25,26,-20,71,-2,1,26,26,-18,71,-1,2,26,27,-18,72,0,2,25,27,-20,72,0,4,29,28,-20,70,3,4,30,27,-18,70,3,2,29,27,-18,69,2,2,28,28,-20,69,2,5,28,27,-19,72,2,4,28,27,-17,71,2,3,28,26,-18,70,1,4,27,26,-19,71,1,-4,34,22,-14,61,0,-2,34,25,-13,64,0,0,35,23,-11,62,-1,-2,35,21,-13,60,-1,-4,31,22,-15,63,-3,-2,32,24,-14,64,-2,-1,32,22,-12,63,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-13,61,-3,-4,33,22,-15,62,-1,0,33,23,-12,63,-2,-2,33,24,-13,64,0,-2,31,20,-14,63,-5,-3,30,22,-15,64,-4,0,31,22,-12,64,-3,-2,31,24,-14,65,-2,-1,28,23,-13,67,-4,0,28,22,-12,66,-4,-2,27,22,-14,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,61,-1,-2,33,24,-13,64,0,0,34,23,-12,62,-2,-2,34,21,-13,60,-2,-1,32,22,-12,64,-3,-2,31,20,-14,63,-4,-2,31,24,-14,64,-2,-4,31,22,-15,63,-3,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,62,-16,-1,58,-6,-11,57,-7,2,66,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000004", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,65,-7,-17,67,-7,-5,70,5,-17,72,5,-5,77,-11,-15,79,-11,-4,81,2,-14,82,2,-5,67,0,-18,70,0,-2,81,-4,-16,83,-4,-10,61,1,-15,62,1,-11,63,8,-14,64,8,-3,75,4,-16,77,5,-5,72,-11,-17,75,-11,-2,74,-3,-18,77,-3,-11,71,10,-12,66,-9,-9,83,4,-10,80,-13,-11,68,0,-9,84,-5,-13,61,1,-12,63,8,-10,76,7,-11,73,-13,-4,73,4,-16,75,4,-5,68,-10,-17,71,-9,-3,70,-2,-19,73,-1,-10,74,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-27,42,8,11,51,9,-26,46,7,7,51,9,-22,48,8,4,48,10,-19,46,10,5,44,12,-18,42,12,8,41,14,-19,38,13,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-10,36,-26,3,38,-23,-7,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,26,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-11,42,-15,1,38,-13,-7,40,-13,2,33,-11,-5,35,-10,6,29,-10,-7,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-20,42,-5,5,46,-3,-16,45,-4,3,43,-2,-13,44,-2,3,39,0,-11,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-26,11,33,25,12,14,-28,10,31,14,45,7,-25,36,8,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-21,43,17,6,42,13,-18,40,14,7,41,9,-18,37,11,10,43,6,-21,35,8,20,38,12,-30,31,16,18,36,8,-27,28,13,19,38,17,-30,34,20,16,37,20,-27,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-19,29,16,14,33,7,-23,27,13,23,31,13,-31,25,20,21,29,9,-28,22,18,22,31,18,-31,28,24,19,30,21,-28,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-25,42,17,12,51,15,-28,45,12,6,51,15,-23,48,14,6,45,16,-19,43,15,11,42,16,-22,38,14,15,46,14,-27,39,12,8,52,10,-24,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-26,42,7,8,46,7,-21,43,5,12,50,17,-27,44,15,9,49,18,-24,45,16,9,52,15,-26,47,13,13,46,17,-27,40,15,14,49,15,-28,42,12,8,46,18,-22,42,17,6,48,17,-21,46,16,11,44,18,-24,39,16,8,43,17,-20,40,15,13,43,15,-25,37,13,15,47,12,-27,40,9,12,50,12,-27,44,10,11,52,12,-26,47,10,7,52,13,-24,48,11,5,50,13,-20,48,12,5,47,13,-19,45,13,6,43,14,-18,41,13,9,41,13,-19,38,12,12,41,12,-22,37,11,15,44,12,-26,37,9,11,51,9,-26,45,7,6,50,10,-21,48,9,4,45,10,-17,43,10,10,42,10,-20,38,8,13,45,9,-25,40,7,11,48,7,-24,43,5,8,49,7,-22,46,6,6,47,8,-19,45,7,7,44,8,-19,41,7,10,44,7,-21,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,63,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-8,68,-3,-13,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,60,-6,5,57,-6,-17,62,-4,4,59,-5,-19,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,60,-7,10,61,-5,-22,58,-8,12,53,12,-22,45,5,11,51,12,-20,45,6,9,51,12,-20,47,7,7,52,12,-20,48,8,7,54,13,-22,49,8,8,56,13,-24,49,8,10,56,13,-25,47,6,12,55,13,-24,46,5,11,53,5,-18,50,0,12,55,5,-21,49,0,8,52,5,-17,51,2,6,53,5,-18,53,4,5,55,6,-21,54,4,7,58,6,-23,54,3,9,59,6,-24,52,1,12,57,6,-23,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,57,0,9,60,1,-24,56,-2,11,59,1,-22,54,-4,10,55,-3,-17,56,-5,11,58,-2,-19,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-12,60,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-11,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,59,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,6,9,53,12,-24,45,5,10,52,12,-23,43,5,12,52,13,-22,42,7,13,53,14,-22,43,9,12,55,16,-23,44,10,1,47,22,-17,57,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,56,4,3,44,20,-14,54,5,4,44,21,-14,54,6,5,45,23,-14,54,8,4,46,24,-14,55,9,6,54,16,-24,49,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-22,48,4,9,49,13,-20,46,4,10,49,15,-19,45,6,11,50,16,-20,45,8,10,52,18,-21,47,10,8,55,15,-25,47,9,10,56,16,-25,46,10,7,54,13,-25,47,6,8,52,12,-24,46,5,10,51,12,-22,44,5,12,51,13,-21,43,7,12,53,15,-22,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,57,-9,-3,56,-12,-9,56,-13,1,63,-18,-14,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,60,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,58,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,68,0,-4,31,25,-16,66,-1,-1,38,23,-10,62,2,0,38,25,-10,64,4,-4,31,28,-18,66,1,-6,32,26,-17,65,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,65,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,67,0,0,31,27,-16,68,1,1,31,28,-17,69,2,0,31,26,-16,67,1,0,38,25,-10,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-17,68,4,2,39,28,-11,66,8,-1,38,23,-10,62,2,-1,41,23,-8,60,4,2,42,27,-9,63,8,1,40,30,-12,64,9,-4,39,25,-12,60,3,-3,42,25,-11,59,4,0,43,28,-10,62,9,-2,39,29,-14,62,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-18,70,3,2,29,26,-18,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-20,70,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-19,70,1,4,29,28,-19,71,3,2,29,27,-18,69,2,4,30,27,-18,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-19,72,2,3,27,26,-19,71,1,4,27,26,-19,71,0,5,28,26,-19,72,2,3,28,27,-18,71,1,4,29,27,-17,72,2,4,30,26,-17,73,1,3,30,25,-17,72,0,5,29,25,-17,73,1,4,29,25,-17,73,0,2,25,24,-18,73,-3,3,25,25,-18,74,-2,2,26,24,-17,72,-2,3,26,25,-17,73,-1,2,26,27,-18,72,0,1,26,26,-18,71,-1,2,25,27,-20,73,-1,1,24,26,-19,72,-2,1,25,26,-20,71,-1,2,25,27,-20,72,0,1,26,25,-18,71,-1,2,26,26,-18,72,0,1,28,28,-19,70,1,0,27,26,-19,69,0,1,26,29,-21,71,0,0,26,27,-21,70,0,0,31,29,-19,67,3,-1,31,28,-19,66,1,0,27,28,-21,69,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-19,70,0,2,28,27,-19,71,0,-1,26,28,-19,70,-1,-2,26,27,-19,69,-3,-2,31,26,-16,66,0,-1,31,27,-16,68,1,-2,26,29,-21,69,-1,-4,26,28,-21,68,-2,-4,31,27,-18,65,0,-2,31,29,-19,66,1,-4,25,28,-21,69,-3,-2,25,29,-21,70,-2,-2,26,27,-19,69,-2,-1,26,28,-19,70,-1,-1,24,28,-19,72,-2,-2,24,26,-19,70,-4,-2,23,29,-20,72,-3,-3,23,28,-20,71,-4,-2,23,27,-20,71,-5,-1,23,28,-20,72,-3,-2,24,26,-19,70,-4,-1,24,28,-19,72,-2,0,22,27,-17,73,-3,-1,22,26,-17,72,-4,0,21,27,-18,74,-4,-1,21,26,-18,73,-5,-5,22,28,-18,72,-6,-5,22,29,-18,73,-5,-5,22,27,-17,72,-6,-4,22,28,-17,72,-5,-4,24,28,-18,71,-4,-5,24,27,-18,70,-5,-5,24,29,-19,72,-4,-6,24,28,-19,70,-5,-6,25,28,-19,70,-5,-5,25,29,-19,71,-4,-5,24,27,-18,70,-5,-4,25,28,-18,71,-3,-4,26,28,-18,70,-2,-5,26,27,-18,69,-4,-5,26,29,-20,70,-3,-6,26,28,-19,68,-4,-4,32,28,-18,66,0,-5,31,26,-17,65,0,-6,27,27,-19,68,-3,-5,28,29,-19,69,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-3,-4,27,28,-18,70,-2,-6,24,28,-19,70,-5,-5,24,27,-18,70,-5,-4,24,28,-18,71,-4,-5,24,29,-19,71,-4,-6,27,28,-19,68,-4,-5,26,27,-18,68,-4,-4,27,28,-18,70,-2,-5,27,29,-20,69,-2,-2,26,29,-21,70,-1,-1,26,28,-20,70,-1,-3,26,27,-19,69,-2,-4,26,28,-21,69,-3,-1,23,29,-20,72,-3,-1,24,28,-19,72,-2,-2,24,26,-19,70,-4,-3,23,27,-20,71,-4,0,26,28,-21,69,0,0,27,26,-19,69,0,1,28,28,-19,71,0,1,27,29,-21,71,0,1,24,26,-20,72,-2,1,26,26,-18,71,-1,2,26,27,-18,72,0,2,25,27,-20,73,0,4,29,28,-20,70,3,4,30,27,-18,70,3,2,29,27,-18,69,2,2,28,28,-20,69,2,5,28,27,-19,72,2,4,28,27,-18,71,2,3,28,26,-18,71,1,4,27,26,-19,71,1,-4,34,22,-15,61,0,-2,34,25,-13,64,0,0,35,23,-11,63,-1,-2,35,21,-13,60,-1,-4,31,22,-15,63,-3,-2,32,24,-14,65,-2,-1,32,22,-12,64,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,64,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-13,61,-3,-4,33,22,-15,62,-1,0,33,23,-12,63,-2,-2,33,24,-14,64,-1,-2,31,20,-14,63,-5,-3,30,22,-15,64,-4,0,31,22,-12,64,-3,-2,31,24,-14,65,-2,-1,28,23,-13,67,-4,0,28,22,-12,67,-4,-2,27,22,-14,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,62,-1,-2,33,24,-14,64,0,0,34,23,-12,63,-2,-2,34,21,-13,61,-2,-1,32,22,-12,64,-3,-2,31,20,-14,63,-4,-2,31,24,-14,65,-2,-4,31,22,-15,64,-3,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-12,57,-7,2,66,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000005", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,66,-7,-17,66,-7,-6,70,5,-17,71,5,-6,78,-11,-17,79,-11,-6,81,2,-16,82,2,-5,68,0,-19,69,0,-4,82,-4,-18,82,-4,-9,61,1,-15,62,1,-10,63,8,-13,63,8,-5,76,4,-18,76,5,-6,73,-11,-18,74,-11,-3,75,-3,-20,76,-3,-11,71,10,-12,66,-9,-11,83,3,-11,80,-13,-12,68,0,-11,85,-5,-12,61,1,-12,63,8,-11,77,7,-12,73,-13,-5,74,4,-18,74,4,-6,69,-10,-18,70,-9,-4,71,-2,-20,72,-1,-11,75,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-27,42,8,11,51,9,-26,46,7,7,51,9,-22,48,8,4,48,10,-19,46,10,5,44,12,-18,42,12,8,41,14,-19,38,13,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-10,36,-26,3,38,-23,-7,39,-22,0,36,-18,-4,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,26,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-11,42,-15,1,38,-13,-7,40,-13,2,33,-11,-5,35,-10,6,29,-10,-7,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-20,42,-5,5,46,-3,-16,45,-4,3,43,-2,-13,44,-2,3,39,0,-11,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-26,11,33,25,12,14,-28,10,31,14,45,7,-25,36,8,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-21,43,17,6,42,13,-18,40,14,7,41,9,-18,37,11,10,43,6,-21,35,8,20,38,12,-30,31,16,18,36,8,-27,28,13,19,38,17,-30,34,20,16,37,20,-27,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-19,29,16,14,33,7,-23,27,13,23,31,13,-31,25,20,21,29,9,-28,22,18,22,31,18,-31,28,24,19,30,21,-28,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-25,42,17,12,51,15,-28,45,12,6,51,15,-23,48,14,6,45,16,-19,43,15,11,42,16,-22,38,14,15,46,14,-27,39,12,8,52,10,-24,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-26,42,7,8,46,7,-21,43,5,12,50,17,-27,44,15,9,49,18,-24,45,16,9,52,15,-26,47,13,13,46,17,-27,40,15,14,49,15,-28,42,12,8,46,18,-22,42,17,6,48,17,-21,46,16,11,44,18,-24,39,16,8,43,17,-20,40,15,13,43,15,-25,37,13,15,47,12,-27,40,9,12,50,12,-27,44,10,11,52,12,-26,47,10,7,52,13,-24,48,11,5,50,13,-20,48,12,5,47,13,-19,45,13,6,43,14,-18,41,13,9,41,13,-19,38,12,12,41,12,-22,37,11,15,44,12,-26,38,9,11,51,9,-26,45,7,6,50,10,-21,48,9,4,45,10,-17,43,10,10,42,10,-20,38,8,13,45,9,-25,40,7,11,48,7,-24,43,5,8,49,7,-22,46,6,6,47,8,-19,45,7,7,44,8,-19,41,7,10,44,7,-21,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,64,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,60,-3,-10,66,-6,-9,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-5,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,59,-6,5,57,-6,-17,61,-4,4,59,-5,-20,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,60,-7,10,61,-5,-22,58,-8,12,53,12,-22,45,5,11,51,12,-20,45,6,9,51,12,-19,46,7,7,52,12,-20,48,8,7,54,13,-22,49,9,8,56,13,-24,48,8,10,56,13,-25,47,6,12,55,13,-24,45,5,11,53,5,-18,49,0,12,55,5,-21,49,0,8,52,5,-17,51,2,6,53,5,-18,53,4,5,55,6,-21,54,4,7,58,6,-23,53,3,9,59,6,-24,52,1,12,57,6,-23,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,57,0,9,60,1,-24,56,-2,11,59,1,-22,54,-4,10,55,-3,-17,55,-5,11,58,-2,-19,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,60,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-11,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,59,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,7,9,53,12,-24,45,5,10,52,12,-23,43,5,12,52,13,-22,42,7,13,53,14,-22,43,9,12,55,16,-23,44,10,1,47,22,-17,56,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-14,54,5,4,44,21,-13,54,6,5,45,23,-13,54,8,4,46,24,-14,55,9,6,54,16,-24,49,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-22,47,4,9,49,13,-20,46,4,10,49,15,-19,45,6,11,50,16,-19,45,8,10,52,18,-21,46,10,8,55,15,-25,47,9,10,56,16,-24,46,10,7,54,13,-25,47,6,8,52,12,-23,46,5,10,51,12,-22,44,5,12,51,13,-21,43,7,12,53,15,-22,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,57,-9,-3,56,-12,-9,56,-13,1,63,-18,-14,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,59,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,60,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,56,-10,9,59,-11,-22,61,-12,4,58,-2,-17,58,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,67,0,-4,31,25,-16,66,-1,-1,38,23,-10,62,2,0,38,25,-11,64,4,-4,31,28,-18,65,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,66,0,0,31,27,-17,68,1,1,31,28,-17,68,2,0,31,26,-17,67,1,0,38,25,-11,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-18,68,4,2,39,28,-11,66,8,-1,38,23,-10,62,2,-1,42,23,-8,60,4,2,42,27,-9,63,8,1,40,30,-13,64,9,-4,39,25,-12,60,3,-3,42,25,-11,59,4,0,43,28,-11,62,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-19,70,3,2,29,26,-19,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-20,69,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-20,69,1,4,29,28,-20,70,3,2,29,27,-19,69,2,4,30,27,-19,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-19,71,2,3,27,26,-19,70,1,4,27,26,-19,71,0,5,28,26,-19,72,2,3,28,27,-18,70,1,4,29,27,-18,71,2,4,30,26,-17,73,1,3,30,25,-17,72,0,5,29,25,-18,73,1,4,29,25,-18,72,0,2,25,24,-19,73,-3,3,25,25,-19,74,-2,2,26,24,-18,72,-2,3,26,25,-18,73,-1,2,26,27,-19,72,0,1,26,26,-19,71,-1,2,25,27,-20,72,-1,1,24,26,-20,71,-2,1,25,26,-21,71,-1,2,25,27,-21,72,0,1,26,25,-19,70,-1,2,26,26,-19,71,0,1,28,28,-20,70,1,0,27,26,-20,69,0,1,26,29,-21,70,0,0,26,27,-21,69,0,0,31,29,-19,67,3,-1,31,28,-19,66,1,0,27,28,-21,68,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-20,69,0,2,28,27,-20,70,0,-1,26,28,-20,70,-1,-2,26,27,-20,68,-3,-2,31,26,-16,66,0,-1,31,27,-17,67,1,-2,26,29,-21,69,-1,-4,26,28,-21,67,-2,-4,31,27,-19,65,0,-2,31,29,-19,66,1,-4,25,28,-21,68,-3,-2,25,29,-22,70,-2,-2,26,27,-20,68,-2,-1,26,28,-20,69,-1,-1,24,28,-20,71,-2,-2,24,26,-19,70,-4,-2,23,29,-21,71,-3,-3,23,28,-21,70,-4,-2,23,27,-20,71,-5,-1,23,28,-21,72,-3,-2,24,26,-19,70,-4,0,24,28,-20,71,-2,0,22,27,-18,72,-3,-1,22,26,-18,71,-4,0,21,27,-19,73,-4,-1,21,26,-19,72,-5,-5,22,28,-18,72,-6,-5,22,29,-19,72,-6,-5,22,27,-18,71,-6,-4,22,28,-18,72,-5,-4,24,28,-18,71,-4,-5,24,27,-18,70,-5,-5,24,29,-20,71,-4,-6,24,28,-19,70,-6,-6,25,28,-20,69,-5,-5,25,29,-20,70,-4,-5,24,27,-18,69,-5,-4,25,28,-18,71,-4,-4,26,28,-18,69,-2,-5,26,27,-18,68,-4,-5,26,29,-20,69,-3,-6,26,28,-20,68,-4,-4,32,28,-18,66,0,-5,31,26,-18,64,0,-6,27,27,-19,67,-3,-5,28,29,-20,68,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-4,-4,27,28,-18,69,-2,-6,24,28,-20,70,-5,-5,24,27,-18,70,-5,-4,24,28,-18,71,-4,-5,24,29,-20,71,-4,-6,27,28,-20,68,-4,-5,26,27,-18,68,-4,-4,27,28,-19,69,-2,-5,27,29,-20,69,-2,-2,26,29,-22,69,-1,-1,26,28,-20,69,-1,-2,26,27,-20,68,-2,-4,26,28,-21,68,-3,-1,23,29,-21,71,-3,-1,24,28,-20,71,-2,-2,24,26,-19,70,-4,-3,23,27,-21,70,-4,0,26,28,-21,69,0,0,27,26,-20,69,0,1,28,28,-20,70,0,1,27,29,-21,70,0,1,24,26,-20,71,-2,1,26,26,-19,70,-1,2,26,27,-19,72,0,2,25,27,-21,72,0,4,29,28,-20,70,3,4,30,27,-19,70,3,2,29,27,-19,69,2,2,28,28,-20,69,2,5,28,27,-19,71,2,4,28,27,-18,71,2,3,28,26,-18,70,1,4,27,26,-19,71,1,-4,34,22,-15,61,0,-2,34,25,-14,64,0,0,35,23,-11,63,-1,-2,35,21,-13,60,-1,-4,31,22,-16,63,-3,-2,32,24,-14,64,-2,-1,32,22,-13,64,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-14,61,-3,-4,33,22,-15,62,-2,0,33,23,-12,63,-2,-2,33,24,-14,64,-1,-2,31,20,-14,63,-5,-3,30,22,-16,64,-4,0,31,22,-13,64,-3,-2,31,24,-14,65,-2,-1,28,23,-14,67,-4,0,28,22,-13,66,-4,-2,27,22,-15,67,-5,-1,28,21,-14,66,-6,-4,34,22,-15,61,-1,-2,33,24,-14,64,0,0,34,23,-12,63,-2,-2,34,21,-13,60,-2,-1,32,22,-13,64,-3,-2,31,20,-14,63,-5,-2,31,24,-14,64,-2,-4,31,22,-16,63,-4,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-12,57,-7,2,66,-6,-15,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-16,66,-12] }, + { "name": "animation_000006", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,66,-7,-17,66,-7,-6,70,5,-17,71,5,-6,78,-11,-17,79,-11,-6,81,2,-16,82,2,-5,68,0,-19,69,0,-4,82,-4,-18,82,-4,-9,61,1,-15,62,1,-10,63,8,-13,63,8,-5,76,4,-18,76,5,-6,73,-11,-18,74,-11,-3,75,-3,-20,76,-3,-12,71,10,-12,66,-9,-11,83,4,-12,80,-13,-12,68,0,-11,85,-5,-12,61,1,-12,63,8,-11,76,7,-12,73,-13,-5,74,4,-18,74,4,-6,69,-10,-18,70,-9,-4,72,-2,-20,72,-1,-11,74,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-27,41,8,11,51,9,-26,46,7,7,51,9,-22,48,8,4,48,10,-19,46,10,5,44,12,-18,42,12,8,41,14,-19,38,13,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-10,36,-26,3,38,-23,-7,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,26,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-11,42,-15,1,38,-13,-7,40,-13,2,33,-11,-6,35,-10,6,29,-10,-7,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-21,42,-5,5,46,-3,-16,45,-4,3,43,-2,-13,44,-2,3,39,0,-11,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-26,11,33,25,12,14,-28,10,31,14,45,7,-26,36,8,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-21,43,17,6,42,13,-18,40,14,7,41,9,-18,37,11,10,43,6,-21,35,8,20,38,12,-30,31,16,18,36,8,-27,28,13,19,38,17,-30,34,20,16,37,20,-27,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-20,29,16,14,33,7,-23,27,13,23,31,13,-31,25,20,21,29,9,-28,22,18,22,31,18,-32,28,24,19,30,21,-28,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-25,42,17,12,51,15,-28,45,12,6,51,15,-23,48,14,6,45,16,-20,43,15,11,42,16,-22,38,14,15,46,14,-27,39,12,8,52,10,-24,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-27,42,7,8,46,7,-21,43,5,12,50,17,-27,44,15,9,49,18,-25,45,16,9,52,15,-26,47,13,13,46,17,-27,40,15,14,49,15,-29,42,12,8,46,18,-22,42,17,6,48,17,-21,46,16,11,44,18,-24,39,16,8,43,17,-21,40,15,13,43,15,-25,37,13,15,47,12,-28,40,9,12,50,12,-27,44,10,11,52,12,-27,47,10,7,52,13,-24,48,11,5,50,13,-21,48,12,5,47,13,-20,45,13,6,43,14,-19,41,13,9,41,13,-20,38,12,12,41,12,-22,37,11,15,44,12,-26,37,9,11,51,9,-26,45,7,6,50,10,-21,48,9,4,45,10,-17,43,10,10,42,10,-20,38,8,13,45,9,-25,40,6,11,48,7,-24,43,5,8,49,7,-22,46,6,6,47,8,-19,45,7,7,44,8,-19,41,7,10,44,7,-22,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,64,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-9,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,59,-6,5,57,-6,-17,61,-4,4,59,-5,-20,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,60,-7,10,61,-5,-22,58,-8,12,53,12,-22,45,5,11,51,12,-20,45,6,9,51,12,-20,46,7,7,52,12,-20,48,8,7,54,13,-22,49,9,8,56,13,-24,48,8,10,56,13,-25,47,6,12,55,13,-24,45,5,11,53,5,-18,49,0,12,55,5,-21,49,0,8,52,5,-17,51,2,6,53,5,-18,53,4,5,55,6,-21,54,4,7,58,6,-23,53,3,9,59,6,-24,52,1,12,57,6,-23,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,57,0,9,60,1,-24,56,-2,11,59,1,-23,54,-4,10,55,-3,-17,55,-5,11,58,-2,-20,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,60,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-11,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,59,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,7,9,53,12,-24,45,5,10,52,12,-23,43,5,12,52,13,-22,42,7,13,53,14,-22,43,9,12,55,16,-23,44,10,1,47,22,-17,56,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-14,54,5,4,44,21,-14,53,6,5,45,23,-14,54,8,4,46,24,-14,54,9,6,54,16,-24,49,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-22,48,4,9,49,13,-20,46,4,10,49,15,-19,45,6,11,50,16,-20,45,8,10,52,18,-21,46,10,8,55,15,-25,47,9,10,56,16,-24,46,10,7,54,13,-25,47,6,8,52,12,-24,46,5,10,51,12,-22,44,5,12,51,13,-21,43,7,12,53,15,-22,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,28,-33,9,46,34,7,27,-38,8,44,36,2,29,-40,2,43,25,7,30,-30,7,48,26,3,32,-30,2,48,30,9,36,-36,6,53,27,8,36,-32,6,53,36,8,33,-41,5,49,37,5,35,-41,2,50,27,6,38,-32,2,54,31,6,38,-36,2,54,28,3,39,-32,0,54,31,4,39,-36,0,54,37,3,36,-41,0,50,26,0,33,-30,0,48,37,0,30,-40,0,43,30,0,32,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,6,38,-36,2,54,27,6,38,-32,2,54,37,5,35,-41,2,50,28,3,39,-32,0,54,31,4,39,-36,0,54,37,3,36,-41,0,50,26,3,32,-30,2,48,26,0,33,-30,0,48,36,2,29,-40,2,43,37,0,30,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,57,-9,-3,56,-12,-9,56,-13,1,63,-18,-14,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,59,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,60,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,56,-10,9,59,-11,-22,61,-12,4,58,-2,-17,58,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,67,0,-4,31,25,-16,66,-1,-1,38,23,-10,62,2,0,38,25,-11,64,4,-4,32,28,-18,65,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,66,0,0,31,27,-17,68,1,1,31,28,-17,68,2,0,31,26,-17,67,1,0,38,25,-11,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-18,68,4,2,39,28,-11,66,8,-1,38,23,-10,62,2,-1,42,23,-8,60,4,2,42,27,-9,63,8,1,40,30,-13,64,9,-4,39,25,-12,60,3,-3,42,25,-11,59,4,0,43,28,-11,62,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-19,70,3,2,29,26,-19,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-20,69,3,2,29,28,-20,68,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-20,69,1,4,29,28,-20,70,3,2,29,27,-19,69,2,4,30,27,-19,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-20,71,2,3,27,26,-20,70,1,4,27,26,-19,71,0,5,28,26,-19,72,2,3,28,27,-18,70,1,4,29,27,-18,71,2,4,30,26,-18,73,1,3,30,25,-18,72,0,5,29,25,-18,73,1,4,29,25,-18,72,0,2,25,24,-19,73,-3,3,25,25,-20,73,-2,2,26,24,-18,72,-2,3,26,25,-19,73,-1,2,26,27,-19,72,0,1,26,26,-19,71,-1,2,25,27,-21,72,-1,1,24,26,-21,71,-2,1,25,26,-21,71,-1,2,25,27,-21,72,0,1,26,25,-19,70,-1,2,26,26,-19,71,0,1,28,28,-20,70,1,0,27,26,-20,69,0,1,26,29,-22,70,0,0,26,27,-21,69,0,0,31,29,-19,67,3,-1,31,28,-19,66,1,0,27,28,-21,68,0,1,27,29,-21,69,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-20,69,0,2,28,27,-20,70,0,-1,26,28,-20,70,-1,-2,26,27,-20,68,-3,-2,31,26,-16,66,0,-1,31,27,-17,67,1,-2,26,29,-22,69,-1,-4,26,28,-21,67,-2,-4,31,27,-18,65,0,-2,31,29,-19,66,1,-4,25,28,-22,68,-3,-2,25,29,-22,69,-1,-2,26,27,-20,68,-2,-1,26,28,-20,69,-1,-1,24,28,-20,71,-2,-2,24,26,-20,70,-4,-2,23,29,-21,71,-3,-3,23,28,-21,70,-4,-2,23,27,-21,71,-5,-1,23,28,-21,72,-3,-2,24,26,-20,70,-4,0,24,28,-20,71,-2,0,22,27,-19,72,-3,-1,22,26,-18,71,-4,0,21,27,-19,73,-4,-1,21,26,-19,72,-5,-5,22,28,-18,72,-6,-5,22,29,-18,72,-6,-5,22,27,-17,71,-6,-4,22,28,-18,72,-5,-4,24,28,-18,71,-4,-5,24,27,-18,70,-5,-5,24,29,-20,71,-4,-6,24,28,-19,70,-6,-6,25,28,-19,69,-5,-5,25,29,-20,70,-4,-5,24,27,-18,69,-5,-4,25,28,-18,71,-4,-4,26,28,-18,69,-2,-5,26,27,-18,68,-4,-5,26,29,-20,69,-3,-6,26,28,-20,68,-4,-4,32,28,-18,66,0,-5,31,26,-18,64,0,-6,27,27,-19,67,-3,-5,28,29,-20,68,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-4,-4,27,28,-18,69,-2,-6,24,28,-19,70,-5,-5,24,27,-18,70,-5,-4,24,28,-18,71,-4,-5,24,29,-20,71,-4,-6,27,28,-20,68,-4,-5,26,27,-18,68,-4,-4,27,28,-18,69,-2,-5,27,29,-20,69,-2,-2,26,29,-22,69,-1,-1,26,28,-20,69,-1,-2,26,27,-20,68,-2,-4,26,28,-22,68,-2,-1,23,29,-21,71,-3,-1,24,28,-20,71,-2,-2,24,26,-20,70,-4,-3,23,27,-21,70,-4,0,26,28,-21,69,0,0,27,26,-20,69,0,1,28,28,-20,70,0,1,27,29,-22,70,0,1,24,26,-21,71,-2,1,26,26,-19,70,-1,2,26,27,-19,71,0,2,25,27,-21,72,0,4,29,28,-20,70,3,4,30,27,-19,70,3,2,29,27,-19,69,2,2,28,28,-20,69,2,5,28,27,-20,71,2,4,28,27,-18,71,2,3,28,26,-18,70,1,4,27,26,-20,71,1,-4,34,22,-15,61,0,-2,34,25,-14,64,0,0,35,23,-11,62,-1,-2,35,21,-13,60,-1,-4,31,22,-16,63,-3,-2,32,24,-14,64,-2,-1,32,22,-13,64,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-14,61,-3,-4,33,22,-15,62,-2,0,33,23,-12,63,-2,-2,33,24,-14,64,-1,-2,31,20,-14,63,-5,-3,30,22,-16,64,-4,0,31,22,-13,64,-3,-2,31,24,-14,65,-2,-1,28,23,-14,67,-4,0,28,22,-13,66,-4,-2,28,22,-15,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,61,-1,-2,33,24,-14,64,0,0,34,23,-12,63,-2,-2,34,21,-13,60,-2,-1,32,22,-13,64,-3,-2,31,20,-14,63,-5,-2,31,24,-14,64,-2,-3,31,22,-16,63,-4,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-12,57,-7,2,66,-6,-15,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-16,66,-12] }, + { "name": "animation_000007", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,66,-7,-17,67,-7,-6,70,5,-17,71,5,-6,78,-11,-17,79,-11,-6,81,2,-16,82,3,-5,68,0,-19,69,0,-4,82,-4,-18,82,-4,-9,61,1,-15,62,1,-10,63,8,-13,63,8,-5,75,4,-18,76,5,-6,73,-11,-18,74,-11,-3,75,-3,-20,76,-3,-11,71,10,-12,66,-9,-11,83,4,-11,80,-12,-12,68,0,-11,85,-5,-12,61,1,-12,63,8,-11,76,7,-12,73,-13,-5,73,4,-18,74,4,-6,69,-10,-18,70,-9,-4,71,-2,-20,72,-1,-11,74,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-27,41,8,11,51,9,-26,46,7,7,51,9,-22,48,8,4,48,10,-19,46,10,5,44,12,-18,42,12,8,41,14,-20,38,13,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-11,36,-26,3,38,-23,-7,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,27,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-12,42,-15,1,38,-13,-7,41,-13,2,33,-11,-6,35,-10,6,29,-10,-7,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-21,42,-5,5,46,-3,-17,45,-4,3,43,-2,-13,44,-2,3,39,0,-11,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-25,11,33,25,12,14,-28,10,31,14,45,7,-26,36,8,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-22,43,17,6,42,13,-18,40,14,7,41,9,-18,37,10,10,43,6,-21,35,8,20,38,12,-30,31,16,18,36,8,-27,28,13,19,38,17,-31,34,20,16,37,20,-27,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-20,29,16,14,33,7,-23,27,13,23,31,13,-31,25,20,21,29,9,-28,22,18,22,31,18,-32,28,24,19,30,21,-28,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-25,42,17,12,51,15,-28,45,12,6,51,15,-23,48,14,6,45,16,-20,43,15,11,42,16,-22,38,14,15,46,14,-28,39,12,8,52,10,-24,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-27,42,7,8,46,7,-21,43,5,12,50,17,-28,44,15,9,49,18,-25,45,16,9,52,15,-26,47,13,13,46,17,-27,40,15,14,49,15,-29,42,12,8,46,18,-22,42,17,6,48,17,-21,46,15,11,44,18,-24,39,16,8,43,17,-21,40,15,13,43,15,-25,37,13,15,47,12,-28,40,9,12,50,12,-27,44,10,11,52,12,-27,47,10,7,52,13,-24,48,11,5,50,13,-21,48,12,5,47,13,-20,45,12,6,43,14,-19,41,13,9,41,13,-20,38,12,12,41,12,-22,37,11,15,44,12,-26,37,9,11,51,9,-26,45,7,6,50,10,-21,48,9,4,45,10,-17,43,10,10,42,10,-20,38,8,13,45,9,-25,39,6,11,48,7,-24,43,5,8,49,7,-22,46,6,6,47,8,-19,45,7,7,44,8,-19,41,7,10,44,7,-22,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,64,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-9,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,60,-6,5,57,-6,-17,62,-4,4,59,-5,-19,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,61,-7,10,61,-5,-22,59,-8,12,53,12,-23,45,5,11,51,12,-21,45,6,9,51,12,-20,47,7,7,52,12,-21,48,8,7,54,13,-23,49,8,8,56,13,-25,49,8,10,56,13,-25,47,6,12,55,13,-24,46,5,11,53,5,-19,50,0,12,55,5,-21,49,0,8,52,5,-18,51,2,6,53,5,-19,53,4,5,55,6,-21,54,4,7,58,6,-23,54,3,9,59,6,-24,52,1,12,57,6,-23,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,58,0,9,60,1,-24,56,-2,11,59,0,-23,54,-4,10,55,-3,-17,56,-5,11,58,-2,-20,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,59,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-11,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,58,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,6,9,53,12,-25,45,5,10,52,12,-23,43,5,12,52,13,-22,43,7,13,53,14,-23,43,9,12,55,16,-24,44,10,1,47,22,-17,57,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-15,54,5,4,44,21,-14,53,6,5,45,23,-14,54,8,4,46,24,-15,54,9,6,54,16,-24,49,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-22,48,4,9,49,13,-21,46,4,10,49,15,-20,45,6,11,50,16,-20,45,8,10,52,18,-21,47,10,8,55,15,-26,47,9,10,56,16,-25,46,10,7,54,13,-25,47,6,8,52,12,-24,46,5,10,51,12,-22,44,5,12,51,13,-21,43,6,12,53,15,-22,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,1,63,-18,-13,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,61,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,59,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,68,0,-4,31,25,-16,66,-1,-1,38,23,-10,62,2,0,38,25,-10,64,4,-4,32,28,-18,66,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,67,0,0,31,27,-16,68,1,1,31,28,-17,68,2,0,31,26,-17,67,1,0,39,25,-10,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-18,68,4,2,39,28,-11,66,8,-1,38,23,-10,62,2,-1,42,23,-8,60,4,2,42,27,-9,63,9,1,40,30,-12,64,9,-4,39,25,-12,60,3,-3,42,25,-11,58,4,0,43,28,-10,61,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-19,70,3,2,29,26,-19,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-20,69,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,2,28,27,-20,69,1,4,29,28,-20,70,3,2,29,27,-19,69,2,4,30,27,-19,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,4,28,27,-19,71,2,3,27,26,-20,71,1,4,27,26,-19,71,1,5,28,26,-19,72,2,3,28,27,-18,71,1,4,29,27,-18,71,2,4,30,26,-17,73,1,3,30,25,-18,72,0,5,29,25,-18,73,1,4,29,25,-18,72,0,2,25,24,-19,73,-3,3,25,25,-19,74,-2,2,26,24,-18,72,-2,3,26,25,-18,73,-1,2,26,27,-19,72,0,1,26,26,-19,71,-1,2,25,27,-21,72,0,1,24,26,-20,71,-2,1,25,26,-21,71,-1,2,25,27,-21,72,0,1,26,25,-19,70,-1,2,26,26,-19,71,0,1,28,28,-20,70,1,0,27,26,-20,69,0,1,26,29,-21,70,0,0,26,27,-21,69,0,0,31,29,-19,67,3,-1,31,28,-19,66,2,0,27,28,-21,68,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-20,69,0,2,28,27,-20,70,0,-1,26,28,-20,70,-1,-2,26,27,-20,68,-3,-2,31,26,-16,66,0,-1,31,27,-17,67,1,-2,26,29,-21,69,-1,-4,26,28,-21,67,-2,-4,31,27,-18,65,0,-2,31,29,-19,66,1,-4,25,28,-21,68,-3,-2,25,29,-22,70,-1,-2,26,27,-20,68,-2,-1,26,28,-20,69,-1,-1,24,28,-20,71,-2,-2,24,26,-19,70,-4,-2,23,29,-21,71,-3,-3,23,28,-21,70,-4,-2,23,27,-21,71,-4,-1,23,28,-21,72,-3,-2,24,26,-19,70,-4,0,24,28,-20,71,-2,0,22,27,-18,72,-3,-1,22,26,-18,71,-4,0,21,27,-19,73,-4,-1,21,26,-19,72,-5,-5,22,28,-18,72,-6,-5,22,29,-18,73,-5,-5,22,27,-17,71,-6,-4,22,28,-17,72,-5,-4,24,28,-18,71,-4,-5,24,27,-17,70,-5,-5,24,29,-19,71,-4,-6,24,28,-19,70,-5,-6,25,28,-19,70,-5,-5,25,29,-19,71,-4,-5,24,27,-17,70,-5,-4,25,28,-18,71,-3,-4,26,28,-18,70,-2,-5,26,27,-18,68,-4,-5,26,29,-20,70,-3,-6,26,28,-19,68,-4,-4,32,28,-18,66,0,-5,31,26,-17,64,0,-6,27,27,-19,67,-3,-5,28,29,-19,69,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-18,68,-3,-4,27,28,-18,69,-2,-6,24,28,-19,70,-5,-5,24,27,-18,70,-5,-4,24,28,-18,71,-4,-5,24,29,-19,71,-4,-6,27,28,-19,68,-4,-5,26,27,-18,68,-4,-4,27,28,-18,69,-2,-5,27,29,-20,69,-2,-2,26,29,-22,69,-1,-1,26,28,-20,70,-1,-2,26,27,-20,68,-2,-4,26,28,-21,68,-2,-1,23,29,-21,71,-3,-1,24,28,-20,71,-2,-2,24,26,-19,70,-4,-3,23,27,-21,70,-4,0,26,28,-21,69,0,0,27,26,-20,69,0,1,28,28,-20,70,0,1,27,29,-21,70,0,1,24,26,-21,71,-2,1,26,26,-19,71,-1,2,26,27,-19,72,0,2,25,27,-21,72,0,4,29,28,-20,70,3,4,30,27,-19,70,3,2,29,27,-19,69,2,2,28,28,-20,69,2,5,28,27,-19,72,2,4,29,27,-18,71,2,3,28,26,-18,70,1,4,27,26,-19,71,1,-4,34,22,-15,61,0,-2,34,25,-13,64,0,0,35,23,-11,62,-1,-2,35,21,-13,60,-1,-4,31,22,-15,63,-3,-2,32,24,-14,64,-2,-1,32,22,-12,64,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-13,61,-3,-4,33,22,-15,62,-1,0,33,23,-12,63,-2,-2,33,24,-14,64,-1,-2,31,20,-14,63,-5,-3,30,22,-15,64,-4,0,31,22,-12,64,-3,-2,31,24,-14,65,-2,-1,28,23,-14,67,-4,0,28,22,-13,66,-4,-2,28,22,-14,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,61,-1,-2,33,24,-14,64,0,0,34,23,-12,63,-2,-2,34,21,-13,60,-2,0,32,22,-12,64,-3,-2,31,20,-14,63,-4,-2,31,24,-14,64,-2,-3,31,22,-15,63,-3,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-11,57,-7,2,66,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000008", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,66,-7,-17,67,-7,-6,70,5,-17,71,5,-6,78,-11,-17,79,-11,-6,81,3,-16,82,3,-5,68,0,-19,69,0,-4,81,-4,-18,82,-4,-9,61,1,-15,62,1,-10,63,8,-13,63,8,-5,75,4,-18,76,5,-6,73,-11,-18,74,-11,-3,75,-3,-20,76,-3,-11,71,10,-12,66,-9,-11,83,4,-11,80,-12,-12,68,0,-11,85,-5,-12,61,1,-12,63,8,-11,76,7,-12,73,-13,-5,73,4,-18,74,4,-6,69,-10,-18,70,-9,-4,71,-2,-20,72,-1,-11,74,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-27,41,8,11,51,9,-26,46,7,7,51,9,-22,48,8,4,48,10,-19,46,10,5,44,12,-18,42,12,8,41,14,-20,38,13,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-11,36,-26,3,38,-23,-7,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,26,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-11,42,-15,1,38,-13,-7,40,-13,2,33,-11,-6,35,-10,6,29,-10,-7,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-21,42,-5,5,46,-3,-16,45,-4,3,43,-2,-13,44,-2,3,39,0,-11,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-26,11,33,25,12,14,-28,10,31,14,45,7,-26,36,8,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-22,43,17,6,42,13,-18,40,14,7,41,9,-18,37,11,10,43,6,-21,35,8,20,38,12,-30,31,16,18,36,8,-27,28,13,19,38,17,-31,34,20,16,37,20,-27,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-20,29,16,14,33,7,-23,27,13,23,31,13,-31,25,20,21,29,9,-28,22,18,22,31,18,-32,28,24,19,30,21,-28,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-25,42,17,12,51,15,-28,45,12,6,51,15,-23,48,14,6,45,16,-20,43,15,11,42,16,-22,38,14,15,46,14,-27,39,12,8,52,10,-24,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-27,42,7,8,46,7,-21,43,5,12,50,17,-27,44,15,9,49,18,-25,45,16,9,52,15,-26,47,13,13,46,17,-27,40,15,14,49,15,-29,42,12,8,46,18,-22,42,17,6,48,17,-21,46,15,11,44,18,-24,39,16,8,43,17,-21,40,15,13,43,15,-25,37,13,15,47,12,-28,40,9,12,50,12,-27,44,10,11,52,12,-27,47,10,7,52,13,-24,48,11,5,50,13,-21,48,12,5,47,13,-20,45,13,6,43,14,-19,41,13,9,41,13,-20,38,12,12,41,12,-22,37,11,15,44,12,-26,37,9,11,51,9,-26,45,7,6,50,10,-21,48,9,4,45,10,-17,43,10,10,42,10,-20,38,8,13,45,9,-25,39,6,11,48,7,-24,43,5,8,49,7,-22,46,6,6,47,8,-19,45,7,7,44,8,-19,41,7,10,44,7,-22,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,64,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-9,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,60,-6,5,57,-6,-17,62,-4,4,59,-5,-19,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,61,-7,10,61,-5,-22,59,-8,12,53,12,-23,45,5,11,51,12,-21,45,6,9,51,12,-20,47,7,7,52,12,-21,48,8,7,54,13,-23,49,8,8,56,13,-25,49,8,10,56,13,-25,47,6,12,55,13,-24,46,5,11,53,5,-19,50,0,12,55,5,-21,49,0,8,52,5,-18,51,2,6,53,5,-19,53,4,5,55,6,-21,54,4,7,58,6,-23,54,3,9,59,6,-24,52,1,12,57,6,-23,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,5,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,58,0,9,60,1,-24,56,-2,11,59,0,-23,54,-4,10,55,-3,-17,56,-5,11,58,-2,-20,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,59,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-12,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,58,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,6,9,53,12,-25,45,5,11,52,12,-23,43,5,12,52,13,-22,43,7,13,53,14,-23,43,9,12,55,16,-24,44,10,1,47,22,-17,57,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-15,54,5,4,44,21,-14,53,6,5,45,23,-14,54,8,4,46,24,-15,54,9,6,54,16,-24,49,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-23,48,4,9,49,13,-21,46,4,10,49,15,-20,45,6,11,50,16,-20,45,8,10,52,18,-21,47,10,8,55,15,-26,47,9,10,56,16,-25,46,10,7,54,13,-25,47,6,8,52,12,-24,46,5,10,51,12,-22,44,5,12,51,13,-22,43,6,12,53,15,-22,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,29,-33,9,46,34,8,28,-38,8,44,36,2,28,-40,2,43,25,7,30,-30,7,48,26,2,32,-30,2,48,30,8,37,-36,6,53,27,7,37,-32,6,53,36,7,34,-41,5,49,37,4,35,-41,2,50,27,4,38,-32,2,54,31,4,38,-36,2,54,28,2,39,-32,0,54,31,2,39,-36,0,54,37,1,36,-41,0,50,26,0,32,-30,0,48,37,0,29,-40,0,43,30,0,31,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,4,38,-36,2,54,27,4,38,-32,2,54,37,4,35,-41,2,50,28,2,39,-32,0,54,31,2,39,-36,0,54,37,1,36,-41,0,50,26,2,32,-30,2,48,26,0,32,-30,0,48,36,2,28,-40,2,43,37,0,29,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,1,63,-18,-13,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,61,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,59,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-16,68,0,-4,31,25,-16,66,-1,-1,38,23,-10,62,2,0,38,25,-10,64,4,-4,32,28,-18,66,1,-6,32,26,-17,64,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,64,0,-2,31,29,-19,66,2,1,38,26,-11,66,5,0,38,24,-11,63,3,-2,31,25,-16,67,0,0,31,27,-16,68,1,1,32,28,-17,68,2,0,31,26,-16,67,1,0,39,25,-10,65,4,1,39,27,-11,66,6,0,31,30,-19,67,3,-2,31,28,-19,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-12,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-18,68,4,2,39,28,-11,66,8,-1,38,23,-10,62,2,-1,42,23,-8,60,4,2,42,27,-9,63,9,1,40,30,-12,64,9,-4,39,25,-12,60,3,-3,42,25,-11,58,4,0,43,28,-10,61,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-19,70,3,2,29,26,-19,69,2,1,32,27,-17,66,3,2,33,28,-17,67,5,3,29,28,-20,69,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-19,67,5,3,28,27,-20,69,1,4,29,28,-20,70,3,2,29,27,-19,69,2,4,30,27,-19,70,3,4,29,26,-18,71,2,3,28,26,-18,70,1,5,28,27,-20,71,2,3,27,26,-20,71,1,4,27,26,-19,71,1,5,28,26,-19,72,2,3,28,27,-18,71,1,4,29,27,-18,71,2,4,30,26,-18,73,1,3,30,25,-18,72,0,5,29,25,-18,73,1,4,29,25,-19,73,0,2,25,24,-19,73,-3,3,25,25,-19,74,-2,2,26,24,-18,72,-2,3,26,25,-18,73,-1,2,26,27,-19,72,0,1,26,26,-19,71,-1,2,25,27,-20,72,0,1,24,26,-20,71,-2,1,25,26,-21,71,-1,2,25,27,-21,72,0,1,26,25,-19,70,-1,2,26,26,-19,71,0,2,28,28,-20,70,1,0,27,26,-19,69,0,1,26,29,-21,70,0,0,26,27,-21,69,0,0,31,29,-19,67,3,-1,31,28,-19,66,2,0,27,28,-21,68,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,31,26,-17,67,1,0,27,26,-19,69,0,2,28,27,-20,70,0,-1,26,28,-20,70,-1,-2,26,27,-19,69,-3,-2,31,26,-16,66,0,0,31,27,-16,67,1,-2,26,29,-21,69,-1,-4,26,28,-21,68,-2,-4,31,27,-18,65,0,-2,31,29,-19,66,1,-3,25,28,-21,68,-3,-2,25,29,-21,70,-1,-2,26,27,-20,68,-2,-1,26,28,-20,70,-1,-1,24,28,-19,71,-2,-2,24,26,-19,70,-4,-2,23,29,-21,71,-3,-3,23,28,-21,70,-4,-2,23,27,-20,71,-4,-1,23,28,-21,72,-3,-2,24,26,-19,70,-4,0,24,28,-19,71,-2,0,22,27,-18,72,-3,-1,22,26,-18,72,-4,0,21,27,-19,73,-4,-1,21,26,-19,72,-5,-5,22,28,-17,72,-6,-5,22,29,-18,73,-5,-5,22,27,-17,71,-6,-4,22,28,-17,72,-5,-4,24,28,-18,71,-4,-5,24,27,-17,70,-5,-5,24,29,-19,71,-4,-6,24,28,-19,70,-5,-6,25,28,-19,70,-5,-5,25,29,-19,71,-4,-5,25,27,-17,70,-5,-4,25,28,-18,71,-3,-4,26,28,-18,70,-2,-5,26,27,-17,68,-4,-5,27,29,-19,70,-3,-6,26,28,-19,68,-4,-4,32,28,-18,66,0,-5,31,26,-17,64,0,-6,27,27,-19,67,-3,-5,28,29,-19,69,-2,-3,31,26,-16,67,0,-4,31,25,-16,65,-1,-5,27,26,-17,68,-3,-4,27,28,-18,69,-2,-6,24,28,-19,70,-5,-5,24,27,-17,70,-5,-4,24,28,-18,71,-4,-5,24,29,-19,71,-4,-6,27,28,-19,68,-4,-5,26,27,-18,68,-4,-4,27,28,-18,69,-2,-5,27,29,-19,69,-2,-2,26,29,-22,69,-1,-1,26,28,-20,70,-1,-2,26,27,-20,68,-2,-4,26,28,-21,68,-2,-1,23,29,-21,72,-3,-1,24,28,-20,71,-2,-2,24,26,-19,70,-4,-3,23,27,-21,70,-4,0,26,28,-21,69,0,0,27,26,-20,69,0,2,28,28,-20,70,0,1,27,29,-21,70,0,1,24,26,-20,71,-2,1,26,26,-19,71,-1,2,26,27,-19,72,0,2,25,27,-21,72,0,4,29,28,-20,70,3,4,30,27,-19,70,3,2,29,27,-19,69,2,2,28,28,-20,69,2,5,28,27,-19,72,2,4,29,27,-18,71,2,3,28,26,-18,70,1,4,27,26,-20,71,1,-4,35,22,-15,61,0,-2,34,25,-13,64,0,0,35,23,-11,62,-1,-2,35,21,-13,60,-1,-4,31,22,-15,63,-3,-2,32,24,-14,64,-2,-1,32,22,-12,64,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,63,2,-2,40,22,-10,59,2,-4,40,24,-12,60,3,-2,33,21,-13,61,-3,-4,33,22,-15,62,-1,0,33,23,-12,63,-2,-2,33,24,-14,64,-1,-2,31,20,-14,63,-5,-3,30,22,-15,64,-4,0,31,22,-12,64,-3,-2,31,24,-14,65,-2,-1,28,23,-14,67,-4,0,28,22,-13,66,-4,-2,28,22,-14,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,61,-1,-2,33,24,-14,64,0,0,34,23,-12,63,-2,-2,34,21,-13,60,-2,0,32,22,-12,64,-3,-2,31,20,-14,63,-4,-2,31,24,-14,64,-2,-3,31,22,-15,63,-3,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-11,57,-7,2,66,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000009", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,66,-7,-17,66,-7,-6,70,5,-17,71,5,-6,78,-11,-17,79,-11,-6,81,2,-16,82,3,-5,68,0,-19,69,0,-4,81,-4,-18,82,-4,-9,61,1,-15,62,1,-10,63,8,-13,63,8,-5,75,4,-18,76,5,-6,73,-11,-18,74,-11,-3,75,-3,-20,76,-3,-11,71,10,-12,66,-9,-11,83,4,-11,80,-12,-12,68,0,-11,84,-5,-12,61,1,-12,63,8,-11,76,7,-12,73,-13,-5,73,4,-17,74,4,-6,69,-10,-18,70,-9,-4,71,-2,-20,72,-1,-11,74,7,-12,69,-11,15,44,12,-26,38,10,14,48,10,-27,41,8,11,51,9,-26,46,7,7,51,9,-22,48,8,4,48,10,-19,46,10,5,44,12,-18,42,12,8,41,14,-20,38,13,12,41,14,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-11,36,-26,3,38,-23,-7,39,-22,0,36,-18,-5,39,-18,1,30,-15,-3,33,-14,6,25,-14,-5,27,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,4,42,-15,-12,42,-15,1,38,-13,-7,41,-13,2,33,-11,-6,35,-10,6,29,-10,-8,29,-9,11,29,-10,-12,27,-11,14,43,-2,-22,38,-4,15,39,0,-21,33,-2,10,46,-3,-21,42,-5,5,46,-3,-17,45,-4,3,43,-2,-13,44,-2,3,39,0,-11,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,29,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-25,11,33,25,12,14,-28,10,31,14,45,7,-26,36,8,16,47,11,-29,39,10,15,47,16,-29,42,14,12,46,19,-26,44,17,8,44,18,-22,43,17,6,42,13,-18,40,14,7,41,9,-18,37,10,10,43,6,-21,35,8,20,38,12,-30,31,16,18,36,8,-27,28,13,19,38,17,-31,34,20,16,37,20,-27,36,23,12,35,19,-23,35,23,10,33,15,-20,32,20,11,32,9,-20,29,16,14,33,7,-23,27,13,23,31,13,-31,25,20,21,29,9,-28,22,18,22,31,18,-32,28,24,19,30,21,-28,30,27,15,28,20,-24,29,27,13,26,16,-21,26,25,14,26,11,-21,23,21,18,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,20,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-25,42,17,12,51,15,-28,45,12,6,51,15,-23,48,14,6,45,16,-20,43,15,11,42,16,-22,38,14,15,46,14,-28,39,12,8,52,10,-24,48,8,4,48,11,-19,46,10,7,42,11,-18,40,10,12,43,9,-23,38,8,13,49,9,-27,42,7,8,46,7,-21,43,5,12,50,17,-28,44,15,9,49,18,-25,45,16,9,52,15,-26,47,13,13,46,17,-27,40,15,14,49,15,-29,42,12,8,46,18,-23,42,17,6,48,17,-21,46,15,11,44,18,-24,39,16,8,43,17,-21,40,15,13,43,15,-25,37,13,15,47,12,-28,40,9,12,50,12,-27,44,10,11,52,12,-27,47,10,7,52,13,-24,48,11,5,50,13,-21,48,12,5,47,13,-20,45,12,6,43,14,-19,41,13,9,41,13,-20,38,12,12,41,12,-22,37,11,15,44,12,-26,37,9,11,51,9,-26,45,7,6,50,10,-21,48,9,4,45,10,-17,43,10,10,42,10,-20,38,8,13,45,9,-25,39,6,11,48,7,-24,43,5,8,49,7,-22,46,6,6,47,8,-19,45,7,7,44,8,-19,41,7,10,44,7,-22,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-13,61,-11,-4,60,-8,-11,58,-10,-7,58,-9,-9,67,-11,-8,66,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-6,-9,59,-5,-11,67,-6,-8,66,-5,-12,65,-6,-7,64,-4,-13,62,-5,-8,61,-3,-12,60,-4,-10,59,-3,-10,66,-6,-9,68,-3,-14,67,-5,-7,65,-2,-14,64,-4,-8,62,-1,-13,61,-3,-10,60,-2,-11,69,-4,11,59,-6,-19,57,-9,10,56,-6,-17,58,-8,7,56,-6,-16,60,-6,5,57,-6,-17,62,-4,4,59,-5,-19,63,-4,5,62,-4,-22,62,-5,8,62,-4,-23,61,-7,10,61,-5,-22,59,-8,12,53,12,-23,45,5,11,51,12,-21,45,6,9,51,12,-20,47,7,7,52,12,-21,48,8,7,54,13,-23,49,8,8,56,13,-25,49,8,10,56,13,-25,47,6,12,55,13,-25,46,5,11,53,5,-19,50,0,12,55,5,-21,49,0,8,52,5,-18,51,2,6,53,5,-19,53,4,5,55,6,-21,54,4,7,58,6,-24,54,3,9,59,6,-25,52,1,12,57,6,-24,50,0,10,54,0,-18,53,-3,12,57,0,-20,53,-4,8,54,0,-17,55,-1,6,55,0,-18,57,0,5,57,1,-20,58,0,6,59,1,-23,58,0,9,60,1,-24,56,-2,11,59,0,-23,54,-4,10,55,-3,-17,56,-5,11,58,-2,-20,55,-6,8,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-22,56,-6,0,44,26,-13,59,8,0,44,25,-13,60,7,-1,43,24,-13,60,5,0,42,23,-13,59,4,0,41,23,-12,58,4,1,41,24,-11,58,6,2,42,26,-11,58,7,1,43,26,-11,58,8,10,56,15,-25,45,10,9,56,14,-26,46,9,8,55,13,-26,46,6,9,53,12,-25,45,5,11,52,12,-23,44,5,12,52,13,-23,43,7,13,53,14,-23,43,9,12,55,16,-24,44,10,1,47,22,-17,57,7,3,47,23,-16,56,9,1,46,21,-17,56,6,1,45,20,-16,55,4,3,44,20,-15,54,5,4,44,21,-14,53,6,5,45,23,-14,54,8,4,46,24,-15,54,9,6,54,16,-24,50,8,8,54,18,-23,48,10,6,53,15,-24,49,6,7,51,13,-23,48,4,9,49,13,-21,46,4,10,49,15,-20,45,6,11,50,16,-20,45,8,10,52,18,-21,47,10,8,55,15,-26,48,9,10,56,16,-25,46,10,7,54,13,-25,48,6,8,52,12,-24,46,5,10,51,12,-23,45,5,12,51,13,-22,43,7,12,53,15,-22,43,9,12,54,16,-23,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,1,63,-18,-13,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,61,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,59,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-2,31,26,-15,68,0,-4,31,25,-15,66,-1,-1,38,23,-10,62,2,0,38,25,-10,64,4,-4,32,28,-18,66,1,-5,32,26,-17,65,-1,-4,39,25,-13,60,3,-3,39,28,-14,61,5,-2,39,29,-14,62,6,-3,39,27,-13,61,4,-4,31,27,-18,65,0,-2,31,29,-19,66,2,1,38,26,-10,66,5,0,38,24,-10,63,3,-2,31,25,-16,67,0,0,31,27,-16,68,1,1,32,28,-16,69,2,0,31,26,-16,67,1,0,39,25,-10,65,4,1,39,27,-11,66,6,0,31,30,-18,67,3,-2,31,28,-18,65,2,-2,39,29,-14,61,6,0,39,30,-14,63,8,1,39,30,-13,65,9,-1,39,30,-13,62,7,0,32,28,-19,65,3,2,32,29,-19,67,5,2,40,28,-11,66,8,0,40,26,-11,65,6,1,32,26,-17,67,2,3,33,28,-17,68,4,2,39,28,-10,65,8,-1,38,23,-10,62,2,-1,42,23,-8,60,4,2,42,27,-9,63,9,1,40,30,-12,64,9,-4,39,25,-12,60,3,-3,42,25,-11,58,4,0,43,28,-10,61,9,-2,39,29,-14,61,6,-2,43,27,-11,59,7,1,38,25,-10,65,5,0,42,25,-8,62,6,4,30,27,-18,70,3,2,29,26,-18,69,2,1,32,27,-17,67,3,2,33,28,-17,67,5,3,29,28,-20,70,3,2,29,28,-20,69,2,0,32,28,-19,66,3,2,32,29,-18,67,5,3,28,27,-20,70,1,4,29,28,-19,71,3,3,29,27,-18,69,2,4,30,27,-18,70,3,5,29,26,-18,71,2,3,28,26,-18,71,1,5,28,27,-19,72,2,3,27,26,-19,71,1,4,28,26,-19,71,0,5,28,26,-19,72,2,3,28,27,-18,71,1,4,29,27,-18,72,2,4,30,26,-17,73,1,3,30,25,-17,72,0,5,30,25,-18,73,1,4,29,25,-18,73,0,2,25,24,-18,73,-3,4,25,25,-18,74,-2,2,26,24,-17,72,-2,3,26,25,-17,73,-1,2,26,27,-18,72,0,1,26,26,-18,71,-1,2,25,27,-20,73,-1,1,24,26,-20,72,-2,1,25,27,-20,71,-1,2,25,27,-20,72,0,1,26,26,-18,71,-1,2,26,26,-18,72,0,2,28,28,-19,70,1,0,27,26,-19,69,0,1,26,29,-21,71,0,0,26,27,-21,70,0,0,31,29,-19,67,3,-1,31,28,-18,66,1,0,27,28,-21,69,0,1,27,29,-21,70,1,1,32,28,-17,68,2,0,32,26,-16,67,1,0,27,26,-19,70,0,2,28,27,-19,71,0,-1,26,28,-19,70,-1,-2,26,27,-19,69,-3,-2,31,26,-16,66,0,0,31,27,-16,67,1,-2,26,29,-21,69,-1,-4,26,28,-20,68,-2,-4,31,27,-18,65,0,-2,31,29,-18,66,1,-3,25,28,-21,69,-3,-2,25,29,-21,70,-2,-2,26,27,-19,69,-2,-1,26,28,-19,70,-1,0,24,28,-19,72,-2,-2,24,26,-18,70,-4,-2,23,29,-20,72,-3,-3,23,28,-20,71,-4,-2,23,27,-20,71,-5,-1,23,28,-20,72,-3,-2,24,26,-19,70,-4,0,24,28,-19,72,-2,0,22,27,-17,73,-3,-1,22,26,-17,72,-4,0,21,27,-18,73,-4,-1,21,26,-18,73,-5,-5,22,28,-17,72,-6,-5,22,29,-17,73,-5,-5,22,27,-16,72,-6,-4,22,28,-16,72,-5,-4,24,28,-17,71,-4,-5,24,27,-17,70,-5,-5,24,29,-18,72,-4,-6,24,28,-18,71,-6,-6,25,28,-18,70,-5,-5,25,29,-18,71,-4,-5,25,27,-17,70,-5,-4,25,28,-17,71,-3,-4,26,28,-17,70,-2,-5,26,27,-17,69,-4,-5,27,29,-19,70,-3,-6,26,28,-19,69,-4,-4,32,28,-18,66,0,-5,31,26,-17,65,0,-6,27,27,-19,68,-3,-5,28,29,-19,69,-2,-2,31,26,-16,67,0,-4,31,25,-15,65,-1,-5,27,26,-17,68,-3,-4,27,28,-17,70,-2,-6,24,28,-18,70,-5,-5,24,27,-17,70,-5,-4,24,28,-17,71,-4,-5,24,29,-18,71,-4,-6,27,28,-19,68,-4,-5,26,27,-17,68,-4,-4,27,28,-17,70,-2,-5,27,29,-19,70,-2,-2,26,29,-21,70,-1,-1,26,28,-19,70,-1,-2,26,27,-19,69,-2,-4,26,28,-21,69,-3,-1,23,29,-20,72,-3,0,24,28,-19,72,-2,-2,24,26,-19,70,-4,-3,23,27,-20,71,-4,0,26,28,-21,69,0,0,27,26,-19,69,0,2,28,28,-19,71,0,1,27,29,-21,70,0,1,24,26,-20,71,-2,1,26,26,-18,71,-1,2,26,27,-18,72,0,2,25,27,-20,73,0,4,29,28,-20,70,3,4,30,27,-18,70,3,2,29,27,-18,69,2,2,28,28,-20,69,2,5,28,27,-19,72,2,4,29,27,-18,71,2,3,28,26,-18,71,1,4,27,26,-19,71,1,-4,35,22,-15,61,0,-2,34,25,-13,64,0,0,35,23,-11,62,-1,-2,35,21,-13,60,-1,-4,31,22,-15,63,-3,-2,32,24,-14,64,-2,-1,32,22,-12,64,-3,-2,32,20,-14,62,-4,0,37,25,-11,65,3,-3,35,27,-15,64,2,-1,40,22,-10,59,2,-4,40,24,-12,60,3,-2,34,21,-13,61,-3,-4,33,22,-15,62,-1,0,33,23,-12,63,-2,-2,33,24,-13,64,-1,-2,31,20,-14,63,-5,-3,30,22,-15,64,-4,0,31,22,-12,64,-3,-2,31,24,-14,65,-2,-1,28,23,-13,67,-4,0,28,22,-12,66,-4,-2,28,22,-14,67,-5,-1,28,21,-13,66,-6,-4,34,22,-15,61,-1,-2,33,24,-13,64,0,0,34,23,-12,62,-2,-2,34,21,-13,60,-2,0,32,22,-12,64,-3,-2,31,20,-14,63,-4,-2,31,24,-14,64,-2,-3,31,22,-15,64,-3,-3,38,26,-13,62,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-11,57,-7,2,66,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000010", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-8,65,-8,-19,67,-8,-7,70,5,-19,71,4,-7,77,-12,-17,79,-12,-7,81,2,-17,82,1,-7,67,-1,-20,69,-1,-5,81,-5,-18,83,-5,-12,61,0,-17,62,0,-13,63,8,-16,64,8,-6,75,4,-19,77,3,-7,72,-12,-18,74,-12,-4,74,-4,-21,77,-4,-13,71,9,-14,66,-10,-12,83,3,-12,79,-13,-13,68,-1,-11,84,-6,-14,61,0,-14,63,8,-12,76,6,-13,73,-14,-7,73,3,-19,75,3,-7,68,-10,-19,70,-10,-5,71,-2,-21,73,-3,-13,74,6,-13,69,-12,15,44,12,-28,37,9,15,48,10,-30,40,7,12,51,9,-28,45,6,7,51,9,-25,47,6,5,48,10,-22,46,8,6,44,12,-21,43,11,9,41,14,-22,38,12,13,41,14,-25,36,11,13,27,-22,-10,25,-23,12,32,-26,-11,29,-26,8,36,-26,-11,35,-26,3,38,-23,-8,39,-23,0,36,-18,-6,39,-18,1,30,-15,-4,34,-14,6,25,-14,-5,27,-14,10,25,-18,-7,24,-18,14,38,-14,-18,33,-16,14,33,-12,-16,29,-13,10,41,-15,-17,38,-16,5,42,-15,-13,42,-16,1,39,-13,-9,41,-13,2,33,-11,-6,36,-10,6,29,-9,-8,30,-9,11,29,-10,-12,27,-11,14,43,-3,-24,37,-5,15,39,-1,-22,33,-3,10,46,-3,-22,42,-6,6,46,-3,-19,44,-5,3,44,-2,-15,44,-3,3,39,0,-13,40,0,7,35,0,-14,35,0,12,35,0,-18,32,0,28,14,15,-31,10,31,30,15,18,-33,13,33,29,16,22,-34,15,35,26,15,24,-32,17,37,23,14,23,-28,17,38,22,12,20,-26,14,36,23,11,16,-25,12,33,25,12,14,-27,10,31,14,45,7,-27,35,7,16,47,11,-31,38,9,15,47,16,-31,41,13,12,46,18,-29,43,16,8,44,18,-24,43,16,6,42,13,-21,40,14,7,42,9,-20,37,10,11,43,6,-23,35,7,21,38,12,-32,30,15,19,36,8,-28,27,12,20,38,17,-32,33,19,16,37,20,-30,36,22,12,35,19,-25,35,22,10,33,15,-21,32,20,11,33,9,-21,29,16,15,34,7,-23,27,13,24,31,13,-32,24,20,22,29,9,-29,22,17,23,31,18,-33,27,23,19,30,21,-30,29,26,16,28,20,-26,29,27,13,27,16,-22,27,24,14,26,11,-22,24,21,18,27,8,-24,22,18,27,23,16,-33,18,27,25,21,13,-30,16,25,26,23,20,-33,21,30,23,22,22,-31,23,32,20,21,21,-27,22,32,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-28,42,16,13,52,14,-31,44,11,7,52,15,-26,48,12,6,45,16,-22,43,14,11,42,15,-24,37,13,15,46,14,-30,38,11,9,52,10,-27,47,7,5,48,11,-22,46,9,7,42,11,-20,40,9,13,43,9,-25,37,7,14,49,9,-29,41,5,9,47,6,-23,43,4,13,50,17,-30,43,14,9,50,18,-28,45,15,10,53,15,-29,47,12,14,47,17,-29,39,14,15,49,15,-31,41,11,9,46,18,-25,42,16,6,49,17,-24,46,14,12,44,18,-26,39,15,9,43,16,-23,40,14,14,43,15,-27,37,12,15,47,11,-30,39,8,13,50,12,-30,43,8,11,53,12,-30,46,9,8,52,13,-27,48,10,5,50,13,-24,47,11,6,47,13,-23,45,11,7,44,14,-21,42,12,9,41,13,-22,38,11,12,42,12,-24,36,10,15,44,12,-28,37,8,12,51,9,-28,44,5,6,51,10,-24,47,7,5,45,10,-20,43,9,10,42,10,-22,38,8,14,45,8,-27,39,5,12,48,7,-26,42,4,9,50,7,-25,45,5,6,47,8,-22,45,6,8,44,8,-21,41,6,11,44,7,-24,40,5,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-26,-10,35,-27,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-10,50,-31,7,52,-25,-12,48,-25,4,50,-19,-8,48,-19,-2,49,-17,-2,51,-32,8,45,-25,-11,42,-25,7,46,-31,-9,43,-31,5,44,-19,-8,41,-19,-1,42,-17,-1,45,-33,4,56,-28,-10,51,-31,7,51,-24,-11,45,-28,5,45,-23,-7,41,-25,0,41,-23,-3,55,-30,1,60,-22,-12,55,-25,5,57,-16,-15,50,-21,2,52,-12,-12,46,-15,-4,48,-13,-5,59,-25,6,54,-20,-13,47,-24,3,58,-25,-11,53,-28,3,49,-16,-10,44,-19,-2,45,-16,-4,57,-28,1,60,-22,-12,55,-25,5,57,-16,-15,50,-21,2,52,-12,-12,47,-15,-4,48,-13,-5,59,-25,-5,67,-11,-15,64,-13,-2,65,-9,-17,60,-12,-4,60,-9,-13,57,-11,-8,57,-9,-11,67,-13,-7,67,-10,-13,65,-12,-5,64,-9,-14,61,-12,-6,60,-9,-12,58,-11,-8,58,-10,-10,67,-12,-10,66,-6,-14,65,-7,-8,64,-5,-14,62,-7,-8,61,-5,-13,60,-6,-10,59,-5,-12,67,-7,-9,66,-6,-14,65,-7,-8,63,-4,-15,62,-6,-9,61,-3,-14,60,-5,-11,59,-3,-12,66,-7,-10,68,-4,-15,67,-6,-9,65,-3,-16,64,-5,-10,62,-2,-15,61,-4,-12,60,-2,-13,69,-5,10,59,-6,-20,57,-10,8,57,-6,-18,58,-9,6,56,-6,-17,59,-7,3,57,-5,-18,61,-5,3,60,-4,-21,62,-5,4,62,-4,-23,62,-6,6,63,-4,-24,60,-8,9,61,-5,-23,58,-10,12,54,12,-25,45,4,11,52,12,-23,45,5,9,51,12,-22,47,6,7,52,12,-23,48,7,6,54,13,-25,49,7,7,56,13,-27,49,6,9,57,13,-27,47,5,11,56,12,-27,46,4,10,53,5,-20,49,0,11,55,5,-23,49,-1,7,52,5,-20,51,1,5,53,6,-21,53,3,4,56,6,-23,54,3,6,58,7,-25,54,2,8,59,6,-26,52,0,11,58,6,-25,50,-1,9,55,0,-19,53,-4,11,57,0,-22,53,-5,7,54,0,-19,55,-2,4,55,0,-20,57,0,4,57,1,-22,58,0,5,60,1,-24,57,-1,7,61,1,-25,56,-3,10,60,1,-24,54,-5,9,56,-3,-19,55,-6,10,58,-2,-21,55,-7,6,55,-3,-18,57,-4,4,56,-2,-19,59,-3,3,59,-1,-22,60,-3,4,61,-1,-24,60,-4,7,62,-1,-25,58,-6,9,60,-2,-24,56,-7,0,44,26,-15,59,7,0,44,25,-15,60,6,-1,43,24,-15,60,4,0,42,23,-15,59,3,0,41,23,-14,58,4,1,41,24,-13,58,5,2,42,26,-13,58,7,1,43,26,-14,58,8,10,56,16,-27,45,9,8,57,14,-28,46,8,7,55,13,-28,46,5,8,53,12,-27,45,4,10,52,12,-25,43,4,12,52,13,-25,43,6,12,54,14,-25,43,8,12,55,16,-26,44,9,1,47,22,-19,56,6,3,47,23,-18,56,8,1,46,21,-19,56,5,1,45,20,-18,55,4,3,44,20,-17,54,4,4,44,21,-16,53,5,5,45,23,-16,54,7,4,46,24,-17,55,8,6,54,17,-26,49,7,8,54,18,-25,48,9,5,53,15,-26,49,5,6,51,13,-25,48,3,8,50,13,-23,46,3,10,49,15,-22,45,5,11,51,16,-22,45,7,10,53,18,-23,47,9,7,56,15,-28,47,7,9,56,16,-27,46,9,6,54,13,-27,47,5,8,53,13,-26,46,4,9,51,12,-24,44,4,11,51,13,-24,43,6,12,53,15,-24,43,8,11,55,16,-26,44,9,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-35,6,53,27,5,37,-32,6,53,36,5,34,-40,5,50,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-35,2,54,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,31,2,38,-35,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-38,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,8,61,-9,-24,62,-11,6,57,-8,-22,57,-10,-4,56,-12,-10,56,-13,0,63,-18,-14,63,-19,6,63,-3,-22,64,-5,4,57,-2,-21,57,-4,-6,57,-9,-9,56,-10,0,66,-8,-14,66,-9,2,55,-10,-18,55,-12,7,58,-13,-22,59,-15,0,59,-4,-17,59,-5,2,65,-5,-18,65,-6,7,58,-9,-23,59,-11,0,60,-17,-14,60,-18,5,60,-1,-22,61,-3,1,60,-10,-16,61,-12,6,56,-12,-21,57,-15,0,62,-3,-17,62,-5,4,56,-5,-21,57,-8,8,63,-6,-23,64,-9,-6,56,-10,-9,55,-11,0,66,-13,-14,66,-14,0,55,-7,-16,55,-8,4,65,-10,-19,66,-12,4,56,-9,-20,56,-11,7,60,-11,-23,61,-13,2,58,-2,-19,58,-4,5,64,-4,-20,65,-6,6,57,-10,-22,58,-13,3,61,-2,-19,61,-4,2,56,-6,-19,56,-8,6,64,-8,-21,65,-10,0,31,26,-17,68,0,-2,31,25,-17,66,-2,-1,38,23,-12,62,1,0,38,25,-12,64,3,-3,31,28,-20,66,0,-4,31,26,-19,65,-2,-4,39,25,-15,60,2,-3,39,28,-16,61,4,-1,39,29,-16,62,5,-3,39,27,-15,61,4,-3,31,27,-20,65,0,-1,31,29,-20,66,0,2,38,26,-13,66,4,0,38,24,-12,63,3,0,31,25,-17,67,-1,1,31,27,-18,68,0,2,32,28,-18,69,1,1,31,26,-18,67,0,0,39,25,-12,65,3,2,39,27,-13,66,6,1,32,30,-20,67,2,0,31,28,-20,65,1,-2,39,29,-16,61,5,0,39,30,-16,63,7,1,39,30,-15,65,8,0,39,30,-15,62,7,1,32,28,-20,66,2,3,33,29,-21,67,4,2,40,28,-14,66,7,0,40,26,-13,65,5,2,33,26,-19,67,1,4,33,28,-19,68,3,3,39,28,-13,66,7,-1,38,23,-12,62,1,-1,41,23,-11,60,3,2,42,27,-11,63,8,1,40,30,-14,64,8,-4,39,25,-14,60,2,-3,42,25,-13,58,4,0,43,28,-13,61,9,-2,39,29,-16,61,5,-2,42,27,-14,59,6,1,38,25,-12,65,4,0,42,25,-10,62,6,5,31,27,-20,70,2,4,30,26,-20,69,0,2,33,27,-19,67,2,3,33,28,-19,67,4,5,30,28,-21,70,2,3,29,28,-21,69,1,1,32,28,-20,66,2,3,33,29,-20,67,4,4,29,27,-21,70,0,5,29,28,-21,71,1,4,30,27,-20,69,0,5,30,27,-20,70,2,6,30,26,-19,71,1,5,29,26,-19,71,0,6,29,27,-20,72,1,5,28,26,-20,71,0,5,28,26,-20,72,0,6,29,26,-20,72,0,5,29,27,-19,71,0,6,29,27,-19,72,1,5,31,26,-18,73,0,4,30,25,-18,72,0,6,30,25,-19,73,0,5,30,25,-19,73,-1,4,25,24,-19,73,-4,5,25,25,-20,74,-3,4,26,25,-19,72,-3,5,26,25,-19,73,-2,4,27,27,-20,72,-1,3,26,26,-20,71,-2,4,25,27,-21,73,-2,3,25,26,-21,72,-3,2,25,27,-21,71,-3,4,25,28,-21,72,-1,3,26,26,-20,71,-2,4,26,27,-20,72,-1,3,28,28,-21,71,0,2,28,27,-20,69,-1,2,27,29,-22,71,0,1,26,28,-22,70,-2,1,31,29,-20,67,2,0,31,28,-20,66,0,1,27,28,-22,69,-1,2,27,29,-22,70,0,2,32,28,-18,68,1,0,32,26,-18,67,0,2,28,26,-20,70,-1,3,28,28,-21,71,0,0,26,28,-20,70,-2,-1,26,27,-20,69,-4,-1,31,26,-18,66,-1,0,31,27,-18,67,0,-1,26,29,-22,70,-2,-2,26,28,-22,68,-3,-3,31,27,-20,65,0,-1,31,29,-20,66,0,-2,25,28,-22,69,-4,0,25,29,-22,70,-3,-1,26,27,-20,69,-4,0,26,28,-21,70,-2,0,24,28,-20,72,-4,0,24,27,-20,70,-5,0,23,29,-21,72,-4,-1,23,28,-21,71,-5,0,22,28,-21,71,-6,0,23,29,-21,72,-5,0,23,27,-20,70,-5,0,24,28,-20,72,-4,1,22,27,-18,73,-4,0,22,26,-18,72,-5,1,21,28,-19,73,-5,0,21,27,-19,73,-6,-4,22,28,-18,72,-7,-3,22,29,-18,73,-7,-3,22,28,-17,71,-7,-2,22,28,-17,72,-6,-2,24,28,-18,71,-5,-3,24,27,-18,70,-6,-3,24,29,-19,72,-6,-4,23,28,-19,71,-7,-4,24,28,-19,70,-6,-3,24,29,-20,71,-5,-3,24,27,-18,70,-6,-2,24,28,-18,71,-5,-2,26,28,-19,70,-3,-3,26,27,-18,69,-5,-3,26,29,-20,70,-4,-5,26,28,-20,69,-5,-3,31,28,-20,66,0,-4,31,26,-19,65,-2,-5,27,27,-20,68,-4,-3,27,29,-20,69,-3,-1,31,26,-18,67,0,-3,30,25,-17,65,-2,-3,26,26,-18,68,-5,-2,27,28,-19,70,-3,-4,24,28,-19,70,-6,-3,24,27,-18,70,-6,-2,24,28,-18,71,-5,-3,24,29,-20,71,-5,-5,26,28,-20,68,-5,-3,26,27,-18,68,-5,-2,26,28,-19,70,-3,-3,27,29,-20,70,-3,-1,26,29,-22,70,-2,0,26,28,-21,70,-2,-1,26,27,-20,69,-4,-2,25,28,-22,69,-4,0,23,29,-21,72,-4,0,24,28,-20,72,-4,0,24,27,-20,70,-5,-1,23,28,-21,71,-6,1,27,28,-22,69,-1,2,28,27,-21,70,-1,3,28,28,-21,71,0,2,27,29,-22,71,0,3,25,26,-21,72,-3,3,26,26,-20,71,-2,4,26,27,-20,72,-1,4,25,27,-21,73,-2,5,30,28,-21,70,2,5,30,27,-20,70,2,4,30,27,-20,69,0,4,29,28,-21,70,0,6,29,27,-20,72,0,6,29,27,-19,72,1,5,29,26,-19,71,0,5,28,26,-20,71,0,-3,34,22,-16,61,-1,-1,34,25,-15,64,-1,0,35,23,-13,62,-2,-2,35,21,-15,60,-2,-2,31,22,-17,63,-4,-1,31,24,-16,64,-3,0,32,22,-14,63,-4,-1,32,20,-15,62,-5,0,37,25,-13,65,2,-3,35,27,-17,64,1,-1,40,22,-12,59,1,-3,39,24,-14,60,3,-1,33,21,-15,61,-4,-3,33,22,-17,62,-2,0,33,23,-13,63,-3,-1,33,24,-15,64,-1,-1,31,20,-15,63,-6,-2,30,22,-17,64,-5,0,31,22,-14,64,-4,-1,31,24,-16,65,-3,0,28,23,-15,67,-5,0,28,22,-14,66,-5,-1,27,22,-16,67,-6,0,28,21,-14,66,-6,-3,34,22,-17,61,-2,-1,33,24,-15,64,-1,0,34,23,-13,62,-2,-1,34,21,-15,60,-3,0,32,22,-14,64,-4,-1,31,20,-15,63,-5,-1,31,24,-16,64,-3,-2,31,22,-17,64,-4,-3,38,26,-15,62,2,1,61,-13,-15,55,-17,-2,64,-17,-14,59,-19,1,56,-9,-14,50,-13,-6,52,-10,-8,63,-19,-1,56,-11,-14,56,-13,4,61,-15,-18,61,-17,-2,58,-6,-13,57,-7,0,66,-6,-16,66,-8,2,58,-15,-17,59,-17,0,62,-6,-15,62,-7,-3,56,-8,-13,55,-10,2,66,-11,-17,66,-13] }, + { "name": "animation_000011", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-8,65,-8,-19,67,-8,-7,70,4,-19,72,4,-6,77,-12,-16,79,-13,-5,81,1,-16,83,0,-6,67,-1,-20,70,-1,-3,80,-6,-17,83,-6,-12,61,0,-17,63,0,-13,64,8,-16,65,8,-5,75,3,-18,78,3,-6,72,-12,-18,74,-13,-3,74,-4,-20,77,-5,-13,72,9,-13,66,-10,-10,83,2,-11,79,-14,-13,68,-1,-10,84,-7,-15,62,0,-14,64,8,-12,77,5,-12,72,-14,-6,73,3,-18,76,2,-7,68,-10,-19,70,-11,-5,70,-2,-20,74,-3,-12,75,6,-13,68,-12,16,44,12,-26,37,10,15,48,10,-28,41,8,12,51,9,-26,46,7,8,51,9,-23,48,7,5,49,10,-20,46,9,6,45,12,-18,43,11,9,42,14,-20,38,12,13,41,13,-23,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-11,35,-26,3,38,-23,-8,39,-22,0,36,-18,-5,39,-18,2,30,-15,-3,33,-14,6,25,-14,-5,27,-14,10,25,-18,-8,24,-18,14,38,-14,-18,34,-15,14,33,-12,-16,29,-13,10,41,-15,-16,39,-16,5,42,-15,-12,42,-15,1,39,-13,-8,41,-13,2,33,-11,-6,35,-10,6,29,-9,-8,29,-9,11,29,-10,-12,27,-11,14,43,-3,-22,38,-4,15,39,-1,-21,33,-2,11,46,-3,-21,42,-5,6,46,-3,-17,45,-4,3,44,-2,-13,44,-2,4,39,0,-12,39,0,7,35,0,-13,34,0,12,35,0,-17,32,0,28,14,15,-31,11,31,30,15,18,-33,13,33,29,16,22,-33,16,35,26,15,24,-31,17,37,23,14,23,-28,16,38,22,12,20,-26,14,36,23,11,16,-25,11,33,25,12,14,-28,10,31,15,45,7,-26,36,7,17,47,11,-29,39,10,16,47,16,-29,42,14,12,46,18,-26,44,17,9,44,17,-22,43,17,6,42,13,-19,40,14,7,42,8,-19,37,10,11,43,6,-22,35,8,21,38,12,-31,31,16,19,36,8,-27,28,13,20,38,17,-31,34,20,16,37,20,-28,36,23,13,35,19,-23,35,23,10,33,15,-20,32,20,11,33,9,-20,29,16,15,34,7,-23,27,13,24,31,13,-32,25,20,22,29,9,-28,22,18,23,32,18,-32,28,24,20,31,21,-29,30,27,16,29,20,-24,29,27,14,27,16,-21,26,24,14,26,11,-21,23,21,18,27,8,-24,22,18,27,23,16,-32,19,27,25,21,12,-30,16,25,26,23,20,-32,21,30,23,22,22,-30,23,32,20,21,21,-26,22,33,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,12,48,18,-26,42,17,13,52,14,-29,45,12,7,52,15,-24,48,14,7,45,16,-20,43,15,11,42,15,-22,37,14,16,46,14,-28,39,12,9,52,9,-25,48,8,5,48,11,-19,46,10,7,43,11,-18,40,10,13,43,9,-23,38,8,14,49,9,-27,42,6,9,47,6,-21,43,5,13,50,17,-28,44,15,10,50,18,-25,45,16,10,53,15,-27,47,13,14,47,17,-27,40,15,15,49,15,-29,42,12,9,46,18,-23,42,17,7,49,16,-22,46,15,12,44,18,-24,39,16,9,43,16,-21,40,15,14,43,15,-25,37,13,16,47,11,-28,40,9,13,50,12,-27,44,9,11,53,12,-27,47,10,8,53,13,-24,48,11,6,50,13,-21,48,12,6,47,13,-20,45,12,7,44,14,-19,41,13,9,41,13,-20,38,12,13,42,12,-23,37,11,16,44,11,-26,37,9,12,51,8,-26,45,6,7,51,10,-22,48,8,5,45,10,-18,43,10,10,42,9,-20,38,8,14,46,8,-25,39,6,12,48,7,-24,43,5,9,50,7,-23,46,6,6,48,8,-20,45,7,8,44,8,-19,41,7,11,44,7,-22,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-26,-10,35,-27,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-10,50,-31,7,52,-24,-12,48,-25,4,50,-19,-8,48,-19,-2,49,-17,-2,51,-32,8,45,-25,-11,42,-25,7,46,-31,-9,43,-31,5,44,-19,-8,41,-19,-1,42,-17,-1,45,-33,4,56,-28,-10,51,-31,7,51,-24,-11,45,-28,5,45,-23,-7,41,-25,0,41,-23,-3,55,-30,1,60,-22,-12,55,-25,5,57,-16,-15,50,-21,2,52,-12,-12,47,-15,-4,48,-13,-5,59,-25,6,54,-20,-13,47,-24,3,58,-25,-11,53,-28,3,49,-16,-10,44,-19,-2,45,-16,-4,57,-28,1,60,-22,-12,55,-25,5,57,-16,-15,50,-21,2,52,-12,-12,47,-15,-4,48,-13,-5,59,-25,-5,67,-11,-15,64,-13,-2,65,-9,-17,60,-12,-4,60,-9,-13,57,-11,-8,57,-9,-11,67,-12,-7,67,-10,-13,65,-12,-5,64,-9,-14,61,-12,-6,60,-9,-12,58,-11,-8,58,-9,-10,67,-12,-10,66,-6,-14,65,-7,-8,64,-5,-14,62,-7,-8,61,-5,-13,60,-6,-10,59,-5,-12,67,-7,-9,66,-6,-14,65,-7,-8,64,-4,-15,62,-6,-9,61,-3,-14,60,-4,-11,60,-3,-12,66,-7,-10,68,-4,-15,67,-6,-9,66,-3,-16,64,-5,-10,62,-2,-15,61,-3,-12,61,-2,-13,69,-5,9,59,-6,-20,57,-10,8,56,-6,-18,58,-9,6,56,-6,-17,60,-7,3,57,-5,-19,62,-5,3,60,-4,-21,63,-5,4,62,-4,-23,62,-6,6,63,-4,-24,60,-8,9,61,-5,-23,58,-10,12,54,12,-23,45,4,11,52,12,-21,45,5,9,51,12,-21,47,6,7,52,12,-22,48,7,7,54,13,-24,49,8,8,56,13,-26,48,7,10,57,13,-26,47,5,12,56,12,-25,45,4,10,53,5,-19,50,0,12,55,5,-22,49,-1,8,52,5,-19,52,2,5,53,6,-20,53,3,5,56,6,-22,54,3,6,58,7,-25,53,2,9,59,6,-25,52,0,11,58,6,-24,50,-1,9,55,0,-19,54,-3,11,57,0,-21,53,-5,7,54,0,-18,55,-2,4,55,0,-19,57,0,4,57,1,-22,58,0,5,60,1,-24,57,-1,8,61,1,-25,55,-3,10,59,0,-23,54,-5,9,55,-3,-18,56,-6,10,58,-2,-20,55,-7,6,55,-3,-18,58,-4,4,56,-2,-19,59,-3,3,59,-1,-22,60,-3,4,61,-1,-24,60,-4,7,62,-1,-24,58,-6,9,60,-2,-23,56,-7,0,44,26,-15,60,7,0,44,25,-16,61,6,-1,44,24,-15,61,4,0,42,23,-15,60,3,0,42,23,-13,59,4,1,42,24,-13,59,5,2,42,26,-13,59,7,1,44,26,-14,60,8,10,56,16,-26,45,9,9,57,15,-27,46,8,8,55,13,-27,46,5,9,54,12,-25,45,4,10,52,12,-23,43,4,12,52,13,-23,43,6,13,54,14,-23,43,8,12,55,16,-24,44,10,1,48,22,-19,57,7,3,48,24,-18,56,8,1,47,21,-18,57,5,1,45,20,-17,56,4,3,44,20,-16,55,4,4,44,21,-15,54,5,5,45,23,-15,54,7,4,47,24,-16,55,8,6,55,17,-25,49,7,8,54,18,-24,48,9,6,53,15,-25,49,5,7,51,13,-23,48,4,9,50,13,-21,46,4,10,50,15,-20,45,5,11,51,16,-21,46,8,10,53,18,-22,47,9,8,56,15,-27,47,7,10,56,16,-26,46,9,7,55,14,-26,47,5,8,53,13,-24,46,4,10,51,12,-23,44,4,12,51,13,-22,43,6,12,53,15,-23,43,8,12,55,16,-24,44,10,30,14,16,-32,14,32,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-29,2,47,25,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,44,25,7,31,-29,7,48,25,2,31,-29,2,48,31,6,38,-35,6,54,27,5,37,-32,6,53,36,5,34,-40,5,50,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-35,2,54,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,0,31,-29,0,48,36,0,28,-40,0,44,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-29,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,31,2,38,-35,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,2,31,-29,2,48,25,0,31,-29,0,48,36,2,28,-40,2,44,36,0,28,-40,0,44,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-29,0,47,25,2,31,-29,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-38,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,8,61,-9,-24,62,-11,6,57,-8,-22,57,-10,-4,56,-12,-10,56,-13,0,63,-18,-14,63,-19,6,63,-3,-22,64,-6,4,57,-2,-21,58,-4,-6,57,-9,-9,56,-10,0,66,-8,-14,66,-9,2,55,-10,-18,56,-12,7,58,-13,-22,59,-15,0,59,-4,-17,59,-5,2,65,-5,-18,65,-6,7,58,-9,-23,59,-12,0,60,-17,-13,60,-18,5,60,-1,-22,61,-3,1,60,-10,-16,61,-12,6,56,-12,-21,57,-15,0,62,-3,-17,62,-5,4,56,-5,-21,57,-8,8,63,-6,-23,64,-9,-6,56,-10,-9,55,-11,0,66,-13,-14,66,-14,0,55,-7,-16,55,-8,4,65,-10,-19,66,-12,4,56,-9,-20,56,-11,7,60,-11,-23,61,-13,2,58,-2,-19,58,-4,5,64,-4,-20,65,-6,6,57,-10,-22,58,-13,3,61,-2,-19,61,-4,2,56,-6,-19,56,-8,6,64,-8,-21,65,-10,0,31,26,-18,68,0,-2,31,25,-18,66,-2,-1,38,23,-12,63,1,0,39,25,-13,65,3,-2,31,28,-20,66,0,-4,31,26,-19,65,-2,-3,39,25,-15,61,2,-2,39,28,-16,62,4,-1,39,29,-16,63,5,-3,39,27,-16,62,4,-2,31,27,-20,65,0,0,31,29,-21,67,0,2,39,26,-13,67,4,0,39,24,-13,64,3,0,31,25,-18,67,-1,1,32,27,-19,69,0,3,33,27,-19,69,1,1,32,26,-19,68,0,1,39,25,-13,66,3,2,40,27,-14,67,5,1,32,30,-21,68,2,0,32,28,-21,66,0,-2,39,29,-16,62,5,0,40,30,-16,64,7,1,40,30,-16,66,8,0,39,30,-16,63,6,1,32,28,-21,66,2,3,33,29,-21,67,4,2,41,28,-14,67,7,1,40,26,-13,66,5,3,33,26,-20,68,1,4,34,28,-20,68,3,3,40,28,-13,67,7,-1,39,23,-12,63,1,-1,42,23,-11,61,3,2,43,27,-11,64,8,1,41,30,-15,65,8,-3,39,25,-15,61,2,-3,42,25,-13,60,4,0,43,29,-13,63,9,-2,40,29,-16,62,5,-2,43,27,-13,60,6,1,39,25,-13,66,4,0,42,25,-11,63,6,6,31,27,-21,70,2,4,30,27,-21,69,0,2,33,27,-20,67,2,4,34,27,-20,68,3,5,31,29,-22,70,2,4,30,28,-22,69,0,2,32,28,-21,66,2,3,33,29,-21,67,4,5,29,28,-22,70,0,6,30,28,-22,71,1,5,30,27,-21,70,0,6,31,27,-21,70,2,7,30,27,-20,71,1,6,29,26,-20,71,0,7,29,27,-21,72,0,6,29,27,-21,71,0,6,28,26,-21,72,0,7,29,27,-21,72,0,5,29,27,-20,71,0,6,30,27,-20,72,0,7,31,25,-19,73,0,6,30,25,-19,73,-1,7,30,25,-20,74,0,6,30,25,-20,73,-1,5,26,24,-21,73,-4,6,26,25,-21,74,-3,5,27,24,-20,73,-3,6,27,25,-20,74,-2,5,27,27,-21,72,-1,3,27,26,-21,71,-3,5,26,27,-22,73,-2,4,25,26,-22,72,-3,3,26,27,-22,71,-3,5,26,28,-23,72,-2,4,27,26,-21,71,-2,5,27,26,-21,72,-1,4,29,27,-22,71,0,2,28,26,-21,69,-1,3,27,29,-23,71,-1,2,27,27,-23,70,-2,1,32,29,-21,67,2,0,31,28,-21,66,0,2,28,28,-23,69,-1,3,28,29,-23,70,0,2,33,27,-19,68,1,1,32,26,-19,67,0,2,28,26,-21,70,-2,4,29,27,-22,71,0,1,27,28,-22,70,-3,0,26,27,-21,69,-4,0,31,25,-18,67,-1,0,32,27,-19,68,0,0,27,29,-23,69,-2,-1,26,28,-23,68,-4,-2,31,27,-21,65,0,-1,31,29,-21,66,0,-1,25,28,-23,69,-4,0,26,29,-23,70,-3,0,26,27,-21,69,-4,1,26,28,-22,70,-2,1,24,28,-21,72,-4,0,24,26,-21,71,-5,0,24,29,-22,72,-4,0,23,28,-22,71,-6,0,23,27,-22,71,-6,1,23,29,-22,72,-5,0,24,26,-21,71,-5,2,24,28,-21,72,-4,3,22,27,-19,73,-4,2,22,26,-19,72,-5,2,21,28,-20,74,-5,1,21,27,-20,73,-6,-2,22,28,-19,72,-8,-2,22,29,-19,73,-7,-1,22,27,-18,72,-7,-1,22,28,-19,72,-6,-1,24,28,-19,71,-5,-2,24,27,-19,70,-6,-2,24,29,-21,72,-6,-3,24,28,-20,71,-7,-3,24,28,-21,70,-6,-2,25,29,-21,71,-5,-2,24,27,-19,70,-6,-1,25,28,-20,71,-5,-1,26,28,-20,70,-3,-2,26,26,-19,69,-5,-2,26,29,-21,70,-4,-4,26,28,-21,69,-5,-2,32,28,-20,66,0,-3,31,26,-20,65,-2,-4,27,27,-21,68,-5,-2,27,29,-21,69,-3,-1,31,26,-18,67,0,-2,31,25,-18,66,-2,-2,27,26,-19,69,-5,-1,27,28,-20,70,-3,-3,24,28,-20,70,-7,-2,24,27,-19,70,-6,-1,24,28,-20,71,-5,-2,24,29,-21,71,-5,-4,27,27,-21,68,-5,-2,26,26,-19,69,-5,-1,27,28,-20,70,-3,-2,27,29,-21,70,-4,0,26,29,-23,70,-3,1,27,28,-22,70,-2,0,26,27,-21,69,-4,-1,26,28,-23,69,-4,1,23,29,-22,72,-5,1,24,28,-21,72,-4,0,24,26,-21,71,-5,0,23,27,-22,71,-6,2,27,28,-23,69,-2,2,28,26,-22,70,-1,4,29,28,-22,71,0,3,28,29,-23,70,0,4,25,26,-22,72,-3,4,27,26,-21,71,-2,5,27,27,-21,72,-1,5,26,27,-23,73,-2,6,30,28,-22,71,1,6,31,27,-21,70,2,5,30,27,-21,70,0,4,29,28,-22,70,0,7,29,27,-21,72,0,7,30,27,-20,72,1,6,29,26,-20,71,0,6,28,27,-21,71,0,-3,35,22,-16,62,-1,-1,34,25,-16,64,-1,0,35,23,-13,63,-2,-1,35,21,-15,61,-2,-2,31,22,-17,63,-4,0,32,24,-16,65,-3,0,33,22,-14,64,-4,0,32,20,-15,63,-5,0,37,25,-13,66,2,-2,35,27,-17,64,1,-1,40,22,-12,60,1,-3,40,24,-14,61,3,-1,34,21,-15,62,-4,-2,33,22,-17,62,-2,0,34,22,-14,64,-3,-1,33,24,-16,64,-1,0,31,20,-15,64,-6,-1,31,22,-17,65,-5,0,32,22,-14,65,-4,0,31,23,-16,65,-3,0,29,23,-16,67,-5,1,29,22,-15,67,-5,0,28,22,-16,67,-6,0,28,21,-15,67,-7,-3,34,22,-17,62,-2,-1,34,24,-16,64,-1,0,35,23,-14,63,-2,-1,34,21,-15,61,-3,0,32,22,-14,64,-4,0,32,20,-16,63,-5,0,31,23,-16,65,-3,-2,31,22,-17,64,-4,-2,38,26,-15,63,2,1,60,-13,-15,55,-17,-2,64,-17,-14,60,-19,1,56,-9,-14,50,-13,-6,52,-10,-8,63,-19,-1,56,-11,-14,56,-13,4,60,-15,-18,61,-17,-3,58,-6,-13,57,-7,0,66,-6,-16,66,-8,2,58,-15,-17,59,-17,0,62,-6,-15,62,-7,-3,56,-8,-13,55,-10,2,66,-11,-17,66,-13] }, + { "name": "animation_000012", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-7,65,-8,-17,67,-8,-5,72,4,-16,74,3,-4,75,-14,-15,78,-14,-3,82,-1,-14,84,-1,-5,68,-1,-18,71,-2,-2,80,-8,-15,83,-9,-10,63,1,-16,64,1,-11,67,8,-14,67,8,-3,77,2,-16,79,1,-5,71,-13,-16,73,-13,-2,74,-6,-18,78,-6,-11,75,8,-12,65,-9,-8,85,0,-9,77,-16,-11,69,-1,-8,84,-10,-13,63,1,-12,67,8,-9,79,4,-11,71,-15,-4,75,2,-16,77,1,-5,67,-11,-17,70,-11,-3,71,-3,-18,74,-4,-10,77,4,-11,68,-12,15,44,12,-24,38,11,15,48,10,-25,42,9,11,51,9,-23,46,8,7,51,9,-20,48,9,5,48,10,-17,46,10,5,44,12,-16,42,12,9,41,14,-18,38,13,13,41,14,-21,36,12,13,27,-22,-11,25,-23,12,32,-26,-12,30,-26,8,36,-26,-10,36,-26,3,38,-23,-7,39,-22,0,36,-18,-4,38,-17,1,30,-15,-3,32,-14,6,25,-14,-5,26,-14,10,25,-18,-8,24,-19,14,38,-14,-17,34,-15,14,33,-12,-15,29,-13,10,41,-15,-15,39,-15,5,42,-15,-10,42,-14,1,39,-13,-6,40,-12,2,33,-11,-5,34,-10,6,29,-9,-7,29,-9,11,29,-10,-12,27,-11,14,43,-2,-21,39,-4,15,39,-1,-20,34,-2,10,46,-3,-19,43,-4,6,46,-3,-15,45,-3,3,44,-2,-11,43,-1,3,39,0,-10,39,0,7,35,0,-12,34,0,12,35,0,-16,32,0,28,14,15,-31,11,31,30,15,18,-33,14,33,29,16,22,-33,16,36,26,15,24,-31,17,38,23,14,23,-27,16,38,22,12,20,-25,13,36,23,11,16,-26,11,33,25,12,14,-28,10,31,14,45,7,-24,37,8,16,47,11,-27,40,11,15,47,16,-27,43,15,12,46,19,-23,44,18,8,44,18,-19,43,18,6,42,13,-16,40,15,7,42,9,-17,37,11,10,43,6,-20,35,8,21,38,12,-29,32,16,18,36,8,-26,28,14,20,38,17,-29,35,21,16,37,20,-25,36,23,12,35,19,-21,35,23,10,33,15,-18,32,20,11,33,9,-19,28,16,15,34,7,-22,27,13,24,31,13,-31,26,21,22,29,9,-28,23,18,23,31,18,-30,29,25,19,30,21,-27,30,27,15,28,20,-23,29,27,13,27,16,-20,26,25,14,26,11,-20,23,21,18,27,8,-24,22,18,27,23,16,-32,19,27,25,21,13,-30,17,25,26,23,20,-32,22,31,23,22,22,-29,23,33,20,21,21,-25,22,33,18,19,18,-23,19,31,19,18,14,-23,17,27,22,19,12,-26,16,25,11,47,19,-23,42,18,13,52,14,-26,46,13,7,52,15,-20,48,15,6,45,16,-17,42,16,11,42,15,-20,37,15,15,46,14,-26,39,13,9,52,10,-21,48,9,5,48,11,-16,46,11,7,42,11,-16,40,10,13,43,9,-21,38,8,14,49,9,-25,43,8,9,47,6,-19,43,6,13,50,17,-25,44,16,9,50,18,-22,45,17,10,53,15,-23,48,14,14,47,17,-25,40,16,15,49,15,-26,42,13,9,46,18,-20,42,18,6,48,17,-19,45,16,11,44,18,-22,39,17,8,43,16,-18,39,16,14,43,15,-23,38,14,15,47,11,-26,41,10,13,50,12,-25,44,11,11,53,12,-24,47,11,8,52,13,-21,49,12,5,50,13,-18,47,13,6,47,13,-17,44,13,6,44,14,-16,41,13,9,41,13,-18,38,13,12,42,12,-21,37,11,15,44,12,-24,38,10,12,51,9,-23,46,8,6,51,10,-19,48,10,5,45,10,-15,43,11,10,42,10,-18,38,9,14,45,8,-23,40,7,11,48,7,-22,43,6,9,50,7,-20,46,7,6,47,8,-17,45,8,7,44,8,-17,41,8,11,44,7,-20,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,52,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-11,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-30,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-5,59,-25,-4,67,-11,-14,64,-12,-1,65,-9,-15,60,-12,-2,60,-9,-12,57,-10,-7,57,-9,-9,67,-12,-6,67,-10,-12,65,-12,-4,64,-9,-12,61,-11,-4,60,-8,-10,58,-10,-7,58,-9,-9,67,-11,-8,67,-5,-13,65,-7,-7,64,-4,-13,62,-6,-7,61,-4,-11,60,-5,-9,60,-4,-11,67,-6,-8,66,-6,-12,65,-7,-7,64,-4,-13,63,-5,-8,62,-2,-12,61,-3,-10,60,-2,-10,66,-7,-8,69,-4,-14,68,-6,-7,66,-3,-14,65,-4,-8,63,-1,-13,62,-2,-10,61,-1,-11,69,-6,11,58,-6,-18,58,-9,10,56,-6,-16,58,-8,7,55,-6,-16,60,-6,5,57,-5,-17,62,-4,4,60,-5,-20,63,-4,6,62,-4,-22,62,-5,8,62,-4,-23,60,-7,10,61,-5,-21,58,-8,12,53,12,-20,45,5,11,51,12,-18,45,6,9,51,12,-17,47,7,7,52,12,-19,48,8,7,54,13,-21,49,8,8,56,13,-22,48,8,10,56,13,-23,47,6,12,55,13,-22,45,5,10,52,5,-17,50,0,12,55,5,-19,49,0,8,52,5,-16,52,2,6,53,5,-17,53,4,5,56,6,-20,54,4,7,58,6,-22,53,3,9,59,6,-23,51,1,12,57,6,-22,50,0,10,54,0,-17,54,-3,11,56,0,-19,53,-4,7,54,0,-16,56,-1,5,55,0,-17,57,0,5,57,1,-20,58,0,6,60,1,-22,57,0,9,60,1,-23,55,-2,11,59,0,-21,54,-4,10,55,-3,-16,56,-5,11,57,-2,-19,55,-6,7,54,-3,-16,58,-3,5,56,-2,-17,60,-2,4,58,-2,-20,60,-2,6,61,-1,-22,60,-3,8,61,-1,-23,58,-4,11,60,-2,-21,56,-6,0,45,26,-12,61,8,-1,45,25,-13,61,7,-2,44,24,-13,61,5,-2,43,23,-12,61,4,-1,42,23,-11,60,4,0,42,24,-10,59,6,0,43,26,-10,59,7,0,44,26,-11,60,8,10,56,16,-22,45,10,9,56,14,-24,45,9,8,55,13,-24,45,6,8,53,12,-22,45,5,10,52,12,-20,43,5,12,52,13,-19,42,7,12,53,15,-20,43,9,12,55,16,-21,43,10,0,48,22,-16,57,7,2,48,23,-15,56,9,0,47,21,-16,57,6,0,46,20,-15,56,4,2,45,20,-14,55,5,3,45,21,-13,55,6,4,45,23,-13,55,8,3,47,24,-14,55,9,6,54,16,-22,49,8,8,54,18,-21,48,10,5,53,15,-22,49,6,6,51,13,-20,47,4,8,49,14,-18,46,4,10,49,15,-17,45,6,10,50,17,-17,45,8,10,52,18,-19,47,10,8,56,15,-23,47,8,10,56,16,-22,45,10,7,54,13,-23,47,6,8,52,13,-21,46,5,9,51,12,-20,44,5,11,51,14,-19,43,6,12,52,15,-19,43,9,12,54,16,-20,44,10,30,14,16,-32,14,32,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-29,2,47,25,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-29,7,48,25,2,31,-29,2,48,31,6,38,-35,6,54,27,5,37,-32,6,53,36,5,34,-40,5,50,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-35,2,54,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,0,31,-29,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-29,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,31,2,38,-35,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,2,31,-29,2,48,25,0,31,-29,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-29,0,47,25,2,31,-29,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-38,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,10,61,-9,-22,62,-10,7,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,1,63,-18,-13,63,-18,8,63,-3,-21,64,-4,6,57,-2,-19,58,-3,-5,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-17,56,-11,8,58,-13,-21,60,-14,2,59,-4,-15,59,-4,4,65,-5,-17,65,-5,8,58,-9,-22,59,-10,0,60,-17,-13,61,-18,7,60,-1,-20,61,-2,2,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-7,9,63,-7,-22,64,-8,-5,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-8,6,65,-10,-18,66,-11,5,56,-9,-19,57,-10,9,59,-11,-22,61,-12,4,58,-2,-17,59,-3,6,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-18,61,-3,3,56,-6,-17,56,-7,8,64,-8,-20,65,-9,0,32,25,-17,68,0,-2,32,24,-16,67,-1,-2,39,23,-10,64,2,0,40,25,-11,66,4,-2,32,27,-19,66,1,-4,32,25,-18,65,-1,-4,39,25,-13,61,3,-3,40,28,-14,62,5,-2,40,29,-14,63,6,-4,39,27,-14,62,5,-2,32,26,-19,65,0,0,32,28,-20,66,2,1,40,26,-12,67,5,-1,40,24,-11,65,3,0,32,24,-17,67,0,1,33,26,-17,69,1,3,34,27,-18,69,2,1,33,25,-17,68,1,0,40,25,-11,66,4,1,41,27,-12,67,6,1,33,29,-20,67,3,0,32,27,-19,65,2,-3,40,28,-14,62,6,-1,40,29,-14,64,8,0,41,30,-14,66,9,-1,40,29,-14,63,7,1,34,27,-19,65,3,3,35,28,-20,67,5,1,42,28,-13,68,8,0,41,26,-12,66,6,2,35,25,-18,68,2,4,35,27,-19,68,5,2,41,28,-11,67,8,-2,40,23,-10,64,2,-3,43,23,-8,62,4,0,44,27,-9,65,9,0,41,30,-13,65,9,-5,40,25,-12,61,3,-5,42,25,-11,60,4,-1,44,29,-11,63,9,-3,40,28,-14,62,6,-3,43,27,-11,61,7,0,40,25,-11,66,5,0,43,25,-9,64,6,6,33,26,-19,70,3,4,32,26,-19,69,2,2,34,26,-18,67,3,3,35,27,-18,68,5,5,32,28,-21,70,3,4,31,27,-20,69,2,2,34,27,-20,66,3,3,35,28,-20,67,5,5,31,26,-20,70,1,6,32,27,-21,71,3,5,32,26,-19,70,2,6,33,26,-19,70,3,7,32,25,-19,71,2,6,31,25,-19,71,1,7,31,26,-20,72,2,6,30,26,-20,71,1,6,31,25,-20,72,0,7,31,25,-20,72,2,5,31,26,-19,71,1,6,32,26,-19,72,2,6,33,25,-18,73,1,5,33,24,-18,73,0,7,33,24,-19,74,1,6,32,24,-19,73,0,6,28,23,-20,73,-3,7,28,24,-20,74,-2,5,29,23,-19,73,-2,6,29,24,-19,74,-1,5,29,26,-20,72,0,4,29,25,-20,71,-1,6,28,25,-21,73,-1,5,27,25,-21,72,-2,4,27,25,-21,71,-1,5,28,26,-22,72,0,4,29,24,-20,71,-1,5,29,25,-20,72,0,4,30,26,-21,70,1,3,30,25,-20,69,0,4,29,27,-22,71,0,3,28,26,-22,70,0,1,33,28,-20,67,3,0,32,27,-19,66,1,2,29,27,-22,69,0,3,29,28,-22,70,1,2,34,27,-18,68,3,1,33,26,-18,67,1,3,30,25,-20,70,0,4,30,26,-21,71,0,1,28,27,-20,70,-1,0,27,25,-20,69,-3,0,32,25,-17,67,0,0,33,26,-17,68,1,0,27,28,-22,69,-1,0,27,27,-21,68,-2,-2,32,27,-19,65,0,0,32,28,-20,66,1,0,26,27,-22,69,-3,0,27,28,-22,70,-2,0,27,25,-20,69,-2,1,28,27,-20,70,-1,2,26,26,-20,72,-2,1,25,25,-19,71,-3,2,25,27,-21,72,-3,0,25,26,-21,71,-4,1,24,26,-21,71,-4,2,24,27,-21,72,-3,1,25,25,-20,71,-3,3,26,26,-20,72,-2,4,24,25,-18,73,-3,3,24,24,-18,72,-4,4,23,26,-19,74,-4,3,23,25,-19,73,-5,-1,22,26,-18,73,-6,0,23,27,-19,73,-5,0,23,26,-18,72,-5,0,23,27,-18,73,-5,0,25,27,-19,72,-4,-1,25,26,-18,71,-5,-1,25,28,-20,72,-4,-2,24,27,-19,71,-5,-2,25,27,-20,70,-5,-1,25,28,-20,71,-4,-1,25,26,-18,70,-5,0,26,27,-19,71,-3,0,27,27,-19,70,-2,-2,27,25,-18,69,-4,-2,27,28,-20,70,-3,-3,26,26,-20,69,-4,-2,32,27,-19,66,0,-3,32,25,-18,65,0,-3,27,26,-20,68,-3,-2,28,28,-20,69,-2,-1,32,26,-17,67,0,-2,32,24,-16,66,-1,-2,27,25,-18,69,-3,0,28,27,-19,70,-2,-2,24,27,-20,71,-5,-1,25,26,-18,70,-5,0,25,27,-19,71,-3,-1,25,28,-20,72,-4,-3,27,26,-20,68,-4,-2,27,25,-18,69,-3,0,28,27,-19,70,-2,-2,27,28,-20,70,-2,0,27,28,-22,70,-1,1,28,27,-21,70,-1,0,27,25,-20,69,-2,0,27,27,-22,69,-3,2,25,27,-21,72,-3,2,26,26,-20,72,-2,1,25,25,-20,71,-4,1,24,26,-21,71,-4,2,28,26,-22,69,0,3,30,25,-20,69,0,4,30,26,-21,71,0,4,29,28,-22,70,0,4,27,25,-21,71,-2,4,28,24,-20,71,-1,5,29,25,-20,72,0,5,28,26,-22,72,0,6,32,27,-21,70,3,6,33,26,-19,70,3,5,32,26,-19,69,2,5,31,27,-21,69,2,7,31,26,-20,72,2,7,32,26,-19,72,2,6,31,25,-19,71,1,6,30,25,-20,71,1,-3,35,22,-15,62,0,-1,35,24,-14,65,0,0,37,22,-12,64,-1,-2,36,20,-13,61,-1,-2,32,21,-16,64,-3,-1,33,23,-15,65,-2,0,34,21,-13,65,-3,-1,34,20,-14,63,-4,0,38,24,-12,66,3,-3,36,26,-16,64,2,-3,41,22,-10,61,2,-4,40,24,-12,61,3,-1,35,20,-14,62,-3,-3,34,22,-15,63,-1,0,35,22,-12,64,-2,-1,34,24,-14,65,0,0,33,20,-14,64,-5,-2,32,21,-16,65,-4,0,33,21,-13,65,-3,0,32,23,-15,66,-2,0,30,22,-15,68,-4,1,31,21,-13,68,-4,0,29,21,-15,68,-5,0,30,20,-14,67,-6,-3,35,22,-15,62,-1,-1,35,24,-14,65,0,0,36,22,-12,64,-2,-2,36,20,-13,62,-2,0,34,21,-13,65,-3,0,33,20,-14,64,-4,0,33,23,-15,65,-2,-2,32,21,-16,64,-3,-3,38,25,-13,63,3,2,60,-13,-15,55,-16,-1,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-12,57,-7,2,65,-6,-14,66,-7,3,58,-15,-16,59,-16,1,62,-6,-14,62,-7,-1,56,-8,-11,55,-9,3,66,-11,-15,66,-12] }, + { "name": "animation_000013", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-6,65,-8,-17,66,-8,-5,73,3,-17,74,3,-6,76,-14,-16,77,-14,-5,83,-1,-16,84,-1,-5,69,-1,-18,70,-1,-4,81,-8,-17,82,-9,-9,63,1,-15,63,1,-10,67,8,-13,67,8,-4,78,1,-17,79,1,-5,71,-13,-17,72,-13,-3,75,-6,-19,76,-6,-11,75,8,-12,65,-9,-10,85,0,-11,78,-16,-12,69,-1,-10,84,-10,-12,63,1,-12,67,8,-11,79,3,-11,71,-15,-5,76,1,-17,77,1,-6,68,-11,-18,69,-11,-3,72,-3,-19,73,-4,-11,77,4,-12,67,-12,13,43,13,-25,38,10,12,48,11,-26,42,8,9,50,9,-25,46,7,5,50,9,-21,48,8,3,47,11,-18,46,10,3,43,13,-17,42,12,7,40,14,-19,38,13,11,40,14,-22,36,12,14,27,-22,-11,25,-23,12,32,-25,-12,30,-26,8,37,-26,-10,36,-26,3,38,-23,-7,39,-22,0,35,-19,-4,39,-18,1,30,-15,-3,33,-14,6,25,-15,-5,26,-14,11,25,-18,-8,24,-18,13,38,-13,-17,34,-15,14,33,-12,-16,29,-13,9,41,-14,-15,39,-15,4,41,-15,-11,42,-15,0,38,-13,-7,40,-12,1,32,-11,-5,35,-10,6,28,-10,-7,29,-9,11,29,-10,-12,27,-11,12,43,-2,-22,38,-4,14,38,0,-21,34,-2,9,46,-3,-20,43,-4,4,45,-3,-16,45,-3,1,43,-2,-12,44,-2,2,38,0,-11,39,0,6,34,0,-13,34,0,11,35,0,-17,32,0,28,14,15,-31,11,31,29,16,18,-33,13,33,28,16,22,-33,16,36,26,15,24,-31,17,38,23,13,23,-28,16,38,22,12,20,-25,14,36,23,11,16,-26,11,33,25,12,14,-28,10,31,12,44,7,-25,36,8,14,46,12,-28,39,11,13,46,16,-28,43,14,10,45,19,-25,44,17,6,43,18,-20,43,17,4,41,14,-17,40,15,5,41,9,-17,37,11,9,42,6,-21,35,8,19,37,13,-30,31,16,17,35,8,-27,28,13,18,38,18,-30,35,20,14,36,20,-26,36,23,11,34,19,-22,35,23,9,32,15,-19,32,20,10,32,10,-19,29,16,13,33,7,-22,27,13,22,31,14,-31,25,21,21,29,10,-28,23,18,21,31,18,-31,28,24,18,30,21,-28,30,27,14,28,20,-23,29,27,13,26,16,-20,26,25,14,25,11,-21,23,21,17,27,8,-24,22,18,26,23,16,-32,19,27,25,21,13,-30,16,25,25,23,20,-32,22,30,22,22,22,-29,23,33,19,20,21,-26,22,33,18,18,18,-23,19,31,19,18,14,-23,17,27,22,19,12,-26,16,25,9,46,19,-24,42,17,10,51,15,-27,45,13,4,50,16,-22,48,14,4,44,17,-18,43,16,9,41,16,-21,37,14,13,45,15,-27,39,12,6,51,10,-23,48,9,2,47,11,-18,46,10,5,41,11,-17,40,10,11,42,10,-22,38,8,12,48,9,-26,43,7,7,46,7,-20,43,6,10,49,18,-26,44,16,7,48,18,-23,45,17,7,51,16,-25,48,14,12,46,18,-26,40,15,12,48,15,-28,42,13,6,45,19,-21,42,17,4,47,17,-20,46,16,9,43,18,-23,39,16,6,42,17,-19,40,16,12,42,16,-24,38,14,13,47,12,-27,41,9,10,49,12,-26,44,10,8,52,13,-25,47,10,5,51,13,-23,49,12,3,49,14,-19,48,13,4,46,14,-19,45,13,4,42,14,-18,41,13,7,40,13,-19,38,12,10,41,13,-22,37,11,13,43,12,-25,38,10,9,50,9,-25,46,7,4,49,10,-20,48,9,3,43,11,-16,43,10,8,41,10,-19,38,9,12,45,9,-24,40,7,9,47,7,-23,43,5,6,49,8,-21,46,6,4,46,8,-18,45,7,6,43,8,-18,41,7,9,43,8,-21,40,6,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-21,0,34,-18,0,38,-34,5,52,-31,-9,50,-31,8,51,-25,-12,49,-24,4,50,-19,-8,48,-19,-1,49,-17,-2,51,-32,8,45,-25,-10,42,-25,7,46,-31,-9,43,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-30,8,51,-25,-10,45,-28,6,45,-23,-6,41,-25,0,41,-23,-2,55,-29,2,60,-22,-12,55,-24,6,56,-17,-14,50,-20,4,51,-12,-11,47,-14,-3,48,-12,-4,59,-25,7,53,-20,-13,47,-23,3,58,-25,-11,53,-27,4,49,-16,-9,44,-18,-2,45,-16,-3,57,-27,2,60,-22,-12,55,-25,6,56,-17,-14,50,-20,3,52,-12,-11,47,-14,-3,48,-13,-4,59,-25,-4,67,-10,-14,64,-12,0,65,-9,-15,60,-11,-2,60,-9,-12,57,-10,-6,57,-9,-9,67,-12,-5,67,-10,-12,65,-12,-3,64,-9,-12,61,-11,-4,60,-8,-10,58,-10,-7,58,-9,-9,67,-11,-8,67,-5,-12,65,-7,-6,64,-4,-13,62,-6,-7,61,-4,-11,60,-5,-8,60,-4,-10,67,-6,-8,66,-5,-12,65,-6,-6,64,-3,-13,62,-5,-7,62,-2,-12,61,-3,-9,60,-2,-10,66,-7,-8,69,-4,-13,67,-5,-7,66,-2,-14,64,-4,-8,63,-1,-13,62,-2,-10,61,-1,-11,69,-6,11,58,-6,-19,57,-9,10,56,-6,-16,58,-7,7,55,-6,-15,60,-6,5,57,-6,-17,62,-4,4,60,-5,-19,63,-4,6,62,-5,-22,62,-5,8,62,-4,-22,60,-7,11,61,-5,-21,58,-8,11,53,12,-22,45,5,10,52,12,-20,45,6,8,51,12,-19,46,7,6,52,12,-20,48,8,6,54,13,-22,49,9,7,56,13,-24,48,8,9,57,13,-25,47,6,11,55,13,-24,45,5,10,53,5,-18,49,0,12,55,5,-20,49,0,7,52,5,-17,51,2,5,53,5,-18,53,4,5,56,6,-20,54,4,6,58,6,-23,53,3,9,59,6,-24,52,1,11,57,6,-23,50,0,10,54,0,-17,53,-3,11,56,0,-20,53,-4,7,54,0,-16,55,-1,5,55,0,-17,57,0,5,58,1,-20,58,0,6,60,1,-22,57,0,9,60,1,-23,56,-2,11,59,1,-22,54,-3,10,55,-3,-17,56,-5,11,57,-2,-19,55,-6,7,54,-3,-16,57,-3,5,56,-2,-17,59,-2,4,59,-2,-20,60,-1,6,61,-1,-22,60,-2,9,61,-1,-23,58,-4,11,60,-2,-22,56,-6,-1,46,26,-12,60,8,-3,46,25,-13,60,7,-3,45,24,-13,60,5,-3,44,23,-12,59,4,-2,43,23,-11,58,5,-1,43,24,-10,58,6,0,44,26,-10,58,7,0,45,26,-11,59,9,10,56,16,-24,45,10,8,57,14,-25,46,9,7,55,13,-25,46,7,8,53,12,-24,45,5,9,52,12,-22,43,5,11,52,13,-21,42,7,12,53,15,-22,43,9,11,55,16,-23,44,10,0,49,22,-16,56,8,1,49,23,-15,56,9,0,48,21,-16,56,6,0,46,20,-15,55,5,1,45,20,-14,54,5,2,45,21,-13,53,6,3,46,23,-13,54,8,2,48,24,-14,54,9,5,55,16,-23,49,9,7,55,18,-22,48,10,5,53,15,-23,49,6,5,51,14,-22,47,5,7,50,14,-20,46,5,9,49,15,-19,45,6,9,51,17,-19,45,8,9,53,18,-20,46,10,7,56,15,-25,47,9,9,56,16,-24,46,10,6,55,13,-24,47,6,7,53,13,-23,46,5,8,51,13,-21,44,5,10,51,14,-21,43,7,11,53,15,-21,43,9,11,55,16,-22,44,10,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,10,60,-9,-22,62,-10,8,56,-8,-21,58,-9,-3,56,-12,-9,56,-13,2,63,-18,-13,63,-18,8,63,-4,-21,64,-4,6,57,-2,-19,58,-3,-4,57,-9,-8,56,-9,0,66,-8,-12,66,-8,3,55,-10,-16,56,-11,8,58,-13,-20,60,-14,2,59,-4,-15,59,-4,4,65,-5,-16,65,-5,9,58,-9,-21,59,-10,0,60,-17,-12,61,-17,7,60,-1,-20,61,-2,3,60,-10,-15,61,-11,7,56,-13,-20,57,-14,2,62,-3,-15,62,-4,6,56,-5,-19,57,-6,9,63,-7,-21,64,-7,-4,56,-10,-8,55,-10,1,66,-13,-13,66,-13,1,55,-7,-15,55,-7,6,65,-10,-18,66,-10,6,56,-9,-19,57,-10,9,59,-11,-21,61,-12,4,58,-2,-17,58,-3,7,64,-4,-19,65,-5,8,57,-11,-21,58,-12,5,61,-2,-17,61,-2,4,56,-6,-17,56,-7,8,64,-8,-20,65,-9,-1,33,26,-16,68,0,-3,33,24,-15,66,-1,-3,40,23,-10,62,2,-1,40,25,-10,64,4,-4,33,28,-18,66,1,-5,33,25,-17,64,0,-6,40,25,-12,60,3,-5,40,28,-13,61,5,-3,41,29,-14,62,7,-5,40,27,-13,61,5,-4,33,27,-18,64,0,-2,33,29,-19,66,2,0,41,26,-10,66,5,-2,41,24,-10,63,3,-1,33,25,-16,67,0,0,34,27,-16,68,1,1,35,27,-17,68,3,0,34,26,-16,67,1,-1,41,25,-10,65,4,0,42,27,-11,66,7,0,34,29,-19,67,4,-1,33,28,-18,65,2,-4,40,28,-13,61,6,-2,41,30,-13,63,8,0,42,30,-13,65,9,-3,41,30,-13,62,8,0,34,28,-18,65,4,2,36,29,-19,67,6,0,43,28,-11,66,8,-1,42,26,-11,65,6,1,35,26,-17,67,2,2,36,27,-17,68,5,0,42,28,-10,66,8,-3,41,23,-10,62,2,-4,44,23,-8,60,4,0,45,27,-8,63,9,0,42,30,-12,64,9,-6,40,25,-12,60,3,-6,43,25,-10,59,5,-2,45,29,-10,61,9,-4,41,28,-13,61,6,-5,44,27,-11,59,7,0,41,25,-10,65,5,-2,44,25,-8,62,6,4,34,27,-19,70,3,3,33,26,-19,69,2,1,35,26,-17,66,3,2,36,27,-17,67,5,4,33,28,-20,69,4,3,32,27,-20,68,2,0,35,28,-19,66,4,2,35,29,-18,67,5,3,32,27,-20,69,2,5,33,28,-20,70,3,3,33,26,-19,69,2,4,34,27,-19,70,3,5,33,26,-19,71,2,4,32,25,-19,70,1,5,32,27,-20,71,2,4,31,26,-20,70,1,5,32,25,-20,71,1,6,32,26,-20,72,2,4,32,26,-19,71,1,5,33,27,-19,72,2,4,34,26,-19,73,1,3,33,25,-19,73,0,5,34,25,-20,73,1,4,33,25,-20,73,0,4,29,23,-21,73,-3,5,30,24,-21,74,-2,3,30,24,-20,73,-2,4,30,25,-20,73,-1,4,30,26,-20,72,0,2,29,25,-20,71,-1,4,29,26,-22,72,0,3,28,25,-21,71,-1,3,28,26,-21,71,-1,4,29,27,-22,72,0,3,29,25,-20,71,-1,4,30,26,-20,72,0,3,31,27,-20,70,1,1,30,26,-20,69,0,2,30,28,-21,70,1,1,29,27,-21,69,0,0,34,29,-19,67,3,-1,33,28,-18,66,2,1,30,27,-21,68,0,2,30,28,-21,69,1,1,35,27,-17,68,3,0,34,26,-17,67,1,1,30,26,-20,69,0,3,31,27,-20,70,1,0,29,27,-19,70,-1,-1,28,26,-19,69,-2,-1,33,25,-16,66,0,0,33,26,-16,67,1,0,28,29,-21,69,0,-2,28,27,-20,68,-2,-3,32,27,-18,65,0,-2,33,28,-18,66,2,-1,27,27,-21,69,-3,0,27,28,-21,70,-1,-1,28,26,-19,69,-2,0,29,27,-19,70,-1,1,28,26,-19,72,-2,0,27,25,-19,71,-4,1,26,27,-21,71,-3,0,26,26,-21,70,-4,0,26,26,-20,71,-4,1,26,27,-21,72,-3,0,27,25,-19,71,-4,1,28,26,-19,72,-3,2,27,25,-19,73,-4,1,27,24,-18,72,-5,3,26,25,-20,74,-4,2,26,24,-20,73,-5,0,25,25,-19,72,-6,0,25,26,-19,73,-5,0,26,25,-18,72,-6,0,26,26,-18,72,-5,-1,27,27,-18,71,-4,-2,27,26,-18,70,-5,-1,26,27,-20,71,-4,-2,25,26,-20,70,-5,-3,26,26,-20,69,-5,-2,26,28,-20,71,-3,-2,27,26,-18,70,-5,-1,27,27,-18,71,-3,-2,29,27,-18,70,-2,-3,28,26,-18,68,-3,-3,28,28,-20,69,-2,-4,27,27,-19,68,-4,-4,33,27,-18,66,1,-5,32,25,-17,65,0,-4,28,27,-19,67,-3,-3,29,28,-19,69,-1,-2,33,26,-16,67,0,-3,32,24,-15,65,0,-3,28,26,-18,68,-3,-2,29,27,-18,69,-2,-3,26,26,-20,70,-5,-2,27,26,-18,70,-5,-1,27,27,-18,71,-3,-1,26,28,-20,71,-4,-4,28,27,-19,68,-3,-3,28,26,-18,68,-3,-2,29,27,-18,69,-2,-3,28,28,-20,69,-2,0,28,29,-21,69,-1,0,29,28,-19,70,-1,-1,28,26,-19,69,-2,-2,27,27,-21,68,-2,1,26,27,-21,72,-3,1,28,26,-19,72,-2,0,27,25,-19,71,-4,0,26,26,-21,71,-4,1,29,27,-21,69,0,1,30,26,-20,69,0,3,31,27,-20,70,1,2,30,28,-21,70,1,3,28,25,-21,71,-1,3,29,25,-20,71,-1,4,30,26,-20,72,0,4,28,26,-22,72,0,4,33,28,-20,70,3,4,34,27,-19,70,3,3,33,26,-19,69,2,3,32,27,-20,69,2,6,32,26,-20,71,2,5,33,26,-19,71,2,4,32,26,-19,71,1,5,31,26,-20,71,1,-5,36,22,-14,61,0,-3,36,24,-13,64,0,-1,37,23,-11,63,-1,-3,37,21,-13,60,-1,-3,33,21,-15,63,-3,-2,34,23,-14,64,-2,-1,35,22,-12,64,-3,-2,34,20,-13,62,-4,-1,39,24,-11,65,3,-4,37,27,-15,63,2,-4,42,22,-9,59,2,-6,41,24,-11,60,3,-3,36,20,-13,61,-3,-4,35,22,-15,62,-1,-1,36,22,-11,63,-2,-2,35,24,-13,64,0,-2,33,20,-13,63,-5,-3,32,21,-15,64,-4,0,34,22,-12,64,-3,-2,33,23,-14,65,-2,0,31,22,-13,67,-3,0,31,21,-12,67,-4,-1,30,21,-14,67,-5,0,31,20,-13,66,-5,-4,35,22,-15,61,-1,-3,35,24,-13,64,0,-1,37,22,-11,63,-1,-3,36,20,-13,61,-2,0,34,22,-12,64,-3,-2,34,20,-13,63,-4,-2,33,23,-14,65,-2,-3,33,21,-15,64,-3,-5,39,26,-12,62,3,2,60,-13,-14,55,-16,0,63,-16,-13,60,-18,2,56,-9,-13,50,-12,-5,52,-10,-7,63,-18,0,56,-11,-13,56,-12,5,60,-15,-17,61,-16,-1,58,-6,-11,57,-7,2,65,-6,-14,66,-6,4,58,-15,-16,59,-15,1,62,-6,-13,62,-6,-1,56,-8,-11,55,-9,4,66,-11,-15,66,-11] }, + { "name": "animation_000014", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,-6,66,-8,-16,64,-6,-5,74,3,-16,72,5,-9,77,-14,-19,74,-13,-8,84,-1,-18,81,0,-4,70,-2,-17,68,0,-7,82,-9,-21,79,-7,-6,64,2,-12,63,2,-7,67,9,-10,67,9,-5,79,1,-18,76,3,-7,72,-13,-19,70,-11,-5,77,-6,-21,73,-4,-10,75,8,-11,64,-8,-14,84,0,-14,76,-15,-11,69,-1,-15,83,-9,-9,63,2,-9,67,9,-12,79,4,-13,70,-14,-5,77,1,-17,74,3,-6,69,-11,-18,66,-9,-4,73,-4,-19,70,-1,-11,77,5,-12,66,-11,15,44,12,-28,37,9,14,48,10,-30,40,7,11,51,9,-29,45,5,7,51,9,-26,47,6,4,48,10,-22,46,8,5,44,12,-21,43,11,8,41,14,-22,38,12,12,41,14,-25,36,11,13,27,-22,-10,25,-23,12,32,-26,-11,29,-26,8,36,-26,-11,35,-26,3,38,-23,-9,39,-23,0,36,-18,-6,39,-18,1,30,-15,-4,34,-14,6,25,-14,-5,27,-14,10,25,-18,-7,24,-18,14,38,-14,-18,33,-16,14,33,-12,-16,29,-13,10,41,-15,-17,38,-16,4,42,-15,-13,41,-16,1,38,-13,-9,41,-13,2,33,-11,-7,36,-10,6,29,-10,-8,30,-9,11,29,-10,-12,27,-11,14,43,-2,-24,37,-5,15,39,0,-22,33,-3,10,46,-3,-23,42,-6,5,46,-3,-19,44,-5,2,43,-2,-15,44,-3,3,38,0,-13,40,0,7,35,0,-14,35,0,12,35,0,-18,32,0,28,14,15,-31,10,31,29,15,18,-33,13,32,29,16,22,-34,15,35,26,15,24,-32,17,37,23,14,23,-29,17,37,22,12,20,-26,14,36,23,11,16,-25,12,33,25,12,14,-27,10,31,14,45,7,-27,35,7,16,47,11,-31,38,9,15,47,16,-32,41,13,11,46,19,-29,43,15,8,44,18,-25,43,16,6,42,13,-21,40,13,7,41,9,-20,37,10,10,42,6,-23,35,7,20,38,12,-32,30,15,18,36,8,-28,27,12,19,38,17,-33,33,19,16,37,20,-30,36,22,12,35,19,-25,35,22,10,33,15,-22,33,20,11,32,9,-21,29,16,14,33,7,-24,27,13,23,31,13,-32,24,20,21,29,9,-29,22,17,22,31,18,-33,27,23,19,30,21,-30,29,26,15,28,20,-26,29,26,13,26,16,-22,27,24,14,26,11,-22,24,21,18,27,8,-24,21,18,26,23,16,-33,18,27,25,21,13,-30,16,25,26,23,20,-33,21,30,23,22,22,-31,23,32,20,20,21,-27,22,32,18,19,18,-24,20,30,19,18,14,-24,17,27,22,19,12,-26,16,25,11,47,19,-28,42,15,12,51,15,-31,44,11,6,51,15,-27,48,12,6,45,16,-23,43,14,11,42,16,-24,37,13,15,46,14,-30,38,11,8,52,10,-27,47,7,4,48,11,-22,46,9,7,42,11,-21,40,9,12,43,10,-25,37,7,13,48,9,-29,41,5,8,46,7,-24,43,4,12,50,17,-31,43,14,8,49,18,-28,45,15,9,52,15,-30,47,12,13,46,17,-30,39,14,14,49,15,-31,41,11,8,46,18,-25,42,16,6,48,17,-25,46,14,11,44,18,-27,39,15,8,43,17,-23,40,14,13,43,15,-27,37,12,15,47,12,-30,39,8,12,50,12,-30,43,8,10,52,12,-30,46,8,7,52,13,-27,48,10,5,50,13,-24,47,11,5,47,14,-23,45,11,6,43,14,-21,42,12,8,41,13,-22,38,11,12,41,13,-25,36,10,15,44,12,-28,37,8,11,51,9,-29,44,5,6,50,10,-25,47,7,4,44,11,-20,43,9,9,42,10,-22,38,7,13,45,9,-27,39,5,11,48,7,-26,42,4,8,49,7,-25,45,5,6,47,8,-22,45,6,7,44,8,-21,41,6,10,44,7,-24,39,5,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-32,-9,36,-32,10,38,-27,-10,35,-26,8,36,-21,-7,34,-20,0,34,-18,0,38,-34,5,52,-31,-9,50,-30,8,51,-25,-11,49,-24,5,50,-19,-7,48,-19,-1,49,-17,-2,51,-32,9,45,-25,-10,42,-25,7,46,-31,-9,44,-31,6,43,-19,-7,41,-19,0,42,-17,-1,45,-33,4,56,-28,-10,51,-29,8,51,-25,-10,45,-27,6,45,-24,-6,41,-25,0,41,-23,-2,55,-29,3,60,-22,-11,55,-24,7,56,-17,-14,50,-19,5,51,-12,-10,46,-14,-2,48,-12,-4,59,-25,8,53,-21,-12,47,-23,4,58,-25,-10,53,-27,5,49,-16,-8,44,-18,-1,45,-16,-3,57,-27,3,60,-22,-11,55,-24,7,56,-17,-14,50,-19,5,51,-12,-10,47,-14,-2,48,-12,-4,59,-24,-2,67,-10,-13,64,-11,0,64,-9,-14,60,-10,-1,60,-8,-10,57,-9,-5,57,-8,-8,67,-11,-4,66,-9,-10,64,-11,-2,63,-8,-11,61,-10,-2,60,-8,-9,58,-9,-5,58,-8,-8,67,-10,-6,66,-5,-11,65,-6,-5,64,-4,-11,62,-5,-5,61,-3,-9,60,-4,-7,59,-4,-9,67,-5,-6,66,-5,-11,64,-6,-5,64,-3,-11,62,-4,-5,62,-1,-10,60,-2,-7,60,-1,-9,66,-6,-7,69,-4,-12,67,-5,-5,66,-2,-12,64,-3,-6,63,0,-11,61,-1,-8,61,0,-10,69,-5,13,58,-6,-19,58,-9,11,55,-6,-17,57,-8,9,55,-6,-15,58,-6,6,57,-6,-16,60,-4,6,59,-5,-17,62,-4,8,62,-5,-19,63,-5,10,62,-5,-21,62,-7,12,60,-5,-21,60,-9,13,53,12,-29,47,2,12,51,11,-27,47,3,9,51,11,-26,47,5,8,52,12,-26,49,6,7,54,12,-28,51,7,9,56,13,-29,51,6,11,56,13,-31,51,4,13,55,12,-31,49,3,12,52,5,-23,50,0,13,54,5,-25,51,-1,9,52,5,-22,51,1,7,53,5,-22,53,3,6,56,6,-23,55,3,8,58,6,-26,56,2,11,58,6,-27,55,0,13,57,6,-27,53,-1,11,54,0,-20,53,-4,13,56,0,-23,54,-5,9,53,0,-19,54,-2,7,55,0,-19,56,0,6,57,0,-21,58,0,8,59,1,-23,59,-1,10,60,1,-24,58,-3,13,58,0,-24,56,-5,11,55,-3,-19,55,-6,13,57,-3,-21,56,-7,9,54,-3,-17,56,-4,7,56,-3,-17,58,-2,6,58,-2,-19,60,-2,8,60,-2,-21,61,-3,10,61,-2,-23,60,-5,13,59,-2,-23,58,-7,0,46,26,-16,50,17,-1,46,25,-16,51,17,-2,45,24,-15,51,15,-1,44,23,-14,50,14,0,43,23,-14,49,14,0,43,24,-15,48,15,1,43,26,-16,47,16,0,45,26,-16,48,17,11,56,15,-32,48,7,9,56,14,-32,50,6,9,55,12,-30,51,4,9,53,12,-29,49,3,11,51,11,-29,47,3,12,51,13,-30,45,4,13,52,14,-31,45,5,13,54,15,-32,46,7,1,48,22,-20,51,14,2,48,23,-21,49,15,0,47,21,-19,51,12,1,46,20,-18,50,11,2,45,20,-18,48,11,4,45,21,-19,47,12,4,46,23,-20,46,13,4,47,24,-21,47,15,7,54,16,-29,51,8,9,54,17,-29,49,9,6,53,14,-27,51,6,7,51,13,-26,49,5,9,49,13,-26,47,4,10,49,15,-27,45,5,11,50,16,-28,45,7,10,52,18,-29,47,9,8,55,15,-31,51,7,10,55,16,-32,49,8,7,54,13,-29,51,5,8,52,12,-28,49,4,10,50,12,-28,47,3,12,50,13,-29,45,4,13,52,15,-31,45,6,12,54,16,-32,46,7,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,11,60,-10,-21,62,-10,9,56,-8,-19,58,-9,-2,56,-12,-8,56,-12,2,62,-18,-11,63,-18,10,63,-4,-19,64,-4,8,57,-3,-18,58,-3,-3,57,-8,-6,56,-9,2,66,-8,-10,66,-8,5,55,-10,-15,56,-11,9,58,-14,-19,60,-14,4,59,-4,-14,59,-4,6,64,-5,-15,65,-5,10,57,-10,-20,59,-11,1,60,-17,-10,60,-17,9,60,-2,-19,61,-2,4,60,-10,-13,61,-11,8,55,-13,-18,57,-14,4,61,-3,-14,62,-4,7,56,-6,-18,57,-7,11,62,-7,-20,64,-8,-3,56,-9,-6,55,-10,2,66,-12,-11,66,-12,3,55,-7,-13,55,-7,7,65,-10,-16,66,-11,7,55,-9,-17,57,-10,10,59,-12,-20,61,-12,6,58,-3,-16,59,-3,8,64,-4,-17,65,-5,9,56,-11,-19,58,-12,7,61,-2,-16,61,-3,5,55,-6,-16,56,-7,9,64,-9,-18,65,-9,-2,33,28,-10,59,14,-4,32,26,-10,58,11,-2,39,24,-10,51,15,0,39,26,-11,52,17,-5,34,30,-13,59,12,-6,33,27,-12,57,10,-5,40,26,-13,51,13,-4,41,28,-15,52,15,-3,41,29,-15,53,17,-4,41,28,-14,51,15,-5,33,29,-13,58,11,-3,33,31,-14,59,13,0,40,27,-11,54,19,-1,40,25,-11,52,16,-2,33,27,-10,58,12,0,33,29,-11,59,14,1,34,29,-12,60,15,0,33,28,-11,59,13,0,40,26,-10,53,18,1,41,27,-12,54,19,0,34,31,-15,60,15,-2,33,30,-14,58,12,-3,41,29,-15,52,16,-1,41,30,-15,53,18,0,42,30,-15,54,20,-2,41,30,-15,52,18,0,34,30,-16,58,14,1,35,31,-16,59,16,1,42,28,-13,54,20,0,41,27,-12,53,19,0,34,28,-13,59,14,2,35,29,-14,59,16,1,41,29,-13,53,21,-2,40,24,-10,51,15,-2,43,23,-11,48,16,1,44,27,-13,49,21,0,42,30,-15,53,20,-5,41,25,-13,50,13,-4,43,25,-13,48,15,0,45,28,-15,49,20,-3,41,29,-15,52,16,-3,44,27,-15,48,17,0,39,26,-11,53,18,0,43,25,-11,49,19,3,32,29,-14,62,15,2,32,28,-13,62,14,0,35,29,-14,58,15,1,35,29,-14,59,16,3,32,30,-15,62,15,2,31,30,-15,62,14,0,34,30,-15,59,14,1,35,31,-16,59,16,2,31,29,-14,63,13,4,31,30,-15,63,15,2,32,29,-13,62,14,3,32,29,-14,62,15,4,32,28,-13,63,15,3,31,28,-12,63,14,4,31,29,-14,64,15,3,30,28,-13,64,14,3,30,28,-13,64,14,4,31,28,-13,65,15,3,30,29,-12,63,14,4,31,29,-12,64,15,3,33,29,-11,65,15,2,32,28,-11,65,14,4,33,28,-12,66,15,3,32,27,-11,65,14,2,30,26,-9,66,11,3,30,27,-10,67,12,1,30,27,-9,65,12,2,31,28,-9,65,13,2,29,29,-11,65,13,1,29,28,-11,64,12,3,29,28,-12,66,12,2,28,27,-11,65,11,1,28,28,-12,65,11,2,28,29,-12,65,12,1,29,27,-11,64,12,2,30,28,-11,64,13,1,31,30,-13,63,13,0,30,29,-12,62,12,1,29,30,-14,64,12,0,29,29,-13,64,11,0,33,31,-15,60,14,-2,33,30,-14,59,13,0,29,30,-14,63,11,1,30,31,-14,64,13,0,34,29,-12,60,15,0,34,28,-12,59,13,0,30,28,-12,63,12,2,30,29,-13,64,13,0,29,29,-11,63,11,-1,28,28,-11,63,9,-2,33,27,-11,58,12,-1,34,29,-11,59,14,-1,29,31,-13,63,10,-3,28,29,-12,62,9,-4,33,29,-13,58,11,-3,33,31,-14,59,13,-2,27,29,-12,63,8,-1,28,30,-13,64,10,-2,29,28,-11,63,9,-1,29,30,-11,64,11,0,29,28,-11,66,10,0,29,27,-10,65,9,0,27,29,-12,66,9,0,27,28,-11,65,8,0,27,27,-11,66,8,1,28,28,-12,67,9,0,28,27,-10,65,9,0,29,29,-10,66,10,1,30,27,-9,68,9,0,30,26,-9,67,8,1,29,26,-10,68,8,0,29,25,-10,68,7,-1,27,26,-11,66,6,0,28,27,-11,67,7,-1,28,26,-10,66,7,-1,29,27,-10,66,8,-2,29,28,-11,65,9,-3,28,27,-10,64,7,-1,27,28,-12,65,8,-2,27,27,-11,64,7,-3,27,28,-12,64,7,-2,27,29,-12,65,8,-3,28,27,-10,64,8,-2,29,28,-11,64,9,-3,29,29,-11,63,10,-4,29,28,-10,62,8,-3,28,30,-12,63,9,-4,27,29,-12,62,8,-5,33,30,-13,59,12,-6,33,28,-12,57,10,-5,29,29,-12,61,8,-4,29,30,-13,62,10,-3,33,28,-11,59,13,-4,33,26,-10,58,11,-4,29,28,-10,62,9,-3,29,29,-11,63,10,-3,27,28,-12,64,7,-3,28,27,-10,64,7,-2,29,28,-11,65,9,-2,27,29,-12,65,8,-5,28,29,-12,62,8,-4,29,28,-10,62,8,-3,29,29,-11,63,10,-4,28,30,-13,63,9,-1,28,31,-13,64,10,-1,29,30,-11,64,11,-2,29,28,-11,63,9,-2,28,29,-12,63,9,0,27,28,-12,66,9,0,29,28,-10,66,10,0,28,27,-10,65,9,0,27,27,-11,65,8,0,29,30,-14,63,11,0,30,29,-12,63,12,1,30,30,-13,63,13,1,29,31,-14,64,12,2,28,28,-12,65,11,1,29,28,-11,64,12,2,29,29,-11,64,13,3,28,29,-12,66,12,3,32,30,-15,63,15,3,32,29,-14,62,15,2,32,29,-13,62,14,2,31,30,-14,62,13,5,31,28,-13,64,15,4,31,29,-13,63,15,3,31,28,-12,63,14,3,30,28,-13,64,14,-4,35,24,-12,53,10,-3,35,26,-10,55,12,-1,36,24,-8,53,11,-3,36,22,-10,52,9,-4,32,24,-10,56,8,-3,33,25,-9,56,10,-1,33,24,-7,54,10,-2,33,22,-8,54,8,0,38,26,-10,53,16,-4,37,28,-13,55,13,-2,41,23,-11,48,13,-4,41,24,-13,50,14,-3,34,22,-9,53,8,-4,34,24,-11,54,9,-1,35,24,-8,53,11,-3,34,26,-10,55,11,-2,32,22,-7,55,8,-4,31,24,-9,57,8,-1,32,24,-7,55,10,-2,32,25,-9,56,10,-2,29,25,-6,58,10,0,30,24,-6,57,10,-2,29,24,-6,58,9,-1,29,23,-5,57,9,-4,35,24,-11,54,9,-3,35,26,-10,55,12,-1,35,24,-8,53,11,-3,35,22,-10,52,9,-1,33,24,-7,54,10,-2,32,22,-8,55,8,-2,32,25,-9,56,10,-4,32,24,-9,56,8,-4,39,26,-12,52,14,3,60,-13,-13,55,-15,0,63,-16,-12,60,-17,4,55,-9,-12,50,-11,-3,52,-10,-6,63,-18,1,55,-11,-11,56,-12,6,60,-16,-15,62,-16,0,57,-6,-10,57,-6,4,65,-6,-13,66,-6,5,58,-15,-14,59,-16,3,61,-6,-12,62,-6,0,55,-8,-10,55,-9,5,65,-11,-13,66,-12] }, + { "name": "animation_000015", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,0,65,-5,-10,63,-2,2,70,7,-8,69,10,-3,76,-9,-13,75,-6,0,81,4,-10,79,6,2,67,0,-10,66,4,0,81,-3,-13,79,0,0,60,4,-5,60,5,0,63,11,-2,62,12,2,75,5,-10,74,9,-2,72,-9,-13,70,-6,1,75,-2,-13,73,1,-1,70,13,-6,63,-5,-4,82,6,-9,77,-9,-4,67,2,-7,82,-2,-2,60,4,0,62,12,-3,75,9,-8,70,-9,2,73,5,-9,72,9,-1,68,-8,-12,66,-4,2,71,-1,-12,69,3,-2,73,10,-7,66,-7,25,45,8,-31,35,7,25,49,6,-33,38,5,23,53,4,-32,43,3,19,54,5,-30,46,4,16,52,7,-26,46,7,16,49,10,-24,42,9,18,45,11,-25,38,11,22,43,11,-27,35,10,12,26,-22,-9,24,-23,12,30,-26,-11,28,-26,10,36,-27,-11,34,-27,6,39,-23,-10,39,-23,3,39,-18,-7,40,-18,3,33,-14,-5,35,-14,6,27,-13,-5,28,-13,9,25,-17,-6,25,-17,17,37,-16,-19,32,-16,16,32,-13,-16,28,-14,14,41,-17,-18,37,-17,9,43,-16,-15,41,-17,6,41,-14,-11,41,-14,5,36,-11,-8,37,-11,8,31,-9,-8,31,-9,13,30,-11,-12,27,-11,21,43,-6,-25,35,-6,21,38,-3,-23,31,-4,18,47,-6,-25,40,-7,14,48,-6,-22,43,-6,11,47,-4,-19,44,-4,10,43,-1,-16,40,-1,13,38,0,-16,35,0,17,36,-1,-19,31,-1,28,13,15,-30,10,31,30,14,17,-33,12,32,30,15,21,-34,15,35,28,16,23,-33,17,37,25,15,23,-29,17,37,23,14,20,-26,15,36,22,12,17,-25,12,33,25,12,15,-27,10,31,23,45,3,-30,34,5,26,47,7,-34,36,7,27,48,11,-35,39,11,24,49,15,-33,42,13,19,48,14,-29,42,14,16,47,11,-24,40,12,16,45,6,-23,37,9,19,45,3,-25,34,6,28,37,9,-34,28,14,25,36,5,-29,26,12,28,39,14,-35,32,17,25,39,17,-33,34,20,20,38,17,-28,35,21,17,37,13,-24,33,19,17,35,8,-23,29,15,20,35,5,-25,26,12,29,30,11,-33,23,19,26,29,7,-29,21,17,29,31,15,-35,26,22,26,32,18,-33,29,25,21,31,18,-28,29,26,18,30,15,-24,27,24,18,28,10,-23,24,20,21,28,7,-25,21,17,29,22,14,-33,17,26,27,20,11,-30,15,25,29,23,18,-34,20,29,27,23,21,-32,22,31,23,23,21,-29,22,32,21,21,18,-26,21,30,21,20,14,-24,18,27,23,20,11,-26,16,25,23,50,15,-32,40,14,25,53,10,-35,42,9,20,55,11,-31,46,10,17,50,13,-27,43,13,21,45,12,-27,37,12,26,47,10,-33,36,9,21,54,5,-31,45,5,16,52,8,-26,46,7,16,46,8,-24,40,8,22,44,6,-27,36,5,24,49,4,-32,39,4,19,49,3,-27,41,3,25,52,13,-34,41,12,22,53,14,-32,43,13,23,55,10,-34,45,9,25,48,13,-33,38,12,26,50,10,-35,39,9,20,50,15,-29,41,14,19,53,13,-29,45,12,22,47,14,-30,38,14,19,47,14,-26,39,13,24,45,12,-30,36,11,26,48,7,-33,37,6,24,51,7,-33,41,6,24,54,7,-34,44,6,21,55,8,-32,46,8,18,54,10,-29,46,9,17,51,10,-27,44,10,17,48,11,-25,41,10,18,45,11,-25,38,10,21,44,9,-27,35,9,25,45,8,-30,35,7,23,52,4,-32,42,3,18,54,6,-29,46,5,15,49,8,-24,43,7,19,44,7,-25,37,6,23,46,5,-30,37,4,22,49,3,-29,40,2,20,52,3,-29,44,3,17,51,5,-26,44,4,17,47,5,-24,41,5,20,46,4,-27,38,3,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,39,-33,-9,37,-31,11,37,-28,-10,35,-25,9,35,-22,-6,34,-20,1,34,-18,0,38,-34,6,52,-31,-9,50,-29,9,51,-25,-10,49,-23,6,50,-19,-6,48,-17,0,49,-16,-1,51,-31,9,44,-26,-9,42,-24,7,46,-32,-9,44,-30,7,43,-20,-6,41,-18,0,41,-17,-1,45,-32,4,56,-28,-9,51,-27,9,51,-27,-9,45,-25,8,45,-25,-4,41,-24,2,41,-24,-2,55,-28,4,59,-22,-10,54,-20,9,56,-18,-11,49,-16,9,51,-13,-6,45,-12,1,47,-12,-3,58,-23,9,53,-22,-10,46,-20,4,58,-25,-9,52,-24,8,48,-18,-5,43,-16,2,44,-17,-3,57,-25,4,60,-22,-10,54,-21,9,56,-18,-11,49,-16,9,51,-13,-6,45,-12,1,47,-12,-3,58,-23,1,66,-8,-8,62,-7,4,63,-8,-9,58,-6,3,59,-8,-5,55,-7,0,56,-7,-4,65,-8,0,65,-7,-6,63,-7,2,62,-7,-7,59,-7,1,58,-7,-4,56,-7,0,56,-7,-4,65,-7,-1,65,-2,-5,63,-2,0,62,-2,-5,60,-2,0,59,-2,-4,58,-2,-1,57,-2,-3,65,-2,-1,64,-2,-5,62,-2,0,62,-1,-5,60,-1,0,60,0,-4,58,0,-1,58,0,-3,64,-3,-1,67,-1,-6,65,-1,0,64,0,-6,62,0,0,61,0,-4,59,0,-1,59,1,-4,67,-1,18,57,-9,-15,57,-9,16,55,-8,-14,55,-8,14,54,-7,-12,55,-6,12,56,-7,-12,57,-4,11,59,-6,-13,59,-3,13,61,-7,-15,61,-4,15,61,-8,-16,61,-6,17,59,-8,-16,59,-8,23,56,9,-30,48,0,22,54,9,-28,47,0,20,54,10,-27,47,2,18,55,11,-27,48,4,18,57,11,-28,50,4,19,59,10,-29,51,3,21,59,10,-30,51,2,23,58,9,-31,50,0,20,54,3,-23,49,-2,22,56,2,-24,51,-3,18,53,3,-21,49,0,15,55,4,-21,51,1,15,57,4,-22,53,2,17,59,4,-24,55,1,19,60,3,-25,55,-1,21,58,2,-25,53,-3,18,54,-2,-19,52,-5,20,56,-2,-20,54,-6,16,54,-1,-17,52,-2,14,55,0,-17,53,0,13,58,0,-18,56,0,15,60,0,-20,58,-1,17,60,-1,-21,58,-3,19,59,-2,-21,56,-5,17,54,-5,-16,53,-6,19,56,-5,-18,55,-7,15,54,-4,-15,53,-4,13,56,-3,-14,55,-2,12,58,-3,-15,58,-1,14,60,-4,-17,59,-2,16,61,-4,-18,59,-5,18,59,-5,-19,58,-7,12,50,26,-24,42,18,11,50,25,-23,43,18,10,49,24,-21,43,17,10,48,23,-21,42,16,11,47,23,-21,40,16,13,47,24,-23,40,16,14,48,25,-24,40,17,13,49,26,-25,40,18,23,59,12,-33,50,3,21,59,11,-31,51,3,20,58,10,-29,51,2,20,56,9,-28,49,1,22,54,9,-29,48,0,24,55,10,-31,47,0,24,56,12,-32,47,1,24,58,13,-34,48,3,13,53,21,-25,45,14,15,53,22,-27,44,14,13,52,20,-23,45,13,13,50,19,-23,44,12,14,49,19,-23,42,12,16,49,20,-25,41,12,17,50,22,-26,41,13,16,52,22,-27,42,14,18,58,14,-30,50,6,20,58,15,-31,49,6,17,57,12,-28,50,5,18,54,11,-26,48,4,20,52,11,-27,46,3,22,52,13,-29,44,3,23,54,14,-31,45,4,22,56,15,-32,46,5,20,59,12,-31,51,4,22,59,13,-33,50,4,19,57,11,-28,51,4,19,55,10,-28,49,2,21,54,10,-28,47,1,23,54,11,-30,46,1,24,56,12,-32,47,2,24,58,13,-33,48,3,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,15,60,-12,-16,60,-10,13,55,-11,-14,56,-9,1,55,-11,-3,54,-11,5,62,-17,-6,62,-16,15,62,-6,-15,62,-4,14,56,-5,-14,56,-3,1,56,-7,-2,55,-7,6,65,-7,-6,64,-6,9,54,-11,-10,54,-10,12,58,-15,-14,58,-14,9,57,-5,-10,57,-3,11,63,-6,-11,63,-4,14,57,-12,-15,57,-10,4,59,-17,-5,59,-16,15,59,-4,-15,59,-2,8,59,-11,-9,59,-10,11,55,-15,-13,55,-13,10,60,-4,-10,60,-3,13,55,-8,-13,55,-6,15,62,-9,-16,62,-7,1,55,-8,-2,54,-8,6,65,-12,-6,65,-11,8,54,-8,-9,54,-6,11,64,-11,-11,64,-9,11,55,-11,-12,55,-9,14,59,-14,-15,59,-12,11,57,-4,-12,57,-2,13,63,-6,-13,63,-4,13,56,-13,-14,56,-11,12,59,-4,-12,59,-2,10,54,-8,-11,54,-6,13,63,-10,-14,63,-8,3,43,32,-23,31,25,2,42,29,-23,30,23,8,44,25,-24,36,18,9,44,28,-24,37,21,2,45,32,-20,31,24,0,45,29,-20,30,22,6,48,26,-21,36,18,7,49,28,-20,38,20,8,49,29,-20,38,22,7,48,27,-20,37,20,2,45,31,-19,31,23,3,45,33,-20,32,26,11,44,29,-25,38,22,9,45,27,-24,37,20,3,42,31,-23,30,24,5,42,33,-23,32,26,6,42,34,-22,33,27,5,41,32,-22,31,25,10,45,27,-25,37,21,11,45,29,-24,39,23,5,44,35,-20,33,27,3,44,33,-19,32,25,8,49,29,-20,39,21,9,49,30,-21,40,23,11,48,31,-22,40,24,9,49,30,-20,40,22,5,43,33,-19,33,25,8,43,35,-19,35,28,12,46,30,-24,40,24,11,46,28,-24,38,22,7,41,32,-21,33,26,8,42,34,-21,34,28,12,46,31,-24,41,23,8,45,25,-24,36,18,10,46,24,-24,39,16,13,47,28,-24,42,21,11,48,31,-22,41,24,7,48,25,-21,36,18,9,49,24,-21,39,17,13,49,28,-22,43,21,8,49,28,-20,39,21,10,50,26,-20,41,19,10,44,29,-25,38,21,12,46,26,-24,40,19,8,40,33,-21,32,29,7,39,32,-21,31,28,7,43,32,-21,33,26,8,43,33,-21,35,27,8,39,34,-20,32,30,6,39,34,-20,31,28,6,43,34,-19,33,26,7,43,35,-19,35,27,7,38,33,-20,30,29,8,38,34,-20,31,30,7,39,33,-21,31,28,8,39,33,-21,32,29,9,39,32,-22,31,30,8,38,32,-22,30,29,9,38,33,-22,31,30,7,37,32,-21,30,29,8,38,32,-22,29,30,9,38,32,-22,30,31,7,38,33,-22,30,29,8,38,33,-23,31,30,8,40,33,-24,30,30,7,40,32,-24,29,29,9,40,32,-24,29,31,8,40,31,-23,29,30,7,38,30,-26,26,28,8,38,31,-26,27,29,7,39,31,-26,27,27,7,39,32,-26,28,29,7,38,33,-24,29,29,5,38,32,-24,28,27,7,37,33,-24,27,30,6,37,32,-23,26,28,6,37,32,-23,27,28,7,37,33,-23,28,30,6,38,31,-23,28,27,7,38,33,-24,29,29,6,40,34,-22,30,28,5,40,32,-22,29,27,6,38,35,-21,29,29,4,38,33,-21,28,28,5,43,34,-20,33,27,4,43,33,-20,32,25,4,39,34,-20,28,28,5,39,35,-21,29,29,6,43,33,-22,33,26,5,43,32,-22,32,25,5,39,32,-22,28,27,7,39,34,-22,29,29,5,40,32,-23,27,27,4,39,31,-23,27,26,3,44,30,-22,31,23,4,45,32,-22,32,25,4,39,33,-21,27,28,2,39,32,-21,26,26,1,44,32,-19,30,24,2,44,33,-20,31,25,3,38,31,-21,25,26,4,39,33,-21,26,28,3,40,31,-23,26,26,4,40,33,-23,27,27,5,41,31,-24,25,28,4,41,30,-24,25,27,6,39,31,-23,25,29,5,39,30,-22,24,27,5,40,29,-23,23,27,6,40,31,-23,24,29,4,40,30,-24,24,27,5,40,32,-24,25,28,5,42,31,-25,24,29,4,42,30,-25,23,28,6,42,30,-25,23,29,5,42,29,-25,22,28,4,42,28,-23,22,27,5,42,29,-23,22,28,3,42,29,-24,22,27,4,42,29,-24,23,28,4,41,31,-23,24,27,3,40,29,-23,24,26,5,40,30,-22,24,28,4,40,29,-22,23,26,3,39,29,-22,24,26,4,40,31,-22,24,27,3,41,29,-23,24,25,4,41,30,-23,25,27,2,41,32,-23,26,26,1,41,30,-23,26,25,3,39,32,-21,26,27,2,39,30,-21,25,25,1,45,32,-20,31,25,0,44,30,-20,30,22,1,40,31,-21,26,25,2,40,32,-21,27,26,3,45,30,-22,31,24,1,44,29,-22,30,22,2,40,30,-23,26,24,3,40,31,-23,27,26,3,39,29,-22,23,26,3,40,29,-23,24,26,4,41,30,-23,25,27,4,40,30,-22,24,27,1,39,31,-21,26,25,2,40,30,-23,26,24,3,40,32,-23,27,26,2,40,32,-21,26,27,4,39,33,-21,27,28,4,40,33,-23,27,27,3,40,31,-23,26,26,3,39,32,-21,26,26,6,40,31,-23,24,29,5,40,31,-24,25,28,4,40,30,-24,24,27,5,39,30,-23,24,27,4,39,33,-21,28,28,5,39,32,-22,29,27,6,39,34,-22,30,29,5,39,35,-21,29,29,6,37,32,-23,27,28,6,38,32,-24,28,27,7,38,33,-24,29,29,7,37,33,-23,27,30,8,39,34,-20,32,30,8,39,33,-21,32,29,7,39,33,-21,31,28,6,39,34,-20,31,29,9,37,33,-22,30,30,9,38,33,-22,31,30,7,38,32,-22,30,29,8,37,32,-22,29,30,3,43,26,-20,32,18,4,43,28,-23,32,20,6,42,27,-24,32,18,5,42,25,-21,31,16,2,41,27,-21,28,19,3,41,29,-23,30,20,4,40,28,-24,30,18,3,39,26,-22,28,17,8,44,28,-25,36,21,4,46,29,-21,34,22,9,45,24,-22,37,16,7,47,24,-21,37,18,4,41,26,-22,30,17,3,42,26,-21,30,19,5,41,28,-24,31,18,4,43,29,-23,31,20,3,39,27,-23,27,18,1,40,28,-22,28,20,4,39,29,-24,29,18,3,41,29,-23,29,20,1,38,31,-25,28,21,2,38,30,-26,28,20,0,38,30,-25,26,21,1,37,29,-26,26,20,3,43,26,-20,31,19,4,43,28,-23,32,20,6,41,28,-24,31,18,4,41,25,-21,31,17,4,40,29,-24,29,18,3,39,27,-23,28,18,3,41,29,-23,30,20,1,40,27,-22,28,20,6,47,27,-22,36,20,6,60,-13,-10,53,-11,2,63,-15,-9,58,-14,8,55,-10,-7,49,-8,0,51,-9,-3,62,-15,5,55,-11,-6,54,-10,8,60,-16,-10,60,-15,5,56,-6,-6,56,-5,9,64,-7,-8,64,-5,8,57,-16,-9,57,-14,8,60,-6,-8,60,-5,4,54,-8,-5,54,-7,8,65,-12,-9,65,-10] }, + { "name": "animation_000016", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,64,-5,-8,64,-2,6,69,6,-4,70,10,1,76,-10,-9,76,-7,5,80,3,-4,81,6,5,66,0,-7,67,4,4,80,-4,-8,80,0,2,60,4,-3,60,6,3,63,11,0,63,12,7,75,5,-5,75,9,1,71,-10,-9,71,-6,6,74,-3,-9,74,1,2,71,12,-3,64,-5,0,82,5,-4,77,-10,0,67,2,-2,83,-3,0,60,5,1,63,12,1,76,9,-4,70,-10,6,73,5,-5,73,8,2,67,-8,-9,67,-4,6,70,-1,-8,71,3,1,74,9,-4,66,-7,28,45,7,-31,35,7,29,48,4,-33,38,5,27,52,3,-32,43,3,23,54,3,-30,46,4,20,53,6,-26,46,7,19,49,8,-24,42,9,21,45,10,-25,38,10,25,43,9,-27,35,10,11,25,-22,-9,24,-23,11,30,-26,-11,28,-26,10,35,-27,-11,34,-27,7,39,-24,-10,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-17,18,36,-17,-19,32,-16,16,31,-14,-16,28,-14,16,41,-18,-18,37,-17,11,43,-17,-15,41,-17,7,42,-14,-11,41,-14,6,37,-11,-8,37,-11,9,32,-9,-8,31,-9,13,30,-11,-12,27,-11,23,42,-7,-25,35,-6,22,38,-4,-23,31,-4,21,46,-8,-25,40,-7,17,48,-7,-22,43,-6,13,48,-5,-19,44,-4,12,43,-2,-16,40,-1,14,39,0,-16,35,0,19,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,20,-34,15,35,29,16,23,-33,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-30,34,5,30,46,5,-34,36,7,30,48,10,-35,39,11,27,49,13,-33,42,13,23,48,13,-29,42,14,19,47,10,-24,40,12,19,45,5,-23,37,9,22,44,2,-25,34,6,30,36,7,-34,28,14,26,35,4,-29,26,12,31,38,12,-35,32,17,28,39,16,-33,34,20,23,39,16,-28,35,21,20,37,12,-24,33,19,19,36,7,-23,29,15,22,35,4,-25,26,12,30,29,10,-33,23,19,27,28,6,-29,21,17,31,31,14,-35,26,22,28,32,17,-33,29,25,23,32,18,-28,29,26,20,30,14,-24,27,24,20,29,10,-23,24,20,22,28,7,-25,21,17,30,21,14,-33,17,26,27,20,11,-30,15,25,31,22,17,-34,20,29,28,23,20,-33,22,31,25,23,20,-29,22,32,22,22,18,-26,21,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-32,40,14,29,52,8,-35,42,9,24,55,9,-31,46,10,21,50,12,-27,43,13,24,45,11,-27,37,12,29,46,8,-33,36,9,25,54,4,-31,45,5,20,53,6,-26,46,7,20,46,7,-24,40,8,24,44,5,-27,36,5,28,49,3,-32,39,4,22,49,2,-27,41,3,29,52,11,-34,41,12,26,53,12,-32,43,13,27,55,8,-34,45,9,29,48,11,-33,38,12,30,49,8,-35,39,9,24,50,13,-29,41,14,23,53,11,-29,45,12,26,47,13,-30,38,14,22,47,12,-27,39,13,27,45,10,-30,36,11,29,47,5,-33,37,6,28,51,5,-33,41,6,28,54,5,-34,44,6,25,55,7,-32,46,8,22,54,8,-29,46,9,21,52,9,-27,44,10,20,48,10,-25,41,10,21,45,9,-25,38,10,24,44,8,-27,35,9,28,44,6,-30,35,7,27,52,2,-32,42,3,22,54,4,-29,46,5,18,49,7,-24,43,7,22,44,6,-25,37,6,26,46,3,-30,37,4,25,49,1,-29,40,2,23,52,2,-29,44,3,20,51,3,-26,44,4,20,47,4,-24,41,5,23,46,3,-27,38,3,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-6,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,9,50,-25,-10,49,-23,6,49,-19,-6,48,-17,0,49,-16,-1,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,5,56,-29,-9,52,-26,9,50,-27,-9,45,-25,8,45,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-9,55,-20,11,55,-18,-10,49,-15,10,50,-14,-5,46,-11,2,47,-12,-2,59,-23,10,52,-22,-10,47,-19,6,57,-26,-9,53,-23,9,47,-18,-5,44,-16,2,44,-17,-2,57,-25,6,59,-22,-9,55,-20,10,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-2,59,-22,3,65,-8,-6,63,-7,7,62,-8,-8,59,-6,5,58,-8,-4,56,-6,0,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-5,59,-7,3,58,-7,-2,56,-6,0,56,-6,-1,65,-7,1,64,-2,-3,63,-2,3,62,-2,-3,60,-2,2,59,-2,-2,58,-2,0,57,-2,-1,65,-2,1,64,-2,-3,63,-2,3,62,-1,-3,60,-1,2,59,0,-2,58,0,0,58,0,-1,64,-3,1,66,-1,-3,65,-1,3,64,0,-4,62,0,2,61,0,-2,59,1,0,59,1,-1,67,-1,19,55,-9,-14,56,-8,18,53,-8,-12,55,-7,15,53,-7,-11,54,-5,13,55,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,61,-3,17,59,-8,-14,61,-5,19,57,-9,-15,59,-8,26,55,8,-29,48,0,25,53,9,-27,47,1,23,53,9,-26,47,3,21,55,10,-26,48,5,21,57,10,-27,50,5,23,58,9,-28,52,4,25,58,9,-29,52,2,26,57,8,-29,50,1,22,52,2,-22,49,-1,24,54,1,-23,51,-3,20,52,3,-20,49,0,18,54,4,-20,51,2,18,57,4,-21,53,3,20,59,3,-22,55,1,22,59,2,-24,55,0,24,57,1,-24,53,-2,20,53,-2,-18,52,-4,22,55,-3,-19,53,-5,18,52,-1,-16,52,-2,16,54,0,-16,53,0,16,57,0,-17,56,0,17,59,-1,-18,57,0,20,59,-2,-20,58,-2,22,57,-3,-20,56,-4,19,53,-5,-15,53,-6,20,55,-6,-17,55,-7,16,52,-4,-13,53,-3,15,54,-3,-13,55,-1,14,57,-3,-14,57,-1,16,59,-4,-16,59,-2,19,59,-5,-17,59,-4,20,57,-6,-17,57,-6,15,52,26,-23,41,19,14,52,25,-22,42,18,13,51,24,-20,42,18,13,49,23,-19,41,17,14,48,23,-20,40,16,15,48,24,-21,39,16,16,49,25,-23,39,17,16,51,26,-23,40,18,26,59,11,-32,50,4,24,59,10,-30,52,4,23,57,9,-28,51,3,23,55,9,-27,50,2,25,54,8,-28,48,1,26,54,9,-30,47,1,27,55,11,-31,47,2,27,57,11,-32,49,3,17,54,21,-24,45,15,18,54,22,-25,44,15,16,53,20,-22,45,14,16,51,19,-21,43,13,17,50,19,-22,42,12,19,50,20,-24,41,12,20,51,21,-25,41,13,19,52,22,-26,42,14,22,58,13,-28,50,7,24,58,14,-30,49,7,21,56,12,-26,50,6,21,54,11,-25,48,4,23,52,11,-26,46,3,25,52,12,-28,45,3,26,53,13,-30,45,5,25,56,14,-31,47,6,23,59,11,-29,51,5,25,59,12,-31,50,5,22,57,10,-27,51,4,22,55,9,-27,49,3,24,53,9,-27,47,2,26,53,10,-29,46,2,27,55,11,-31,47,2,27,57,12,-32,48,4,30,14,16,-32,14,31,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-39,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-30,2,47,25,7,31,-30,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-28,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-30,7,48,25,2,31,-30,2,48,31,6,38,-36,6,53,27,5,37,-32,6,53,36,5,34,-41,5,49,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-36,2,54,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,0,31,-30,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-30,0,47,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,31,2,38,-36,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-36,0,54,37,0,35,-41,0,50,25,2,31,-30,2,48,25,0,31,-30,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-30,0,47,25,2,31,-30,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-39,2,39,23,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-39,0,39,30,0,12,-32,0,28,17,58,-12,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,17,60,-6,-14,62,-3,15,54,-5,-12,55,-2,2,55,-7,0,55,-7,9,64,-7,-5,64,-6,10,53,-11,-9,54,-9,14,56,-16,-13,58,-13,11,56,-5,-8,57,-3,13,62,-6,-9,63,-4,16,55,-12,-14,57,-9,5,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,54,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-12,55,-5,17,60,-10,-14,62,-6,2,54,-8,0,54,-8,8,64,-12,-5,65,-11,9,53,-8,-7,53,-6,13,63,-12,-10,64,-9,13,53,-11,-11,55,-9,15,57,-14,-14,59,-11,13,55,-4,-10,56,-2,16,61,-6,-12,63,-3,14,55,-14,-13,56,-11,14,58,-4,-11,59,-1,12,53,-8,-10,54,-6,16,61,-11,-13,63,-7,11,40,29,-21,30,24,9,40,27,-21,29,22,12,46,24,-23,35,19,14,46,26,-23,37,21,8,41,30,-18,30,24,7,41,28,-19,29,22,10,47,26,-19,36,18,11,48,28,-18,37,20,12,48,29,-19,38,22,10,48,28,-19,37,20,8,41,29,-18,30,23,10,41,32,-18,31,25,16,46,27,-23,37,23,13,46,25,-23,36,20,11,39,28,-21,30,23,13,40,30,-21,31,25,14,40,30,-20,32,26,13,40,29,-20,31,25,15,46,26,-23,37,22,16,47,28,-23,38,24,13,41,32,-18,32,27,11,41,31,-17,31,24,11,48,29,-18,38,21,13,48,30,-19,39,23,15,48,31,-20,40,25,13,48,30,-19,39,22,13,41,31,-17,33,25,15,41,32,-17,34,27,17,48,29,-22,39,25,15,48,27,-23,38,23,14,40,29,-19,32,25,16,41,30,-19,33,27,17,47,29,-23,40,24,12,46,24,-23,36,18,13,49,23,-22,39,17,17,50,27,-23,42,21,15,49,31,-20,40,24,10,48,25,-19,36,18,11,50,25,-20,38,17,15,51,28,-20,42,21,11,49,29,-18,38,21,12,51,27,-19,40,19,15,46,27,-23,37,22,15,49,25,-23,40,19,17,41,28,-20,31,29,15,40,28,-19,30,27,14,42,30,-19,33,25,15,42,31,-19,34,26,17,39,29,-18,31,29,16,39,28,-18,30,28,14,40,31,-17,33,26,15,41,31,-17,34,27,16,39,28,-19,29,28,17,39,28,-19,30,29,16,40,28,-19,30,27,17,40,28,-19,31,28,17,41,27,-20,31,28,16,40,26,-20,30,27,18,39,27,-20,30,29,17,39,26,-20,29,28,17,40,26,-21,29,28,18,40,26,-21,30,29,16,39,27,-21,30,27,18,40,27,-21,31,28,17,41,28,-23,31,28,15,41,28,-22,30,27,17,42,27,-23,30,28,16,41,27,-23,30,27,15,41,26,-24,28,26,16,42,26,-24,29,27,15,41,27,-23,29,25,16,41,27,-23,29,27,16,39,28,-22,29,27,15,39,27,-21,28,26,17,40,26,-22,28,28,16,39,25,-22,27,27,16,38,26,-21,27,27,17,39,27,-22,28,28,15,40,26,-21,28,26,16,40,27,-21,29,27,15,40,29,-19,29,28,14,39,28,-19,28,26,16,38,29,-20,28,29,15,38,27,-19,27,27,13,40,32,-18,32,26,11,40,31,-18,31,25,14,38,28,-19,27,27,15,38,29,-19,28,28,13,42,31,-20,32,26,12,42,30,-20,31,24,14,39,27,-20,28,26,16,40,28,-21,28,28,14,39,28,-21,27,26,12,39,26,-21,26,25,9,42,29,-20,30,23,11,42,30,-20,31,24,13,38,29,-19,26,27,12,37,27,-19,25,25,9,40,30,-18,30,23,10,40,31,-18,31,25,13,38,26,-20,25,25,14,38,28,-20,25,27,12,38,27,-20,26,25,13,39,29,-21,27,26,13,41,28,-22,26,27,12,40,27,-22,25,25,14,40,27,-22,24,27,13,40,26,-22,24,26,13,41,26,-22,23,26,14,41,27,-22,24,27,12,40,27,-22,25,25,13,40,28,-22,26,27,12,42,28,-24,25,27,11,41,27,-24,25,25,13,43,28,-25,24,27,12,42,27,-25,24,26,11,41,25,-23,22,25,12,42,26,-23,22,26,10,41,26,-23,23,25,11,41,27,-23,23,26,12,39,27,-22,24,26,11,39,26,-22,24,24,13,40,26,-21,23,26,12,39,25,-21,23,25,12,38,25,-21,23,25,13,39,27,-21,24,26,11,39,26,-22,24,24,12,40,27,-22,25,26,11,39,28,-21,26,25,10,38,27,-21,25,24,12,38,28,-20,25,26,11,37,26,-19,24,24,8,40,30,-18,30,24,7,40,28,-19,29,22,10,37,27,-19,25,24,11,37,28,-19,26,25,9,42,29,-21,30,24,8,41,27,-20,29,22,11,38,26,-21,25,24,12,39,28,-21,26,25,12,39,25,-21,23,25,11,39,26,-22,24,24,12,40,27,-22,24,26,13,39,26,-21,23,26,10,37,27,-19,25,24,10,38,26,-21,25,24,11,38,28,-21,26,25,12,37,28,-19,25,26,14,37,28,-19,26,27,13,39,28,-21,27,27,12,38,27,-20,26,25,12,37,27,-19,25,25,14,40,27,-22,24,27,13,40,28,-22,26,27,12,40,26,-22,25,25,13,40,26,-22,23,26,14,38,28,-19,27,27,14,39,28,-20,28,26,16,40,29,-20,29,28,16,38,29,-19,28,29,16,39,26,-22,27,27,15,39,26,-21,28,26,16,40,27,-22,29,27,17,39,27,-22,28,28,17,39,29,-19,30,29,17,40,28,-19,31,29,16,40,28,-19,30,27,16,39,28,-18,29,28,18,40,27,-21,30,29,18,40,27,-21,31,28,16,40,27,-20,30,27,17,39,26,-21,29,28,9,42,24,-19,31,18,11,42,27,-21,31,20,13,42,25,-23,31,17,11,42,23,-20,31,16,9,39,24,-20,28,19,10,40,26,-21,29,20,12,40,25,-23,29,18,11,39,23,-21,28,17,14,44,26,-23,35,21,10,44,28,-19,33,22,12,47,23,-21,36,16,10,48,24,-20,37,18,11,41,23,-20,30,16,9,41,24,-19,30,18,13,41,25,-23,31,18,11,41,26,-21,31,20,11,38,23,-22,27,17,9,38,25,-21,27,19,12,39,25,-23,29,18,10,39,26,-22,29,20,11,36,26,-24,27,21,12,36,26,-24,27,20,10,35,25,-23,26,21,11,35,24,-24,26,19,9,42,24,-19,31,18,11,42,26,-21,31,20,13,42,25,-22,31,17,11,41,23,-20,30,16,12,39,25,-23,29,18,11,39,23,-21,27,17,10,39,26,-21,29,20,9,39,24,-20,27,19,10,46,26,-20,35,20,8,59,-13,-8,54,-11,4,62,-15,-7,59,-14,10,54,-11,-6,49,-8,1,51,-9,-1,62,-15,6,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,56,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,54,-8,-4,54,-7,11,64,-12,-8,64,-10] }, + { "name": "animation_000017", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,64,-5,-7,65,-2,7,69,6,-3,70,10,2,76,-10,-8,77,-7,6,80,2,-3,81,6,6,66,0,-6,67,4,5,79,-4,-7,81,0,2,60,4,-2,61,6,3,63,11,0,63,12,8,74,5,-4,75,9,2,71,-10,-8,72,-6,7,73,-3,-8,75,1,3,71,12,-3,64,-5,2,82,5,-3,77,-10,0,67,2,0,83,-3,0,60,5,2,63,12,2,76,9,-3,70,-10,7,72,5,-4,74,8,2,67,-8,-8,68,-4,7,70,-1,-8,71,3,2,74,9,-3,67,-7,28,45,7,-30,36,8,29,48,4,-32,39,5,27,52,3,-31,43,4,23,54,3,-28,46,5,20,53,6,-25,46,7,19,49,8,-23,43,10,21,45,10,-24,38,11,25,43,9,-27,35,10,11,25,-22,-9,24,-23,11,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-18,18,36,-17,-19,32,-16,16,31,-14,-16,28,-14,16,41,-18,-18,37,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-13,6,37,-11,-8,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,21,46,-8,-24,41,-7,17,48,-7,-21,44,-6,13,48,-5,-17,44,-3,12,43,-2,-15,40,-1,15,39,0,-16,35,0,19,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,20,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,34,6,30,46,5,-33,37,8,30,48,10,-34,40,11,27,49,13,-31,43,14,23,48,13,-27,43,15,19,47,10,-23,40,13,19,45,5,-22,37,9,22,44,2,-24,35,6,30,36,7,-33,29,14,26,35,4,-29,26,12,31,38,12,-34,32,18,28,39,16,-32,35,21,23,39,16,-27,35,21,20,37,12,-23,33,19,19,36,7,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,6,-29,21,17,31,31,14,-34,27,23,28,32,17,-32,29,25,24,32,18,-27,29,26,20,30,14,-23,27,24,20,29,10,-22,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,31,22,17,-34,20,29,28,23,20,-32,22,31,25,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,52,8,-34,43,9,24,55,9,-30,47,11,21,50,12,-25,43,13,24,45,11,-26,37,12,29,46,8,-32,37,10,25,54,3,-30,46,5,20,53,6,-25,46,8,20,46,7,-23,40,8,25,44,5,-27,36,6,28,49,3,-31,40,4,22,49,2,-26,42,3,29,52,11,-33,42,12,26,53,12,-31,44,14,27,55,8,-32,46,10,29,48,11,-32,38,13,30,49,8,-33,40,10,24,50,13,-28,42,15,23,53,11,-27,45,13,26,47,13,-29,38,14,22,47,12,-25,40,13,27,45,10,-29,36,11,29,47,5,-32,38,7,28,51,5,-32,42,7,28,54,5,-32,45,7,25,55,6,-30,47,8,22,54,8,-27,47,10,21,52,9,-25,44,10,20,48,10,-24,41,11,21,45,9,-24,38,10,24,44,8,-26,36,9,28,44,6,-30,36,8,27,52,2,-31,43,4,22,54,4,-27,47,6,19,49,7,-22,43,8,22,44,6,-24,38,7,26,46,3,-29,38,4,25,49,1,-28,41,3,23,52,2,-28,44,3,20,51,3,-25,44,5,20,47,4,-23,41,5,23,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,2,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,65,-1,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,14,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,55,8,-28,48,1,25,53,9,-27,46,2,23,53,9,-26,46,3,22,55,10,-25,48,5,22,57,10,-26,50,6,23,58,9,-27,51,5,25,58,8,-29,51,3,26,57,8,-29,50,1,22,52,2,-21,49,-1,24,54,1,-23,51,-2,20,52,3,-20,49,0,18,54,4,-19,50,2,18,57,4,-20,53,3,20,59,3,-22,54,2,22,59,2,-23,55,0,24,57,1,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,18,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,18,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,17,52,-4,-13,53,-3,15,54,-3,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,15,52,25,-20,42,18,14,52,25,-19,43,18,13,51,24,-17,43,17,13,50,23,-17,42,16,14,49,23,-17,40,15,16,49,24,-19,39,16,17,50,25,-20,39,17,16,51,26,-21,40,18,26,59,11,-31,50,5,25,59,10,-30,51,5,23,58,9,-28,51,3,23,55,8,-27,49,2,25,54,8,-28,47,1,27,54,9,-29,46,2,28,55,11,-31,47,3,28,57,11,-32,48,4,17,54,21,-22,45,14,18,54,22,-23,44,15,16,53,20,-20,45,13,16,51,19,-20,44,12,17,50,19,-20,42,12,19,50,20,-22,41,12,20,51,21,-23,41,13,20,53,22,-24,42,14,22,58,13,-27,50,8,24,58,14,-29,48,8,21,57,12,-26,50,6,21,54,11,-25,48,4,23,52,11,-25,46,3,25,52,12,-27,44,4,26,53,13,-29,45,5,26,56,14,-30,46,7,24,59,11,-29,51,6,26,59,12,-31,50,6,22,57,10,-27,50,5,23,55,9,-26,49,3,24,53,9,-27,47,2,26,53,10,-29,46,2,27,55,11,-30,46,3,27,57,12,-32,48,5,30,14,15,-32,14,32,31,14,23,-34,14,39,24,14,24,-28,14,41,23,14,17,-26,15,33,35,2,24,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,23,4,15,-25,5,31,25,2,31,-29,2,47,25,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,29,29,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,33,4,17,-35,4,33,22,4,17,-25,5,34,29,8,30,-33,9,46,34,7,29,-38,8,44,36,2,28,-40,2,43,25,7,31,-29,7,48,25,2,31,-29,2,48,31,6,38,-35,6,54,27,5,37,-32,6,53,36,5,34,-40,5,50,37,2,35,-41,2,50,27,2,38,-32,2,54,31,2,38,-35,2,54,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,0,31,-29,0,48,36,0,28,-40,0,43,29,0,30,-33,0,46,27,0,17,-29,0,34,22,0,17,-25,0,34,33,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,25,0,31,-29,0,47,22,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,31,2,38,-35,2,54,27,2,38,-32,2,54,37,2,35,-41,2,50,27,0,38,-32,0,54,31,0,38,-35,0,54,37,0,35,-41,0,50,25,2,31,-29,2,48,25,0,31,-29,0,48,36,2,28,-40,2,43,36,0,28,-40,0,43,22,4,17,-25,5,34,33,4,17,-35,4,33,22,0,17,-25,0,34,33,0,17,-35,0,33,25,4,12,-28,5,29,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,25,0,31,-29,0,47,25,2,31,-29,2,47,23,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,24,-38,2,39,22,0,14,-25,0,31,23,0,21,-26,0,38,35,0,24,-38,0,39,30,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,15,40,26,-16,31,24,13,39,24,-16,29,21,13,47,23,-19,36,18,16,47,25,-19,37,21,12,40,28,-13,31,23,11,40,25,-14,30,20,11,47,25,-16,36,17,12,47,28,-15,38,19,13,47,29,-15,39,21,11,47,27,-15,38,19,12,40,27,-13,31,21,14,40,29,-12,32,24,17,48,26,-19,37,23,14,47,24,-19,36,20,15,40,25,-16,30,22,17,40,27,-16,31,25,18,41,27,-15,32,26,17,41,26,-15,31,24,16,48,25,-19,37,21,17,48,27,-19,38,23,17,41,29,-13,33,25,15,40,28,-12,32,23,12,47,28,-15,39,20,14,48,30,-15,40,22,17,48,30,-16,40,24,14,47,30,-15,40,21,17,41,28,-12,34,23,19,42,29,-12,35,26,17,49,28,-18,39,24,16,49,26,-19,38,22,18,42,26,-14,32,24,19,43,27,-14,34,26,18,49,28,-19,40,24,13,47,23,-19,36,18,13,50,23,-20,39,17,17,51,27,-20,42,21,16,49,30,-17,41,23,11,47,25,-16,37,17,11,50,25,-17,39,16,15,52,29,-18,42,20,12,48,28,-15,39,20,12,51,27,-16,41,18,16,47,25,-20,37,22,15,51,25,-20,40,19,20,43,25,-14,32,27,19,42,24,-13,31,26,17,43,27,-14,33,24,18,43,28,-14,34,25,21,42,25,-12,32,28,19,41,25,-12,31,26,18,41,28,-12,34,24,19,42,28,-12,35,26,20,42,24,-13,30,27,21,42,25,-13,31,28,19,42,24,-13,31,26,20,43,25,-13,32,27,20,44,24,-14,31,28,19,43,23,-14,31,26,21,43,23,-14,30,28,20,42,23,-14,30,27,20,43,23,-14,29,27,20,44,23,-15,30,28,20,42,23,-15,30,27,21,43,24,-15,31,28,19,44,25,-17,30,28,19,43,25,-17,30,27,19,44,25,-16,30,28,18,44,24,-16,29,27,18,44,23,-18,27,26,19,45,24,-18,27,28,18,43,24,-17,28,26,19,44,25,-18,28,27,20,42,24,-16,29,27,19,42,23,-16,28,26,20,43,23,-16,27,28,19,43,22,-15,27,26,19,42,22,-15,27,26,20,42,23,-15,28,28,18,43,23,-15,28,26,19,43,24,-16,29,27,19,42,25,-14,30,27,18,41,24,-14,29,25,20,41,25,-13,28,27,19,40,24,-13,27,26,17,40,28,-13,33,25,16,40,27,-12,32,23,18,40,24,-12,28,25,20,40,25,-12,29,27,16,42,28,-15,33,25,15,42,27,-15,32,23,18,42,24,-14,28,25,19,42,25,-14,29,27,18,40,24,-15,27,26,16,40,23,-15,26,24,13,41,26,-15,31,22,14,42,28,-15,32,24,18,38,25,-13,27,26,16,38,24,-13,26,24,13,39,27,-13,31,22,14,39,28,-12,31,24,17,39,23,-13,25,24,18,39,24,-13,26,26,16,39,24,-14,27,24,17,39,25,-14,27,25,17,42,24,-16,26,26,16,41,23,-16,26,24,18,41,23,-15,25,26,17,41,22,-15,24,25,17,42,22,-16,24,25,18,42,23,-16,25,27,16,41,23,-16,26,24,17,41,24,-16,26,26,16,42,25,-18,26,26,15,42,24,-18,26,25,16,44,24,-19,25,26,15,43,24,-19,25,25,14,42,22,-17,22,25,15,43,23,-17,23,26,14,41,23,-17,23,24,14,42,24,-17,23,25,16,40,24,-16,25,25,15,40,23,-16,24,24,16,41,23,-15,24,26,15,41,22,-15,23,24,16,40,22,-15,24,24,17,40,23,-15,24,25,14,40,23,-16,24,23,15,41,24,-16,25,25,15,39,25,-15,26,25,14,39,23,-15,26,23,17,39,24,-14,26,25,15,38,22,-14,25,23,12,39,27,-13,31,23,11,39,26,-14,30,21,15,37,23,-14,26,23,16,38,25,-13,27,24,13,41,27,-15,31,23,11,40,25,-15,30,21,15,39,23,-15,26,23,16,39,24,-15,27,24,16,40,22,-15,23,24,15,40,23,-16,24,24,16,40,24,-16,25,25,17,41,23,-15,24,25,15,38,23,-14,25,23,15,39,23,-15,26,23,16,39,24,-15,27,24,16,38,24,-13,26,25,18,39,24,-13,26,26,18,40,25,-14,27,26,16,39,23,-14,26,24,17,38,23,-13,26,24,18,42,23,-16,25,27,17,41,24,-16,26,26,16,41,23,-16,26,24,17,41,22,-16,24,25,19,40,24,-13,28,26,18,41,24,-14,28,25,19,42,25,-14,29,27,20,40,25,-13,29,27,19,42,22,-15,27,26,19,42,23,-16,28,26,20,43,24,-16,29,27,20,43,23,-15,27,28,21,42,25,-12,31,28,20,43,25,-13,32,27,19,42,24,-13,31,26,20,41,24,-12,30,27,21,43,23,-14,30,28,21,43,24,-15,31,28,20,43,23,-15,30,27,20,43,23,-14,30,27,12,43,22,-15,32,17,13,43,24,-17,32,19,15,44,22,-19,31,17,13,44,21,-16,32,15,13,40,21,-15,29,18,14,40,23,-17,30,19,15,41,22,-18,29,18,14,41,20,-17,28,16,15,46,24,-19,35,21,12,44,27,-15,34,21,13,49,22,-18,37,15,11,48,24,-17,37,17,13,42,20,-16,30,16,12,42,22,-15,30,17,15,43,22,-18,31,17,14,42,24,-17,31,19,14,40,20,-17,27,17,13,39,21,-16,28,18,16,40,22,-18,29,18,14,40,23,-17,29,19,16,37,22,-18,27,20,16,38,21,-19,27,19,15,37,21,-18,26,20,16,37,20,-19,26,19,12,42,22,-15,31,17,14,42,24,-17,31,19,15,43,22,-18,31,17,13,43,20,-16,31,15,16,41,22,-18,29,18,14,40,20,-17,28,16,14,40,23,-17,29,19,13,40,21,-15,28,18,12,46,26,-17,36,19,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000018", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,64,-5,-7,65,-2,7,69,6,-3,70,10,2,75,-10,-7,77,-7,7,80,3,-2,81,6,6,66,0,-6,68,4,6,79,-4,-6,81,0,2,60,4,-2,61,6,3,62,11,0,63,12,8,74,5,-3,76,9,2,70,-10,-8,72,-6,7,73,-3,-8,75,1,3,70,12,-3,64,-5,2,82,5,-2,77,-10,0,67,2,0,83,-3,0,60,5,2,63,12,3,76,9,-3,71,-10,8,72,5,-3,74,8,2,67,-8,-8,68,-4,7,69,-1,-7,71,3,3,74,9,-3,67,-7,28,44,6,-30,36,8,29,48,4,-31,39,6,27,52,2,-31,44,4,24,54,3,-28,46,5,21,53,5,-25,46,7,20,49,8,-23,43,10,22,45,10,-24,38,11,25,43,9,-26,35,10,11,25,-22,-9,24,-23,11,29,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,5,40,-19,-7,40,-18,4,35,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-7,25,-18,18,36,-17,-19,32,-16,17,31,-14,-16,28,-14,16,41,-18,-18,38,-17,11,43,-17,-14,41,-16,8,42,-14,-10,41,-13,6,37,-11,-7,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,23,38,-4,-23,32,-3,21,46,-8,-24,41,-6,17,48,-7,-21,44,-5,14,48,-5,-17,44,-3,13,43,-2,-15,40,-1,15,39,0,-15,35,0,19,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,20,-34,15,35,29,16,23,-32,17,37,26,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,27,45,1,-29,34,6,30,46,5,-33,37,8,31,48,9,-34,40,12,28,49,13,-31,43,14,24,48,13,-27,43,15,20,47,10,-23,40,13,19,45,5,-22,37,9,22,44,1,-24,35,6,30,36,7,-33,29,14,27,35,4,-29,27,12,31,38,12,-34,32,18,28,39,15,-32,35,21,24,39,16,-27,35,21,20,37,12,-23,33,19,19,36,7,-22,29,15,22,35,4,-24,27,12,31,29,9,-33,23,19,27,28,6,-29,21,17,31,31,14,-34,27,23,28,32,17,-32,29,25,24,32,17,-27,29,26,20,30,14,-23,27,24,20,29,10,-22,24,20,23,28,6,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,31,22,17,-34,20,29,29,23,20,-32,22,31,25,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,19,11,-26,16,25,28,50,12,-30,41,14,30,52,7,-33,43,10,25,55,9,-29,47,11,22,50,12,-25,43,13,25,45,11,-26,37,12,30,46,8,-31,37,10,26,54,3,-30,46,5,21,53,6,-24,46,8,20,46,7,-22,40,8,25,44,5,-26,36,6,28,49,2,-31,40,4,22,49,1,-25,42,3,30,51,10,-33,42,13,27,53,12,-30,44,14,28,55,8,-32,46,10,29,48,11,-31,39,13,31,49,8,-33,40,10,25,50,13,-28,42,15,23,53,11,-27,45,13,27,47,12,-28,38,14,23,47,12,-25,40,14,28,45,10,-29,36,11,29,47,5,-31,38,7,29,51,5,-32,42,7,28,54,5,-32,45,7,25,55,6,-30,47,9,23,54,8,-27,47,10,22,52,8,-25,44,10,21,48,9,-23,41,11,22,45,9,-24,38,11,25,44,8,-26,36,9,28,44,6,-29,36,8,27,52,2,-31,43,4,23,54,4,-27,47,6,19,50,6,-22,43,8,22,44,5,-24,38,7,27,46,3,-29,38,5,25,48,1,-28,41,3,24,52,1,-27,44,4,21,51,3,-24,44,5,21,47,4,-23,41,5,23,46,2,-25,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,2,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,0,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,14,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-9,-14,60,-5,19,57,-9,-15,59,-7,27,55,8,-28,48,1,25,53,8,-27,46,2,23,53,9,-26,46,3,22,55,10,-25,48,5,22,57,10,-26,50,6,23,58,9,-27,51,5,25,58,8,-29,51,3,27,57,8,-29,50,1,23,52,2,-21,49,-1,24,54,1,-23,51,-2,20,52,3,-20,49,0,18,54,4,-19,50,2,18,57,4,-20,53,3,20,59,3,-22,54,2,23,59,2,-23,55,0,24,57,1,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,18,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,18,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,17,52,-4,-13,53,-3,15,54,-3,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,16,52,25,-20,42,18,14,52,25,-19,43,18,13,51,24,-18,43,17,14,50,23,-17,42,16,15,49,23,-17,40,15,16,49,24,-19,39,16,17,50,25,-20,39,17,17,51,26,-21,40,18,27,59,11,-31,50,5,25,59,10,-30,51,5,23,58,9,-28,51,3,24,55,8,-27,49,2,25,54,8,-28,47,1,27,54,9,-29,46,2,28,55,10,-31,47,3,28,57,11,-32,48,4,17,54,21,-22,45,14,19,54,22,-23,44,15,16,53,20,-20,45,13,16,51,19,-20,44,12,17,50,19,-20,42,12,19,50,20,-22,41,12,20,51,21,-23,41,13,20,53,22,-24,42,14,22,58,13,-27,50,8,24,58,14,-29,48,8,21,57,11,-26,50,6,21,54,11,-25,48,4,23,52,11,-25,46,3,25,52,12,-27,44,4,26,54,13,-29,45,5,26,56,14,-30,46,7,24,59,11,-29,51,6,26,59,12,-31,50,6,22,57,10,-27,50,5,23,55,9,-26,49,3,24,53,9,-27,47,2,26,53,10,-29,46,2,28,55,11,-30,46,3,28,57,12,-32,48,5,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,14,40,27,-16,31,24,12,40,25,-16,29,21,14,47,23,-19,36,18,16,47,25,-19,37,21,12,40,28,-13,31,23,10,40,26,-14,30,21,11,47,25,-16,36,17,12,48,28,-15,38,19,13,48,29,-15,39,21,11,48,27,-15,38,19,12,40,28,-13,31,21,13,40,29,-13,32,24,17,47,26,-19,37,23,15,47,25,-19,36,20,14,40,26,-16,30,22,16,40,27,-16,31,25,18,41,28,-15,32,26,16,40,26,-15,31,24,16,48,25,-19,37,21,17,48,27,-19,38,23,16,41,30,-13,33,25,14,40,29,-12,32,23,12,48,29,-15,39,20,15,48,30,-16,39,22,17,48,30,-16,40,24,14,48,30,-16,40,21,16,41,29,-12,34,24,18,42,30,-12,35,26,18,49,28,-18,39,24,16,49,26,-19,38,22,17,41,26,-14,32,24,19,42,28,-14,34,26,18,48,28,-19,40,24,14,47,23,-19,36,18,13,50,23,-20,39,17,17,51,27,-20,42,21,16,49,30,-17,41,23,11,48,25,-16,37,17,11,50,25,-17,39,16,15,52,28,-18,42,20,12,48,29,-15,39,20,13,51,27,-16,41,18,17,47,26,-20,37,22,16,51,25,-20,40,19,20,40,27,-14,32,28,19,40,26,-14,31,26,17,42,27,-14,33,24,18,43,28,-14,34,25,20,40,28,-13,32,28,19,39,27,-12,31,26,17,41,29,-12,33,24,18,42,29,-13,34,26,20,38,26,-13,30,27,21,39,27,-13,31,28,19,40,26,-13,31,26,21,40,27,-14,32,27,21,40,25,-15,32,27,20,39,25,-15,31,26,22,39,26,-15,31,28,21,38,25,-14,30,27,21,39,25,-15,30,27,22,39,25,-15,31,28,20,39,25,-15,31,26,21,40,26,-15,31,27,21,41,25,-17,31,27,20,41,24,-17,30,26,21,41,24,-17,30,28,20,40,24,-17,30,27,20,37,23,-18,27,26,21,37,24,-18,28,27,20,38,24,-18,28,26,21,38,25,-18,29,27,20,37,26,-16,29,27,19,37,25,-16,28,26,21,36,25,-16,27,28,20,36,24,-16,27,26,19,36,25,-15,27,26,20,36,26,-15,28,28,19,37,25,-16,28,25,20,37,26,-16,29,27,19,38,27,-14,30,27,18,38,26,-14,29,25,19,37,28,-13,28,28,18,36,27,-13,27,26,16,40,30,-13,32,25,15,40,28,-13,32,24,17,37,27,-13,28,26,18,37,28,-13,29,27,17,42,28,-15,33,25,16,41,27,-15,32,23,18,38,26,-15,28,26,19,38,27,-15,29,27,17,36,27,-15,27,26,15,36,25,-15,26,24,13,41,26,-15,31,22,15,41,27,-15,32,24,15,36,28,-13,27,26,14,35,27,-13,26,24,12,39,28,-13,31,22,13,40,29,-13,31,24,15,34,26,-14,25,24,16,35,28,-14,26,26,15,36,26,-15,27,24,17,36,27,-15,27,25,18,35,26,-16,26,26,17,35,25,-17,26,24,17,34,26,-16,25,26,16,33,25,-16,24,25,17,33,25,-17,24,25,18,33,26,-17,25,27,17,35,24,-16,26,24,18,35,26,-16,26,26,19,34,24,-18,26,26,19,34,23,-19,26,25,20,33,24,-19,25,26,19,33,23,-19,25,25,16,32,24,-17,22,25,17,32,25,-17,22,26,16,33,24,-18,23,25,17,33,25,-18,23,26,16,35,25,-16,25,25,15,34,24,-16,24,24,16,33,26,-15,24,26,15,33,25,-15,23,24,14,34,25,-15,24,24,15,34,26,-15,24,25,15,35,24,-16,24,24,16,35,26,-16,25,25,15,36,26,-16,26,25,14,36,25,-16,26,23,14,35,27,-14,26,25,13,35,26,-14,25,23,11,40,28,-13,31,23,10,39,26,-14,30,21,12,36,26,-14,26,23,13,36,27,-14,27,24,13,41,27,-16,31,23,11,40,25,-16,30,21,13,36,25,-16,26,23,15,37,26,-16,27,24,14,33,25,-15,23,24,15,34,24,-16,24,24,16,35,26,-16,25,25,15,34,26,-15,24,26,13,35,26,-14,25,23,13,36,25,-15,26,23,15,36,26,-15,27,25,14,36,27,-14,26,25,16,35,28,-13,26,26,16,36,27,-15,27,26,15,36,26,-15,26,24,14,35,27,-13,26,24,18,33,26,-16,25,27,18,35,26,-16,26,26,17,35,25,-16,26,24,17,33,25,-16,24,25,17,36,27,-13,28,26,18,38,26,-14,28,25,19,38,27,-14,29,27,19,37,28,-13,28,27,19,35,25,-16,27,26,19,37,25,-16,28,26,20,37,26,-16,29,27,20,36,26,-16,28,28,21,39,27,-13,31,28,21,40,27,-14,32,28,19,40,26,-13,31,26,19,39,27,-13,30,27,22,39,25,-15,31,28,21,40,26,-15,32,27,20,39,25,-15,31,26,21,38,25,-15,30,27,11,43,23,-15,32,17,13,43,25,-17,32,19,15,44,23,-19,31,17,13,43,21,-16,32,15,12,40,22,-15,29,18,13,40,24,-17,30,19,15,41,23,-18,29,18,14,40,21,-17,28,16,15,46,25,-19,35,21,12,44,27,-15,34,21,13,49,22,-19,37,15,11,48,24,-17,37,17,13,42,21,-17,30,16,12,42,22,-15,30,17,15,42,23,-19,31,17,13,42,24,-17,31,19,14,40,21,-17,27,17,12,39,22,-16,28,18,15,40,23,-19,29,18,14,39,24,-17,29,19,15,37,23,-19,27,20,16,37,22,-20,27,20,14,36,22,-18,26,20,15,37,21,-19,26,19,12,42,23,-15,31,17,13,42,25,-17,31,19,15,43,23,-19,31,17,13,43,21,-16,31,15,15,40,23,-18,29,18,14,40,21,-17,28,17,14,40,24,-17,29,19,12,39,22,-16,28,18,12,46,26,-17,36,19,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000019", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-2,7,69,6,-3,70,10,2,75,-10,-7,77,-7,7,80,3,-2,81,6,6,66,0,-6,68,4,6,79,-4,-6,81,0,2,60,4,-2,61,6,3,62,11,0,63,12,8,74,5,-3,76,9,2,70,-10,-8,72,-6,7,73,-3,-7,75,1,3,70,12,-3,64,-5,3,82,5,-2,77,-10,0,67,2,0,83,-3,0,60,5,2,63,12,3,76,9,-3,71,-10,8,72,5,-3,74,8,2,67,-8,-8,68,-4,7,69,-1,-7,71,3,3,74,9,-3,67,-7,28,44,7,-30,36,8,29,48,4,-31,39,6,27,52,2,-31,44,4,23,54,3,-28,46,5,20,53,5,-25,46,7,20,49,8,-23,43,10,22,45,10,-23,38,11,25,43,9,-26,35,10,11,25,-22,-9,24,-23,11,29,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-7,25,-18,18,36,-17,-19,32,-16,16,31,-14,-16,28,-14,16,41,-18,-18,38,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-13,6,37,-11,-7,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,21,46,-8,-24,41,-6,17,48,-7,-20,44,-5,14,48,-5,-17,44,-3,12,43,-2,-15,40,-1,15,39,0,-15,35,0,19,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,20,-34,15,35,29,16,23,-32,17,37,26,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,35,6,30,46,5,-32,37,8,30,48,9,-33,40,12,28,49,13,-31,43,14,23,48,13,-27,43,15,20,47,10,-23,40,13,19,45,5,-22,37,9,22,44,2,-24,35,6,30,36,7,-33,29,14,26,35,4,-29,27,12,31,38,12,-34,33,18,28,39,16,-31,35,21,23,39,16,-27,35,21,20,37,12,-23,33,19,19,36,7,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,6,-29,21,17,31,31,14,-34,27,23,28,32,17,-31,29,25,24,32,18,-27,29,26,20,30,14,-23,27,24,20,29,10,-22,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,16,25,31,22,17,-34,20,29,28,23,20,-32,22,32,25,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,19,11,-26,16,25,28,50,13,-30,41,15,30,52,7,-33,43,10,25,55,9,-29,47,11,22,50,12,-25,43,13,24,45,11,-26,37,12,29,46,8,-31,37,10,25,54,3,-30,46,6,20,53,6,-24,46,8,20,46,7,-22,40,8,25,44,5,-26,37,6,28,49,3,-31,40,4,22,49,2,-25,42,3,29,52,11,-33,42,13,26,53,12,-30,44,14,28,55,8,-32,46,11,29,48,11,-31,39,13,30,49,8,-33,40,10,25,50,13,-27,42,15,23,53,11,-27,45,13,26,47,13,-28,39,14,23,47,12,-25,40,14,27,45,10,-29,36,12,29,47,5,-31,38,7,28,51,5,-32,42,7,28,54,5,-32,45,7,25,55,6,-30,47,9,22,54,8,-27,47,10,21,52,9,-25,44,10,21,48,10,-23,41,11,22,45,9,-23,38,11,25,44,8,-26,36,9,28,44,6,-29,36,8,27,52,2,-31,43,4,22,54,4,-27,47,6,19,50,6,-22,43,8,22,44,6,-24,38,7,27,46,3,-29,38,5,25,49,1,-28,41,3,23,52,2,-27,44,4,20,51,3,-24,44,5,20,47,4,-23,41,5,23,46,2,-25,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,2,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,0,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,55,8,-28,48,1,25,53,9,-27,46,2,23,53,10,-26,46,3,21,55,10,-25,48,5,21,57,10,-26,50,6,23,58,9,-27,51,5,25,58,9,-29,51,3,26,57,8,-29,50,1,22,52,2,-21,49,-1,24,54,1,-23,51,-2,20,52,3,-20,49,0,18,54,4,-19,50,2,18,57,4,-20,53,3,20,59,3,-22,54,2,22,59,2,-23,55,0,24,57,1,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,18,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,18,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,17,52,-4,-13,53,-3,15,54,-3,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,15,52,25,-21,41,18,14,52,25,-19,42,18,13,51,24,-18,42,17,13,50,23,-17,41,16,14,49,23,-18,40,16,15,49,24,-19,39,16,16,50,25,-21,39,17,16,51,26,-21,40,18,26,59,11,-31,50,5,24,59,10,-30,51,5,23,58,9,-28,51,3,23,55,9,-27,49,2,25,54,9,-28,47,1,27,54,10,-29,46,2,27,55,11,-31,47,3,27,57,12,-32,48,4,16,54,21,-22,45,15,18,54,22,-23,44,15,15,53,20,-21,45,14,16,51,19,-20,43,12,17,50,19,-20,42,12,18,50,20,-22,41,12,19,51,21,-23,41,13,19,53,22,-24,42,14,22,58,13,-27,50,8,24,58,14,-29,48,8,21,57,12,-26,50,6,21,54,11,-25,48,4,23,52,11,-25,46,3,25,52,12,-27,44,4,25,53,13,-29,45,5,25,56,14,-30,46,7,23,59,11,-29,51,6,26,59,12,-31,50,6,22,57,10,-27,50,5,22,55,10,-26,49,3,24,53,9,-27,47,2,26,53,10,-29,46,2,27,55,11,-30,46,3,27,57,12,-32,48,5,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,13,40,27,-17,30,24,11,40,25,-17,29,22,13,47,23,-20,35,18,15,47,25,-20,37,21,10,40,28,-14,31,23,9,40,26,-15,30,21,10,48,25,-16,36,18,11,48,28,-15,37,20,12,48,29,-16,38,21,10,48,27,-16,37,19,10,40,27,-14,31,22,12,40,29,-13,31,24,16,47,26,-20,37,23,14,47,25,-20,36,20,13,40,26,-17,30,23,15,40,27,-17,31,25,16,41,28,-16,32,26,15,40,26,-16,31,24,15,47,25,-20,37,22,16,48,27,-19,38,23,15,40,30,-14,33,26,13,40,29,-13,32,23,11,48,29,-16,38,20,13,48,30,-16,39,22,16,48,30,-17,40,24,13,48,30,-16,39,22,15,41,29,-13,33,24,17,41,30,-13,34,26,17,49,28,-19,39,25,15,49,26,-20,38,22,16,41,26,-15,32,25,18,42,28,-15,34,27,17,48,28,-20,40,24,13,47,23,-20,36,18,13,50,23,-20,38,17,16,51,27,-20,42,21,15,49,30,-17,41,24,10,48,25,-17,36,17,10,51,25,-17,39,16,15,52,29,-18,42,21,11,48,29,-15,38,20,12,51,27,-17,41,18,16,47,26,-20,37,22,15,51,25,-21,40,19,19,39,28,-15,31,28,18,39,27,-15,30,27,16,41,27,-15,33,24,17,42,28,-15,34,26,19,39,29,-14,31,28,17,38,28,-13,30,27,16,41,29,-13,33,25,17,41,29,-13,34,26,18,37,28,-14,30,27,19,38,29,-14,31,28,18,38,27,-14,31,26,19,39,28,-14,32,28,20,38,27,-16,31,28,19,37,26,-16,31,27,20,37,28,-16,30,28,19,37,27,-15,30,27,19,36,27,-16,30,27,20,37,27,-16,30,28,19,37,27,-16,31,27,20,38,27,-16,31,28,21,38,26,-18,31,27,20,38,25,-18,30,26,21,37,26,-18,30,28,20,37,25,-18,30,27,19,34,24,-19,27,26,20,34,25,-19,27,28,18,35,24,-19,28,26,19,35,25,-19,28,27,18,36,27,-17,29,27,17,35,26,-17,28,26,18,34,27,-17,27,28,17,34,26,-17,26,27,17,34,27,-16,27,27,18,34,28,-16,27,28,17,35,26,-17,28,26,18,36,27,-17,29,27,17,37,28,-15,29,27,16,37,26,-15,29,26,17,36,29,-15,28,28,15,35,28,-14,27,26,15,40,30,-14,32,26,13,40,29,-14,31,24,15,36,28,-14,28,26,16,36,29,-14,29,28,16,41,28,-16,32,25,14,41,27,-16,32,24,16,37,26,-16,28,26,17,37,28,-16,29,27,15,36,27,-16,27,26,14,36,25,-16,26,24,12,41,26,-16,31,22,13,41,27,-16,31,24,14,35,28,-14,27,26,13,35,27,-14,26,24,11,39,28,-14,30,22,12,40,29,-14,31,24,13,34,26,-15,25,25,14,35,28,-15,26,26,14,36,25,-16,26,24,15,36,27,-16,27,26,16,34,26,-17,26,26,15,34,25,-17,25,25,16,33,27,-17,25,27,15,33,26,-17,24,25,15,33,25,-18,24,25,16,33,26,-18,25,27,15,34,25,-17,25,25,17,34,26,-17,26,26,18,33,25,-19,26,26,17,33,24,-19,26,25,18,32,25,-20,25,26,17,32,24,-20,25,25,14,32,24,-18,22,25,15,32,25,-18,22,26,15,33,24,-19,23,25,15,33,25,-19,23,26,14,34,26,-18,24,25,13,34,24,-18,24,24,14,33,26,-17,23,26,13,33,25,-17,23,24,12,33,25,-16,23,24,13,34,27,-16,24,26,13,34,24,-17,24,24,14,35,26,-17,25,25,13,36,26,-17,26,25,12,36,25,-17,25,23,12,35,27,-15,25,25,11,35,26,-15,25,23,10,40,28,-14,30,23,9,40,26,-15,30,21,11,36,26,-15,26,23,12,36,27,-15,26,25,11,41,27,-16,31,23,10,40,25,-16,30,21,12,36,25,-17,26,23,13,37,26,-16,26,25,13,33,25,-16,23,24,13,34,24,-17,24,24,14,35,26,-17,25,25,14,33,26,-16,24,26,11,35,26,-15,25,23,12,36,25,-16,26,23,13,36,26,-16,26,25,12,35,27,-15,26,25,14,35,28,-14,26,26,15,36,27,-16,27,26,14,36,25,-16,26,24,13,35,27,-14,25,25,16,33,27,-17,25,27,16,34,26,-17,26,26,15,34,25,-17,25,25,15,33,25,-17,24,25,15,36,28,-14,27,26,16,37,27,-15,28,26,17,37,28,-15,29,27,17,36,29,-14,28,28,17,34,26,-17,27,27,17,35,26,-17,28,26,18,36,27,-17,29,27,18,34,27,-17,27,28,19,38,29,-14,31,28,19,39,28,-15,32,28,18,38,27,-14,31,27,18,38,28,-14,30,27,20,37,28,-16,30,28,20,38,27,-16,31,28,19,37,27,-16,31,27,19,36,27,-16,30,27,10,43,23,-16,32,17,12,43,25,-18,31,19,14,43,23,-19,31,17,12,43,21,-17,31,16,11,40,22,-16,28,18,12,40,24,-18,29,19,14,41,23,-19,29,18,13,40,21,-18,28,16,14,46,25,-20,35,21,11,44,27,-16,34,21,12,49,22,-19,37,16,10,48,24,-17,37,17,12,42,21,-17,30,16,11,42,22,-16,30,18,14,42,23,-19,30,17,12,42,24,-18,31,19,13,40,21,-18,27,17,11,39,22,-17,27,19,14,40,23,-19,29,18,12,39,24,-18,29,20,13,37,23,-19,27,21,14,37,22,-20,27,20,13,36,22,-19,26,20,14,37,21,-20,26,19,10,42,22,-16,31,17,12,42,25,-18,31,19,14,43,23,-19,31,17,12,43,21,-17,31,16,14,40,23,-19,29,18,13,40,21,-18,28,17,12,40,24,-18,29,19,11,39,22,-16,28,18,11,46,26,-17,35,19,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000020", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-2,7,69,6,-3,70,10,2,75,-10,-7,77,-7,7,80,3,-2,81,6,6,66,0,-6,68,4,6,79,-4,-6,81,0,2,60,4,-2,61,6,3,62,11,0,63,12,8,74,5,-3,76,9,2,70,-10,-8,72,-6,7,73,-3,-7,75,1,3,70,12,-3,64,-5,3,82,5,-2,77,-10,0,67,2,0,83,-3,0,60,5,2,63,12,3,76,9,-3,71,-10,8,72,5,-3,74,8,2,67,-8,-8,68,-4,7,69,-1,-7,71,3,3,74,9,-3,67,-7,28,45,7,-30,36,8,29,48,4,-31,39,6,27,52,2,-31,44,4,23,54,3,-28,46,5,20,53,6,-24,46,7,20,49,8,-23,43,10,22,45,10,-23,38,11,25,43,9,-26,35,10,11,25,-22,-9,24,-23,11,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-4,35,-14,6,28,-13,-5,28,-13,9,25,-17,-7,25,-18,18,36,-17,-19,32,-16,16,31,-14,-16,28,-14,16,41,-18,-18,38,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-13,6,37,-11,-7,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,21,46,-8,-24,41,-6,17,48,-7,-20,44,-5,13,48,-5,-17,44,-3,12,43,-2,-15,40,-1,15,39,0,-15,35,0,19,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,20,-34,15,35,29,16,23,-32,17,37,26,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,35,6,30,46,5,-32,37,8,30,48,10,-33,40,12,28,49,13,-31,43,14,23,48,13,-27,43,15,20,47,10,-23,40,13,19,45,5,-22,37,9,22,44,2,-24,35,6,30,36,7,-33,29,14,26,35,4,-29,27,12,31,38,12,-34,33,18,28,39,16,-31,35,21,23,39,16,-27,35,21,20,37,12,-23,33,19,19,36,7,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,6,-29,21,17,31,31,14,-34,27,23,28,32,17,-31,29,26,24,32,18,-27,29,26,20,30,14,-23,27,24,20,29,10,-22,24,20,22,28,7,-25,21,18,30,21,14,-33,18,26,27,20,11,-30,16,25,31,22,17,-34,20,29,28,23,20,-32,22,32,25,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-30,41,15,30,52,8,-33,43,10,24,55,9,-29,47,11,21,50,12,-25,43,14,24,45,11,-26,37,12,29,46,8,-31,37,10,25,54,3,-29,46,6,20,53,6,-24,46,8,20,46,7,-22,40,8,25,44,5,-26,37,6,28,49,3,-31,40,4,22,49,2,-25,42,3,29,52,11,-32,42,13,26,53,12,-30,44,14,27,55,8,-32,46,11,29,48,11,-31,39,13,30,49,8,-33,40,10,24,50,13,-27,42,15,23,53,11,-27,45,13,26,47,13,-28,39,14,23,47,12,-25,40,14,27,45,10,-29,36,12,29,47,5,-31,38,7,28,51,5,-32,42,7,28,54,5,-32,45,7,25,55,6,-30,47,9,22,54,8,-26,47,10,21,52,9,-25,45,11,20,48,10,-23,41,11,22,45,9,-23,38,11,24,44,8,-26,36,9,28,44,6,-29,36,8,27,52,2,-31,43,4,22,54,4,-27,47,6,19,50,6,-22,43,8,22,44,6,-24,38,7,27,46,3,-29,38,5,25,49,1,-28,41,3,23,52,2,-27,45,4,20,51,3,-24,44,5,20,47,4,-23,41,5,23,46,3,-25,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,2,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,0,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,55,8,-28,48,1,25,53,9,-27,46,2,23,53,10,-26,46,3,21,55,10,-25,48,5,21,57,10,-26,50,6,23,58,9,-27,51,5,25,58,9,-29,51,3,26,57,8,-29,50,1,22,52,2,-21,49,-1,24,54,1,-23,51,-2,20,52,3,-20,49,0,18,54,4,-19,50,2,18,57,4,-20,53,3,20,59,3,-22,54,2,22,59,2,-23,55,0,24,57,1,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,18,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,18,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,17,52,-4,-13,53,-3,15,54,-3,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,15,52,25,-21,41,19,14,52,25,-20,42,19,13,52,24,-19,42,18,13,50,23,-18,41,17,14,49,23,-19,40,16,15,49,24,-20,39,16,16,50,25,-21,39,17,16,51,26,-22,40,18,26,59,11,-31,50,5,24,59,10,-30,51,5,23,58,9,-28,51,4,23,55,9,-27,49,2,25,54,9,-27,47,1,26,54,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,16,54,21,-23,44,15,18,54,22,-24,43,15,15,53,20,-21,44,14,15,51,19,-20,43,13,17,50,19,-21,42,12,18,50,20,-22,41,12,19,51,21,-24,41,13,19,53,22,-25,42,14,22,58,13,-28,50,8,24,58,14,-29,48,8,21,57,12,-26,49,6,21,54,11,-25,48,5,23,52,11,-25,46,4,24,52,12,-27,44,4,25,54,13,-29,45,5,25,56,14,-30,46,7,23,59,11,-29,51,6,25,59,12,-31,50,6,22,57,10,-27,50,5,22,55,10,-26,49,3,24,53,9,-27,47,2,26,53,10,-29,46,2,27,55,11,-30,46,3,27,57,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,12,40,27,-19,30,24,10,40,25,-18,29,22,13,47,23,-21,35,19,15,47,25,-21,36,21,10,40,28,-16,30,24,8,40,26,-16,29,21,10,48,25,-17,36,18,11,48,28,-16,37,20,12,48,29,-17,38,22,10,48,27,-17,37,20,10,40,27,-15,30,22,12,40,29,-15,31,25,16,47,26,-21,37,23,13,47,25,-21,36,20,13,40,26,-18,29,23,14,40,27,-18,30,25,16,41,28,-18,32,26,15,40,27,-18,30,25,15,48,25,-21,36,22,16,48,27,-21,38,24,15,41,30,-15,32,26,12,40,29,-15,31,24,11,48,29,-17,38,21,13,48,30,-17,39,23,15,48,30,-18,39,25,13,48,30,-17,39,22,14,41,29,-14,33,25,17,41,30,-15,34,27,17,49,28,-20,39,25,15,49,26,-21,37,23,16,41,26,-17,32,25,17,42,28,-16,33,27,17,48,28,-21,39,24,12,47,23,-21,35,19,13,50,23,-21,38,17,16,51,27,-21,41,21,15,49,30,-18,40,24,10,48,25,-18,36,18,10,51,25,-18,38,17,15,52,29,-19,42,21,11,48,29,-16,38,21,12,51,27,-18,40,19,15,47,26,-21,37,22,15,51,25,-22,40,19,19,39,28,-17,31,28,17,38,27,-16,30,27,16,41,27,-16,33,25,17,42,28,-16,34,26,18,39,29,-15,31,29,17,38,28,-15,30,27,15,41,29,-15,33,25,17,41,30,-15,34,27,18,37,28,-16,29,28,19,38,29,-16,30,29,18,38,27,-16,30,27,19,39,28,-16,31,28,20,38,27,-17,31,28,19,37,27,-17,30,27,20,37,28,-17,30,29,18,36,28,-17,29,28,19,36,27,-18,29,28,20,37,28,-18,30,29,18,37,27,-18,30,27,19,38,28,-18,31,28,20,38,26,-20,31,28,19,38,25,-20,30,27,21,37,26,-20,30,28,20,37,25,-20,29,27,18,34,25,-21,26,27,19,34,26,-21,27,28,18,35,25,-21,28,26,19,35,25,-21,28,27,18,36,27,-19,28,28,17,35,26,-19,28,26,18,34,27,-19,27,28,17,34,26,-19,26,27,16,34,27,-18,26,27,17,34,28,-18,27,28,17,35,26,-18,28,26,18,36,27,-19,28,28,17,37,28,-17,29,28,16,37,27,-17,28,26,16,36,29,-16,27,29,15,35,28,-16,27,27,14,40,30,-15,32,26,13,40,29,-15,31,25,15,36,28,-15,27,27,16,36,29,-16,28,28,16,41,28,-17,32,26,14,41,27,-17,31,24,16,37,27,-17,27,26,17,37,28,-17,28,28,15,36,27,-18,26,26,13,36,26,-18,26,25,12,41,26,-18,30,23,13,41,27,-18,31,24,14,36,28,-16,26,27,12,35,27,-16,25,25,10,40,28,-15,30,23,11,40,29,-15,31,25,13,35,26,-17,25,25,14,35,28,-17,25,27,14,36,26,-17,26,25,15,36,27,-17,27,26,16,34,26,-19,26,27,15,34,25,-19,25,25,15,33,27,-19,24,27,14,33,26,-19,24,26,15,33,25,-19,24,26,16,33,27,-19,24,27,15,34,25,-19,25,25,16,34,26,-19,26,27,17,33,25,-21,26,26,17,33,24,-21,25,25,17,32,25,-22,25,27,16,32,24,-22,24,26,14,32,25,-20,22,25,14,32,26,-20,22,27,14,33,24,-21,23,25,15,33,25,-21,23,26,14,34,26,-19,24,26,13,34,24,-19,24,24,13,33,27,-19,23,26,12,33,25,-19,22,25,12,33,25,-18,23,25,13,34,27,-18,24,26,13,34,25,-19,24,24,14,35,26,-19,24,26,13,36,26,-18,26,25,12,36,25,-18,25,24,12,35,27,-17,25,26,11,35,26,-17,24,24,10,40,28,-16,30,24,9,40,26,-16,29,22,10,36,26,-16,25,24,11,36,27,-16,26,25,11,41,27,-18,30,24,10,40,25,-18,29,22,12,36,25,-18,25,23,13,37,26,-18,26,25,12,33,25,-18,23,25,13,34,25,-19,24,24,14,34,26,-19,24,26,13,33,27,-18,23,26,11,35,26,-17,25,24,12,36,25,-18,25,24,13,36,26,-18,26,25,12,36,27,-17,25,26,14,35,28,-16,26,27,15,36,27,-17,27,26,13,36,26,-17,26,25,12,35,27,-16,25,25,15,33,27,-19,24,27,16,34,26,-19,26,27,15,34,25,-19,25,25,14,33,26,-19,24,26,15,36,28,-16,27,27,16,37,27,-17,28,26,17,37,28,-17,29,28,16,36,29,-16,28,28,16,34,27,-19,26,27,17,35,26,-19,28,26,18,35,27,-19,28,28,18,34,28,-19,27,28,19,38,29,-16,30,29,19,39,28,-16,31,28,18,38,27,-16,30,27,17,38,28,-15,30,28,20,37,28,-18,30,29,20,38,27,-18,31,28,19,37,27,-17,30,27,19,36,27,-17,29,28,10,43,23,-17,31,18,12,43,25,-19,31,20,14,43,23,-20,31,18,12,44,21,-18,31,16,11,40,22,-17,28,19,12,40,24,-19,29,20,14,41,23,-20,29,18,12,41,21,-19,28,17,14,46,25,-21,35,21,10,44,27,-17,33,22,12,49,22,-20,36,16,10,48,24,-18,37,18,12,42,21,-18,29,16,10,42,22,-17,30,18,14,42,23,-20,30,18,12,42,24,-19,30,20,13,40,21,-19,27,18,11,39,22,-18,27,19,14,40,23,-20,29,18,12,39,24,-19,29,20,13,37,23,-21,27,21,14,37,23,-22,27,20,12,36,22,-20,25,21,13,37,21,-21,25,20,10,43,22,-17,31,18,12,42,25,-19,31,20,14,43,23,-20,31,18,12,43,21,-18,30,16,14,40,23,-20,29,18,12,40,21,-19,27,17,12,40,24,-19,29,20,11,40,22,-18,27,19,11,47,26,-18,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000021", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-2,7,69,6,-3,70,10,2,75,-10,-7,77,-7,7,80,3,-2,81,6,6,66,0,-6,68,4,6,79,-4,-6,81,0,2,60,4,-2,61,6,3,62,11,0,63,12,8,74,5,-3,76,9,2,70,-10,-8,72,-6,7,73,-3,-7,75,1,3,70,12,-3,64,-5,3,82,5,-2,77,-10,0,67,2,0,83,-3,0,60,5,2,63,12,3,76,9,-3,71,-10,8,72,5,-3,74,8,2,67,-8,-8,68,-4,7,69,-1,-7,71,3,3,74,9,-3,67,-7,28,45,7,-30,36,8,29,48,4,-31,39,6,27,52,3,-31,44,4,23,54,3,-28,46,5,20,53,6,-24,46,7,19,49,8,-23,43,10,21,45,10,-23,38,11,25,43,9,-26,35,10,11,25,-22,-9,24,-23,11,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-4,35,-14,6,28,-13,-5,28,-13,9,25,-17,-7,25,-18,18,36,-17,-19,32,-16,16,31,-14,-16,28,-14,16,41,-18,-18,38,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-13,6,37,-11,-7,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,21,46,-8,-24,41,-6,17,48,-7,-20,44,-5,13,48,-5,-17,44,-3,12,43,-2,-15,40,-1,14,39,0,-15,35,0,19,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,20,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,35,6,30,46,5,-32,37,8,30,48,10,-33,40,12,27,49,13,-31,43,14,23,48,13,-27,43,15,19,47,10,-23,40,13,19,45,5,-22,37,9,22,44,2,-24,35,6,30,36,7,-33,29,14,26,35,4,-29,27,12,31,38,12,-34,33,18,28,39,16,-31,35,21,23,39,16,-27,35,21,20,37,12,-23,33,19,19,36,7,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,6,-29,21,17,31,31,14,-34,27,23,28,32,17,-31,29,26,23,32,18,-27,29,26,20,30,14,-23,27,24,20,29,10,-22,24,20,22,28,7,-25,21,18,30,21,14,-33,18,26,27,20,11,-30,16,25,31,22,17,-34,20,29,28,23,20,-32,22,32,25,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-30,41,15,29,52,8,-33,43,10,24,55,9,-29,47,11,21,50,12,-25,43,14,24,45,11,-26,37,12,29,46,8,-31,37,10,25,54,4,-29,46,6,20,53,6,-24,46,8,20,46,7,-22,40,8,24,44,5,-26,37,6,28,49,3,-31,40,4,22,49,2,-25,42,3,29,52,11,-32,42,13,26,53,12,-30,44,14,27,55,8,-32,46,11,29,48,11,-31,39,13,30,49,8,-33,40,10,24,50,13,-27,42,15,23,53,11,-27,45,13,26,47,13,-28,39,14,22,47,12,-25,40,14,27,45,10,-29,36,12,29,47,5,-31,38,7,28,51,5,-32,42,7,28,54,5,-32,45,7,25,55,7,-30,47,9,22,54,8,-26,47,10,21,52,9,-25,45,11,20,48,10,-23,41,11,21,45,9,-23,38,11,24,44,8,-26,36,9,28,44,6,-29,36,8,27,52,2,-31,43,4,22,54,4,-27,47,6,18,49,7,-22,43,8,22,44,6,-24,38,7,26,46,3,-29,38,5,25,49,1,-28,41,3,23,52,2,-27,45,4,20,51,3,-24,44,5,20,47,4,-23,41,5,23,46,3,-25,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,2,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,0,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,55,8,-28,48,1,25,53,9,-27,46,2,23,53,10,-26,46,3,21,55,10,-25,48,5,21,57,10,-26,50,6,23,58,9,-27,51,5,25,58,9,-29,51,3,26,57,8,-29,50,1,22,52,2,-21,49,-1,24,54,1,-23,51,-2,20,52,3,-20,49,0,18,54,4,-19,50,2,18,57,4,-20,53,3,20,59,3,-22,54,2,22,59,2,-23,55,0,24,57,1,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,18,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,18,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-3,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,15,52,25,-22,41,19,13,52,25,-20,42,19,12,51,24,-19,42,18,12,50,23,-18,41,17,13,49,23,-19,40,16,15,49,24,-20,39,17,16,50,25,-22,39,17,16,51,26,-22,40,18,26,59,11,-31,50,5,24,59,10,-30,51,5,23,57,9,-28,51,4,23,55,9,-27,49,2,24,54,9,-27,47,1,26,54,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,16,54,21,-23,44,15,18,54,22,-24,43,15,15,53,20,-21,44,14,15,51,19,-20,43,13,16,50,19,-21,42,12,18,50,20,-23,41,12,19,51,21,-24,41,13,19,53,22,-25,42,14,22,58,13,-28,50,8,23,58,14,-29,48,8,20,56,12,-26,49,6,21,54,11,-25,48,5,22,52,11,-25,45,4,24,52,12,-27,44,4,25,53,13,-29,45,5,25,56,14,-30,46,7,23,59,11,-29,51,6,25,59,12,-31,50,6,22,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-27,47,2,26,53,10,-29,46,2,27,55,11,-30,46,3,27,57,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,12,40,27,-19,30,24,10,40,25,-19,29,22,12,47,23,-21,35,19,14,47,25,-21,36,21,9,40,28,-16,30,24,8,40,26,-16,29,22,9,48,25,-18,36,18,10,48,28,-17,37,20,12,48,29,-17,38,22,10,48,27,-17,37,20,9,40,27,-15,30,22,11,40,29,-15,31,25,16,47,26,-22,37,23,13,47,25,-21,36,20,12,40,26,-18,29,23,14,40,28,-19,30,26,16,41,28,-18,31,27,14,40,27,-18,30,25,14,47,25,-22,36,22,16,48,27,-21,38,24,14,40,30,-16,32,27,12,40,29,-15,31,24,11,48,29,-17,38,21,13,48,30,-17,39,23,15,48,30,-18,39,25,12,48,30,-17,39,22,14,41,29,-15,33,25,16,41,30,-15,34,27,16,49,28,-21,38,25,14,49,26,-21,37,23,15,41,26,-17,32,25,17,42,28,-17,33,27,17,48,28,-21,39,24,12,47,23,-21,35,19,12,50,23,-21,38,17,16,51,27,-21,41,21,15,49,30,-19,40,24,9,48,25,-18,36,18,10,51,25,-18,38,17,14,52,29,-19,42,21,11,48,29,-17,38,21,11,51,27,-18,40,19,15,47,26,-22,37,22,15,50,25,-22,40,19,18,39,28,-17,31,29,17,38,27,-17,30,27,15,41,27,-17,33,25,17,42,28,-17,34,27,18,38,29,-16,31,29,16,38,29,-16,30,28,15,41,29,-15,32,26,16,41,30,-15,33,27,17,37,28,-16,29,28,18,38,29,-17,30,29,17,38,27,-16,30,27,18,39,28,-17,31,28,19,38,27,-18,31,28,18,37,27,-18,30,27,19,37,28,-18,30,29,18,36,28,-18,29,28,18,36,27,-18,29,28,20,36,28,-19,30,29,18,37,27,-18,30,27,19,38,28,-18,31,28,20,38,26,-20,31,28,19,37,25,-20,30,27,20,37,26,-20,30,28,19,36,25,-20,29,27,18,33,25,-22,26,27,19,34,26,-22,27,28,17,35,25,-21,27,26,18,35,26,-21,28,27,17,35,27,-19,28,28,16,35,26,-19,27,26,17,34,27,-20,27,29,16,33,26,-19,26,27,16,34,27,-19,26,27,17,34,28,-19,27,29,16,35,26,-19,27,26,17,35,27,-19,28,28,16,37,28,-17,29,28,15,37,27,-17,28,26,16,36,29,-17,27,29,14,35,28,-17,26,27,14,40,30,-16,32,26,12,40,29,-15,31,25,14,36,28,-16,27,27,15,36,29,-16,28,28,15,41,28,-18,32,26,14,41,27,-18,31,24,15,37,27,-18,27,26,16,37,28,-18,28,28,14,36,27,-18,26,27,13,36,26,-18,26,25,11,41,26,-18,30,23,13,41,28,-18,31,25,13,35,28,-16,26,27,12,35,27,-16,25,25,10,40,28,-15,30,23,11,40,29,-15,30,25,12,34,27,-17,24,25,13,35,28,-17,25,27,13,36,26,-18,26,25,14,36,27,-18,27,26,15,34,26,-20,26,27,14,34,25,-20,25,25,15,33,27,-19,24,27,14,33,26,-19,24,26,14,32,25,-20,24,26,15,33,27,-20,24,27,15,34,25,-20,25,25,16,34,26,-20,26,27,17,33,25,-22,26,26,16,33,24,-22,25,25,17,32,25,-22,25,27,16,31,24,-22,24,26,13,31,25,-21,22,25,14,31,26,-21,22,27,13,32,25,-21,23,25,14,32,25,-21,23,26,13,34,26,-20,24,26,12,34,25,-20,24,24,12,33,27,-19,23,26,11,33,25,-19,22,25,11,33,26,-19,23,25,12,34,27,-19,23,26,12,34,25,-20,24,24,13,34,26,-20,24,26,12,36,26,-19,26,25,11,36,25,-19,25,24,11,35,27,-17,25,26,10,35,26,-17,24,24,9,40,28,-16,30,24,8,40,26,-16,29,22,10,36,26,-17,25,24,11,36,27,-17,26,26,11,41,27,-18,30,24,9,40,25,-18,29,22,11,36,25,-19,25,24,12,37,26,-19,26,25,11,33,26,-19,23,25,12,34,25,-20,24,24,13,34,26,-20,24,26,12,33,27,-19,23,26,10,35,26,-17,24,24,11,36,25,-19,25,24,12,36,26,-19,26,25,11,36,27,-17,25,26,13,35,28,-17,26,27,14,36,27,-18,26,27,13,36,26,-18,26,25,12,35,27,-17,25,25,15,33,27,-20,24,27,16,34,26,-20,26,27,14,34,25,-20,25,25,14,33,26,-19,24,26,14,36,28,-16,27,27,15,37,27,-17,28,26,16,37,28,-17,28,28,16,36,29,-16,28,29,16,34,27,-19,26,27,16,35,26,-19,27,26,17,35,27,-19,28,28,17,34,28,-19,27,29,18,38,29,-16,30,29,18,39,28,-17,31,29,17,38,27,-16,30,27,17,37,28,-16,29,28,19,36,28,-18,30,29,19,37,28,-18,31,28,18,37,27,-18,30,27,18,36,28,-18,29,28,10,43,23,-17,31,18,11,43,25,-19,31,20,13,43,23,-21,31,18,11,43,21,-18,31,16,10,40,22,-18,28,19,12,40,24,-19,29,20,13,41,23,-21,29,18,12,40,21,-19,28,17,14,45,25,-21,35,21,10,44,27,-17,33,22,12,49,22,-20,36,16,10,48,24,-18,37,18,12,42,21,-19,29,17,10,42,22,-17,30,18,13,42,23,-21,30,18,11,42,24,-19,30,20,12,40,21,-20,27,18,10,39,22,-18,27,19,13,40,23,-21,29,18,12,39,24,-20,29,20,12,37,23,-21,27,21,14,37,23,-22,27,20,12,36,22,-21,25,21,13,37,21,-22,25,20,10,42,22,-17,30,18,11,42,25,-19,31,20,13,43,23,-21,31,18,11,43,21,-18,30,16,13,40,23,-21,29,18,12,40,21,-19,27,17,12,40,24,-19,29,20,10,40,22,-18,27,19,10,47,26,-19,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000022", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-2,7,69,6,-3,70,10,2,75,-10,-7,77,-7,7,80,3,-2,81,6,6,66,0,-6,68,4,6,79,-4,-6,81,0,2,60,4,-2,61,6,3,62,11,0,63,12,8,74,5,-3,76,9,2,70,-10,-8,72,-6,7,73,-3,-7,75,1,3,70,12,-3,64,-5,3,82,5,-2,77,-10,0,67,2,0,83,-3,0,60,5,2,63,12,3,76,9,-3,71,-10,8,72,5,-3,74,8,2,67,-8,-8,68,-4,7,69,-1,-7,71,3,3,74,9,-3,67,-7,28,45,7,-30,36,8,28,48,4,-31,39,6,26,52,3,-31,44,4,23,54,3,-28,46,5,20,53,6,-25,46,7,19,49,9,-23,43,10,21,45,10,-23,38,11,25,43,9,-26,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-4,35,-14,6,28,-13,-5,28,-13,9,25,-17,-7,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,16,41,-18,-18,38,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-13,6,37,-11,-7,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,20,46,-8,-24,41,-6,16,48,-7,-20,44,-5,13,47,-4,-17,44,-3,12,43,-2,-15,40,-1,14,39,0,-15,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,35,6,29,46,5,-32,37,8,30,48,10,-33,40,12,27,49,13,-31,43,14,23,48,13,-27,43,15,19,47,10,-23,40,13,19,45,5,-22,37,9,21,45,2,-24,35,6,30,37,8,-33,29,14,26,35,4,-29,27,12,30,38,12,-34,33,18,27,39,16,-31,35,21,23,39,16,-27,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,7,-29,21,17,31,31,14,-34,27,23,28,32,18,-31,29,26,23,32,18,-27,29,26,20,30,15,-23,27,24,19,29,10,-22,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,16,25,30,22,18,-34,20,29,28,23,20,-32,22,32,25,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-30,41,15,29,53,8,-33,43,10,24,55,9,-29,47,11,21,50,12,-25,43,14,24,45,11,-26,37,12,29,46,9,-31,37,10,24,54,4,-30,46,6,19,53,6,-24,46,8,19,46,7,-22,40,8,24,44,5,-26,37,6,27,49,3,-31,40,4,21,49,2,-25,42,3,29,52,11,-32,42,13,26,53,12,-30,44,14,27,55,9,-32,46,11,28,48,11,-31,39,13,30,49,8,-33,40,10,24,50,13,-27,42,15,22,53,12,-27,45,13,26,47,13,-28,39,14,22,47,12,-25,40,14,27,45,10,-29,36,12,29,47,6,-31,38,7,28,51,6,-32,42,7,27,54,5,-32,45,7,24,55,7,-30,47,9,21,54,8,-27,47,10,21,52,9,-25,44,10,20,48,10,-23,41,11,21,45,9,-23,38,11,24,44,8,-26,36,9,27,44,6,-29,36,8,26,52,3,-31,43,4,22,54,5,-27,47,6,18,49,7,-22,43,8,21,44,6,-24,38,7,26,46,3,-29,38,5,24,49,2,-28,41,3,23,52,2,-27,44,4,20,51,4,-24,44,5,20,47,4,-23,41,5,23,46,3,-25,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,2,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,0,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,57,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,57,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,18,54,4,-19,50,2,18,57,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,57,1,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,18,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,13,52,25,-20,42,19,12,51,24,-19,42,18,12,50,23,-18,41,17,13,49,23,-19,40,16,14,49,24,-20,39,17,15,50,25,-22,39,17,15,51,26,-22,40,18,26,58,12,-31,50,5,24,59,10,-30,51,5,22,57,9,-28,51,4,23,55,9,-27,49,2,24,53,9,-27,47,1,26,54,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,16,54,21,-23,44,15,17,54,22,-24,43,15,15,53,20,-21,44,14,15,51,19,-21,43,13,16,50,19,-21,42,12,18,50,20,-23,41,12,19,51,21,-24,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-29,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,52,12,-27,44,4,25,53,14,-29,45,5,25,56,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,6,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,55,11,-30,46,3,27,57,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,11,39,27,-19,30,24,10,39,25,-19,29,22,12,46,23,-21,35,19,14,46,25,-22,36,21,9,40,28,-16,30,24,8,40,26,-17,29,22,9,47,25,-18,36,18,10,48,28,-17,37,20,11,48,29,-17,38,22,10,48,27,-17,37,20,9,40,28,-16,30,23,11,40,30,-16,31,25,15,47,26,-22,37,23,13,47,25,-21,36,20,12,39,26,-19,29,23,13,40,28,-19,30,26,15,40,28,-18,31,27,14,40,27,-18,30,25,14,47,25,-22,36,22,15,48,27,-21,38,24,14,40,30,-16,32,27,11,40,29,-15,31,24,10,48,29,-17,38,21,12,48,30,-18,39,23,15,48,30,-19,39,25,12,47,30,-18,39,22,14,40,29,-15,33,25,16,41,30,-15,34,27,16,48,28,-21,38,25,14,48,26,-21,37,23,15,41,27,-17,31,25,17,42,28,-17,33,27,16,48,29,-21,39,24,12,47,23,-21,35,19,12,50,23,-21,38,17,15,51,27,-22,41,21,14,49,30,-19,40,24,9,48,25,-18,36,18,10,50,25,-18,38,17,14,51,29,-19,42,21,10,48,29,-17,38,21,11,51,27,-18,40,19,15,46,26,-22,37,22,14,50,25,-22,40,19,18,39,28,-17,31,29,16,38,27,-17,30,27,15,41,27,-17,33,25,16,42,28,-17,34,27,17,38,30,-16,31,29,16,37,29,-16,30,28,14,40,29,-15,32,26,16,41,30,-15,33,27,16,37,29,-17,29,28,18,37,29,-17,30,29,17,37,28,-17,30,27,18,38,28,-17,31,29,19,37,28,-18,31,28,18,36,27,-18,30,27,18,36,29,-18,30,29,17,36,28,-18,29,28,18,35,28,-19,29,28,19,36,28,-19,30,29,17,37,27,-18,30,27,18,37,28,-19,31,28,19,37,26,-20,31,28,18,36,26,-20,30,27,20,36,27,-21,30,28,19,36,26,-20,29,27,17,33,25,-22,27,27,18,33,26,-22,27,28,17,34,25,-21,28,26,18,34,26,-21,28,27,17,35,27,-20,28,28,15,34,26,-19,28,26,17,33,28,-20,27,28,15,33,27,-20,26,27,15,33,27,-19,26,27,16,34,28,-19,27,29,16,34,26,-19,28,26,17,35,27,-19,28,28,16,36,28,-17,29,28,14,36,27,-17,28,26,15,35,29,-17,27,29,14,35,28,-17,26,27,13,40,30,-16,31,26,12,39,29,-16,31,25,13,36,28,-16,27,27,15,36,29,-16,28,28,15,41,28,-18,32,26,13,40,27,-18,31,24,14,36,27,-18,27,27,16,37,28,-18,28,28,14,36,27,-19,26,27,12,36,26,-18,25,25,11,40,26,-18,30,23,12,41,28,-18,31,25,12,35,29,-17,26,27,11,35,27,-17,25,25,9,39,28,-16,30,23,11,40,29,-16,30,25,12,34,27,-17,24,25,13,34,28,-17,25,27,12,35,26,-18,26,25,14,35,27,-18,27,27,15,34,27,-20,26,27,14,33,25,-20,25,25,14,33,27,-19,24,27,13,32,26,-19,24,26,13,32,26,-20,24,26,14,32,27,-20,24,27,14,33,25,-20,25,25,15,33,26,-20,26,27,16,32,25,-22,26,26,15,32,24,-22,25,25,16,31,26,-23,25,27,15,31,25,-23,24,26,10,30,27,-21,22,25,11,30,28,-22,22,27,11,31,26,-22,23,25,12,31,27,-22,23,26,11,33,27,-20,24,26,11,32,26,-20,24,24,10,32,28,-20,23,26,9,32,27,-20,22,25,9,33,27,-19,23,25,10,33,28,-19,23,26,10,33,26,-20,24,24,11,33,27,-20,24,26,11,35,27,-19,26,25,10,35,26,-19,25,24,10,35,28,-18,25,26,9,34,27,-18,24,24,9,40,28,-16,30,24,8,40,26,-17,29,22,8,35,27,-17,25,24,10,36,28,-17,26,26,10,40,27,-18,30,24,9,40,25,-18,29,22,10,36,26,-19,25,24,11,36,27,-19,26,25,9,32,27,-19,23,25,10,33,26,-20,24,24,11,33,27,-20,24,26,10,33,28,-19,23,26,9,35,27,-17,24,24,10,35,26,-19,25,24,11,35,27,-19,26,25,10,35,28,-17,25,26,12,35,28,-17,25,27,14,36,27,-18,26,27,12,35,26,-18,26,25,11,34,27,-17,25,25,14,32,27,-20,24,27,15,34,26,-20,26,27,14,33,25,-20,25,25,13,32,26,-20,24,26,14,35,28,-17,27,27,14,36,27,-18,27,26,16,36,28,-18,28,28,15,36,29,-17,27,29,15,33,27,-19,26,27,15,34,26,-19,28,26,17,35,27,-19,28,28,16,33,28,-20,27,28,17,38,29,-16,30,29,18,38,28,-17,31,29,17,38,28,-17,30,27,16,37,29,-16,29,28,19,36,29,-19,30,29,19,37,28,-18,31,28,17,36,27,-18,30,27,18,35,28,-18,29,28,9,43,23,-17,31,18,11,42,25,-20,31,20,13,43,23,-21,31,18,11,43,21,-19,31,16,10,40,22,-18,28,19,11,40,24,-20,29,20,13,40,23,-21,29,18,11,40,21,-19,28,17,13,45,25,-22,35,22,10,44,27,-17,33,22,12,48,22,-20,36,16,9,48,24,-18,36,18,11,42,21,-19,29,17,9,42,22,-18,30,18,13,42,23,-21,30,18,11,41,25,-20,30,20,12,39,21,-20,27,18,10,39,22,-19,27,19,13,40,23,-21,28,18,11,39,24,-20,29,20,12,36,23,-22,27,21,13,37,23,-22,27,20,11,36,22,-21,25,21,12,36,21,-22,25,20,9,42,23,-17,30,18,11,42,25,-19,31,20,13,42,23,-21,30,18,11,42,21,-19,30,16,13,40,23,-21,29,18,12,40,21,-20,27,17,11,40,24,-20,29,20,10,39,22,-18,27,19,10,46,26,-19,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000023", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,64,-5,-7,65,-1,7,69,6,-3,70,10,2,76,-10,-7,77,-6,7,80,2,-2,81,6,6,66,0,-6,68,4,6,79,-4,-6,81,0,2,60,4,-2,61,6,4,62,11,1,63,12,8,74,4,-3,76,9,2,71,-10,-8,72,-6,7,73,-3,-8,75,1,3,70,12,-3,64,-5,2,82,5,-3,77,-10,0,67,2,0,83,-3,0,60,5,2,63,12,3,76,9,-4,71,-9,8,72,4,-3,74,8,2,67,-8,-8,68,-4,7,69,-1,-7,71,3,3,74,9,-3,67,-7,27,45,7,-30,36,8,28,48,4,-31,39,6,26,52,3,-31,44,4,22,54,3,-28,46,5,20,53,6,-25,46,7,19,49,9,-23,43,10,21,45,10,-23,38,11,24,43,9,-26,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-7,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,15,41,-18,-18,38,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-13,6,37,-11,-7,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,20,46,-8,-24,41,-6,16,48,-7,-21,44,-5,13,47,-4,-17,44,-3,12,43,-2,-15,40,-1,14,39,0,-15,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,35,6,29,46,5,-33,37,8,30,48,10,-34,40,12,27,49,13,-31,43,14,22,48,13,-27,43,15,19,47,10,-23,40,13,18,45,5,-22,37,9,21,45,2,-24,35,6,30,37,8,-33,29,14,26,35,4,-29,27,12,30,38,12,-34,32,18,27,39,16,-31,35,21,23,39,16,-27,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,7,-29,21,17,30,31,14,-34,27,23,28,32,18,-32,29,25,23,32,18,-27,29,26,20,30,15,-23,27,24,19,29,10,-22,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,16,25,30,22,18,-34,20,29,28,23,20,-32,22,32,24,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-30,41,15,29,53,8,-33,43,10,24,55,9,-29,47,11,21,50,12,-25,43,13,24,45,11,-26,37,12,29,46,9,-31,37,10,24,54,4,-30,46,5,19,53,6,-24,46,8,19,46,7,-22,40,8,24,44,5,-26,37,6,27,49,3,-31,40,4,21,49,2,-25,42,3,28,52,11,-33,42,13,26,53,12,-30,44,14,27,55,9,-32,46,10,28,48,11,-31,39,13,30,49,8,-33,40,10,24,50,13,-28,42,15,22,53,12,-27,45,13,25,47,13,-28,39,14,22,47,12,-25,40,14,27,45,10,-29,36,12,28,47,6,-31,38,7,28,51,6,-32,42,7,27,54,6,-32,45,7,24,55,7,-30,47,9,21,54,8,-27,47,10,20,52,9,-25,44,10,20,48,10,-23,41,11,21,45,9,-24,38,11,24,44,8,-26,36,9,27,44,7,-29,36,8,26,52,3,-31,43,4,21,54,5,-27,47,6,18,49,7,-22,43,8,21,44,6,-24,38,7,26,46,3,-29,38,5,24,49,2,-28,41,3,23,52,2,-27,44,4,20,51,4,-24,44,5,20,47,4,-23,41,5,22,46,3,-25,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,56,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,56,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,17,54,4,-19,50,2,18,56,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,56,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,12,52,25,-20,42,19,11,51,24,-19,42,18,11,50,23,-18,41,17,12,49,23,-19,40,16,14,49,24,-20,39,17,15,50,25,-22,39,17,15,51,26,-22,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,22,55,9,-27,49,2,24,53,9,-27,47,1,26,53,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-24,43,15,14,53,20,-21,44,14,14,51,19,-21,43,13,16,50,19,-21,42,12,17,50,20,-23,41,12,18,51,22,-24,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-29,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,51,12,-27,44,4,25,53,14,-29,45,5,24,55,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,6,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,54,11,-30,46,3,26,56,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,11,40,27,-20,30,25,9,40,25,-19,29,22,11,46,23,-21,35,19,13,46,26,-22,36,21,8,40,29,-17,30,24,7,40,26,-17,29,22,8,47,25,-18,35,18,9,48,28,-17,37,20,11,48,29,-17,38,22,9,48,27,-17,37,20,8,40,28,-16,30,23,10,40,30,-16,31,25,15,47,26,-22,37,23,12,47,25,-21,36,20,11,40,26,-19,29,23,13,40,28,-19,30,26,14,40,29,-19,31,27,13,40,27,-19,30,25,13,47,25,-22,36,22,15,48,27,-21,38,24,13,40,31,-16,32,27,11,40,29,-16,31,24,10,48,29,-17,38,21,12,48,30,-18,39,23,14,48,30,-19,39,25,11,48,30,-18,39,22,13,41,29,-15,32,25,15,41,30,-16,34,27,15,48,28,-21,38,25,13,48,26,-21,37,23,14,41,27,-18,31,25,16,42,29,-17,33,27,16,48,29,-21,39,24,11,47,23,-21,35,19,11,50,23,-21,38,17,15,51,27,-22,41,21,14,49,30,-19,40,24,8,48,25,-18,36,18,9,50,25,-19,38,17,13,51,28,-19,42,21,10,48,29,-17,38,21,10,51,27,-18,40,19,14,46,26,-22,37,22,14,50,25,-22,40,19,17,38,29,-18,31,29,16,38,28,-18,30,27,14,41,28,-17,32,25,16,42,28,-17,33,27,16,38,30,-16,31,29,15,37,29,-16,30,28,14,41,29,-16,32,26,15,41,30,-16,33,27,15,37,29,-17,29,28,17,37,30,-17,30,29,16,37,28,-17,30,27,17,38,29,-17,31,29,18,37,29,-18,31,28,17,36,28,-18,30,27,17,36,30,-19,30,29,16,36,29,-18,29,28,17,35,29,-19,29,28,18,36,29,-19,30,29,17,36,28,-19,30,27,18,37,29,-19,31,28,19,36,27,-21,31,28,18,36,27,-21,30,27,19,35,28,-21,30,28,18,35,27,-21,30,27,15,32,27,-22,27,26,16,32,28,-22,28,27,16,33,26,-21,28,26,17,33,27,-22,29,27,16,34,28,-20,29,28,14,34,27,-20,28,26,15,33,29,-20,27,28,14,33,28,-20,27,27,14,33,28,-20,26,27,15,34,29,-20,27,28,14,34,27,-19,28,26,16,34,28,-20,29,28,15,36,29,-18,29,28,13,36,28,-17,28,26,14,35,30,-18,27,29,13,35,29,-18,26,27,13,40,30,-16,31,27,11,40,29,-16,31,25,12,36,29,-17,27,27,14,36,30,-17,28,29,14,40,28,-18,32,26,13,40,27,-18,31,24,13,36,28,-18,27,27,15,36,29,-19,28,28,12,35,29,-19,26,27,11,35,27,-19,25,25,10,40,26,-18,30,23,12,40,28,-19,31,25,11,35,30,-17,26,27,9,35,28,-17,25,25,9,40,28,-16,29,23,10,40,30,-16,30,25,10,34,28,-18,24,26,11,34,30,-18,25,27,11,34,27,-18,26,25,12,35,29,-18,27,27,12,33,29,-20,26,27,11,32,27,-20,25,25,11,32,30,-20,25,27,10,32,28,-20,24,26,10,31,28,-21,24,26,11,32,30,-21,24,27,11,32,27,-20,25,25,13,32,29,-20,26,27,13,30,28,-22,26,26,12,30,27,-22,26,25,12,29,29,-23,25,27,11,29,28,-23,25,25,8,30,29,-22,22,25,8,31,30,-22,23,26,9,31,28,-22,23,25,9,31,29,-22,24,26,9,33,29,-21,24,26,8,32,28,-21,24,24,8,33,30,-20,23,26,7,32,28,-20,23,25,7,33,28,-20,23,25,8,33,30,-20,24,26,8,33,27,-20,24,24,9,33,29,-21,25,26,10,35,28,-19,26,25,8,35,27,-19,25,24,8,35,29,-18,25,26,7,35,28,-18,24,24,8,40,28,-17,30,24,7,40,26,-17,29,22,7,36,28,-18,25,24,8,36,29,-18,26,26,10,40,27,-19,30,24,8,40,25,-19,29,22,8,35,27,-19,25,24,10,36,28,-19,26,25,7,33,28,-20,23,25,8,33,27,-21,24,24,9,33,29,-21,24,26,8,33,30,-20,23,26,7,35,28,-18,24,24,8,35,27,-19,25,24,10,35,28,-19,26,26,8,36,29,-18,25,26,11,35,30,-17,25,27,12,35,29,-18,26,27,11,35,27,-18,26,25,9,34,28,-17,25,25,11,32,30,-21,24,27,12,32,29,-20,26,27,11,32,27,-20,25,25,10,32,28,-20,24,26,12,35,29,-17,27,27,13,36,28,-18,27,27,15,36,29,-18,28,28,14,36,30,-17,27,29,14,33,28,-20,26,27,14,34,27,-20,28,26,16,34,28,-20,29,28,15,33,29,-20,27,28,16,38,30,-17,30,29,17,38,29,-17,31,29,16,37,28,-17,30,28,15,37,29,-16,29,28,18,36,30,-19,30,29,18,37,29,-19,31,28,17,36,28,-18,30,27,17,35,29,-19,29,28,9,43,23,-18,31,18,10,43,25,-20,31,20,12,43,23,-21,31,18,10,43,21,-19,31,16,9,40,22,-18,28,19,10,40,24,-20,29,20,12,40,23,-21,29,18,11,40,21,-19,28,17,13,45,25,-22,35,21,9,44,27,-18,33,22,11,48,22,-20,36,16,9,48,24,-19,36,18,10,42,21,-19,29,17,9,42,23,-18,30,18,12,42,23,-21,30,18,10,41,25,-20,30,20,11,39,21,-20,27,18,9,39,23,-19,27,19,12,40,23,-21,29,18,11,39,24,-20,29,20,11,36,24,-22,27,21,12,37,23,-23,27,20,10,36,23,-21,25,21,12,36,22,-22,25,20,9,42,23,-18,30,18,10,42,25,-20,31,20,12,42,23,-21,30,18,10,42,21,-19,30,16,12,40,23,-21,29,18,11,40,21,-20,27,17,10,40,24,-20,29,20,9,39,23,-19,27,19,9,46,26,-19,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000024", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,64,-5,-7,65,-1,7,69,6,-2,70,10,1,76,-10,-8,77,-6,7,80,2,-2,81,6,6,66,0,-6,68,5,5,79,-5,-6,81,0,2,60,4,-2,61,6,4,62,11,1,63,12,8,74,4,-3,76,9,1,71,-10,-9,72,-5,7,73,-3,-8,75,2,4,70,12,-3,64,-5,2,82,5,-3,77,-10,0,67,2,0,83,-3,0,60,5,3,63,12,3,76,9,-4,71,-9,8,72,4,-3,74,9,2,67,-8,-9,68,-4,7,69,-1,-7,71,3,3,74,9,-4,67,-7,27,45,7,-30,36,8,28,48,4,-32,39,6,26,52,3,-31,44,4,22,54,4,-28,46,5,19,53,6,-25,46,7,19,49,9,-23,43,10,21,45,10,-24,38,11,24,43,9,-26,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-7,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,15,41,-17,-18,37,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-13,6,37,-11,-7,36,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,20,46,-8,-24,41,-6,16,48,-7,-21,44,-6,13,47,-4,-17,44,-3,12,43,-2,-15,40,-1,14,38,0,-15,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,34,6,29,46,5,-33,37,8,30,48,10,-34,40,11,27,49,13,-31,43,14,22,48,13,-27,43,15,19,47,10,-23,40,13,18,45,5,-22,37,9,21,45,2,-24,35,6,30,37,8,-33,29,14,26,35,4,-29,26,12,30,38,12,-34,32,18,27,39,16,-32,35,21,23,39,16,-27,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,21,35,4,-24,27,12,30,29,10,-33,23,19,27,28,7,-29,21,17,30,31,14,-34,27,23,28,32,18,-32,29,25,23,31,18,-27,29,26,20,30,15,-23,27,24,19,29,10,-22,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,30,22,18,-34,20,29,28,23,20,-32,22,31,24,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,53,8,-34,43,9,24,55,10,-29,47,11,21,50,12,-25,43,13,24,45,11,-26,37,12,29,46,9,-31,37,10,24,54,4,-30,46,5,19,53,6,-24,46,8,19,46,7,-22,40,8,24,44,5,-26,36,6,27,49,3,-31,40,4,21,49,2,-25,42,3,28,52,11,-33,42,13,25,53,12,-30,44,14,26,55,9,-32,46,10,28,48,12,-32,38,13,30,50,9,-33,40,10,24,50,14,-28,42,15,22,53,12,-27,45,13,25,47,13,-28,38,14,22,47,12,-25,40,14,27,45,10,-29,36,11,28,47,6,-32,38,7,28,51,6,-32,42,7,27,54,6,-32,45,7,24,55,7,-30,47,8,21,54,8,-27,47,10,20,52,9,-25,44,10,20,48,10,-23,41,11,21,45,10,-24,38,10,24,44,8,-26,36,9,27,44,7,-30,36,8,26,52,3,-31,43,4,21,54,5,-27,47,6,18,49,7,-22,43,8,21,44,6,-24,38,7,26,46,3,-29,38,4,24,49,2,-28,41,3,23,52,2,-28,44,4,20,51,4,-24,44,5,20,47,4,-23,41,5,22,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,65,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,56,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,56,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,17,54,4,-19,50,2,18,56,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,56,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,12,52,25,-21,42,19,11,51,24,-19,42,18,11,50,23,-18,41,17,12,49,23,-19,40,16,14,49,24,-20,39,17,15,50,25,-22,39,17,15,51,26,-22,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,22,55,9,-27,49,2,24,53,9,-27,47,1,26,53,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-24,43,15,14,53,20,-21,44,14,14,51,19,-21,43,13,16,50,19,-21,42,12,17,50,20,-23,41,12,18,51,22,-24,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-29,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,51,12,-27,44,4,25,53,14,-29,45,5,24,55,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,6,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,54,11,-30,46,3,26,56,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,9,40,29,-20,30,25,7,40,27,-20,29,22,11,46,24,-22,35,19,13,46,26,-22,36,21,7,42,30,-17,30,24,5,41,28,-17,29,22,8,48,26,-18,35,19,9,48,28,-17,37,21,10,48,29,-17,38,22,9,48,28,-17,37,20,7,41,29,-16,30,23,8,41,32,-16,30,25,14,46,27,-22,37,23,12,47,25,-21,36,20,9,40,28,-19,29,23,11,40,30,-20,30,26,13,41,30,-19,31,27,11,40,29,-19,30,25,13,47,26,-22,36,22,14,47,28,-22,38,24,11,41,32,-17,32,27,9,41,31,-16,31,24,9,49,29,-17,38,21,12,49,30,-18,38,23,14,48,31,-19,39,25,11,48,30,-18,39,22,11,41,31,-16,32,25,14,42,32,-16,33,27,15,48,29,-21,38,25,13,48,27,-22,37,23,13,41,29,-18,31,26,14,42,30,-18,33,28,15,48,29,-22,39,24,11,46,24,-22,35,19,11,49,23,-21,38,17,15,50,27,-22,41,21,14,49,31,-19,40,24,8,48,25,-18,36,18,9,50,25,-19,38,17,13,52,28,-19,42,21,10,49,29,-17,38,21,11,52,27,-18,40,19,13,46,27,-22,37,22,14,50,25,-22,40,19,15,38,31,-18,31,29,14,38,31,-18,30,27,13,41,29,-18,32,25,14,41,30,-18,33,27,14,39,33,-17,31,29,13,38,32,-17,30,28,12,41,31,-16,32,26,13,42,32,-16,33,27,13,37,32,-18,29,28,14,38,33,-18,30,29,14,37,31,-17,30,27,15,38,32,-18,31,29,15,36,32,-19,31,28,14,36,31,-19,30,27,15,36,33,-19,30,29,14,36,32,-19,29,28,14,35,32,-20,29,28,15,36,33,-20,30,29,14,36,31,-19,30,27,15,36,32,-19,31,28,16,35,31,-21,31,27,15,35,31,-21,31,26,16,34,32,-21,31,28,15,34,31,-21,30,27,12,32,31,-23,28,26,13,32,32,-23,29,27,12,33,30,-22,29,26,14,33,31,-22,29,27,13,34,32,-20,29,28,12,34,31,-20,28,26,12,33,33,-21,28,28,11,33,32,-21,27,27,11,34,32,-20,27,27,12,34,33,-20,27,28,12,34,31,-20,28,26,13,34,32,-20,29,28,12,36,32,-18,29,28,11,36,31,-18,28,26,11,36,33,-18,27,29,10,36,32,-18,26,27,11,41,32,-17,31,27,10,41,31,-16,30,25,10,36,32,-17,27,27,11,37,33,-18,28,29,12,41,30,-19,32,26,11,40,29,-19,31,25,11,36,30,-19,27,27,12,37,32,-19,28,28,9,36,32,-20,26,27,8,36,30,-19,25,25,9,40,28,-19,30,23,10,40,30,-19,31,25,8,36,33,-18,26,27,7,36,31,-18,25,25,7,41,30,-16,29,23,8,41,31,-16,30,25,7,35,32,-19,24,26,8,36,33,-19,25,27,8,35,30,-19,26,25,9,35,32,-19,27,27,9,33,32,-21,26,27,8,33,31,-21,26,25,8,34,33,-21,25,27,7,33,32,-21,24,26,7,33,32,-22,24,26,8,33,34,-22,25,27,8,32,31,-21,25,25,9,33,33,-21,26,27,9,31,33,-23,27,26,8,30,32,-22,26,25,8,31,34,-24,26,26,7,30,33,-23,26,25,4,32,32,-23,23,25,5,33,33,-23,23,26,5,32,32,-23,24,24,6,32,33,-23,24,25,6,34,32,-21,25,26,5,34,31,-21,24,24,5,34,33,-21,23,26,4,34,32,-21,23,25,4,35,31,-20,23,25,5,35,33,-21,24,26,6,34,31,-21,24,24,7,35,32,-21,25,26,7,36,31,-20,26,25,6,36,30,-20,25,24,6,37,32,-19,25,26,5,36,31,-19,24,24,7,42,30,-17,30,24,5,41,28,-17,29,22,5,37,30,-18,25,24,6,37,32,-18,26,26,8,41,29,-19,30,24,7,40,27,-19,29,22,6,36,29,-20,25,24,7,37,31,-20,26,26,4,34,31,-21,23,25,5,34,31,-21,24,24,6,34,32,-21,25,26,5,35,33,-21,24,26,5,37,30,-18,24,24,6,36,29,-20,25,24,7,36,31,-20,26,26,6,37,32,-19,25,26,8,36,33,-18,25,27,9,36,32,-19,26,27,8,35,30,-19,25,25,7,36,31,-18,24,26,8,33,33,-21,25,27,9,33,32,-21,26,27,8,33,31,-21,25,25,7,33,32,-21,24,26,10,36,32,-18,26,27,11,36,31,-18,27,27,12,37,32,-19,28,28,11,36,33,-18,27,29,11,33,32,-21,27,27,12,34,31,-20,28,26,13,34,32,-20,29,28,12,34,33,-21,27,28,14,38,33,-17,30,29,15,38,32,-18,31,29,14,38,31,-18,30,28,13,38,32,-17,29,28,15,36,33,-19,30,29,15,36,32,-19,31,28,14,36,31,-19,30,27,14,36,32,-19,29,28,8,43,24,-18,31,18,9,43,27,-20,31,20,11,43,25,-21,31,18,9,43,23,-19,31,16,8,40,24,-19,28,19,9,40,26,-20,29,20,11,40,25,-21,29,18,9,39,23,-20,28,17,12,45,26,-22,35,21,8,45,28,-18,33,22,11,48,23,-20,36,16,9,48,24,-19,36,18,9,41,23,-19,29,17,8,42,24,-18,29,19,11,41,25,-21,30,18,9,42,26,-20,30,20,9,39,23,-21,27,18,8,39,25,-19,27,20,11,39,25,-22,29,18,9,39,26,-20,29,20,9,36,26,-22,27,21,10,36,26,-23,27,20,8,36,25,-22,25,21,10,36,24,-23,25,20,8,42,24,-18,30,18,9,42,26,-20,31,20,11,42,25,-21,30,18,9,42,23,-19,30,16,11,40,25,-21,29,18,9,39,23,-20,27,17,9,40,26,-20,29,20,8,39,24,-19,27,19,9,47,26,-19,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000025", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,64,-5,-7,65,-1,7,69,6,-2,70,10,1,76,-10,-8,77,-6,7,80,2,-2,81,6,6,66,0,-6,68,5,6,79,-5,-6,81,0,2,60,4,-2,61,6,4,62,11,1,63,12,8,74,4,-3,76,9,1,71,-10,-9,72,-5,7,73,-3,-8,75,2,4,70,12,-3,64,-5,2,82,5,-3,77,-10,0,67,2,0,83,-3,0,60,5,3,63,12,3,76,9,-4,71,-9,8,72,4,-3,74,9,2,67,-8,-9,68,-4,7,69,-1,-7,71,3,3,74,9,-4,67,-7,27,45,7,-30,36,8,28,48,4,-32,39,5,26,52,3,-31,43,4,22,54,3,-28,46,5,19,53,6,-25,46,7,19,49,9,-23,43,10,21,45,10,-24,38,11,24,43,9,-27,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,15,41,-17,-18,37,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-14,6,37,-11,-8,37,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,20,46,-8,-24,41,-7,16,48,-7,-21,44,-6,13,47,-4,-17,44,-3,12,43,-2,-15,40,-1,14,39,0,-16,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,34,6,29,46,5,-33,37,8,30,48,10,-34,40,11,27,49,13,-32,42,14,22,48,13,-27,43,15,19,47,10,-23,40,13,18,45,5,-22,37,9,21,45,2,-24,34,6,30,37,8,-33,29,14,26,35,4,-29,26,12,30,38,12,-34,32,18,27,39,16,-32,35,21,23,39,16,-27,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,21,35,4,-24,27,12,30,29,10,-33,23,19,27,28,7,-29,21,17,30,31,14,-34,26,23,28,32,18,-32,29,25,23,32,18,-27,29,26,20,30,15,-24,27,24,19,29,10,-23,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,30,22,18,-34,20,29,28,23,20,-32,22,31,24,23,20,-28,22,32,22,22,18,-25,20,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,53,8,-34,43,9,24,55,10,-30,47,11,21,50,12,-25,43,13,24,45,11,-26,37,12,29,46,9,-32,37,10,24,54,4,-30,46,5,19,53,6,-25,46,8,19,46,7,-23,40,8,24,44,5,-27,36,6,27,49,3,-31,40,4,21,49,2,-26,42,3,28,52,11,-33,42,12,25,53,12,-31,44,14,26,55,9,-32,46,10,28,48,12,-32,38,13,30,49,9,-33,39,10,24,50,14,-28,42,15,22,53,12,-27,45,13,25,47,13,-29,38,14,22,47,12,-25,40,13,27,45,10,-29,36,11,28,47,6,-32,38,7,28,51,6,-32,42,7,27,54,6,-33,45,7,24,55,7,-30,47,8,21,54,8,-27,47,10,20,52,9,-26,44,10,20,48,10,-24,41,11,21,45,10,-24,38,10,24,44,8,-26,36,9,27,44,7,-30,36,7,26,52,3,-31,43,4,21,54,5,-27,47,6,18,49,7,-23,43,8,21,44,6,-24,38,7,26,46,3,-29,38,4,24,49,2,-28,41,3,23,52,2,-28,44,3,20,51,4,-25,44,5,20,47,4,-23,41,5,22,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,65,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,56,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,56,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,17,54,4,-19,50,2,18,56,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,56,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,12,52,25,-21,42,19,11,51,24,-19,42,18,11,50,23,-19,41,17,12,49,23,-19,40,17,14,49,24,-21,39,17,15,50,25,-22,39,17,15,51,26,-23,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,22,55,9,-27,49,2,24,53,9,-27,47,1,26,53,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-25,43,15,14,53,20,-21,44,14,14,51,19,-21,43,13,16,50,19,-21,41,12,17,50,20,-23,40,13,18,51,22,-24,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-30,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,51,12,-27,44,4,25,53,14,-29,45,5,24,55,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,5,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,54,11,-30,46,3,26,56,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,8,41,30,-21,30,25,6,41,28,-20,29,22,10,46,24,-22,35,19,12,46,27,-22,36,21,6,42,31,-18,30,24,4,42,28,-18,29,22,8,48,26,-18,35,19,9,49,28,-18,37,21,10,49,29,-18,37,22,8,49,28,-18,36,20,6,42,30,-17,29,23,7,42,32,-17,30,25,14,46,28,-23,37,23,11,46,26,-22,36,20,8,40,29,-20,29,24,10,41,30,-20,30,26,12,41,31,-20,31,27,10,40,29,-20,30,25,13,47,26,-23,36,22,14,47,28,-22,38,24,10,42,33,-17,32,27,8,42,31,-17,31,25,9,49,29,-18,37,21,11,49,30,-18,38,23,13,49,31,-19,39,25,11,49,30,-18,39,23,10,42,32,-16,32,25,12,42,33,-17,33,28,15,48,29,-22,38,25,13,48,27,-22,37,23,12,41,29,-19,31,26,13,42,31,-18,33,28,15,48,29,-22,39,24,10,46,24,-22,35,19,11,49,23,-22,38,17,15,50,27,-22,41,22,13,49,31,-20,40,24,8,48,25,-18,36,18,9,51,25,-19,38,17,14,51,28,-20,42,22,9,49,29,-18,37,21,11,52,27,-18,40,19,13,46,27,-23,37,22,14,49,25,-22,40,19,13,38,33,-19,31,29,12,38,32,-19,30,28,12,41,30,-18,32,26,13,41,31,-18,33,27,12,39,34,-18,30,29,11,39,33,-18,29,28,11,41,32,-17,32,26,12,42,32,-17,33,27,11,38,34,-19,29,28,13,38,34,-19,30,29,12,38,33,-18,30,28,13,38,33,-18,31,29,13,37,34,-20,31,28,12,36,33,-19,30,27,13,37,35,-20,30,29,12,36,34,-20,29,28,12,36,34,-20,30,28,13,36,35,-21,30,29,12,36,33,-20,30,27,13,37,34,-20,31,28,14,35,33,-21,32,27,13,35,33,-21,31,26,14,35,34,-22,31,28,13,34,34,-22,30,27,10,32,32,-23,28,26,11,32,33,-23,29,27,10,33,32,-22,29,25,11,33,33,-22,30,27,11,35,33,-21,29,27,9,35,32,-21,28,26,10,34,34,-22,28,28,9,34,33,-22,27,27,8,35,33,-21,27,27,10,35,34,-21,28,28,9,35,32,-20,28,26,11,35,33,-21,29,28,11,37,33,-19,29,28,9,37,32,-19,28,27,9,37,34,-19,27,29,8,37,33,-19,26,27,10,41,33,-17,31,27,8,41,31,-17,30,25,8,37,33,-18,27,27,9,38,34,-18,28,29,11,41,31,-19,32,26,10,41,30,-19,31,25,9,37,32,-20,27,27,11,37,33,-20,28,28,8,37,32,-20,26,27,6,36,31,-20,25,25,8,41,29,-20,30,23,9,41,30,-20,31,25,6,38,33,-19,26,27,5,37,32,-19,25,25,6,42,30,-17,29,24,7,42,32,-17,30,25,5,36,32,-20,24,26,6,37,34,-20,25,27,6,36,31,-20,26,25,7,36,33,-20,27,27,7,34,33,-22,26,27,6,34,32,-22,26,25,6,35,34,-22,25,27,5,34,33,-22,24,26,5,34,33,-23,24,25,6,34,34,-23,25,27,6,34,32,-21,25,25,7,34,33,-22,26,27,7,32,34,-23,27,26,6,31,33,-23,27,24,6,32,35,-24,27,26,5,31,34,-24,26,25,3,33,33,-24,24,24,3,34,34,-24,24,26,4,33,32,-24,25,24,4,33,33,-24,25,25,5,35,33,-22,25,26,4,35,31,-22,24,24,4,36,34,-23,24,26,3,35,32,-22,23,25,3,36,32,-22,23,25,4,36,33,-22,24,26,4,35,31,-22,25,24,5,36,32,-22,25,26,5,37,32,-21,26,26,4,37,30,-21,25,24,4,38,33,-20,25,26,3,37,31,-20,24,24,6,42,30,-18,29,24,4,42,29,-18,29,22,3,38,31,-19,25,24,4,39,32,-19,25,26,7,41,29,-20,30,24,6,41,28,-20,29,22,4,37,30,-21,25,24,6,38,31,-21,26,26,3,36,32,-22,23,25,4,35,31,-22,24,24,5,35,33,-22,25,26,4,36,33,-22,24,26,3,38,31,-19,24,24,4,37,30,-20,25,24,5,37,32,-21,26,26,4,38,32,-19,25,26,6,37,34,-19,25,27,7,37,33,-20,26,27,6,36,31,-20,25,25,5,37,32,-19,24,26,6,34,34,-22,25,27,7,34,33,-22,26,27,6,34,32,-22,25,25,5,34,33,-22,24,26,8,37,33,-19,26,27,9,37,32,-19,27,27,11,37,33,-19,28,28,9,37,34,-19,27,29,8,34,33,-21,27,27,9,35,32,-21,28,26,11,35,33,-21,29,28,10,34,34,-22,28,28,12,39,34,-18,30,30,13,38,33,-19,31,29,12,38,32,-18,30,28,11,38,34,-18,29,28,13,37,35,-20,30,29,13,37,34,-20,31,28,12,36,33,-20,30,27,12,36,34,-20,29,28,7,43,24,-18,31,18,8,43,27,-21,31,20,10,43,25,-22,31,18,9,43,23,-19,31,16,6,40,25,-19,28,19,8,41,27,-21,29,20,9,40,26,-22,29,18,8,40,24,-20,28,17,11,45,26,-22,35,21,7,45,29,-18,33,22,11,48,23,-20,36,16,9,48,24,-19,36,18,8,41,23,-20,29,17,7,42,25,-19,29,19,10,41,25,-22,30,18,8,42,27,-21,30,20,8,39,24,-21,27,18,6,39,25,-20,27,20,9,39,26,-22,29,18,8,40,27,-21,29,20,8,37,27,-23,27,21,9,37,27,-24,27,20,7,36,26,-23,25,21,8,36,25,-23,25,20,7,43,25,-18,30,19,8,43,27,-20,31,20,10,42,25,-22,30,18,8,42,23,-19,30,17,9,40,26,-22,29,18,8,39,24,-21,27,17,8,40,27,-21,29,20,6,40,25,-20,27,19,8,47,27,-20,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000026", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-1,7,69,6,-2,70,10,1,75,-10,-8,77,-6,7,80,2,-2,81,6,6,66,0,-6,68,5,6,79,-5,-6,81,0,2,60,4,-2,61,6,4,63,11,1,63,12,8,74,4,-3,76,9,1,70,-10,-9,72,-6,7,73,-4,-8,75,1,4,71,12,-3,64,-5,3,82,5,-3,77,-10,0,67,2,0,83,-3,0,60,5,3,63,12,3,76,8,-4,70,-9,8,72,4,-3,74,8,2,66,-8,-9,68,-4,7,69,-2,-7,71,3,3,74,9,-4,67,-7,27,45,7,-30,36,8,28,48,4,-32,39,5,26,52,3,-31,43,4,23,54,3,-29,46,5,20,53,6,-25,46,7,19,49,9,-23,42,10,21,45,10,-24,38,11,24,43,9,-27,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,15,41,-18,-18,37,-17,11,43,-17,-15,41,-16,7,42,-14,-10,41,-14,6,37,-11,-8,37,-11,9,32,-9,-8,31,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,20,46,-8,-24,40,-7,16,48,-7,-21,44,-6,13,48,-4,-18,44,-4,12,43,-2,-15,40,-1,14,39,0,-16,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,34,6,29,46,5,-33,36,8,30,48,10,-34,40,11,27,49,13,-32,42,14,22,49,13,-27,43,15,19,47,10,-23,40,13,18,45,5,-22,37,9,21,45,2,-25,34,6,30,37,8,-33,29,14,26,35,4,-29,26,12,30,38,12,-34,32,18,27,39,16,-32,35,21,23,39,16,-27,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,22,35,4,-24,27,12,30,30,10,-33,23,19,27,28,7,-29,21,17,30,31,14,-34,26,22,28,32,18,-32,29,25,23,32,18,-28,29,26,20,30,15,-24,27,24,19,29,10,-23,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,30,23,18,-34,20,29,28,23,20,-32,22,31,24,23,20,-28,22,32,22,22,18,-25,21,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,53,8,-34,43,9,24,55,9,-30,47,11,21,50,12,-25,43,13,24,45,11,-27,37,12,29,46,9,-32,37,10,24,54,4,-30,46,5,19,53,6,-25,46,8,19,46,7,-23,40,8,24,44,5,-27,36,6,27,49,3,-31,40,4,21,49,2,-26,42,3,28,52,11,-33,42,12,26,53,12,-31,44,14,27,55,9,-33,45,10,28,48,11,-32,38,13,30,50,8,-34,39,10,24,50,13,-28,42,15,22,53,12,-28,45,13,25,47,13,-29,38,14,22,47,12,-26,40,13,27,45,10,-29,36,11,28,47,6,-32,38,7,28,51,6,-32,42,7,27,54,5,-33,45,7,24,55,7,-30,47,8,21,55,8,-27,47,10,20,52,9,-26,44,10,20,48,10,-24,41,11,21,45,9,-24,38,10,24,44,8,-26,36,9,27,45,7,-30,36,7,26,52,3,-31,43,4,21,54,5,-28,47,6,18,50,7,-23,43,8,21,45,6,-24,38,7,26,46,3,-29,37,4,24,49,2,-29,41,3,23,52,2,-28,44,3,20,51,4,-25,44,5,20,47,4,-24,41,5,22,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,57,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,57,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,17,54,4,-19,50,2,17,57,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,57,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,14,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,12,52,25,-21,42,19,11,51,24,-19,42,18,11,50,23,-19,41,17,13,49,23,-19,40,17,14,49,24,-21,39,17,15,50,25,-22,39,18,15,51,26,-23,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,22,55,9,-27,49,2,24,53,9,-27,47,1,26,53,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-25,43,15,14,53,20,-22,44,14,14,51,19,-21,43,13,16,50,19,-21,41,12,17,50,20,-23,40,13,18,51,22,-25,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-30,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,52,12,-27,44,4,25,53,14,-29,45,5,24,55,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,5,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,54,11,-30,46,3,26,57,12,-32,48,4,30,14,16,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,5,12,-32,5,28,23,4,22,-26,5,38,22,5,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,27,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,5,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,5,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,27,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,21,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,5,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,5,12,-28,5,28,25,0,12,-28,0,28,36,0,27,-40,0,43,36,2,27,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,5,15,-25,5,31,23,4,22,-26,5,38,30,5,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,21,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,8,41,30,-21,30,25,6,41,28,-21,29,22,10,46,24,-22,35,19,12,46,27,-23,36,21,6,43,31,-18,30,24,4,42,28,-19,28,22,8,48,26,-19,35,19,9,49,28,-18,36,21,10,49,29,-18,37,22,8,49,28,-18,36,20,6,42,30,-18,29,23,7,42,32,-18,30,26,14,46,28,-23,37,23,11,46,26,-22,36,20,8,40,29,-21,29,24,10,41,31,-21,30,26,12,41,31,-20,31,27,10,41,30,-20,30,25,13,47,26,-23,36,22,14,47,28,-22,38,24,10,42,33,-18,32,27,8,42,31,-17,30,25,9,49,29,-18,37,21,11,49,30,-19,38,24,13,49,31,-20,39,25,11,49,30,-18,38,23,10,42,32,-17,32,26,12,42,33,-17,33,28,15,48,29,-22,38,25,13,48,27,-22,37,23,12,41,29,-19,31,26,13,42,31,-19,33,28,15,47,29,-22,39,24,10,46,24,-22,35,19,11,49,23,-22,38,17,15,50,27,-22,41,21,13,49,31,-20,40,24,8,49,25,-19,35,18,9,51,24,-19,38,17,14,51,28,-20,42,22,9,49,29,-18,37,22,11,52,27,-18,40,19,13,46,27,-23,37,22,14,49,25,-22,40,19,13,39,33,-21,31,29,11,38,33,-20,30,27,11,41,30,-19,32,26,13,41,31,-19,33,27,12,39,34,-19,30,29,11,39,34,-19,29,28,11,42,32,-17,32,26,12,42,32,-18,33,28,11,38,34,-20,29,28,12,38,35,-20,30,29,11,38,33,-19,30,28,13,38,34,-19,31,29,13,37,34,-20,32,28,12,36,34,-20,31,27,12,37,35,-21,31,28,11,37,35,-21,30,27,11,36,35,-21,30,27,12,36,35,-22,31,28,12,36,34,-20,31,27,13,37,34,-21,32,28,13,35,34,-22,33,27,12,35,34,-21,32,26,13,35,35,-22,32,27,12,34,34,-22,32,26,9,32,33,-24,29,25,10,32,33,-24,30,26,10,33,32,-23,30,25,11,33,33,-23,30,26,10,35,33,-22,29,27,9,35,32,-21,29,26,9,34,34,-23,28,28,8,34,33,-23,28,26,8,35,33,-22,27,26,9,35,34,-22,28,28,9,35,32,-21,29,26,10,35,33,-22,29,27,10,37,33,-20,29,28,9,37,32,-20,28,27,9,37,34,-21,27,29,8,37,33,-21,26,27,10,42,33,-18,31,27,8,41,31,-18,30,25,8,37,33,-19,27,27,9,38,34,-20,28,29,11,41,31,-20,32,26,10,41,30,-20,31,25,9,37,32,-21,27,27,10,37,33,-21,28,28,7,37,32,-21,26,27,6,37,31,-21,25,25,8,41,29,-20,30,23,9,41,30,-20,31,25,6,38,33,-20,26,27,5,37,32,-19,25,25,6,42,30,-18,29,24,7,42,32,-18,30,25,5,36,32,-21,24,26,6,37,34,-21,25,27,6,36,31,-20,26,25,7,36,33,-21,27,27,7,34,33,-23,27,26,6,34,32,-22,26,25,6,34,34,-23,25,27,5,34,33,-23,24,25,5,34,33,-24,25,25,6,34,34,-24,26,27,6,34,32,-22,26,25,7,34,33,-22,26,26,8,32,33,-24,28,26,7,32,32,-23,27,24,7,31,34,-25,27,26,6,31,33,-25,27,24,4,33,32,-25,25,24,4,33,33,-25,25,25,5,33,32,-24,25,24,5,33,32,-25,26,25,5,35,32,-23,25,25,4,35,31,-23,25,24,4,35,33,-24,24,26,3,35,32,-23,24,24,3,36,32,-23,23,25,4,36,33,-23,24,26,4,35,31,-23,25,24,5,36,32,-23,26,25,6,37,32,-21,26,25,4,37,30,-21,25,24,4,38,33,-21,25,26,3,37,31,-21,24,24,5,42,30,-18,29,25,4,42,29,-19,28,22,3,38,31,-20,25,24,4,39,32,-20,25,26,7,41,29,-21,30,24,6,41,28,-20,29,22,4,37,30,-22,25,24,6,38,31,-22,26,26,3,35,32,-23,23,25,4,35,31,-23,25,24,5,35,32,-23,25,25,4,36,33,-23,24,26,3,38,31,-20,24,24,4,37,30,-21,25,24,6,38,32,-21,26,26,4,38,32,-20,25,26,6,37,34,-20,25,27,7,37,33,-21,26,27,6,36,31,-21,25,25,5,37,32,-20,24,26,6,34,34,-23,25,27,7,34,33,-23,26,26,6,34,32,-22,26,25,5,34,33,-23,25,25,8,37,33,-20,26,27,9,37,32,-20,27,27,10,37,33,-21,28,28,9,37,34,-20,27,29,8,34,33,-23,27,26,9,35,32,-21,28,26,10,35,33,-22,29,27,9,35,34,-23,28,28,12,39,35,-20,30,29,13,38,33,-20,31,29,11,38,33,-20,30,28,11,38,34,-20,29,28,12,37,35,-21,31,28,13,37,34,-20,32,28,12,36,34,-20,31,27,11,36,35,-21,30,27,7,43,24,-19,31,19,8,43,27,-21,31,20,10,43,25,-22,31,18,8,43,23,-20,31,16,6,40,25,-20,27,19,8,41,27,-21,29,20,9,40,26,-22,29,18,8,40,24,-21,28,17,11,45,26,-23,35,21,7,45,29,-19,33,22,11,48,23,-21,36,16,9,48,24,-19,36,18,8,41,23,-20,29,17,7,42,25,-19,29,19,10,41,25,-22,30,18,8,42,27,-21,30,20,8,39,24,-22,27,18,6,39,25,-21,27,20,9,39,26,-23,29,18,8,40,27,-22,29,20,7,37,27,-24,27,21,9,37,27,-24,27,20,7,36,26,-23,25,21,8,36,25,-24,25,20,7,43,25,-19,30,19,8,43,27,-21,31,20,10,42,25,-22,31,18,8,42,23,-20,30,17,9,40,26,-22,29,18,8,39,24,-21,27,18,8,40,27,-21,29,20,6,40,25,-20,27,19,8,47,27,-20,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000027", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-1,8,69,6,-2,71,10,1,75,-10,-8,77,-6,7,80,2,-1,81,5,6,66,0,-6,68,5,6,79,-5,-6,81,0,2,60,4,-2,61,6,4,63,11,1,63,12,9,74,4,-3,76,9,1,70,-10,-9,72,-6,7,73,-4,-7,75,1,4,71,12,-3,64,-5,3,82,4,-3,77,-10,0,67,2,0,83,-4,0,60,5,3,63,12,3,76,8,-4,70,-9,8,72,4,-3,74,8,2,66,-8,-8,68,-3,7,69,-2,-7,71,3,3,74,9,-4,67,-7,28,45,7,-30,36,8,28,48,4,-32,39,5,26,52,3,-31,43,4,23,54,3,-29,46,5,20,53,6,-25,46,7,19,49,8,-23,42,10,21,45,10,-24,38,11,25,43,9,-27,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-18,18,36,-17,-19,32,-16,16,31,-14,-16,28,-14,16,41,-18,-18,37,-17,11,43,-17,-15,41,-16,7,42,-14,-11,41,-14,6,37,-11,-8,37,-11,9,32,-9,-8,31,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-4,20,46,-8,-24,40,-7,16,48,-7,-21,44,-6,13,48,-5,-18,44,-4,12,43,-2,-15,40,-1,14,39,0,-16,35,0,18,36,-1,-19,31,-1,28,13,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,25,12,15,-27,10,31,26,45,2,-29,34,6,29,46,5,-33,36,8,30,48,10,-34,40,11,27,49,13,-32,42,14,23,49,13,-28,43,15,19,47,10,-24,40,12,19,46,5,-22,37,9,21,45,2,-25,34,6,30,37,8,-33,29,14,26,35,4,-29,26,12,30,38,12,-34,32,18,27,39,16,-32,35,21,23,39,16,-28,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,22,35,4,-24,27,12,30,30,10,-33,23,19,27,28,7,-29,21,17,31,31,14,-34,26,22,28,32,18,-32,29,25,23,32,18,-28,29,26,20,30,15,-24,27,24,19,29,10,-23,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,31,23,18,-34,20,29,28,23,20,-32,22,31,25,23,20,-28,22,32,22,22,18,-25,21,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,53,8,-34,42,9,24,55,9,-30,47,11,21,50,12,-26,43,13,24,45,11,-27,37,12,29,46,9,-32,37,10,24,54,4,-30,46,5,19,53,6,-25,46,8,19,47,7,-23,40,8,24,44,5,-27,36,6,27,49,3,-31,40,4,21,49,2,-26,42,3,29,52,11,-33,42,12,26,53,12,-31,44,14,27,55,9,-33,45,10,28,48,11,-32,38,12,30,50,8,-34,39,10,24,50,13,-28,42,15,22,53,12,-28,45,13,26,47,13,-29,38,14,22,47,12,-26,40,13,27,45,10,-29,36,11,29,47,6,-32,38,7,28,51,5,-32,42,7,27,54,5,-33,45,7,24,55,7,-31,47,8,21,55,8,-27,47,10,21,52,9,-26,44,10,20,48,10,-24,41,11,21,45,9,-24,38,10,24,44,8,-26,36,9,27,45,6,-30,35,7,26,52,2,-31,43,4,22,54,4,-28,46,6,18,50,7,-23,43,8,21,45,6,-24,38,7,26,46,3,-29,37,4,24,49,1,-29,41,3,23,52,2,-28,44,3,20,51,3,-25,44,5,20,47,4,-24,41,5,23,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,20,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,55,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,57,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,57,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,18,54,4,-19,50,2,18,57,4,-20,53,3,19,58,3,-22,54,2,22,59,2,-23,55,0,24,57,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,13,52,25,-21,42,19,12,51,24,-19,42,18,12,50,23,-19,41,17,13,49,23,-19,40,17,14,49,24,-21,39,17,15,50,25,-22,39,18,15,51,26,-23,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,23,55,9,-27,49,2,24,53,9,-27,47,1,26,54,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-25,43,15,14,53,20,-22,44,14,15,51,19,-21,43,13,16,50,19,-21,41,12,17,50,20,-23,40,13,18,51,22,-25,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,58,14,-30,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,52,12,-27,44,4,25,53,14,-29,45,5,24,56,15,-30,46,7,23,59,11,-29,51,6,25,58,12,-31,50,5,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,55,11,-30,46,3,26,57,12,-32,48,4,30,14,16,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,15,17,-26,15,33,35,2,23,-38,2,39,30,5,12,-32,5,28,23,5,22,-26,5,38,22,5,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,27,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,5,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,5,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,29,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,27,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,21,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,5,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,5,12,-28,5,28,25,0,12,-28,0,28,36,0,27,-40,0,43,36,2,27,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,5,15,-25,5,31,23,5,22,-26,5,38,30,5,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,21,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,8,41,30,-22,30,25,6,41,28,-22,29,22,10,46,24,-22,35,19,12,46,27,-23,37,21,6,42,31,-19,30,25,5,42,28,-19,28,22,8,48,26,-19,35,19,9,49,28,-18,36,21,10,49,29,-18,37,23,9,49,28,-18,36,20,6,42,30,-18,29,23,7,42,32,-19,30,26,14,46,28,-23,37,23,11,46,26,-22,36,20,8,40,29,-22,29,24,10,40,30,-22,30,26,12,41,31,-21,31,27,10,40,29,-21,30,25,13,46,26,-23,36,22,14,47,28,-23,38,24,10,42,33,-19,31,27,8,42,31,-18,30,25,9,49,29,-18,37,21,11,49,30,-19,38,24,14,48,31,-20,39,25,11,49,30,-19,38,23,10,42,31,-18,32,26,13,42,33,-18,33,28,15,48,29,-22,39,25,13,48,27,-23,38,23,12,41,29,-20,31,26,14,42,31,-20,33,28,15,47,29,-22,40,24,11,46,24,-22,36,19,12,49,23,-22,38,17,15,50,27,-22,41,21,14,49,31,-20,40,24,8,48,25,-19,35,19,10,51,25,-19,38,17,14,51,28,-20,42,22,10,49,29,-18,37,22,11,52,27,-18,40,19,13,46,27,-23,37,22,14,49,25,-22,40,19,13,39,34,-22,31,28,11,38,33,-21,30,27,12,41,30,-19,32,25,13,41,31,-20,34,27,12,39,35,-21,31,29,11,39,34,-20,30,28,11,41,32,-18,32,26,12,42,32,-18,33,28,11,38,34,-21,30,28,12,39,35,-22,31,29,11,38,33,-20,30,27,13,38,34,-20,31,29,13,37,35,-21,32,28,12,37,34,-21,31,27,12,37,36,-22,31,28,11,37,35,-22,31,27,11,36,35,-22,31,27,12,37,36,-22,32,28,12,37,34,-21,31,27,13,37,35,-21,32,28,13,35,35,-22,33,26,12,35,34,-22,33,25,13,35,36,-23,33,26,12,35,35,-22,32,25,9,32,33,-24,31,24,11,32,34,-24,32,25,10,33,32,-23,31,25,11,33,33,-23,32,26,11,35,33,-23,30,27,9,35,32,-22,29,26,10,34,34,-24,30,27,9,34,33,-24,29,25,8,35,33,-24,28,26,10,35,34,-24,29,27,9,35,32,-22,29,26,11,35,33,-22,30,27,11,37,33,-21,29,28,9,37,32,-21,28,26,9,37,34,-23,28,28,8,37,33,-22,27,27,10,41,33,-19,31,27,9,41,31,-19,30,25,8,37,33,-21,27,27,9,38,34,-22,28,28,11,41,31,-21,32,26,10,40,30,-20,31,25,9,37,32,-23,28,26,11,37,33,-23,29,28,8,37,32,-23,27,27,7,36,31,-23,26,25,8,41,29,-21,30,23,9,41,30,-21,31,25,6,37,33,-21,26,27,5,37,32,-21,25,25,6,42,30,-19,29,24,7,42,32,-19,30,26,5,36,32,-22,25,25,7,36,33,-23,25,27,7,36,31,-22,26,25,8,37,32,-22,27,27,8,35,32,-24,27,26,7,34,31,-24,27,24,7,34,33,-24,26,26,6,34,32,-24,25,25,6,33,32,-25,26,25,7,33,33,-25,27,26,7,34,31,-23,26,25,8,34,32,-24,27,26,9,33,32,-24,29,25,8,32,31,-24,28,24,9,32,32,-25,29,25,8,31,31,-25,28,24,6,33,31,-26,25,24,6,33,32,-26,26,25,6,34,30,-25,26,23,7,34,31,-25,27,24,6,35,31,-24,26,25,5,35,30,-24,25,24,5,35,32,-25,25,26,4,34,31,-25,24,24,4,35,31,-24,24,24,5,35,32,-24,25,26,5,35,30,-24,25,24,6,36,31,-24,26,25,6,37,31,-22,26,25,5,37,30,-22,25,24,5,37,32,-22,25,26,4,37,31,-22,24,24,6,42,30,-19,29,25,5,42,29,-19,28,22,4,38,31,-21,25,24,5,38,32,-21,26,26,7,41,29,-21,30,24,6,41,28,-21,29,22,5,37,30,-23,25,24,6,38,31,-23,26,25,4,35,31,-24,24,24,5,35,30,-24,25,24,6,36,31,-24,26,25,5,35,32,-25,25,26,4,37,31,-21,24,24,5,37,30,-22,25,24,6,38,31,-22,26,26,5,38,32,-22,25,26,6,37,34,-22,25,27,8,37,32,-22,27,27,6,36,31,-22,26,25,5,37,32,-22,25,26,7,34,33,-25,26,26,8,34,32,-24,27,26,7,34,31,-24,27,25,6,34,32,-25,26,25,8,37,33,-22,27,27,9,37,32,-22,28,26,11,37,33,-22,29,28,9,37,34,-22,28,29,8,34,33,-24,29,26,9,35,32,-22,29,26,11,35,33,-23,30,27,10,34,34,-24,29,27,12,39,35,-21,30,29,13,38,34,-21,31,29,11,38,33,-21,30,27,11,39,34,-21,29,28,12,37,36,-22,32,28,13,37,35,-21,32,28,12,37,34,-21,31,27,11,37,35,-22,31,27,7,43,24,-19,31,19,8,43,27,-22,31,20,11,43,25,-23,31,18,9,43,23,-20,31,17,7,40,25,-20,27,19,8,40,27,-22,29,20,10,40,26,-23,29,18,8,40,24,-21,28,17,12,45,26,-23,35,21,8,45,29,-19,33,22,11,48,23,-21,36,16,9,48,24,-19,36,18,8,41,23,-21,29,17,7,42,25,-20,29,19,10,41,25,-23,30,18,8,42,27,-22,30,20,8,39,24,-22,27,18,7,39,25,-21,27,20,10,39,26,-23,29,18,8,40,27,-22,29,20,8,37,27,-24,27,21,9,37,26,-25,27,20,7,36,26,-24,26,21,8,36,25,-25,26,19,7,43,25,-19,30,19,8,42,27,-21,31,20,10,42,25,-23,31,18,9,42,23,-20,30,17,10,40,26,-23,29,18,8,39,24,-22,27,17,8,40,27,-22,29,20,7,40,25,-21,27,19,8,47,27,-20,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000028", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-1,8,69,6,-2,71,10,1,75,-10,-8,77,-6,7,80,2,-1,81,5,6,66,0,-6,68,5,6,79,-5,-6,81,0,2,60,4,-2,61,6,4,63,11,1,63,12,9,74,4,-3,76,9,1,70,-10,-9,72,-6,7,73,-4,-7,75,1,4,71,12,-3,64,-5,3,82,4,-3,77,-10,0,67,2,0,82,-4,0,60,5,3,63,12,3,76,8,-4,70,-9,8,72,4,-3,74,8,2,66,-8,-8,68,-3,7,69,-2,-7,71,3,3,74,9,-4,67,-7,28,45,7,-30,36,8,28,48,4,-32,39,5,26,52,3,-31,43,4,23,54,3,-29,46,5,20,53,6,-25,46,7,19,49,9,-23,42,10,21,45,10,-24,38,11,25,43,9,-27,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,15,41,-18,-18,37,-17,11,43,-17,-15,41,-16,7,42,-14,-11,41,-14,6,37,-11,-8,37,-11,9,32,-9,-8,31,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-4,20,46,-8,-24,40,-7,16,48,-7,-21,44,-6,13,47,-4,-18,44,-4,12,43,-2,-15,40,-1,14,39,0,-16,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,34,6,29,46,5,-33,36,8,30,48,10,-34,40,11,27,49,13,-32,42,14,22,48,13,-28,43,15,19,47,10,-24,40,12,19,45,5,-22,37,9,21,45,2,-25,34,6,30,37,8,-33,29,14,26,35,4,-29,26,12,30,38,12,-34,32,18,27,39,16,-32,35,21,23,39,16,-28,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,7,-29,21,17,31,31,14,-34,26,22,28,32,18,-32,29,25,23,32,18,-28,29,26,20,30,15,-24,27,24,19,29,10,-23,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,30,22,18,-34,20,29,28,23,20,-32,22,31,24,23,20,-28,22,32,22,22,18,-25,21,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,53,8,-34,42,9,24,55,9,-30,47,11,21,50,12,-26,43,13,24,45,11,-27,37,12,29,46,9,-32,37,10,24,54,4,-30,46,5,19,53,6,-25,46,8,19,46,7,-23,40,8,24,44,5,-27,36,6,27,49,3,-31,40,4,21,49,2,-26,42,3,29,52,11,-33,42,12,26,53,12,-31,44,14,27,55,9,-33,45,10,28,48,11,-32,38,12,30,49,8,-34,39,10,24,50,13,-28,42,15,22,53,12,-28,45,13,26,47,13,-29,38,14,22,47,12,-26,40,13,27,45,10,-29,36,11,29,47,6,-32,38,7,28,51,6,-32,42,7,27,54,5,-33,45,7,24,55,7,-31,47,8,21,54,8,-27,47,10,21,52,9,-26,44,10,20,48,10,-24,41,11,21,45,9,-24,38,10,24,44,8,-26,36,9,27,44,7,-30,35,7,26,52,3,-31,43,4,21,54,5,-28,46,6,18,49,7,-23,43,8,21,44,6,-24,38,7,26,46,3,-29,37,4,24,49,2,-29,41,3,23,52,2,-28,44,3,20,51,4,-25,44,5,20,47,4,-24,41,5,23,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,56,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,56,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,17,54,4,-19,50,2,18,56,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,57,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,12,52,25,-21,42,19,12,51,24,-19,42,18,12,50,23,-19,41,17,13,49,23,-19,40,17,14,49,24,-21,39,17,15,50,25,-22,39,18,15,51,26,-23,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,23,55,9,-27,49,2,24,53,9,-27,47,1,26,53,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-25,43,15,14,53,20,-22,44,14,15,51,19,-21,43,13,16,50,19,-21,41,12,17,50,20,-23,40,13,18,51,22,-25,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-30,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,51,12,-27,44,4,25,53,14,-29,45,5,24,55,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,5,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,54,11,-30,46,3,26,56,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,9,40,29,-22,30,25,7,40,27,-22,29,22,11,46,24,-22,35,19,13,46,26,-23,37,21,7,42,30,-19,30,25,5,41,28,-19,28,22,8,48,26,-19,35,19,9,48,28,-18,36,21,10,48,29,-18,37,23,9,48,28,-18,36,20,7,41,29,-18,29,23,8,41,32,-19,30,26,14,46,27,-23,37,23,12,46,25,-22,36,20,9,40,28,-22,29,24,11,40,30,-22,30,26,13,41,30,-21,31,27,11,40,29,-21,30,25,13,47,26,-23,36,22,14,47,28,-23,38,24,11,41,32,-19,31,27,9,41,31,-18,30,25,9,49,29,-18,37,21,12,49,30,-19,38,24,14,48,31,-20,39,25,11,48,30,-19,38,23,11,41,31,-18,32,26,13,42,32,-18,33,28,15,48,29,-22,39,25,13,48,27,-23,38,23,13,41,29,-20,31,26,14,41,30,-20,33,28,15,48,29,-22,40,24,11,46,24,-22,36,19,11,49,23,-22,38,17,15,50,27,-22,41,21,14,49,31,-20,40,24,8,48,25,-19,35,19,9,50,25,-19,38,17,14,51,28,-20,42,22,10,49,29,-18,37,22,11,51,27,-18,40,19,13,46,27,-23,37,22,14,49,25,-22,40,19,14,38,33,-22,31,28,13,38,32,-21,30,27,13,40,30,-19,32,25,14,41,31,-20,34,27,13,39,34,-21,31,29,12,39,33,-20,30,28,12,41,31,-18,32,26,13,42,32,-18,33,28,12,38,34,-21,30,28,13,38,34,-22,31,29,13,37,33,-20,30,27,14,38,33,-20,31,29,14,37,34,-21,32,28,13,36,33,-21,31,27,13,37,35,-22,31,28,12,37,34,-22,30,27,12,36,35,-22,31,27,13,36,35,-22,32,28,13,36,34,-21,31,27,14,37,34,-21,32,28,15,35,34,-22,33,26,13,34,34,-22,33,25,14,35,35,-23,33,26,13,34,35,-23,32,25,11,31,32,-24,31,24,12,32,32,-24,32,25,12,32,31,-22,31,24,13,33,32,-23,32,26,12,34,32,-22,30,27,11,34,31,-22,29,25,11,33,33,-24,30,27,10,33,32,-24,29,25,10,34,32,-24,29,26,11,34,34,-24,30,27,11,34,31,-22,29,25,12,34,32,-22,30,27,12,36,32,-21,29,28,10,36,31,-21,28,26,11,36,33,-23,28,28,9,36,32,-23,27,27,11,41,32,-19,31,27,9,41,31,-19,30,25,9,37,32,-22,27,27,11,37,33,-22,28,28,12,40,30,-21,32,26,11,40,29,-20,31,24,10,36,31,-23,28,26,12,37,32,-23,29,28,9,36,31,-23,27,26,8,36,30,-23,26,25,9,40,28,-21,30,23,10,41,30,-21,31,25,8,36,33,-22,26,27,7,36,31,-22,25,25,7,41,30,-19,29,24,8,41,31,-19,30,26,7,35,31,-23,25,25,8,35,33,-23,26,27,8,36,30,-22,26,25,9,36,31,-22,27,26,10,35,31,-24,28,26,9,34,30,-24,27,24,9,34,32,-25,27,26,8,33,31,-25,26,25,9,33,30,-25,27,24,10,33,31,-25,28,26,9,34,30,-23,27,24,10,34,31,-24,28,26,11,34,30,-23,30,25,10,33,29,-23,29,24,11,32,30,-25,30,24,10,32,29,-24,29,23,8,33,29,-27,26,23,9,33,30,-27,26,24,9,34,28,-26,26,23,9,34,29,-26,27,24,8,35,30,-24,26,25,7,35,29,-24,25,24,8,34,31,-25,25,25,7,34,29,-25,24,24,6,34,30,-24,24,24,7,35,31,-24,25,26,7,35,29,-24,26,24,8,35,30,-24,26,25,7,37,30,-23,26,25,6,37,29,-22,26,24,6,36,31,-23,25,26,5,36,30,-22,24,24,6,42,30,-19,29,25,5,41,28,-19,28,22,5,37,30,-21,25,24,6,37,31,-22,26,26,8,41,29,-21,30,24,7,40,27,-21,29,22,6,36,29,-23,25,24,7,37,30,-23,26,25,6,34,30,-25,24,24,7,35,29,-24,25,24,8,35,30,-24,26,25,7,34,31,-25,25,26,5,36,30,-22,24,24,6,36,29,-23,25,24,7,37,30,-23,26,25,6,37,31,-22,25,26,8,36,33,-22,26,27,9,36,32,-23,27,27,8,36,30,-22,26,25,7,36,31,-22,25,25,9,33,32,-25,27,26,10,34,31,-24,28,26,9,34,30,-24,27,24,8,33,30,-25,27,24,9,36,32,-22,27,27,10,36,31,-22,28,26,12,36,32,-22,29,28,11,37,33,-22,28,28,10,34,33,-24,29,25,11,34,31,-22,29,25,12,34,32,-22,30,27,11,34,34,-24,30,27,13,39,34,-21,30,29,14,38,33,-21,31,29,13,38,33,-21,30,27,12,38,34,-21,29,28,13,37,35,-22,32,28,14,37,34,-21,32,28,13,36,34,-21,31,27,12,36,35,-22,31,27,8,43,24,-19,31,19,9,43,27,-22,31,20,11,43,25,-23,31,18,9,42,23,-20,31,17,7,40,24,-20,27,19,9,40,26,-22,29,20,10,40,25,-23,29,18,9,39,23,-21,28,17,12,45,26,-23,35,21,8,45,28,-19,33,22,11,48,23,-21,36,16,9,48,24,-19,36,18,9,41,23,-21,29,17,7,42,24,-20,29,19,11,41,25,-23,30,18,9,42,26,-22,30,20,9,39,23,-22,27,18,7,39,25,-21,27,20,10,39,25,-23,29,18,9,39,26,-22,29,20,9,36,26,-24,27,21,10,36,26,-25,27,20,8,36,25,-24,26,21,9,36,25,-25,26,19,7,42,24,-19,30,19,9,42,26,-21,31,20,11,42,25,-23,31,18,9,42,23,-20,30,17,10,40,25,-23,29,18,9,39,23,-22,27,17,9,40,26,-22,29,20,7,39,24,-21,27,19,9,47,26,-20,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000029", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-1,8,69,6,-2,71,10,1,75,-10,-8,77,-6,7,80,2,-1,81,5,6,66,0,-6,68,5,6,79,-5,-6,81,0,2,60,4,-2,61,6,4,63,11,1,63,12,9,74,4,-3,76,9,1,70,-10,-9,72,-6,7,73,-4,-7,75,1,4,71,12,-3,64,-5,3,82,4,-3,77,-10,0,67,2,0,82,-4,0,60,5,3,63,12,3,76,8,-4,70,-9,8,72,4,-3,74,8,2,66,-8,-8,68,-3,7,69,-2,-7,71,3,3,74,9,-4,67,-7,28,45,7,-30,36,8,28,48,4,-32,39,5,26,52,3,-31,43,4,23,54,3,-29,46,5,20,53,6,-25,46,7,19,49,9,-23,42,10,21,45,10,-24,38,11,25,43,9,-27,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,15,41,-18,-18,37,-17,11,43,-17,-15,41,-16,7,42,-14,-10,41,-14,6,37,-11,-8,37,-11,9,32,-9,-8,31,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,20,46,-8,-24,40,-7,16,48,-7,-21,44,-6,13,47,-4,-18,44,-4,12,43,-2,-15,40,-1,14,39,0,-16,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,34,6,29,46,5,-33,36,8,30,48,10,-34,40,11,27,49,13,-32,42,14,22,48,13,-27,43,15,19,47,10,-23,40,13,19,45,5,-22,37,9,21,45,2,-25,34,6,30,37,8,-33,29,14,26,35,4,-29,26,12,30,38,12,-34,32,18,27,39,16,-32,35,21,23,39,16,-27,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,7,-29,21,17,31,31,14,-34,26,22,28,32,18,-32,29,25,23,32,18,-28,29,26,20,30,15,-24,27,24,19,29,10,-23,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,30,22,18,-34,20,29,28,23,20,-32,22,31,24,23,20,-28,22,32,22,22,18,-25,21,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,53,8,-34,43,9,24,55,9,-30,47,11,21,50,12,-25,43,13,24,45,11,-26,37,12,29,46,9,-32,37,10,24,54,4,-30,46,5,19,53,6,-25,46,8,19,46,7,-23,40,8,24,44,5,-27,36,6,27,49,3,-31,40,4,21,49,2,-26,42,3,29,52,11,-33,42,12,26,53,12,-31,44,14,27,55,9,-33,45,10,28,48,11,-32,38,13,30,49,8,-34,39,10,24,50,13,-28,42,15,22,53,12,-28,45,13,26,47,13,-29,38,14,22,47,12,-26,40,13,27,45,10,-29,36,11,29,47,6,-32,38,7,28,51,6,-32,42,7,27,54,5,-33,45,7,24,55,7,-30,47,8,21,54,8,-27,47,10,21,52,9,-26,44,10,20,48,10,-24,41,11,21,45,9,-24,38,10,24,44,8,-26,36,9,27,44,7,-30,36,7,26,52,3,-31,43,4,21,54,5,-27,47,6,18,49,7,-23,43,8,21,44,6,-24,38,7,26,46,3,-29,37,4,24,49,2,-29,41,3,23,52,2,-28,44,3,20,51,4,-25,44,5,20,47,4,-24,41,5,23,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,56,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,56,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,17,54,4,-19,50,2,18,56,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,57,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,12,52,25,-21,42,19,12,51,24,-19,42,18,12,50,23,-19,41,17,13,49,23,-19,40,17,14,49,24,-21,39,17,15,50,25,-22,39,18,15,51,26,-23,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,23,55,9,-27,49,2,24,53,9,-27,47,1,26,53,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-25,43,15,14,53,20,-21,44,14,14,51,19,-21,43,13,16,50,19,-21,41,12,17,50,20,-23,40,13,18,51,22,-25,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-30,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,51,12,-27,44,4,25,53,14,-29,45,5,24,55,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,5,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,54,11,-30,46,3,26,56,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,10,40,28,-22,30,25,8,40,27,-22,29,22,11,46,24,-22,35,19,13,46,26,-23,37,21,7,41,30,-19,30,24,6,41,28,-19,28,22,8,48,26,-19,35,19,9,48,28,-18,36,21,10,48,29,-18,37,23,9,48,27,-18,36,20,7,41,29,-18,29,23,9,41,31,-18,30,26,14,46,27,-23,37,23,12,47,25,-22,36,20,10,40,28,-21,29,23,12,40,29,-22,30,26,14,40,30,-21,31,27,12,40,28,-21,30,25,13,47,26,-23,36,22,15,47,28,-22,38,24,12,41,32,-19,31,27,10,41,30,-18,30,25,10,48,29,-18,37,21,12,48,30,-19,38,24,14,48,30,-20,39,25,11,48,30,-19,38,23,12,41,30,-17,32,26,14,41,31,-18,33,28,15,48,28,-22,39,25,13,48,27,-22,38,23,14,41,28,-20,31,26,15,42,30,-20,33,28,15,48,29,-22,40,24,11,46,24,-22,36,19,11,49,23,-22,38,17,15,50,27,-22,41,21,14,49,30,-20,40,24,8,48,25,-19,35,19,9,50,25,-19,38,17,14,51,28,-20,42,22,10,49,29,-18,37,22,11,51,27,-18,40,19,14,46,26,-23,37,22,14,50,25,-22,40,19,15,38,32,-21,31,28,14,38,31,-21,30,27,13,40,29,-19,32,25,15,41,30,-19,34,27,14,39,33,-20,31,29,13,38,33,-20,30,28,13,41,30,-18,32,26,14,42,31,-18,33,28,13,37,33,-21,29,28,14,38,34,-21,30,29,14,37,32,-20,30,27,15,38,32,-20,31,29,15,37,33,-21,32,28,14,36,32,-21,31,27,15,37,34,-22,31,28,14,36,33,-22,30,27,14,36,33,-22,31,27,15,36,34,-22,32,28,14,36,32,-21,31,27,15,37,33,-21,32,28,16,35,32,-22,33,26,15,35,32,-22,33,25,16,35,33,-23,33,26,15,34,33,-23,32,25,13,32,30,-24,31,24,14,32,30,-24,32,25,13,33,29,-22,31,24,15,33,30,-23,32,26,14,34,31,-22,30,27,12,34,30,-22,29,25,13,33,32,-24,30,27,12,33,31,-24,29,25,12,33,31,-23,29,26,13,34,32,-24,29,27,12,34,30,-22,29,25,14,34,31,-22,30,27,13,36,31,-21,29,28,12,36,30,-21,28,26,12,36,33,-23,28,28,11,35,31,-22,27,27,12,40,32,-19,31,27,10,40,30,-19,30,25,11,36,31,-21,27,27,12,36,33,-22,28,28,13,40,30,-20,32,26,12,40,29,-20,31,24,12,36,30,-23,28,26,13,36,31,-23,29,28,11,36,30,-23,27,26,9,35,29,-23,26,25,10,40,28,-20,30,23,11,40,29,-21,31,25,9,36,32,-22,26,27,8,35,30,-21,25,25,8,40,29,-18,29,24,9,41,31,-19,30,26,8,34,30,-23,25,25,10,35,31,-23,26,27,9,36,29,-22,26,25,10,36,31,-22,27,26,12,35,30,-23,28,26,10,34,28,-23,28,24,11,33,30,-25,27,26,10,33,29,-24,26,24,11,33,29,-25,27,24,12,33,30,-25,28,25,10,34,28,-23,27,24,12,35,30,-23,28,26,13,35,28,-23,30,25,12,34,27,-23,29,24,13,33,28,-24,30,24,12,33,27,-24,29,23,11,33,27,-27,26,23,11,34,28,-27,26,24,10,35,27,-26,26,23,11,35,28,-26,27,24,10,35,29,-24,26,25,9,35,28,-24,25,24,10,34,29,-25,25,25,9,33,28,-25,24,24,8,34,28,-24,24,24,9,34,30,-24,25,26,9,35,28,-24,26,23,10,35,29,-24,26,25,9,37,29,-23,26,25,8,36,28,-22,26,24,8,35,30,-23,25,26,7,35,29,-22,24,24,7,41,30,-19,29,25,6,40,28,-19,28,22,6,36,29,-21,25,24,8,37,30,-22,26,26,9,41,28,-21,30,24,8,40,27,-21,29,22,8,36,28,-23,26,24,9,36,29,-23,26,25,8,34,28,-25,24,24,9,35,28,-24,25,24,10,35,29,-24,26,25,9,34,29,-25,25,26,6,35,29,-22,24,24,7,36,28,-23,25,24,9,36,30,-23,26,25,8,36,31,-22,25,26,9,35,32,-22,26,27,10,36,31,-22,27,27,9,35,29,-22,26,25,8,35,30,-22,25,25,11,33,30,-25,28,26,12,35,30,-24,28,26,10,34,28,-23,27,24,10,33,29,-25,27,24,11,36,31,-22,27,27,12,36,30,-22,28,26,13,36,31,-22,29,28,12,36,33,-22,28,28,12,33,31,-24,29,25,12,34,30,-22,29,25,14,34,31,-22,30,27,13,33,32,-24,30,27,14,38,33,-21,30,29,15,38,32,-21,31,29,14,37,32,-21,30,27,13,38,33,-21,29,28,15,36,34,-22,31,28,15,37,33,-21,32,28,14,36,32,-21,31,27,14,36,34,-22,31,27,8,43,24,-19,31,19,10,43,26,-21,31,20,12,43,24,-23,31,18,10,43,22,-20,31,16,8,39,24,-20,27,19,9,40,26,-22,29,20,11,40,24,-23,29,18,10,40,23,-21,28,17,12,45,26,-23,35,21,8,44,28,-19,33,22,11,48,23,-21,36,16,9,48,24,-19,36,18,10,41,22,-20,29,17,8,41,24,-20,29,19,11,41,24,-23,30,18,10,41,26,-22,30,20,10,39,23,-22,27,18,8,39,24,-21,27,20,11,39,24,-23,29,18,10,39,26,-22,29,20,10,36,26,-24,27,21,11,36,25,-25,27,20,9,36,25,-24,26,21,10,36,24,-25,26,19,8,42,24,-19,30,19,10,42,26,-21,31,20,12,42,24,-23,31,18,10,42,22,-20,30,17,11,40,24,-23,29,18,10,39,23,-22,27,17,10,39,26,-22,29,20,8,39,24,-21,27,19,9,47,26,-20,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }, + { "name": "animation_000030", "vertices": [27,0,-78,27,0,-24,-27,0,-24,-27,0,-78,27,24,-78,27,24,-24,-27,24,-24,-27,24,-78,2,63,-5,-7,65,-1,8,69,6,-2,71,10,1,75,-10,-8,77,-6,7,80,2,-1,81,5,6,66,0,-6,68,5,6,79,-5,-6,81,0,2,60,4,-2,61,6,4,63,11,1,63,12,9,74,4,-3,76,9,1,70,-10,-9,72,-6,7,73,-4,-7,75,1,4,71,12,-3,64,-5,3,82,4,-3,77,-10,0,67,2,0,82,-4,0,60,5,3,63,12,3,76,8,-4,70,-9,8,72,4,-3,74,8,2,66,-8,-8,68,-3,7,69,-2,-7,71,3,3,74,9,-4,67,-7,28,45,7,-30,36,8,28,48,4,-32,39,5,26,52,3,-31,43,4,23,54,3,-28,46,5,20,53,6,-25,46,7,19,49,9,-23,43,10,21,45,10,-24,38,11,25,43,9,-27,35,10,11,25,-22,-9,24,-23,12,30,-26,-11,29,-26,10,35,-27,-11,35,-27,7,39,-24,-9,39,-23,4,39,-19,-7,40,-18,4,34,-14,-5,35,-14,6,28,-13,-5,28,-13,9,25,-17,-6,25,-18,18,36,-16,-19,32,-16,16,31,-14,-16,28,-14,15,41,-18,-18,37,-17,11,43,-17,-14,41,-16,7,42,-14,-10,41,-14,6,37,-11,-8,37,-10,9,32,-9,-8,30,-9,13,30,-11,-12,27,-11,23,42,-7,-25,36,-6,22,38,-4,-23,32,-3,20,46,-8,-24,41,-7,16,48,-7,-21,44,-6,13,47,-4,-18,44,-3,12,43,-2,-15,40,-1,14,39,0,-16,35,0,18,36,-1,-19,31,-1,28,12,15,-30,10,31,30,14,17,-33,12,32,31,15,21,-34,15,35,29,16,23,-32,17,37,25,16,23,-29,17,37,23,14,21,-26,15,36,22,13,17,-25,12,33,24,12,15,-27,10,31,26,45,2,-29,34,6,29,46,5,-33,37,8,30,48,10,-34,40,11,27,49,13,-32,42,14,22,48,13,-27,43,15,19,47,10,-23,40,13,19,45,5,-22,37,9,21,45,2,-25,34,6,30,37,8,-33,29,14,26,35,4,-29,26,12,30,38,12,-34,32,18,27,39,16,-32,35,21,23,39,16,-27,35,21,19,37,12,-23,33,19,19,36,8,-22,29,15,22,35,4,-24,27,12,30,29,10,-33,23,19,27,28,7,-29,21,17,31,31,14,-34,26,22,28,32,18,-32,29,25,23,32,18,-27,29,26,20,30,15,-24,27,24,19,29,10,-23,24,20,22,28,7,-25,21,18,30,21,14,-33,17,26,27,20,11,-30,15,25,30,22,18,-34,20,29,28,23,20,-32,22,31,24,23,20,-28,22,32,22,22,18,-25,21,30,21,20,14,-24,18,27,24,20,11,-26,16,25,27,50,13,-31,41,14,29,53,8,-34,43,9,24,55,9,-30,47,11,21,50,12,-25,43,13,24,45,11,-26,37,12,29,46,9,-32,37,10,24,54,4,-30,46,5,19,53,6,-25,46,8,19,46,7,-23,40,8,24,44,5,-27,36,6,27,49,3,-31,40,4,21,49,2,-26,42,3,29,52,11,-33,42,12,26,53,12,-31,44,14,27,55,9,-32,45,10,28,48,11,-32,38,13,30,49,8,-34,39,10,24,50,13,-28,42,15,22,53,12,-28,45,13,26,47,13,-29,38,14,22,47,12,-25,40,13,27,45,10,-29,36,11,29,47,6,-32,38,7,28,51,6,-32,42,7,27,54,5,-33,45,7,24,55,7,-30,47,8,21,54,8,-27,47,10,21,52,9,-26,44,10,20,48,10,-24,41,11,21,45,9,-24,38,10,24,44,8,-26,36,9,27,44,7,-30,36,7,26,52,3,-31,43,4,21,54,5,-27,47,6,18,49,7,-23,43,8,21,44,6,-24,38,7,26,46,3,-29,38,4,24,49,2,-29,41,3,23,52,2,-28,44,3,20,51,4,-25,44,5,20,47,4,-24,41,5,23,46,3,-26,39,4,11,26,-27,-11,26,-27,11,34,-19,-11,34,-19,8,38,-34,-8,38,-34,8,44,-24,-8,44,-24,0,31,-15,0,22,-25,0,45,-22,0,37,-35,13,30,-23,-13,30,-23,10,41,-28,-10,41,-28,0,24,-21,0,43,-29,10,38,-21,-10,38,-21,10,29,-30,-10,29,-30,0,37,-17,0,27,-33,12,36,-25,-12,36,-25,3,33,-16,-3,33,-16,6,23,-27,-6,23,-27,4,45,-22,-4,45,-22,4,37,-35,-4,37,-35,4,27,-22,-4,27,-22,5,43,-29,-5,43,-29,4,38,-18,-4,38,-18,5,27,-33,-5,27,-33,8,38,-33,-9,37,-31,11,37,-28,-10,36,-25,9,35,-22,-7,34,-20,1,34,-18,0,38,-34,6,52,-31,-8,51,-29,10,50,-25,-10,49,-23,7,49,-19,-5,49,-17,0,49,-16,0,51,-31,9,44,-26,-9,43,-24,7,45,-32,-9,44,-30,7,42,-20,-6,41,-18,1,41,-17,0,45,-32,6,56,-29,-8,52,-26,9,50,-27,-9,46,-25,8,44,-26,-5,41,-24,2,41,-24,-1,55,-28,6,59,-22,-8,55,-20,11,55,-19,-10,50,-15,10,49,-14,-5,46,-11,2,47,-12,-1,59,-23,10,52,-23,-9,47,-19,6,57,-26,-8,53,-23,9,47,-18,-5,44,-16,2,44,-17,-1,57,-25,6,59,-22,-8,55,-20,11,55,-19,-10,50,-16,10,50,-14,-5,46,-11,2,47,-12,-1,59,-22,4,65,-8,-6,63,-7,7,62,-8,-7,59,-6,5,58,-8,-4,56,-6,1,55,-7,-1,65,-8,2,65,-7,-4,63,-7,4,62,-7,-4,60,-7,4,58,-7,-2,57,-6,1,56,-6,0,65,-7,1,64,-2,-2,63,-2,3,62,-2,-3,61,-2,3,59,-2,-1,58,-2,0,57,-2,0,65,-2,1,64,-2,-2,63,-2,3,62,-1,-3,60,-1,3,59,0,-1,58,0,0,58,0,0,64,-3,1,66,-1,-3,66,0,3,64,0,-3,62,0,3,61,0,-2,60,1,0,59,1,-1,67,-1,19,54,-9,-14,56,-8,18,52,-8,-12,54,-7,15,52,-7,-11,54,-5,13,54,-7,-10,56,-3,13,57,-7,-11,59,-2,15,59,-7,-13,60,-3,18,59,-8,-14,60,-5,19,57,-9,-15,59,-7,26,54,8,-28,48,1,24,53,9,-27,46,2,22,53,10,-26,46,3,21,54,10,-25,48,5,21,56,10,-26,50,6,22,58,10,-27,51,5,24,58,9,-29,51,3,26,56,8,-29,50,1,22,52,2,-21,49,-1,24,54,2,-23,51,-2,19,52,3,-20,49,0,17,54,4,-19,50,2,18,56,4,-20,53,3,19,58,3,-22,54,2,22,58,2,-23,55,0,24,57,2,-24,53,-2,20,52,-2,-17,51,-4,22,54,-3,-19,53,-5,17,52,-1,-16,51,-1,16,54,0,-15,53,0,16,57,0,-16,55,0,17,59,-1,-18,57,0,20,59,-2,-19,57,-2,22,57,-3,-20,56,-4,19,52,-5,-15,53,-5,21,54,-6,-16,55,-6,16,52,-4,-13,53,-3,15,54,-4,-13,54,-1,15,57,-4,-14,57,0,16,59,-4,-15,59,-1,19,59,-5,-17,59,-4,21,57,-6,-17,57,-6,14,52,26,-22,41,19,12,52,25,-21,42,19,12,51,24,-19,42,18,12,50,23,-19,41,17,13,49,23,-19,40,17,14,49,24,-21,39,17,15,50,25,-22,39,18,15,51,26,-23,40,18,25,58,12,-31,50,5,24,59,11,-30,51,5,22,57,9,-28,51,4,23,55,9,-27,49,2,24,53,9,-27,47,1,26,53,10,-29,46,1,27,55,11,-31,47,3,27,57,12,-32,48,4,15,54,21,-23,44,15,17,54,22,-25,43,15,14,53,20,-21,44,14,14,51,19,-21,43,13,16,50,19,-21,41,12,17,50,20,-23,40,13,18,51,22,-24,41,13,18,52,22,-25,42,15,21,58,13,-28,50,8,23,57,14,-30,48,8,20,56,12,-26,49,6,20,54,11,-25,48,5,22,52,11,-25,45,4,24,51,12,-27,44,4,25,53,14,-29,45,5,24,55,15,-30,46,7,23,58,11,-29,51,6,25,58,12,-31,50,5,21,57,10,-27,50,5,22,55,10,-26,49,3,23,53,10,-26,47,2,25,53,11,-29,46,2,26,54,11,-30,46,3,26,56,12,-32,48,4,30,14,15,-32,14,32,31,14,23,-34,14,39,25,14,25,-28,14,41,23,14,17,-26,15,33,35,2,23,-38,2,39,30,4,12,-32,5,28,23,4,22,-26,5,38,22,4,15,-25,5,31,26,2,31,-29,2,47,26,7,31,-29,7,47,36,2,28,-40,2,43,34,7,28,-38,8,44,28,14,25,-31,14,41,26,14,15,-29,14,31,25,4,12,-28,5,28,30,8,30,-33,9,46,31,14,19,-34,14,35,23,14,21,-26,14,37,32,4,17,-35,4,33,22,4,17,-25,5,34,30,8,30,-33,9,46,34,7,28,-38,8,44,37,2,28,-40,2,43,26,7,31,-29,7,48,26,2,31,-29,2,48,31,6,38,-35,6,54,28,5,37,-32,6,53,36,5,34,-40,5,50,37,2,34,-41,2,50,28,2,38,-32,2,54,31,2,38,-35,2,54,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,0,31,-29,0,48,37,0,28,-40,0,43,30,0,30,-33,0,46,26,0,17,-29,0,34,22,0,17,-25,0,34,32,0,17,-35,0,33,30,0,30,-33,0,46,25,0,12,-28,0,28,28,0,23,-31,0,39,36,0,28,-40,0,43,26,0,31,-29,0,47,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,31,2,38,-35,2,54,28,2,38,-32,2,54,37,2,34,-41,2,50,28,0,38,-32,0,54,31,0,38,-35,0,54,37,0,34,-41,0,50,26,2,31,-29,2,48,26,0,31,-29,0,48,37,2,28,-40,2,43,37,0,28,-40,0,43,22,4,17,-25,5,34,32,4,17,-35,4,33,22,0,17,-25,0,34,32,0,17,-35,0,33,25,4,12,-28,5,28,25,0,12,-28,0,28,36,0,28,-40,0,43,36,2,28,-40,2,43,26,0,31,-29,0,47,26,2,31,-29,2,47,22,4,15,-25,5,31,23,4,22,-26,5,38,30,4,12,-32,5,28,35,2,23,-38,2,39,22,0,15,-25,0,31,23,0,22,-26,0,38,35,0,23,-38,0,39,29,0,12,-32,0,28,17,58,-13,-15,60,-9,15,54,-11,-13,55,-8,3,55,-11,-1,54,-11,7,61,-18,-5,62,-16,18,60,-6,-13,62,-3,15,54,-5,-12,55,-2,3,55,-7,0,55,-7,9,64,-8,-5,64,-6,10,53,-12,-9,54,-9,14,56,-16,-12,57,-13,12,56,-5,-8,57,-3,14,62,-6,-9,63,-3,16,55,-12,-14,57,-9,6,59,-17,-4,59,-15,17,57,-4,-13,58,-1,10,58,-11,-7,59,-9,13,53,-15,-12,55,-12,12,59,-4,-8,60,-2,14,53,-8,-11,54,-5,18,60,-10,-14,62,-6,2,54,-8,0,54,-8,9,64,-12,-5,65,-11,10,53,-8,-7,53,-6,14,63,-12,-10,64,-9,13,53,-11,-11,54,-8,16,57,-14,-14,59,-11,14,55,-4,-10,56,-1,16,61,-6,-12,62,-3,14,54,-14,-13,56,-10,15,58,-4,-10,59,-1,12,53,-8,-9,54,-5,16,61,-11,-12,63,-7,10,40,28,-21,30,25,8,40,27,-21,29,22,11,46,24,-22,35,19,13,46,26,-22,36,21,7,41,30,-18,30,24,6,41,28,-18,29,22,8,48,26,-19,35,19,9,48,28,-18,36,21,10,48,29,-18,37,22,9,48,27,-18,36,20,7,41,29,-17,29,23,9,41,31,-17,30,26,14,46,27,-23,37,23,12,47,25,-22,36,20,10,40,27,-21,29,24,12,40,29,-21,30,26,14,40,30,-20,31,27,12,40,28,-20,30,25,13,47,26,-23,36,22,15,47,28,-22,38,24,12,41,32,-18,32,27,10,41,30,-17,31,25,10,48,29,-18,37,21,12,48,30,-18,38,23,14,48,30,-20,39,25,11,48,30,-18,38,23,12,41,30,-17,32,26,14,41,31,-17,33,28,15,48,28,-22,38,25,13,48,27,-22,37,23,14,41,28,-19,31,26,15,42,30,-19,33,28,15,48,29,-22,39,24,11,47,24,-22,35,19,11,49,23,-22,38,17,15,50,27,-22,41,21,14,49,30,-20,40,24,8,48,25,-19,36,18,9,50,25,-19,38,17,14,51,28,-20,42,22,10,49,29,-18,37,22,11,51,27,-18,40,19,14,46,26,-23,37,22,14,50,25,-22,40,19,15,38,32,-20,31,28,14,38,31,-20,30,27,14,40,29,-18,33,25,15,41,30,-19,34,27,14,39,33,-19,31,29,13,38,32,-19,30,28,13,41,30,-17,32,26,14,42,31,-17,33,28,13,37,33,-20,29,28,15,38,33,-20,30,29,14,37,32,-19,30,27,15,38,32,-19,31,29,15,37,33,-20,32,28,14,36,32,-20,31,27,15,37,34,-21,31,28,14,36,33,-21,30,27,14,35,33,-21,31,27,15,36,34,-21,31,28,14,36,32,-20,31,27,15,37,33,-20,32,28,16,36,32,-21,33,26,15,35,31,-21,32,25,16,35,32,-22,33,27,15,34,32,-22,32,26,14,32,29,-23,31,24,15,33,30,-23,31,26,14,34,29,-22,31,25,15,34,30,-22,32,26,14,35,31,-21,30,27,12,34,30,-21,29,25,14,33,31,-23,30,27,12,33,30,-23,29,26,12,33,31,-22,28,26,13,34,32,-23,29,27,13,34,30,-21,29,25,14,34,31,-21,30,27,13,36,31,-20,29,28,12,36,30,-20,28,26,12,36,32,-21,28,28,11,35,31,-21,27,27,12,40,31,-18,31,27,10,40,30,-18,30,25,11,36,31,-20,27,27,12,36,32,-20,28,28,13,40,30,-20,32,26,12,40,29,-19,31,24,12,36,30,-21,28,26,13,36,31,-22,29,28,11,36,30,-22,27,26,9,35,29,-22,26,25,10,40,28,-20,30,23,11,40,29,-20,31,25,9,36,32,-20,26,27,8,35,30,-20,25,25,8,40,29,-17,29,24,9,41,31,-18,30,25,9,34,30,-21,25,25,10,35,31,-22,26,27,9,36,29,-20,26,25,10,36,30,-21,27,26,12,35,29,-22,28,26,11,35,28,-22,27,24,11,33,30,-23,27,26,10,33,29,-23,26,25,11,33,28,-24,27,24,12,33,29,-24,28,26,11,35,28,-22,27,25,12,35,29,-22,27,26,13,35,28,-22,29,25,12,35,27,-22,29,24,14,34,28,-23,30,25,13,33,27,-23,29,23,11,34,26,-25,25,24,12,34,27,-26,26,25,11,35,26,-25,26,24,11,35,27,-25,26,24,10,35,29,-23,26,25,9,35,27,-23,25,24,10,34,29,-24,25,26,9,34,28,-24,24,24,8,34,28,-23,24,24,9,34,29,-23,25,26,9,35,27,-23,25,24,10,35,29,-23,26,25,9,37,29,-21,26,25,8,36,28,-21,26,24,8,35,30,-21,25,26,7,35,29,-21,24,24,7,41,30,-18,29,25,6,40,28,-18,28,22,7,36,29,-20,25,24,8,36,30,-20,26,26,9,41,28,-20,30,24,8,40,27,-20,29,22,8,36,28,-22,25,24,9,36,29,-22,26,25,9,34,28,-23,24,24,9,35,27,-23,25,24,10,35,29,-23,26,25,10,34,29,-23,24,26,7,35,29,-20,24,24,8,36,28,-21,25,24,9,36,29,-21,26,25,8,36,30,-21,25,26,10,35,32,-21,26,27,11,36,31,-21,27,27,9,35,29,-21,26,25,8,35,30,-21,25,25,12,33,30,-24,27,26,12,35,29,-22,28,26,11,34,28,-22,27,24,11,33,29,-23,26,25,11,36,31,-21,27,27,12,36,30,-21,28,26,13,36,31,-21,29,28,12,36,32,-21,28,28,12,33,31,-23,29,26,12,34,30,-21,29,26,14,34,31,-21,30,27,13,33,32,-23,29,27,14,38,33,-20,30,29,15,38,32,-20,31,29,14,37,32,-19,30,27,13,38,33,-19,29,28,15,36,34,-21,31,28,15,37,33,-20,32,28,14,36,32,-20,31,27,14,36,33,-21,30,27,8,43,24,-18,31,18,10,43,26,-21,31,20,12,43,24,-22,31,18,10,43,22,-19,31,16,8,39,24,-20,27,19,10,40,26,-21,29,20,11,40,24,-22,29,18,10,40,22,-21,28,17,12,45,26,-23,35,21,9,44,28,-19,33,22,11,48,23,-21,36,16,9,48,24,-19,36,18,10,41,22,-20,29,17,8,41,24,-19,29,19,12,41,24,-22,30,18,10,41,26,-21,30,20,10,39,23,-21,27,18,8,39,24,-20,27,20,11,39,24,-22,29,18,10,39,26,-21,29,20,10,36,26,-23,27,21,11,36,25,-24,27,20,9,36,25,-23,25,21,10,36,24,-24,25,20,8,42,24,-19,30,19,10,42,26,-21,31,20,12,42,24,-22,31,18,10,42,22,-20,30,17,11,40,24,-22,29,18,10,39,23,-21,27,17,10,39,26,-21,29,20,8,39,24,-20,27,19,9,46,26,-20,35,20,9,59,-14,-8,54,-11,5,62,-15,-7,59,-14,10,53,-11,-6,49,-8,2,51,-9,-1,62,-15,7,54,-11,-5,54,-10,10,59,-17,-9,60,-14,7,55,-6,-4,55,-5,11,63,-7,-7,64,-5,9,56,-16,-8,57,-14,10,59,-7,-6,60,-5,6,53,-8,-3,54,-7,11,63,-12,-8,64,-10] }], + + "normals": [], + + "colors": [], + + "uvs": [[]], + + "faces": [3,0,1,2,3,0,3,4,7,6,5,0,3,0,4,5,1,0,3,1,5,6,2,0,3,2,6,7,3,0,3,4,0,3,7,0,3,16,10,22,20,1,3,23,11,17,21,1,3,18,28,26,12,1,3,27,29,19,13,1,3,14,24,28,18,1,3,29,25,15,19,1,3,31,8,16,34,1,3,17,9,31,34,1,3,35,18,12,33,1,3,13,19,35,33,1,3,32,14,18,35,1,3,19,15,32,35,1,3,34,16,20,36,1,3,21,17,34,36,1,3,10,30,37,22,1,3,37,30,11,23,1,3,22,37,36,20,1,3,36,37,23,21,1,3,14,32,38,24,1,3,38,32,15,25,1,3,26,39,33,12,1,3,33,39,27,13,1,3,8,42,44,16,1,3,45,43,9,17,1,3,42,26,28,44,1,3,29,27,43,45,1,3,24,40,44,28,1,3,45,41,25,29,1,3,40,10,16,44,1,3,17,11,41,45,1,3,38,46,40,24,1,3,41,46,38,25,1,3,46,30,10,40,1,3,11,30,46,41,1,3,42,8,31,47,1,3,31,9,43,47,1,3,47,39,26,42,1,3,27,39,47,43,1,3,82,64,66,80,2,3,67,65,83,81,2,3,80,66,68,84,2,3,69,67,81,85,2,3,84,68,70,86,2,3,71,69,85,87,2,3,86,70,72,88,2,3,73,71,87,89,2,3,88,72,74,90,2,3,75,73,89,91,2,3,90,74,76,92,2,3,77,75,91,93,2,3,92,76,78,94,2,3,79,77,93,95,2,3,94,78,64,82,2,3,65,79,95,83,2,3,48,98,96,50,2,3,97,99,49,51,2,3,98,82,80,96,2,3,81,83,99,97,2,3,50,96,100,52,2,3,101,97,51,53,2,3,96,80,84,100,2,3,85,81,97,101,2,3,52,100,102,54,2,3,103,101,53,55,2,3,100,84,86,102,2,3,87,85,101,103,2,3,54,102,104,56,2,3,105,103,55,57,2,3,102,86,88,104,2,3,89,87,103,105,2,3,56,104,106,58,2,3,107,105,57,59,2,3,104,88,90,106,2,3,91,89,105,107,2,3,58,106,108,60,2,3,109,107,59,61,2,3,106,90,92,108,2,3,93,91,107,109,2,3,60,108,110,62,2,3,111,109,61,63,2,3,108,92,94,110,2,3,95,93,109,111,2,3,98,48,62,110,2,3,63,49,99,111,2,3,110,94,82,98,2,3,83,95,111,99,2,3,146,128,130,144,2,3,131,129,147,145,2,3,144,130,132,148,2,3,133,131,145,149,2,3,148,132,134,150,2,3,135,133,149,151,2,3,150,134,136,152,2,3,137,135,151,153,2,3,152,136,138,154,2,3,139,137,153,155,2,3,154,138,140,156,2,3,141,139,155,157,2,3,156,140,142,158,2,3,143,141,157,159,2,3,158,142,128,146,2,3,129,143,159,147,2,3,162,146,144,160,2,3,145,147,163,161,2,3,160,144,148,164,2,3,149,145,161,165,2,3,164,148,150,166,2,3,151,149,165,167,2,3,166,150,152,168,2,3,153,151,167,169,2,3,168,152,154,170,2,3,155,153,169,171,2,3,170,154,156,172,2,3,157,155,171,173,2,3,172,156,158,174,2,3,159,157,173,175,2,3,174,158,146,162,2,3,147,159,175,163,2,3,112,178,176,114,2,3,177,179,113,115,2,3,178,162,160,176,2,3,161,163,179,177,2,3,114,176,180,116,2,3,181,177,115,117,2,3,176,160,164,180,2,3,165,161,177,181,2,3,116,180,182,118,2,3,183,181,117,119,2,3,180,164,166,182,2,3,167,165,181,183,2,3,118,182,184,120,2,3,185,183,119,121,2,3,182,166,168,184,2,3,169,167,183,185,2,3,120,184,186,122,2,3,187,185,121,123,2,3,184,168,170,186,2,3,171,169,185,187,2,3,122,186,188,124,2,3,189,187,123,125,2,3,186,170,172,188,2,3,173,171,187,189,2,3,124,188,190,126,2,3,191,189,125,127,2,3,188,172,174,190,2,3,175,173,189,191,2,3,126,190,178,112,2,3,179,191,127,113,2,3,190,174,162,178,2,3,163,175,191,179,2,2,220,216,194,2,2,195,217,221,2,2,216,220,218,2,2,219,221,217,2,2,196,218,220,2,2,221,219,197,2,2,218,192,216,2,2,217,193,219,2,2,224,194,216,2,2,217,195,225,2,2,216,222,224,2,2,225,223,217,2,2,202,224,222,2,2,223,225,203,2,2,222,216,192,2,2,193,217,223,2,2,228,218,196,2,2,197,219,229,2,2,218,228,226,2,2,227,229,219,2,2,198,226,228,2,2,229,227,199,2,2,226,192,218,2,2,219,193,227,2,2,232,226,198,2,2,199,227,233,2,2,226,232,230,2,2,231,233,227,2,2,200,230,232,2,2,233,231,201,2,2,230,192,226,2,2,227,193,231,2,2,234,230,200,2,2,201,231,235,2,2,230,234,222,2,2,223,235,231,2,2,202,222,234,2,2,235,223,203,2,2,222,192,230,2,2,231,193,223,2,2,238,194,224,2,2,225,195,239,2,2,224,236,238,2,2,239,237,225,2,2,212,238,236,2,2,237,239,213,2,2,236,224,202,2,2,203,225,237,2,2,242,196,220,2,2,221,197,243,2,2,220,240,242,2,2,243,241,221,2,2,204,242,240,2,2,241,243,205,2,2,240,220,194,2,2,195,221,241,2,2,246,198,228,2,2,229,199,247,2,2,228,244,246,2,2,247,245,229,2,2,206,246,244,2,2,245,247,207,2,2,244,228,196,2,2,197,229,245,2,2,250,200,232,2,2,233,201,251,2,2,232,248,250,2,2,251,249,233,2,2,208,250,248,2,2,249,251,209,2,2,248,232,198,2,2,199,233,249,2,2,254,202,234,2,2,235,203,255,2,2,234,252,254,2,2,255,253,235,2,2,210,254,252,2,2,253,255,211,2,2,252,234,200,2,2,201,235,253,2,2,256,238,212,2,2,213,239,257,2,2,238,256,240,2,2,241,257,239,2,2,204,240,256,2,2,257,241,205,2,2,240,194,238,2,2,239,195,241,2,2,258,242,204,2,2,205,243,259,2,2,242,258,244,2,2,245,259,243,2,2,206,244,258,2,2,259,245,207,2,2,244,196,242,2,2,243,197,245,2,2,260,246,206,2,2,207,247,261,2,2,246,260,248,2,2,249,261,247,2,2,208,248,260,2,2,261,249,209,2,2,248,198,246,2,2,247,199,249,2,2,262,250,208,2,2,209,251,263,2,2,250,262,252,2,2,253,263,251,2,2,210,252,262,2,2,263,253,211,2,2,252,200,250,2,2,251,201,253,2,2,264,254,210,2,2,211,255,265,2,2,254,264,236,2,2,237,265,255,2,2,212,236,264,2,2,265,237,213,2,2,236,202,254,2,2,255,203,237,2,2,268,204,256,2,2,257,205,269,2,2,256,266,268,2,2,269,267,257,2,2,214,268,266,2,2,267,269,215,2,2,266,256,212,2,2,213,257,267,2,2,270,206,258,2,2,259,207,271,2,2,258,268,270,2,2,271,269,259,2,2,214,270,268,2,2,269,271,215,2,2,268,258,204,2,2,205,259,269,2,2,272,208,260,2,2,261,209,273,2,2,260,270,272,2,2,273,271,261,2,2,214,272,270,2,2,271,273,215,2,2,270,260,206,2,2,207,261,271,2,2,274,210,262,2,2,263,211,275,2,2,262,272,274,2,2,275,273,263,2,2,214,274,272,2,2,273,275,215,2,2,272,262,208,2,2,209,263,273,2,2,266,212,264,2,2,265,213,267,2,2,264,274,266,2,2,267,275,265,2,2,214,266,274,2,2,275,267,215,2,2,274,264,210,2,2,211,265,275,2,3,290,300,296,280,2,3,297,301,291,281,2,3,300,288,276,296,2,3,277,289,301,297,2,3,282,294,300,290,2,3,301,295,283,291,2,3,294,278,288,300,2,3,289,279,295,301,2,3,288,310,304,276,2,3,305,311,289,277,2,3,310,292,285,304,2,3,285,292,311,305,2,3,278,302,310,288,2,3,311,303,279,289,2,3,302,284,292,310,2,3,292,284,303,311,2,3,293,312,308,287,2,3,309,313,293,287,2,3,312,290,280,308,2,3,281,291,313,309,2,3,286,306,312,293,2,3,313,307,286,293,2,3,306,282,290,312,2,3,291,283,307,313,2,3,298,314,306,286,2,3,307,315,298,286,2,3,314,294,282,306,2,3,283,295,315,307,2,3,284,302,314,298,2,3,315,303,284,298,2,3,302,278,294,314,2,3,295,279,303,315,2,3,296,316,308,280,2,3,309,317,297,281,2,3,316,299,287,308,2,3,287,299,317,309,2,3,276,304,316,296,2,3,317,305,277,297,2,3,304,285,299,316,2,3,299,285,305,317,2,3,318,336,334,320,2,3,335,337,319,321,2,3,336,326,328,334,2,3,329,327,337,335,2,3,320,334,338,322,2,3,339,335,321,323,2,3,334,328,330,338,2,3,331,329,335,339,2,3,322,338,340,324,2,3,340,339,323,324,2,3,338,330,332,340,2,3,332,331,339,340,2,3,325,341,336,318,2,3,337,341,325,319,2,3,341,333,326,336,2,3,327,333,341,337,2,3,342,360,358,344,2,3,359,361,343,345,2,3,360,350,352,358,2,3,353,351,361,359,2,3,344,358,362,346,2,3,363,359,345,347,2,3,358,352,354,362,2,3,355,353,359,363,2,3,346,362,364,348,2,3,364,363,347,348,2,3,362,354,356,364,2,3,356,355,363,364,2,3,349,365,360,342,2,3,361,365,349,343,2,3,365,357,350,360,2,3,351,357,365,361,2,3,382,390,392,384,2,3,393,391,383,385,2,3,384,392,394,386,2,3,395,393,385,387,2,3,386,394,396,388,2,3,396,395,387,388,2,3,389,397,390,382,2,3,391,397,389,383,2,3,398,400,408,406,2,3,409,401,399,407,2,3,400,402,410,408,2,3,411,403,401,409,2,3,402,404,412,410,2,3,412,404,403,411,2,3,405,398,406,413,2,3,407,399,405,413,2,3,448,430,432,446,2,3,433,431,449,447,2,3,446,432,434,450,2,3,435,433,447,451,2,3,450,434,436,452,2,3,437,435,451,453,2,3,452,436,438,454,2,3,439,437,453,455,2,3,454,438,440,456,2,3,441,439,455,457,2,3,456,440,442,458,2,3,443,441,457,459,2,3,458,442,444,460,2,3,445,443,459,461,2,3,460,444,430,448,2,3,431,445,461,449,2,3,464,448,446,462,2,3,447,449,465,463,2,3,462,446,450,466,2,3,451,447,463,467,2,3,466,450,452,468,2,3,453,451,467,469,2,3,468,452,454,470,2,3,455,453,469,471,2,3,470,454,456,472,2,3,457,455,471,473,2,3,472,456,458,474,2,3,459,457,473,475,2,3,474,458,460,476,2,3,461,459,475,477,2,3,476,460,448,464,2,3,449,461,477,465,2,3,414,480,478,416,2,3,479,481,415,417,2,3,480,464,462,478,2,3,463,465,481,479,2,3,416,478,482,418,2,3,483,479,417,419,2,3,478,462,466,482,2,3,467,463,479,483,2,3,418,482,484,420,2,3,485,483,419,421,2,3,482,466,468,484,2,3,469,467,483,485,2,3,420,484,486,422,2,3,487,485,421,423,2,3,484,468,470,486,2,3,471,469,485,487,2,3,422,486,488,424,2,3,489,487,423,425,2,3,486,470,472,488,2,3,473,471,487,489,2,3,424,488,490,426,2,3,491,489,425,427,2,3,488,472,474,490,2,3,475,473,489,491,2,3,426,490,492,428,2,3,493,491,427,429,2,3,490,474,476,492,2,3,477,475,491,493,2,3,428,492,480,414,2,3,481,493,429,415,2,3,492,476,464,480,2,3,465,477,493,481,2,3,494,528,526,496,2,3,527,529,495,497,2,3,496,526,530,498,2,3,531,527,497,499,2,3,498,530,532,500,2,3,533,531,499,501,2,3,500,532,534,502,2,3,535,533,501,503,2,3,502,534,536,504,2,3,537,535,503,505,2,3,504,536,538,506,2,3,539,537,505,507,2,3,506,538,540,508,2,3,541,539,507,509,2,3,508,540,528,494,2,3,529,541,509,495,2,3,528,544,542,526,2,3,543,545,529,527,2,3,526,542,546,530,2,3,547,543,527,531,2,3,530,546,548,532,2,3,549,547,531,533,2,3,532,548,550,534,2,3,551,549,533,535,2,3,534,550,552,536,2,3,553,551,535,537,2,3,536,552,554,538,2,3,555,553,537,539,2,3,538,554,556,540,2,3,557,555,539,541,2,3,540,556,544,528,2,3,545,557,541,529,2,3,544,560,558,542,2,3,559,561,545,543,2,3,560,510,512,558,2,3,513,511,561,559,2,3,542,558,562,546,2,3,563,559,543,547,2,3,558,512,514,562,2,3,515,513,559,563,2,3,546,562,564,548,2,3,565,563,547,549,2,3,562,514,516,564,2,3,517,515,563,565,2,3,548,564,566,550,2,3,567,565,549,551,2,3,564,516,518,566,2,3,519,517,565,567,2,3,550,566,568,552,2,3,569,567,551,553,2,3,566,518,520,568,2,3,521,519,567,569,2,3,552,568,570,554,2,3,571,569,553,555,2,3,568,520,522,570,2,3,523,521,569,571,2,3,554,570,572,556,2,3,573,571,555,557,2,3,570,522,524,572,2,3,525,523,571,573,2,3,556,572,560,544,2,3,561,573,557,545,2,3,572,524,510,560,2,3,511,525,573,561,2,3,578,586,590,592,2,3,591,587,579,593,2,3,582,576,596,594,2,3,597,577,583,595,2,3,580,600,602,588,2,3,603,601,581,589,2,3,600,574,584,602,2,3,585,575,601,603,2,3,576,598,604,596,2,3,605,599,577,597,2,3,598,578,592,604,2,3,593,579,599,605,2,3,574,606,610,584,2,3,611,607,575,585,2,3,606,576,582,610,2,3,583,577,607,611,2,3,578,608,612,586,2,3,613,609,579,587,2,3,608,580,588,612,2,3,589,581,609,613,2,3,614,620,626,624,2,3,627,621,615,625,2,3,614,624,628,616,2,3,629,625,615,617,2,3,616,628,630,618,2,3,631,629,617,619,2,3,620,622,632,626,2,3,633,623,621,627,2,3,624,626,632,634,2,3,633,627,625,635,2,3,628,624,634,630,2,3,635,625,629,631,2,3,646,642,636,638,2,3,637,643,647,639,2,3,646,638,640,644,2,3,641,639,647,645,2,3,652,648,658,668,2,3,659,649,653,669,2,3,670,656,648,652,2,3,649,657,671,653,2,3,648,650,666,658,2,3,667,651,649,659,2,3,656,664,650,648,2,3,651,665,657,649,2,3,658,654,660,668,2,3,661,655,659,669,2,3,666,662,654,658,2,3,655,663,667,659,2,3,682,676,672,680,2,3,673,677,683,681,2,3,680,672,674,678,2,3,675,673,681,679,2,3,686,678,674,684,2,3,675,679,687,685,2,3,690,688,676,682,2,3,677,689,691,683,2,3,692,712,720,696,2,3,721,713,693,697,2,3,714,692,696,722,2,3,697,693,715,723,2,3,694,718,724,698,2,3,725,719,695,699,2,3,716,694,698,726,2,3,699,695,717,727,2,3,700,716,726,702,2,3,727,717,701,703,2,3,712,700,702,720,2,3,703,701,713,721,2,3,724,718,706,704,2,3,707,719,725,705,2,3,714,722,708,710,2,3,709,723,715,711,2,3,752,784,778,728,2,3,779,785,753,729,2,3,784,760,746,778,2,3,747,761,785,779,2,3,730,776,784,752,2,3,785,777,731,753,2,3,776,744,760,784,2,3,761,745,777,785,2,3,762,786,782,750,2,3,783,787,763,751,2,3,786,756,736,782,2,3,737,757,787,783,2,3,748,780,786,762,2,3,787,781,749,763,2,3,780,738,756,786,2,3,757,739,781,787,2,3,772,788,780,748,2,3,781,789,773,749,2,3,788,764,738,780,2,3,739,765,789,781,2,3,744,776,788,772,2,3,789,777,745,773,2,3,776,730,764,788,2,3,765,731,777,789,2,3,766,790,782,736,2,3,783,791,767,737,2,3,790,774,750,782,2,3,751,775,791,783,2,3,728,778,790,766,2,3,791,779,729,767,2,3,778,746,774,790,2,3,775,747,779,791,2,3,796,798,792,794,2,3,793,799,797,795,2,3,800,806,804,802,2,3,805,807,801,803,2,3,794,802,804,796,2,3,805,803,795,797,2,3,814,808,810,812,2,3,811,809,815,813,2,3,818,816,822,820,2,3,823,817,819,821,2,3,828,830,824,826,2,3,825,831,829,827,2,3,832,838,836,834,2,3,837,839,833,835,2,3,848,840,846,854,2,3,847,841,849,855,2,3,846,840,842,844,2,3,843,841,847,845,2,3,850,848,854,852,2,3,855,849,851,853,2,3,862,870,864,856,2,3,865,871,863,857,2,3,858,866,868,860,2,3,869,867,859,861,2,3,870,874,872,864,2,3,873,875,871,865,2,3,874,868,866,872,2,3,867,869,875,873,2,3,860,878,876,858,2,3,877,879,861,859,2,3,878,862,856,876,2,3,857,863,879,877,2,3,884,886,880,882,2,3,881,887,885,883,2,3,888,894,892,890,2,3,893,895,889,891,2,3,882,890,892,884,2,3,893,891,883,885,2,3,886,894,888,880,2,3,889,895,887,881,2,3,900,902,904,906,2,3,905,903,901,907,2,3,898,896,910,908,2,3,911,897,899,909,2,3,896,900,906,910,2,3,907,901,897,911,2,3,902,898,908,904,2,3,909,899,903,905,2,3,916,918,920,922,2,3,921,919,917,923,2,3,914,912,926,924,2,3,927,913,915,925,2,3,912,916,922,926,2,3,923,917,913,927,2,3,918,914,924,920,2,3,925,915,919,921,2,3,920,924,926,922,2,3,927,925,921,923,2,3,934,930,928,932,2,3,929,931,935,933,2,3,936,940,930,934,2,3,931,941,937,935,2,3,942,938,932,928,2,3,933,939,943,929,2,3,940,942,928,930,2,3,929,943,941,931,2,3,938,936,934,932,2,3,935,937,939,933,2,3,952,956,946,950,2,3,947,957,953,951,2,3,958,954,948,944,2,3,949,955,959,945,2,3,956,958,944,946,2,3,945,959,957,947,2,3,954,952,950,948,2,3,951,953,955,949,2,3,968,960,966,974,2,3,967,961,969,975,2,3,972,964,962,970,2,3,963,965,973,971,2,3,966,960,962,964,2,3,963,961,967,965,2,3,970,968,974,972,2,3,975,969,971,973,2,3,980,982,976,978,2,3,977,983,981,979,2,3,984,990,988,986,2,3,989,991,985,987,2,3,978,986,988,980,2,3,989,987,979,981,2,3,982,990,984,976,2,3,985,991,983,977,2,3,996,998,1000,1002,2,3,1001,999,997,1003,2,3,994,992,1006,1004,2,3,1007,993,995,1005,2,3,992,996,1002,1006,2,3,1003,997,993,1007,2,3,998,994,1004,1000,2,3,1005,995,999,1001,2,3,1012,1014,1016,1018,2,3,1017,1015,1013,1019,2,3,1010,1008,1022,1020,2,3,1023,1009,1011,1021,2,3,1008,1012,1018,1022,2,3,1019,1013,1009,1023,2,3,1014,1010,1020,1016,2,3,1021,1011,1015,1017,2,3,1016,1020,1022,1018,2,3,1023,1021,1017,1019,2,3,1030,1026,1024,1028,2,3,1025,1027,1031,1029,2,3,1032,1036,1026,1030,2,3,1027,1037,1033,1031,2,3,1038,1034,1028,1024,2,3,1029,1035,1039,1025,2,3,1036,1038,1024,1026,2,3,1025,1039,1037,1027,2,3,1034,1032,1030,1028,2,3,1031,1033,1035,1029,2,3,1048,1052,1042,1046,2,3,1043,1053,1049,1047,2,3,1054,1050,1044,1040,2,3,1045,1051,1055,1041,2,3,1052,1054,1040,1042,2,3,1041,1055,1053,1043,2,3,1050,1048,1046,1044,2,3,1047,1049,1051,1045,2,3,1064,1056,1062,1070,2,3,1063,1057,1065,1071,2,3,1068,1060,1058,1066,2,3,1059,1061,1069,1067,2,3,1062,1056,1058,1060,2,3,1059,1057,1063,1061,2,3,1066,1064,1070,1068,2,3,1071,1065,1067,1069,2,3,1046,1076,1074,1044,2,3,1075,1077,1047,1045,2,3,1076,1032,1034,1074,2,3,1035,1033,1077,1075,2,3,1040,1072,1078,1042,2,3,1079,1073,1041,1043,2,3,1072,1038,1036,1078,2,3,1037,1039,1073,1079,2,3,1044,1074,1072,1040,2,3,1073,1075,1045,1041,2,3,1074,1034,1038,1072,2,3,1039,1035,1075,1073,2,3,1042,1078,1076,1046,2,3,1077,1079,1043,1047,2,3,1078,1036,1032,1076,2,3,1033,1037,1079,1077,2,3,1070,1084,1082,1068,2,3,1083,1085,1071,1069,2,3,1084,1048,1050,1082,2,3,1051,1049,1085,1083,2,3,1060,1080,1086,1062,2,3,1087,1081,1061,1063,2,3,1080,1054,1052,1086,2,3,1053,1055,1081,1087,2,3,1068,1082,1080,1060,2,3,1081,1083,1069,1061,2,3,1082,1050,1054,1080,2,3,1055,1051,1083,1081,2,3,1062,1086,1084,1070,2,3,1085,1087,1063,1071,2,3,1086,1052,1048,1084,2,3,1049,1053,1087,1085,2,3,984,1088,1090,976,2,3,1091,1089,985,977,2,3,1088,994,998,1090,2,3,999,995,1089,1091,2,3,978,1092,1094,986,2,3,1095,1093,979,987,2,3,1092,996,992,1094,2,3,993,997,1093,1095,2,3,986,1094,1088,984,2,3,1089,1095,987,985,2,3,1094,992,994,1088,2,3,995,993,1095,1089,2,3,976,1090,1092,978,2,3,1093,1091,977,979,2,3,1090,998,996,1092,2,3,997,999,1091,1093,2,3,1004,1096,1098,1000,2,3,1099,1097,1005,1001,2,3,1096,1010,1014,1098,2,3,1015,1011,1097,1099,2,3,1002,1100,1102,1006,2,3,1103,1101,1003,1007,2,3,1100,1012,1008,1102,2,3,1009,1013,1101,1103,2,3,1006,1102,1096,1004,2,3,1097,1103,1007,1005,2,3,1102,1008,1010,1096,2,3,1011,1009,1103,1097,2,3,1000,1098,1100,1002,2,3,1101,1099,1001,1003,2,3,1098,1014,1012,1100,2,3,1013,1015,1099,1101,2,3,974,1108,1106,972,2,3,1107,1109,975,973,2,3,1108,952,954,1106,2,3,955,953,1109,1107,2,3,964,1104,1110,966,2,3,1111,1105,965,967,2,3,1104,958,956,1110,2,3,957,959,1105,1111,2,3,972,1106,1104,964,2,3,1105,1107,973,965,2,3,1106,954,958,1104,2,3,959,955,1107,1105,2,3,966,1110,1108,974,2,3,1109,1111,967,975,2,3,1110,956,952,1108,2,3,953,957,1111,1109,2,3,950,1116,1114,948,2,3,1115,1117,951,949,2,3,1116,936,938,1114,2,3,939,937,1117,1115,2,3,944,1112,1118,946,2,3,1119,1113,945,947,2,3,1112,942,940,1118,2,3,941,943,1113,1119,2,3,948,1114,1112,944,2,3,1113,1115,949,945,2,3,1114,938,942,1112,2,3,943,939,1115,1113,2,3,946,1118,1116,950,2,3,1117,1119,947,951,2,3,1118,940,936,1116,2,3,937,941,1119,1117,2,3,888,1120,1122,880,2,3,1123,1121,889,881,2,3,1120,898,902,1122,2,3,903,899,1121,1123,2,3,882,1124,1126,890,2,3,1127,1125,883,891,2,3,1124,900,896,1126,2,3,897,901,1125,1127,2,3,890,1126,1120,888,2,3,1121,1127,891,889,2,3,1126,896,898,1120,2,3,899,897,1127,1121,2,3,880,1122,1124,882,2,3,1125,1123,881,883,2,3,1122,902,900,1124,2,3,901,903,1123,1125,2,3,908,1128,1130,904,2,3,1131,1129,909,905,2,3,1128,914,918,1130,2,3,919,915,1129,1131,2,3,906,1132,1134,910,2,3,1135,1133,907,911,2,3,1132,916,912,1134,2,3,913,917,1133,1135,2,3,910,1134,1128,908,2,3,1129,1135,911,909,2,3,1134,912,914,1128,2,3,915,913,1135,1129,2,3,904,1130,1132,906,2,3,1133,1131,905,907,2,3,1130,918,916,1132,2,3,917,919,1131,1133,2,3,1152,1154,1138,1140,2,3,1139,1155,1153,1141,2,3,1136,1158,1156,1142,2,3,1157,1159,1137,1143,2,3,1140,1142,1156,1152,2,3,1157,1143,1141,1153,2,3,1164,1166,1146,1148,2,3,1147,1167,1165,1149,2,3,1162,1160,1150,1144,2,3,1151,1161,1163,1145,2,3,1160,1164,1148,1150,2,3,1149,1165,1161,1151,2,3,1166,1162,1144,1146,2,3,1145,1163,1167,1147,2,3,1172,1174,1176,1178,2,3,1177,1175,1173,1179,2,3,1170,1168,1182,1180,2,3,1183,1169,1171,1181,2,3,1168,1172,1178,1182,2,3,1179,1173,1169,1183,2,3,1174,1170,1180,1176,2,3,1181,1171,1175,1177,2,3,1176,1180,1182,1178,2,3,1183,1181,1177,1179,2,3,1136,1184,1186,1138,2,3,1187,1185,1137,1139,2,3,1140,1188,1190,1142,2,3,1191,1189,1141,1143,2,3,1188,1164,1160,1190,2,3,1161,1165,1189,1191,2,3,1142,1190,1184,1136,2,3,1185,1191,1143,1137,2,3,1190,1160,1162,1184,2,3,1163,1161,1191,1185,2,3,1138,1186,1188,1140,2,3,1189,1187,1139,1141,2,3,1186,1166,1164,1188,2,3,1165,1167,1187,1189,2,3,1162,1166,1186,1184,2,3,1187,1167,1163,1185,2,3,1148,1192,1194,1150,2,3,1195,1193,1149,1151,2,3,1192,1172,1168,1194,2,3,1169,1173,1193,1195,2,3,1146,1196,1192,1148,2,3,1193,1197,1147,1149,2,3,1196,1174,1172,1192,2,3,1173,1175,1197,1193,2,3,1144,1198,1196,1146,2,3,1197,1199,1145,1147,2,3,1198,1170,1174,1196,2,3,1175,1171,1199,1197,2,3,1150,1194,1198,1144,2,3,1199,1195,1151,1145,2,3,1194,1168,1170,1198,2,3,1171,1169,1195,1199,2,2,1154,1200,1138,2,2,1139,1201,1155,2,3,1136,1138,1200,1158,2,3,1201,1139,1137,1159,2,3,366,1204,1202,368,2,3,1203,1205,367,369,2,3,1204,374,376,1202,2,3,377,375,1205,1203,2,3,368,1202,1206,370,2,3,1207,1203,369,371,2,3,1202,376,378,1206,2,3,379,377,1203,1207,2,3,370,1206,1208,372,2,3,1208,1207,371,372,2,3,1206,378,380,1208,2,3,380,379,1207,1208,2,3,373,1209,1204,366,2,3,1205,1209,373,367,2,3,1209,381,374,1204,2,3,375,381,1209,1205,2,3,760,1218,1212,746,2,3,1213,1219,761,747,2,3,1218,754,734,1212,2,3,735,755,1219,1213,2,3,744,1210,1218,760,2,3,1219,1211,745,761,2,3,1210,732,754,1218,2,3,755,733,1211,1219,2,3,758,1220,1216,742,2,3,1217,1221,759,743,2,3,1220,762,750,1216,2,3,751,763,1221,1217,2,3,740,1214,1220,758,2,3,1221,1215,741,759,2,3,1214,748,762,1220,2,3,763,749,1215,1221,2,3,768,1222,1214,740,2,3,1215,1223,769,741,2,3,1222,772,748,1214,2,3,749,773,1223,1215,2,3,732,1210,1222,768,2,3,1223,1211,733,769,2,3,1210,744,772,1222,2,3,773,745,1211,1223,2,3,774,1224,1216,750,2,3,1217,1225,775,751,2,3,1224,770,742,1216,2,3,743,771,1225,1217,2,3,746,1212,1224,774,2,3,1225,1213,747,775,2,3,1212,734,770,1224,2,3,771,735,1213,1225,2], + + "edges" : [] + + +}; + +postMessage( model ); +close(); diff --git a/examples/obj/Qrcode.js b/examples/obj/Qrcode.js index 660200f9..d66a7271 100644 --- a/examples/obj/Qrcode.js +++ b/examples/obj/Qrcode.js @@ -2,9 +2,14 @@ var Qrcode = function () { THREE.Geometry.call( this ); - var scope = this, - m1 = new THREE.MeshLambertMaterial( { color: 0x000000, shading: THREE.FlatShading } ), - m2 = new THREE.MeshLambertMaterial( { color: 0xc0c0c0, shading: THREE.FlatShading } ); + var scope = this; + + scope.materials = [ + new THREE.MeshLambertMaterial( { color: 0x000000, ambient: 0x000000, shading: THREE.FlatShading } ), + new THREE.MeshLambertMaterial( { color: 0xc0c0c0, ambient: 0xbbbbbb, shading: THREE.FlatShading } ) + ]; + + var m1 = 0, m2 = 1; v(-54,134,58); v(-54,146,58); diff --git a/examples/textures/patterns/bright_squares256.png b/examples/textures/patterns/bright_squares256.png new file mode 100644 index 00000000..cc9afcbd Binary files /dev/null and b/examples/textures/patterns/bright_squares256.png differ diff --git a/examples/textures/patterns/readme.txt b/examples/textures/patterns/readme.txt new file mode 100644 index 00000000..48cdcecc --- /dev/null +++ b/examples/textures/patterns/readme.txt @@ -0,0 +1,6 @@ +Textures from http://subtlepatterns.com/ + +Slightly modified to have more GPU friendly sizes. + +Licensed under a Creative Commons Attribution 3.0 Unported License: +http://creativecommons.org/licenses/by/3.0/ \ No newline at end of file diff --git a/examples/webgl_animation_skinning.html b/examples/webgl_animation_skinning.html index be0924fe..a9139abc 100644 --- a/examples/webgl_animation_skinning.html +++ b/examples/webgl_animation_skinning.html @@ -71,6 +71,8 @@ var floor, dz = 0, dstep = -10, playback = false; + var clock = new THREE.Clock(); + function init() { container = document.getElementById( 'container' ); @@ -84,8 +86,7 @@ scene.fog.color.setHSV( 0.1, 0.10, 1 ); light = new THREE.DirectionalLight( 0xffffff, 1.5 ); - light.position.set( 0, 1, 1 ); - light.position.normalize(); + light.position.set( 0, 1, 1 ).normalize(); scene.add( light ); var planeSimple = new THREE.PlaneGeometry( 200, 300 ); @@ -121,7 +122,7 @@ document.addEventListener( 'click', startAnimation, false ); var loader = new THREE.JSONLoader(); - loader.load( { model: "obj/buffalo/buffalo.js", callback: createScene } ); + loader.load( "obj/buffalo/buffalo.js", createScene ); loop(); @@ -139,7 +140,7 @@ var material = new THREE.MeshFaceMaterial(); - var originalMaterial = geometry.materials[ 0 ][ 0 ]; + var originalMaterial = geometry.materials[ 0 ]; originalMaterial.skinning = true; originalMaterial.transparent = true; @@ -198,28 +199,26 @@ } - var oldTime = new Date().getTime(); - function loop() { requestAnimationFrame( loop, renderer.domElement ); - var time = new Date().getTime(); + var delta = clock.getDelta(); - THREE.AnimationHandler.update( 0.001 * ( time - oldTime ) ); - - oldTime = time; + THREE.AnimationHandler.update( delta ); camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.lookAt( scene.position ); if ( buffalos && playback ) { - camera.position.z += 2 * Math.sin( new Date().getTime() * 0.001 ); + var elapsed = clock.getElapsedTime(); + + camera.position.z += 2 * Math.sin( elapsed ); for( i = 0; i < buffalos.length; i++ ) { - buffalos[ i ].position.z += 2 * Math.sin( new Date().getTime() * 0.001 + offset[ i ] ); + buffalos[ i ].position.z += 2 * Math.sin( elapsed + offset[ i ] ); } diff --git a/examples/webgl_collada.html b/examples/webgl_collada.html index aef53b21..6e370e4c 100644 --- a/examples/webgl_collada.html +++ b/examples/webgl_collada.html @@ -93,7 +93,7 @@ scene.add( directionalLight ); pointLight = new THREE.PointLight( 0xffffff, 4 ); - pointLight.position.x = 10000; + pointLight.position = particleLight.position; scene.add( pointLight ); renderer = new THREE.WebGLRenderer(); @@ -145,7 +145,7 @@ function render() { - var timer = new Date().getTime() * 0.0005; + var timer = Date.now() * 0.0005; camera.position.x = Math.cos( timer ) * 10; camera.position.y = 2; @@ -157,10 +157,6 @@ particleLight.position.y = Math.cos( timer * 5 ) * 4000; particleLight.position.z = Math.cos( timer * 4 ) * 3009; - pointLight.position.x = particleLight.position.x; - pointLight.position.y = particleLight.position.y; - pointLight.position.z = particleLight.position.z; - renderer.render( scene, camera ); } diff --git a/examples/webgl_collisions_box.html b/examples/webgl_collisions_box.html index 5ec18c01..561c8920 100644 --- a/examples/webgl_collisions_box.html +++ b/examples/webgl_collisions_box.html @@ -63,7 +63,7 @@ renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); - container.appendChild(renderer.domElement); + container.appendChild( renderer.domElement ); var ambientLight = new THREE.AmbientLight( 0x606060 ); scene.add( ambientLight ); @@ -122,12 +122,12 @@ if ( c ) { info.innerHTML += "Found @ distance " + c.distance.toFixed(2); - c.mesh.materials[ 0 ].color.setHex( 0xaa0000 ); + c.mesh.material.color.setHex( 0xaa0000 ); } else { info.innerHTML += "No intersection"; - cube.materials[0].color.setHex( 0x003300 ); + cube.material.color.setHex( 0x003300 ); } diff --git a/examples/webgl_collisions_mesh.html b/examples/webgl_collisions_mesh.html index 8fce8c71..1ba64cc5 100644 --- a/examples/webgl_collisions_mesh.html +++ b/examples/webgl_collisions_mesh.html @@ -151,7 +151,7 @@ }; - loader.load( { model: "obj/suzanne/suzanneHi.js", callback: onGeometry } ); + loader.load( "obj/suzanne/suzanneHi.js", onGeometry ); } @@ -164,7 +164,7 @@ mesh.position = p; scene.add( mesh ); - var mc = THREE.CollisionUtils.MeshColliderWBox(mesh); + var mc = THREE.CollisionUtils.MeshColliderWBox( mesh) ; THREE.Collisions.colliders.push( mc ); meshes.push( mesh ); @@ -187,9 +187,9 @@ var i, l = meshes.length; - for ( i = 0; i < l; i++ ) { + for ( i = 0; i < l; i ++ ) { - meshes[ i ].materials[ 0 ].color.setHex( 0x003300 ); + meshes[ i ].material.color.setHex( 0x003300 ); } @@ -203,7 +203,7 @@ if( c ) { //info.innerHTML += "Found @ distance " + c.distance; - c.mesh.materials[ 0 ].color.setHex( 0xbb0000 ); + c.mesh.material.color.setHex( 0xbb0000 ); } else { diff --git a/examples/webgl_collisions_normal.html b/examples/webgl_collisions_normal.html index e5384a0e..00aeaf82 100644 --- a/examples/webgl_collisions_normal.html +++ b/examples/webgl_collisions_normal.html @@ -126,7 +126,7 @@ mesh.position = p; scene.add( mesh ); - var mc = THREE.CollisionUtils.MeshColliderWBox(mesh); + var mc = THREE.CollisionUtils.MeshColliderWBox( mesh ); THREE.Collisions.colliders.push( mc ); meshes.push( mesh ); @@ -154,8 +154,10 @@ var i, l = meshes.length; - for ( i = 0; i < l; i++ ) { - meshes[ i ].materials[ 0 ].color.setHex( 0x003300 ); + for ( i = 0; i < l; i ++ ) { + + meshes[ i ].material.color.setHex( 0x003300 ); + } info.innerHTML = ""; @@ -165,7 +167,7 @@ if( c ) { - info.innerHTML += "Found @ normal " + vts(c.normal); + info.innerHTML += "Found @ normal " + vts( c.normal ); var poi = ray.origin.clone().addSelf( ray.direction.clone().multiplyScalar(c.distance) ); line.geometry.vertices[0].position = poi; @@ -173,7 +175,7 @@ line.geometry.__dirtyVertices = true; line.geometry.__dirtyElements = true; - c.mesh.materials[ 0 ].color.setHex( 0xbb0000 ); + c.mesh.material.color.setHex( 0xbb0000 ); } else { diff --git a/examples/webgl_collisions_primitives.html b/examples/webgl_collisions_primitives.html index c4a9671a..baf69ab2 100644 --- a/examples/webgl_collisions_primitives.html +++ b/examples/webgl_collisions_primitives.html @@ -163,8 +163,10 @@ var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() ); - for ( var i = 0; i < geoms.length; i++) { - geoms[i].materials[0].color = new THREE.Color(0x007700); + for ( var i = 0; i < geoms.length; i ++ ) { + + geoms[ i ].material.color.setHex( 0x007700 ); + } if ( !document.getElementById( "nearest" ).checked ) { @@ -181,7 +183,7 @@ for ( var i = 0; i < cs.length; i ++ ) { - cs[ i ].mesh.materials[ 0 ].color.setHex( 0xaa0000 ); + cs[ i ].mesh.material.color.setHex( 0xaa0000 ); } @@ -202,7 +204,7 @@ if ( c ) { info.innerHTML = "Found in " + tt + " @ distance " + c.distance; - c.mesh.materials[ 0 ].color.setHex( 0xaa0000 ); + c.mesh.material.color.setHex( 0xaa0000 ); } else { diff --git a/examples/webgl_collisions_terrain.html b/examples/webgl_collisions_terrain.html index 14413c30..d50a526e 100644 --- a/examples/webgl_collisions_terrain.html +++ b/examples/webgl_collisions_terrain.html @@ -91,11 +91,13 @@ function loadCube(p) { - loader.load( { model: "obj/terrain.js", callback: function( geometry ) { + loader.load( "obj/terrain.js", function( geometry ) { + var mesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: 0xf3e4b8 } ) ); scene.add( mesh ); - THREE.Collisions.colliders.push( THREE.CollisionUtils.MeshColliderWBox(mesh) ); - } } ); + THREE.Collisions.colliders.push( THREE.CollisionUtils.MeshColliderWBox( mesh ) ); + + } ); } diff --git a/examples/webgl_collisions_trigger.html b/examples/webgl_collisions_trigger.html index c4d37360..7ea10013 100644 --- a/examples/webgl_collisions_trigger.html +++ b/examples/webgl_collisions_trigger.html @@ -48,7 +48,7 @@ diff --git a/examples/webgl_geometries.html b/examples/webgl_geometries.html index 2b97ec1e..73eae3a4 100644 --- a/examples/webgl_geometries.html +++ b/examples/webgl_geometries.html @@ -42,43 +42,41 @@ scene = new THREE.Scene(); - var light, object, material; + var light, object, materials; scene.add( new THREE.AmbientLight( 0x404040 ) ); - light = new THREE.DirectionalLight( 0xffffff, 1 ); + light = new THREE.DirectionalLight( 0xffffff ); light.position.z = 1; scene.add( light ); - material = [ - new THREE.MeshLambertMaterial( { map: THREE.ImageUtils.loadTexture( 'textures/UV.jpg' ) } ), + materials = [ + new THREE.MeshLambertMaterial( { ambient: 0xbbbbbb, map: THREE.ImageUtils.loadTexture( 'textures/UV.jpg' ) } ), new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe: true, transparent: true, opacity: 0.1 } ) ]; group = new THREE.Object3D(); scene.add( group ); - object = new THREE.Mesh( new THREE.CubeGeometry( 100, 100, 100, 4, 4, 4 ), material ); - object.position.x = - 200; - object.position.z = 200; + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.CubeGeometry( 100, 100, 100, 4, 4, 4 ), materials ); + object.position.set( -200, 0, 200 ); group.add( object ); - - object = new THREE.Mesh( new THREE.CylinderGeometry( 25, 75, 100, 40, 5 ), material ); - object.position.z = 200; + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.CylinderGeometry( 25, 75, 100, 40, 5 ), materials ); + object.position.set( 0, 0, 200 ); group.add( object ); - object = new THREE.Mesh( new THREE.IcosahedronGeometry( 2 ), material ); - object.position.x = 200; - object.position.z = 200; + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.IcosahedronGeometry( 2 ), materials ); + object.position.set( 200, 0, 200 ); object.scale.x = object.scale.y = object.scale.z = 75; group.add( object ); - object = new THREE.Mesh( new THREE.PlaneGeometry( 100, 100, 4, 4 ), material ); - object.position.x = - 200; + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.PlaneGeometry( 100, 100, 4, 4 ), materials ); + object.position.set( -200, 0, 0 ); group.add( object ); - object = new THREE.Mesh( new THREE.SphereGeometry( 75, 20, 10 ), material ); + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.SphereGeometry( 75, 20, 10 ), materials ); + object.position.set( 0, 0, 0 ); group.add( object ); var points = []; @@ -89,22 +87,20 @@ } - object = new THREE.Mesh( new THREE.LatheGeometry( points, 20 ), material ); - object.position.x = 200; + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.LatheGeometry( points, 20 ), materials ); + object.position.set( 200, 0, 0 ); group.add( object ); - object = new THREE.Mesh( new THREE.TorusGeometry( 50, 20, 20, 20 ), material ); - object.position.x = - 200; - object.position.z = - 200; + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.TorusGeometry( 50, 20, 20, 20 ), materials ); + object.position.set( -200, 0, -200 ); group.add( object ); - object = new THREE.Mesh( new THREE.TorusKnotGeometry( 50, 10, 50, 20 ), material ); - object.position.z = - 200; + object = THREE.SceneUtils.createMultiMaterialObject( new THREE.TorusKnotGeometry( 50, 10, 50, 20 ), materials ); + object.position.set( 0, 0, -200 ); group.add( object ); object = new THREE.Axes(); - object.position.x = 200; - object.position.z = - 200; + object.position.set( 200, 0, -200 ); object.scale.x = object.scale.y = object.scale.z = 0.5; group.add( object ); @@ -133,13 +129,14 @@ function render() { - var timer = new Date().getTime() * 0.0001; + var timer = Date.now() * 0.0001; camera.position.x = Math.cos( timer ) * 800; camera.position.z = Math.sin( timer ) * 800; + camera.lookAt( scene.position ); - for ( var i = 0, l = group.children.length; i < l; i++ ) { + for ( var i = 0, l = group.children.length; i < l; i ++ ) { var object = group.children[ i ]; diff --git a/examples/webgl_geometry_blenderexport_colors.html b/examples/webgl_geometry_blenderexport_colors.html index 239b7026..d18bae0e 100644 --- a/examples/webgl_geometry_blenderexport_colors.html +++ b/examples/webgl_geometry_blenderexport_colors.html @@ -72,8 +72,9 @@ scene.add( light ); var loader = new THREE.JSONLoader(); - loader.load( { model: "obj/cubecolors/cubecolors.js", callback: createScene1 } ); - loader.load( { model: "obj/cubecolors/cube_fvc.js", callback: createScene2 } ); + + loader.load( "obj/cubecolors/cubecolors.js", createScene1 ); + loader.load( "obj/cubecolors/cube_fvc.js", createScene2 ); renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( window.innerWidth, window.innerHeight ); @@ -91,20 +92,24 @@ function createScene1( geometry ) { - geometry.materials[0][0].shading = THREE.FlatShading; + geometry.materials[ 0 ].shading = THREE.FlatShading; - var material = [ new THREE.MeshFaceMaterial(), new THREE.MeshLambertMaterial( { color: 0xffffff, opacity:0.9, shading:THREE.FlatShading, wireframe: true, wireframeLinewidth: 2 } ) ]; - - mesh = new THREE.Mesh( geometry, material ); + mesh = new THREE.Object3D(); mesh.position.x = 400; mesh.scale.x = mesh.scale.y = mesh.scale.z = 250; scene.add( mesh ); + var part1 = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial() ); + mesh.add( part1 ); + + var part2 = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: 0xffffff, opacity: 0.9, shading: THREE.FlatShading, wireframe: true, wireframeLinewidth: 2, transparent: true } ) ); + mesh.add( part2 ); + } function createScene2( geometry ) { - geometry.materials[0][0].shading = THREE.FlatShading; + geometry.materials[ 0 ].shading = THREE.FlatShading; var material = new THREE.MeshFaceMaterial(); diff --git a/examples/webgl_geometry_colors.html b/examples/webgl_geometry_colors.html index 61705265..4fa2197f 100644 --- a/examples/webgl_geometry_colors.html +++ b/examples/webgl_geometry_colors.html @@ -48,7 +48,7 @@ var camera, scene, renderer; - var mesh, mesh2, mesh3, light; + var mesh, group1, group2, group3, light; var mouseX = 0, mouseY = 0; @@ -100,7 +100,7 @@ geometry2 = new THREE.IcosahedronGeometry( 1 ), geometry3 = new THREE.IcosahedronGeometry( 1 ); - for ( var i = 0; i < geometry.faces.length; i++ ) { + for ( var i = 0; i < geometry.faces.length; i ++ ) { f = geometry.faces[ i ]; f2 = geometry2.faces[ i ]; @@ -137,27 +137,27 @@ var materials = [ new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors } ), - new THREE.MeshBasicMaterial( { color: 0x000000, shading: THREE.FlatShading, wireframe: true } ) + new THREE.MeshBasicMaterial( { color: 0x000000, shading: THREE.FlatShading, wireframe: true, transparent: true } ) ]; - mesh = new THREE.Mesh( geometry, materials ); - mesh.position.x = -400; - mesh.scale.x = mesh.scale.y = mesh.scale.z = 200; - mesh.rotation.x = -1.87; - scene.add( mesh ); + group1 = THREE.SceneUtils.createMultiMaterialObject( geometry, materials ); + group1.position.x = -400; + group1.rotation.x = -1.87; + group1.scale.set( 200, 200, 200 ); + scene.add( group1 ); - mesh2 = new THREE.Mesh( geometry2, materials ); - mesh2.position.x = 400; - mesh2.rotation.x = 0; - mesh2.scale = mesh.scale; - scene.add( mesh2 ); + group2 = THREE.SceneUtils.createMultiMaterialObject( geometry2, materials ); + group2.position.x = 400; + group2.rotation.x = 0; + group2.scale = group1.scale; + scene.add( group2 ); - mesh3 = new THREE.Mesh( geometry3, materials ); - mesh3.position.x = 0; - mesh3.rotation.x = 0; - mesh3.scale = mesh.scale; - scene.add( mesh3 ); + group3 = THREE.SceneUtils.createMultiMaterialObject( geometry3, materials ); + group3.position.x = 0; + group3.rotation.x = 0; + group3.scale = group1.scale; + scene.add( group3 ); renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( window.innerWidth, window.innerHeight ); diff --git a/examples/webgl_geometry_dynamic.html b/examples/webgl_geometry_dynamic.html index 1b385513..e53a4402 100644 --- a/examples/webgl_geometry_dynamic.html +++ b/examples/webgl_geometry_dynamic.html @@ -59,11 +59,13 @@ var camera, controls, scene, renderer; - var mesh, texture,geometry, material; + var mesh, texture, geometry, material; var worldWidth = 128, worldDepth = 128, worldHalfWidth = worldWidth / 2, worldHalfDepth = worldDepth / 2; + var clock = new THREE.Clock(); + init(); animate(); @@ -137,11 +139,12 @@ function render() { - var time = new Date().getTime() * 0.01; + var delta = clock.getDelta(), + time = clock.getElapsedTime() * 10; for ( var i = 0, l = geometry.vertices.length; i < l; i ++ ) { - geometry.vertices[ i ].position.z = 35 * Math.sin( i/5 + (time + i)/7 ); + geometry.vertices[ i ].position.z = 35 * Math.sin( i / 5 + ( time + i ) / 7 ); } @@ -151,7 +154,7 @@ mesh.geometry.__dirtyVertices = true; //mesh.geometry.__dirtyNormals = true; - controls.update(); + controls.update( delta ); renderer.render( scene, camera ); } diff --git a/examples/webgl_geometry_hierarchy.html b/examples/webgl_geometry_hierarchy.html index 33b9672c..8427c861 100644 --- a/examples/webgl_geometry_hierarchy.html +++ b/examples/webgl_geometry_hierarchy.html @@ -61,8 +61,10 @@ mesh.position.x = Math.random() * 2000 - 1000; mesh.position.y = Math.random() * 2000 - 1000; mesh.position.z = Math.random() * 2000 - 1000; + mesh.rotation.x = Math.random() * 360 * ( Math.PI / 180 ); mesh.rotation.y = Math.random() * 360 * ( Math.PI / 180 ); + mesh.matrixAutoUpdate = false; mesh.updateMatrix(); @@ -106,9 +108,11 @@ function render() { - var rx = Math.sin( new Date().getTime() * 0.0007 ) * 0.5, - ry = Math.sin( new Date().getTime() * 0.0003 ) * 0.5, - rz = Math.sin( new Date().getTime() * 0.0002 ) * 0.5; + var time = Date.now() * 0.001; + + var rx = Math.sin( time * 0.7 ) * 0.5, + ry = Math.sin( time * 0.3 ) * 0.5, + rz = Math.sin( time * 0.2 ) * 0.5; camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_geometry_hierarchy2.html b/examples/webgl_geometry_hierarchy2.html index c59b1e92..209eb0de 100644 --- a/examples/webgl_geometry_hierarchy2.html +++ b/examples/webgl_geometry_hierarchy2.html @@ -44,11 +44,10 @@ container = document.createElement( 'div' ); document.body.appendChild( container ); - camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 10000 ); + camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 15000 ); camera.position.z = 500; scene = new THREE.Scene(); - scene.fog = new THREE.Fog( 0xffffff, 1, 10000 ); var geometry = new THREE.CubeGeometry( 100, 100, 100 ); var material = new THREE.MeshNormalMaterial(); @@ -179,9 +178,11 @@ function render() { - var rx = Math.sin( new Date().getTime() * 0.0007 ) * 0.2, - ry = Math.sin( new Date().getTime() * 0.0003 ) * 0.1, - rz = Math.sin( new Date().getTime() * 0.0002 ) * 0.1; + var time = Date.now() * 0.001; + + var rx = Math.sin( time * 0.7 ) * 0.2, + ry = Math.sin( time * 0.3 ) * 0.1, + rz = Math.sin( time * 0.2 ) * 0.1; camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_geometry_large_mesh.html b/examples/webgl_geometry_large_mesh.html index b3908796..08cc7230 100644 --- a/examples/webgl_geometry_large_mesh.html +++ b/examples/webgl_geometry_large_mesh.html @@ -35,10 +35,10 @@

Lucy model from Stanford 3d scanning repository (decimated with Meshlab). -

Please be patient while the mesh is loading. It may take a while, it's 2MB file. +

Please be patient while the mesh is loading. It may take a while, it's 2 MB file.
-

Best viewed in Chrome 8/9 or Firefox 4 using WebGL renderer. +

Best viewed in Chrome or Firefox using WebGL renderer.

Canvas renderer is very slow for this demo and only diffuse material works there.

Use the flag --allow-file-access-from-files if working localy in Chrome. @@ -89,14 +89,12 @@ function addMesh( geometry, scale, x, y, z, rx, ry, rz, material ) { mesh = new THREE.Mesh( geometry, material ); - mesh.scale.x = mesh.scale.y = mesh.scale.z = scale; - mesh.position.x = x; - mesh.position.y = y; - mesh.position.z = z; - mesh.rotation.x = rx; - mesh.rotation.y = ry; - mesh.rotation.z = rz; - scene.add(mesh); + + mesh.scale.set( scale, scale, scale ); + mesh.position.set( x, y, z ); + mesh.rotation.set( rx, ry, rz ); + + scene.add( mesh ); } @@ -127,27 +125,31 @@ sphere = new THREE.SphereGeometry( 100, 16, 8, 1 ); lightMesh = new THREE.Mesh( sphere, new THREE.MeshBasicMaterial( { color: 0xffaa00 } ) ); - lightMesh.scale.x = lightMesh.scale.y = lightMesh.scale.z = 0.05; + lightMesh.scale.set( 0.05, 0.05, 0.05 ); lightMesh.position = pointLight.position; scene.add( lightMesh ); if ( render_gl ) { try { + webglRenderer = new THREE.WebGLRenderer( { antialias: true } ); webglRenderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); webglRenderer.domElement.style.position = "relative"; container.appendChild( webglRenderer.domElement ); has_gl = 1; + } catch (e) { } } if( render_canvas ) { + canvasRenderer = new THREE.CanvasRenderer(); canvasRenderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT ); container.appendChild( canvasRenderer.domElement ); + } @@ -164,11 +166,11 @@ //loader = new THREE.JSONLoader( true ); document.body.appendChild( loader.statusDomElement ); - var s = (new Date).getTime(), + var s = Date.now(), callback = function( geometry ) { createScene( geometry, s ) }; - //loader.load( { model: 'obj/lucy/Lucy100k_slim.js', callback: callback } ); - loader.load( { model: 'obj/lucy/Lucy100k_bin.js', callback: callback } ); + //loader.load( 'obj/lucy/Lucy100k_slim.js', callback ); + loader.load( 'obj/lucy/Lucy100k_bin.js', callback ); } @@ -185,11 +187,11 @@ log( "geometry.vertices: " + geometry.vertices.length ); log( "geometry.faces: " + geometry.faces.length ); - log( "model loaded and created in " + ((new Date).getTime() - start) + " ms" ); + log( "model loaded and created in " + ( Date.now() - start ) + " ms" ); } - function onDocumentMouseMove(event) { + function onDocumentMouseMove( event ) { mouseX = ( event.clientX - windowHalfX ); mouseY = ( event.clientY - windowHalfY ); @@ -221,15 +223,14 @@ r += 0.01; - if ( render_canvas ) canvasRenderer.render( scene, camera ); if ( render_gl && has_gl ) webglRenderer.render( scene, camera ); } - function log(text) { + function log( text ) { - var e = document.getElementById("log"); + var e = document.getElementById( "log" ); e.innerHTML = text + "
" + e.innerHTML; } @@ -263,6 +264,7 @@ canvasRenderer.domElement.style.display = render_canvas ? "block" : "none"; } + diff --git a/examples/webgl_geometry_minecraft.html b/examples/webgl_geometry_minecraft.html index 7715257f..1785a290 100644 --- a/examples/webgl_geometry_minecraft.html +++ b/examples/webgl_geometry_minecraft.html @@ -68,6 +68,7 @@ worldHalfWidth = worldWidth / 2, worldHalfDepth = worldDepth / 2, data = generateHeight( worldWidth, worldDepth ); + var clock = new THREE.Clock(); init(); animate(); @@ -155,11 +156,8 @@ var ambientLight = new THREE.AmbientLight( 0xcccccc ); scene.add( ambientLight ); - var directionalLight = new THREE.DirectionalLight( 0xffffff, 1.5 ); - directionalLight.position.x = 1; - directionalLight.position.y = 1; - directionalLight.position.z = 0.5; - directionalLight.position.normalize(); + var directionalLight = new THREE.DirectionalLight( 0xffffff, 2 ); + directionalLight.position.set( 1, 1, 0.5 ).normalize(); scene.add( directionalLight ); renderer = new THREE.WebGLRenderer(); @@ -185,7 +183,7 @@ var texture = new THREE.Texture( image, new THREE.UVMapping(), THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping, THREE.NearestFilter, THREE.LinearMipMapLinearFilter ); - return new THREE.MeshLambertMaterial( { map: texture } ); + return new THREE.MeshLambertMaterial( { map: texture, ambient: 0xbbbbbb } ); } @@ -233,7 +231,7 @@ function render() { - controls.update(); + controls.update( clock.getDelta() ); renderer.render( scene, camera ); } diff --git a/examples/webgl_geometry_minecraft_ao.html b/examples/webgl_geometry_minecraft_ao.html index 389281dd..d740518c 100644 --- a/examples/webgl_geometry_minecraft_ao.html +++ b/examples/webgl_geometry_minecraft_ao.html @@ -77,6 +77,8 @@ worldHalfWidth = worldWidth / 2, worldHalfDepth = worldDepth / 2, data = generateHeight( worldWidth, worldDepth ); + var clock = new THREE.Clock(); + init(); animate(); @@ -443,11 +445,8 @@ var ambientLight = new THREE.AmbientLight( 0xcccccc ); scene.add( ambientLight ); - var directionalLight = new THREE.DirectionalLight( 0xffffff, 1.5 ); - directionalLight.position.x = 1; - directionalLight.position.y = 1; - directionalLight.position.z = 0.5; - directionalLight.position.normalize(); + var directionalLight = new THREE.DirectionalLight( 0xffffff, 2 ); + directionalLight.position.set( 1, 1, 0.5 ).normalize(); scene.add( directionalLight ); renderer = new THREE.WebGLRenderer(); @@ -503,7 +502,7 @@ } - return new THREE.MeshLambertMaterial( { map: texture } ); + return new THREE.MeshLambertMaterial( { map: texture, ambient: 0xbbbbbb } ); } @@ -802,7 +801,7 @@ function render() { - controls.update(); + controls.update( clock.getDelta() ); renderer.render( scene, camera ); } diff --git a/examples/webgl_geometry_shapes.html b/examples/webgl_geometry_shapes.html index a3aab6e2..2b63cbd2 100644 --- a/examples/webgl_geometry_shapes.html +++ b/examples/webgl_geometry_shapes.html @@ -1,7 +1,7 @@ - three.js canvas - geometry - shapes + three.js webgl - geometry - shapes + + + +

+
+ three.js - point lights WebGL demo +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/webgl_lines_colors.html b/examples/webgl_lines_colors.html index 7272d5cc..3e3d19d8 100644 --- a/examples/webgl_lines_colors.html +++ b/examples/webgl_lines_colors.html @@ -267,7 +267,7 @@ camera.lookAt( scene.position ); - var time = new Date().getTime() * 0.0005; + var time = Date.now() * 0.0005; for( var i = 0; i < scene.objects.length; i ++ ) { diff --git a/examples/webgl_lines_cubes.html b/examples/webgl_lines_cubes.html index 928a8575..877fbc00 100644 --- a/examples/webgl_lines_cubes.html +++ b/examples/webgl_lines_cubes.html @@ -68,8 +68,8 @@ var i, material, container; - container = document.createElement('div'); - document.body.appendChild(container); + container = document.createElement( 'div' ); + document.body.appendChild( container ); camera = new THREE.PerspectiveCamera( 33, window.innerWidth / window.innerHeight, 1, 10000 ); camera.position.z = 700; @@ -105,14 +105,18 @@ [ m1, scale*0.5, [2*d, -d, 0], g1 ], [ m1, scale*0.5, [-2*d, -d, 0], g1 ], ]; - for ( i = 0; i < parameters.length; ++i ) { + for ( i = 0; i < parameters.length; i ++ ) { p = parameters[ i ]; + line = new THREE.Line( p[ 3 ], p[ 0 ] ); + line.scale.x = line.scale.y = line.scale.z = p[ 1 ]; + line.position.x = p[ 2 ][ 0 ]; line.position.y = p[ 2 ][ 1 ]; line.position.z = p[ 2 ][ 2 ]; + scene.add( line ); } @@ -212,11 +216,11 @@ camera.lookAt( scene.position ); - var time = new Date().getTime() * 0.0015; + var time = Date.now() * 0.0015; - for( var i = 0; i < scene.objects.length; i++ ) { + for( var i = 0; i < scene.objects.length; i ++ ) { - scene.objects[ i ].rotation.y = time * ( i % 2 ? 1 : -1); + scene.objects[ i ].rotation.y = time * ( i % 2 ? 1 : -1 ); } diff --git a/examples/webgl_lines_sphere.html b/examples/webgl_lines_sphere.html index 188a3b35..c2a5efd5 100644 --- a/examples/webgl_lines_sphere.html +++ b/examples/webgl_lines_sphere.html @@ -87,7 +87,7 @@ geometry = new THREE.Geometry(); - for ( i = 0; i < 1500; ++i ) { + for ( i = 0; i < 1500; i ++ ) { vector1 = new THREE.Vector3( Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1 ); vector1.normalize(); @@ -169,17 +169,16 @@ function render() { - //camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY + 200 - camera.position.y ) * .05; camera.lookAt( scene.position ); renderer.render( scene, camera ); - var time = new Date().getTime() * 0.0001; + var time = Date.now() * 0.0001; - for( var i = 0; i 0.7 ) face.materials = [ materials[ Math.floor( Math.random() * materials.length ) ] ]; + + if ( Math.random() > 0.7 ) { + + face.materialIndex = Math.floor( Math.random() * materials.length ); + + } else { + + face.materialIndex = 0; + + } } + geometry_pieces.materials = materials; + materials.push( new THREE.MeshFaceMaterial() ); objects = []; @@ -201,14 +212,14 @@ function render() { - var timer = new Date().getTime() * 0.0001; + var timer = 0.0001 * Date.now(); camera.position.x = Math.cos( timer ) * 1000; camera.position.z = Math.sin( timer ) * 1000; camera.lookAt( scene.position ); - for ( var i = 0, l = objects.length; i < l; i++ ) { + for ( var i = 0, l = objects.length; i < l; i ++ ) { var object = objects[ i ]; diff --git a/examples/webgl_materials2.html b/examples/webgl_materials2.html new file mode 100644 index 00000000..c3df6ba0 --- /dev/null +++ b/examples/webgl_materials2.html @@ -0,0 +1,294 @@ + + + + three.js webgl - materials + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/webgl_materials_cars.html b/examples/webgl_materials_cars.html index 5d536ba4..87301a50 100644 --- a/examples/webgl_materials_cars.html +++ b/examples/webgl_materials_cars.html @@ -236,19 +236,19 @@ var mlib = { - "Orange": new THREE.MeshLambertMaterial( { color: 0xff6600, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.3 } ), - "Blue": new THREE.MeshLambertMaterial( { color: 0x001133, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.3 } ), - "Red": new THREE.MeshLambertMaterial( { color: 0x660000, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.25 } ), - "Black": new THREE.MeshLambertMaterial( { color: 0x000000, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.15 } ), - "White": new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.25 } ), + "Orange": new THREE.MeshLambertMaterial( { color: 0xff6600, ambient: 0xff2200, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.3 } ), + "Blue": new THREE.MeshLambertMaterial( { color: 0x001133, ambient: 0x001133, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.3 } ), + "Red": new THREE.MeshLambertMaterial( { color: 0x660000, ambient: 0x330000, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.25 } ), + "Black": new THREE.MeshLambertMaterial( { color: 0x000000, ambient: 0x000000, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.15 } ), + "White": new THREE.MeshLambertMaterial( { color: 0xffffff, ambient: 0x666666, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.25 } ), "Carmine": new THREE.MeshPhongMaterial( { color: 0x770000, specular:0xffaaaa, envMap: textureCube, combine: THREE.MultiplyOperation } ), "Gold": new THREE.MeshPhongMaterial( { color: 0xaa9944, specular:0xbbaa99, shininess:50, envMap: textureCube, combine: THREE.MultiplyOperation } ), "Bronze": new THREE.MeshPhongMaterial( { color: 0x150505, specular:0xee6600, shininess:10, envMap: textureCube, combine: THREE.MixOperation, reflectivity: 0.25 } ), "Chrome": new THREE.MeshPhongMaterial( { color: 0xffffff, specular:0xffffff, envMap: textureCube, combine: THREE.Multiply } ), - "Orange metal": new THREE.MeshLambertMaterial( { color: 0xff6600, envMap: textureCube, combine: THREE.MultiplyOperation } ), - "Blue metal": new THREE.MeshLambertMaterial( { color: 0x001133, envMap: textureCube, combine: THREE.MultiplyOperation } ), + "Orange metal": new THREE.MeshLambertMaterial( { color: 0xff6600, ambient: 0xff2200, envMap: textureCube, combine: THREE.MultiplyOperation } ), + "Blue metal": new THREE.MeshLambertMaterial( { color: 0x001133, ambient: 0x002266, envMap: textureCube, combine: THREE.MultiplyOperation } ), "Red metal": new THREE.MeshLambertMaterial( { color: 0x770000, envMap: textureCube, combine: THREE.MultiplyOperation } ), "Green metal": new THREE.MeshLambertMaterial( { color: 0x007711, envMap: textureCube, combine: THREE.MultiplyOperation } ), "Black metal": new THREE.MeshLambertMaterial( { color: 0x222222, envMap: textureCube, combine: THREE.MultiplyOperation } ), @@ -458,7 +458,7 @@ } - loader.load( { model: CARS[ "veyron" ].url, callback: function( geometry ) { createScene( geometry, "veyron" ) } } ); + loader.load( CARS[ "veyron" ].url, function( geometry ) { createScene( geometry, "veyron" ) } ); for( var c in CARS ) initCarButton( c ); @@ -471,7 +471,7 @@ if ( ! CARS[ car ].object ) { loader.statusDomElement.style.display = "block"; - loader.load( { model: CARS[ car ].url, callback: function( geometry ) { createScene( geometry, car ) } } ); + loader.load( CARS[ car ].url, function( geometry ) { createScene( geometry, car ) } ); } else { @@ -479,7 +479,7 @@ } - }, false); + }, false ); } @@ -510,13 +510,13 @@ var buttons, i, src = ""; - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { src += ' '; } - buttons = document.createElement("div"); + buttons = document.createElement( "div" ); buttons.innerHTML = src; $( "buttons_materials" ).appendChild( buttons ); @@ -527,14 +527,14 @@ function attachButtonMaterials( materials, geometry, material_indices, car ) { - for( var i = 0; i < materials.length; i++ ) { + for( var i = 0; i < materials.length; i ++ ) { $( button_name( car, i ) ).counter = i; $( button_name( car, i ) ).addEventListener( 'click', function() { - for ( var j = 0; j < material_indices.length; j++ ) { + for ( var j = 0; j < material_indices.length; j ++ ) { - geometry.materials[ material_indices [ j ] ][ 0 ] = materials[ this.counter ][ 1 ]; + geometry.materials[ material_indices [ j ] ] = materials[ this.counter ][ 1 ]; } @@ -557,7 +557,7 @@ for ( var i in CARS[ car ].mmap ) { - geometry.materials[ i ][ 0 ] = CARS[ car ].mmap[ i ]; + geometry.materials[ i ] = CARS[ car ].mmap[ i ]; } @@ -601,7 +601,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cars_anaglyph.html b/examples/webgl_materials_cars_anaglyph.html index 98f202cd..91135ceb 100644 --- a/examples/webgl_materials_cars_anaglyph.html +++ b/examples/webgl_materials_cars_anaglyph.html @@ -451,7 +451,7 @@ } - loader.load( { model: CARS[ "veyron" ].url, callback: function( geometry ) { createScene( geometry, "veyron" ) } } ); + loader.load( CARS[ "veyron" ].url, function( geometry ) { createScene( geometry, "veyron" ) } ); for( var c in CARS ) initCarButton( c ); @@ -464,7 +464,7 @@ if ( ! CARS[ car ].object ) { loader.statusDomElement.style.display = "block"; - loader.load( { model: CARS[ car ].url, callback: function( geometry ) { createScene( geometry, car ) } } ); + loader.load( CARS[ car ].url, function( geometry ) { createScene( geometry, car ) } ); } else { @@ -503,7 +503,7 @@ var buttons, i, src = ""; - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { src += ' '; @@ -520,14 +520,14 @@ function attachButtonMaterials( materials, geometry, material_indices, car ) { - for( var i = 0; i < materials.length; i++ ) { + for( var i = 0; i < materials.length; i ++ ) { $( button_name( car, i ) ).counter = i; $( button_name( car, i ) ).addEventListener( 'click', function() { - for ( var j = 0; j < material_indices.length; j++ ) { + for ( var j = 0; j < material_indices.length; j ++ ) { - geometry.materials[ material_indices [ j ] ][ 0 ] = materials[ this.counter ][ 1 ]; + geometry.materials[ material_indices [ j ] ] = materials[ this.counter ][ 1 ]; } @@ -550,15 +550,18 @@ for( var i in CARS[ car ].mmap ) { - geometry.materials[ i ][ 0 ] = CARS[ car ].mmap[ i ]; + geometry.materials[ i ] = CARS[ car ].mmap[ i ]; } var mesh = new THREE.Mesh( geometry, m ); + mesh.rotation.x = r[ 0 ]; mesh.rotation.y = r[ 1 ]; mesh.rotation.z = r[ 2 ]; + mesh.scale.x = mesh.scale.y = mesh.scale.z = s; + scene.add( mesh ); CARS[ car ].object = mesh; @@ -591,7 +594,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cars_camaro.html b/examples/webgl_materials_cars_camaro.html index 9729daaa..d4288617 100644 --- a/examples/webgl_materials_cars_camaro.html +++ b/examples/webgl_materials_cars_camaro.html @@ -136,7 +136,7 @@ camaroMaterials.body.push( [ "Chrome", new THREE.MeshPhongMaterial( { color: 0xffffff, specular:0xffffff, envMap: textureCube, combine: THREE.MultiplyOperation } ) ] ); var loader = new THREE.BinaryLoader(); - loader.load( { model: "obj/camaro/CamaroNoUv_bin.js", callback: function( geometry ) { createScene( geometry, camaroMaterials ) } } ); + loader.load( "obj/camaro/CamaroNoUv_bin.js", function( geometry ) { createScene( geometry, camaroMaterials ) } ); } @@ -147,7 +147,7 @@ var i, src = "", parent = $( "buttons" ); - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { src += ''; @@ -155,10 +155,10 @@ parent.innerHTML = src; - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { $( "m" + i ).counter = i; - $( "m" + i ).addEventListener( 'click', function() { geometry.materials[ 0 ][ 0 ] = materials[ this.counter ][ 1 ] }, false ); + $( "m" + i ).addEventListener( 'click', function() { geometry.materials[ 0 ] = materials[ this.counter ][ 1 ] }, false ); } @@ -168,19 +168,19 @@ var s = 75, m = new THREE.MeshFaceMaterial(); - geometry.materials[ 0 ][ 0 ] = materials.body[ 0 ][ 1 ]; // car body - geometry.materials[ 1 ][ 0 ] = materials.chrome; // wheels chrome - geometry.materials[ 2 ][ 0 ] = materials.chrome; // grille chrome - geometry.materials[ 3 ][ 0 ] = materials.darkchrome; // door lines - geometry.materials[ 4 ][ 0 ] = materials.glass; // windshield - geometry.materials[ 5 ][ 0 ] = materials.interior; // interior - geometry.materials[ 6 ][ 0 ] = materials.tire; // tire - geometry.materials[ 7 ][ 0 ] = materials.black; // tireling - geometry.materials[ 8 ][ 0 ] = materials.black; // behind grille + geometry.materials[ 0 ] = materials.body[ 0 ][ 1 ]; // car body + geometry.materials[ 1 ] = materials.chrome; // wheels chrome + geometry.materials[ 2 ] = materials.chrome; // grille chrome + geometry.materials[ 3 ] = materials.darkchrome; // door lines + geometry.materials[ 4 ] = materials.glass; // windshield + geometry.materials[ 5 ] = materials.interior; // interior + geometry.materials[ 6 ] = materials.tire; // tire + geometry.materials[ 7 ] = materials.black; // tireling + geometry.materials[ 8 ] = materials.black; // behind grille var mesh = new THREE.Mesh( geometry, m ); mesh.rotation.y = 1; - mesh.scale.x = mesh.scale.y = mesh.scale.z = s; + mesh.scale.set( s, s, s ); scene.add( mesh ); createButtons( materials.body, geometry ); @@ -207,7 +207,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cars_camaro_crosseyed.html b/examples/webgl_materials_cars_camaro_crosseyed.html index 07ae0b3e..8980681c 100644 --- a/examples/webgl_materials_cars_camaro_crosseyed.html +++ b/examples/webgl_materials_cars_camaro_crosseyed.html @@ -143,7 +143,7 @@ camaroMaterials.body.push( [ "Chrome", new THREE.MeshPhongMaterial( { color: 0xffffff, specular:0xffffff, envMap: textureCube, combine: THREE.MultiplyOperation } ) ] ); var loader = new THREE.BinaryLoader(); - loader.load( { model: "obj/camaro/CamaroNoUv_bin.js", callback: function( geometry ) { createScene( geometry, camaroMaterials ) } } ); + loader.load( "obj/camaro/CamaroNoUv_bin.js", function( geometry ) { createScene( geometry, camaroMaterials ) } ); } @@ -154,7 +154,7 @@ var i, src = "", parent = $( "buttons" ); - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { src += ''; @@ -162,10 +162,10 @@ parent.innerHTML = src; - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { $( "m" + i ).counter = i; - $( "m" + i ).addEventListener( 'click', function() { geometry.materials[ 0 ][ 0 ] = materials[ this.counter ][ 1 ] }, false ); + $( "m" + i ).addEventListener( 'click', function() { geometry.materials[ 0 ] = materials[ this.counter ][ 1 ] }, false ); } @@ -175,15 +175,15 @@ var s = 75, m = new THREE.MeshFaceMaterial(); - geometry.materials[ 0 ][ 0 ] = materials.body[ 0 ][ 1 ]; // car body - geometry.materials[ 1 ][ 0 ] = materials.chrome; // wheels chrome - geometry.materials[ 2 ][ 0 ] = materials.chrome; // grille chrome - geometry.materials[ 3 ][ 0 ] = materials.darkchrome; // door lines - geometry.materials[ 4 ][ 0 ] = materials.glass; // windshield - geometry.materials[ 5 ][ 0 ] = materials.interior; // interior - geometry.materials[ 6 ][ 0 ] = materials.tire; // tire - geometry.materials[ 7 ][ 0 ] = materials.black; // tireling - geometry.materials[ 8 ][ 0 ] = materials.black; // behind grille + geometry.materials[ 0 ] = materials.body[ 0 ][ 1 ]; // car body + geometry.materials[ 1 ] = materials.chrome; // wheels chrome + geometry.materials[ 2 ] = materials.chrome; // grille chrome + geometry.materials[ 3 ] = materials.darkchrome; // door lines + geometry.materials[ 4 ] = materials.glass; // windshield + geometry.materials[ 5 ] = materials.interior; // interior + geometry.materials[ 6 ] = materials.tire; // tire + geometry.materials[ 7 ] = materials.black; // tireling + geometry.materials[ 8 ] = materials.black; // behind grille var mesh = new THREE.Mesh( geometry, m ); mesh.rotation.y = 1; @@ -230,7 +230,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cars_parallaxbarrier.html b/examples/webgl_materials_cars_parallaxbarrier.html index 02998b05..d3e5b258 100644 --- a/examples/webgl_materials_cars_parallaxbarrier.html +++ b/examples/webgl_materials_cars_parallaxbarrier.html @@ -452,7 +452,7 @@ } - loader.load( { model: CARS[ "veyron" ].url, callback: function( geometry ) { createScene( geometry, "veyron" ) } } ); + loader.load( CARS[ "veyron" ].url, function( geometry ) { createScene( geometry, "veyron" ) } ); for( var c in CARS ) initCarButton( c ); @@ -465,7 +465,7 @@ if ( ! CARS[ car ].object ) { loader.statusDomElement.style.display = "block"; - loader.load( { model: CARS[ car ].url, callback: function( geometry ) { createScene( geometry, car ) } } ); + loader.load( CARS[ car ].url, function( geometry ) { createScene( geometry, car ) } ); } else { @@ -526,9 +526,9 @@ $( button_name( car, i ) ).counter = i; $( button_name( car, i ) ).addEventListener( 'click', function() { - for ( var j = 0; j < material_indices.length; j++ ) { + for ( var j = 0; j < material_indices.length; j ++ ) { - geometry.materials[ material_indices [ j ] ][ 0 ] = materials[ this.counter ][ 1 ]; + geometry.materials[ material_indices [ j ] ] = materials[ this.counter ][ 1 ]; } @@ -551,7 +551,7 @@ for( var i in CARS[ car ].mmap ) { - geometry.materials[ i ][ 0 ] = CARS[ car ].mmap[ i ]; + geometry.materials[ i ] = CARS[ car ].mmap[ i ]; } @@ -592,7 +592,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cubemap.html b/examples/webgl_materials_cubemap.html index 4b17ad4b..b4f67365 100644 --- a/examples/webgl_materials_cubemap.html +++ b/examples/webgl_materials_cubemap.html @@ -110,9 +110,9 @@ var refractionCube = new THREE.Texture( reflectionCube.image, new THREE.CubeRefractionMapping() ); //var cubeMaterial3 = new THREE.MeshPhongMaterial( { color: 0x000000, specular:0xaa0000, envMap: reflectionCube, combine: THREE.MixOperation, reflectivity: 0.25 } ); - var cubeMaterial3 = new THREE.MeshLambertMaterial( { color: 0xff6600, envMap: reflectionCube, combine: THREE.MixOperation, reflectivity: 0.3 } ); - var cubeMaterial2 = new THREE.MeshLambertMaterial( { color: 0xffee00, envMap: refractionCube, refractionRatio: 0.95 } ); - var cubeMaterial1 = new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: reflectionCube } ) + var cubeMaterial3 = new THREE.MeshLambertMaterial( { color: 0xff6600, ambient: 0x993300, envMap: reflectionCube, combine: THREE.MixOperation, reflectivity: 0.3 } ); + var cubeMaterial2 = new THREE.MeshLambertMaterial( { color: 0xffee00, ambient: 0x996600, envMap: refractionCube, refractionRatio: 0.95 } ); + var cubeMaterial1 = new THREE.MeshLambertMaterial( { color: 0xffffff, ambient: 0xaaaaaa, envMap: reflectionCube } ) // Skybox @@ -152,7 +152,7 @@ loader = new THREE.BinaryLoader( true ); document.body.appendChild( loader.statusDomElement ); - loader.load( { model: "obj/walt/WaltHead_bin.js", callback: function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } } ); + loader.load( "obj/walt/WaltHead_bin.js", function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } ); } @@ -201,7 +201,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cubemap_balls_reflection.html b/examples/webgl_materials_cubemap_balls_reflection.html index 71e290b7..07df6cd3 100644 --- a/examples/webgl_materials_cubemap_balls_reflection.html +++ b/examples/webgl_materials_cubemap_balls_reflection.html @@ -44,7 +44,7 @@ if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); - var container, timer; + var container; var camera, scene, renderer; var cameraCube, sceneCube, cubeTarget; @@ -155,7 +155,7 @@ function render() { - timer = new Date().getTime() * 0.0001; + var timer = 0.0001 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cubemap_balls_reflection_anaglyph.html b/examples/webgl_materials_cubemap_balls_reflection_anaglyph.html index 895c0ba9..70f70eec 100644 --- a/examples/webgl_materials_cubemap_balls_reflection_anaglyph.html +++ b/examples/webgl_materials_cubemap_balls_reflection_anaglyph.html @@ -44,7 +44,7 @@ if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); - var container, timer; + var container; var camera, scene, renderer; @@ -147,7 +147,7 @@ function render() { - timer = new Date().getTime() * 0.0001; + var timer = 0.0001 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cubemap_balls_refraction.html b/examples/webgl_materials_cubemap_balls_refraction.html index ceab0e93..b16a7a7b 100644 --- a/examples/webgl_materials_cubemap_balls_refraction.html +++ b/examples/webgl_materials_cubemap_balls_refraction.html @@ -44,7 +44,7 @@ if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); - var container, timer; + var container; var camera, scene, renderer; var cameraCube, sceneCube, cubeTarget; @@ -154,7 +154,7 @@ function render() { - timer = new Date().getTime() * 0.0001; + var timer = 0.0001 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cubemap_balls_refraction_crosseyed.html b/examples/webgl_materials_cubemap_balls_refraction_crosseyed.html index 5f1dc063..2de6d228 100644 --- a/examples/webgl_materials_cubemap_balls_refraction_crosseyed.html +++ b/examples/webgl_materials_cubemap_balls_refraction_crosseyed.html @@ -47,7 +47,7 @@ if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); - var container, timer; + var container; var camera, scene, renderer; @@ -166,7 +166,7 @@ function render() { - timer = new Date().getTime() * 0.0001; + var timer = 0.0001 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_cubemap_dynamic.html b/examples/webgl_materials_cubemap_dynamic.html index 3c5670f4..f00d6cac 100644 --- a/examples/webgl_materials_cubemap_dynamic.html +++ b/examples/webgl_materials_cubemap_dynamic.html @@ -93,7 +93,7 @@ var cubeCamera; - var oldTime = new Date().getTime(); + var clock = new THREE.Clock(); var controlsGallardo = { @@ -192,7 +192,7 @@ renderer.shadowCameraFov = 50; renderer.shadowMapBias = 0.003885; - renderer.shadowMapDarkness = 0.55; + renderer.shadowMapDarkness = 0.5; renderer.shadowMapWidth = SHADOW_MAP_WIDTH; renderer.shadowMapHeight = SHADOW_MAP_HEIGHT; @@ -223,22 +223,22 @@ body: [], - "Chrome": new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeTarget } ), - "ChromeN": new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: cubeTarget, combine: THREE.MixOperation, reflectivity: 0.75 } ), - "Dark chrome": new THREE.MeshLambertMaterial( { color: 0x444444, envMap: cubeTarget } ), + "Chrome": new THREE.MeshLambertMaterial( { color: 0xffffff, ambient: 0xffffff, envMap: cubeTarget } ), + "ChromeN": new THREE.MeshLambertMaterial( { color: 0xffffff, ambient: 0xffffff, envMap: cubeTarget, combine: THREE.MixOperation, reflectivity: 0.75 } ), + "Dark chrome": new THREE.MeshLambertMaterial( { color: 0x444444, ambient: 0x444444, envMap: cubeTarget } ), - "Black rough": new THREE.MeshLambertMaterial( { color: 0x050505 } ), + "Black rough": new THREE.MeshLambertMaterial( { color: 0x050505, ambient: 0x050505 } ), - "Dark glass": new THREE.MeshLambertMaterial( { color: 0x101020, envMap: cubeTarget, opacity: 0.5, transparent: true } ), - "Orange glass": new THREE.MeshLambertMaterial( { color: 0xffbb00, opacity: 0.5, transparent: true } ), - "Red glass": new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.5, transparent: true } ), + "Dark glass": new THREE.MeshLambertMaterial( { color: 0x101020, ambient: 0x101020, envMap: cubeTarget, opacity: 0.5, transparent: true } ), + "Orange glass": new THREE.MeshLambertMaterial( { color: 0xffbb00, ambient: 0xffbb00, opacity: 0.5, transparent: true } ), + "Red glass": new THREE.MeshLambertMaterial( { color: 0xff0000, ambient: 0xff0000, opacity: 0.5, transparent: true } ), - "Black metal": new THREE.MeshLambertMaterial( { color: 0x222222, envMap: cubeTarget, combine: THREE.MultiplyOperation } ), - "Orange metal": new THREE.MeshLambertMaterial( { color: 0xff6600, envMap: cubeTarget, combine: THREE.MultiplyOperation } ) + "Black metal": new THREE.MeshLambertMaterial( { color: 0x222222, ambient: 0x222222, envMap: cubeTarget, combine: THREE.MultiplyOperation } ), + "Orange metal": new THREE.MeshLambertMaterial( { color: 0xff6600, ambient: 0xff6600, envMap: cubeTarget, combine: THREE.MultiplyOperation } ) } - mlib.body.push( [ "Orange", new THREE.MeshLambertMaterial( { color: 0x883300, envMap: cubeTarget, combine: THREE.MixOperation, reflectivity: 0.1 } ) ] ); + mlib.body.push( [ "Orange", new THREE.MeshLambertMaterial( { color: 0x883300, ambient: 0x883300, envMap: cubeTarget, combine: THREE.MixOperation, reflectivity: 0.1 } ) ] ); mlib.body.push( [ "Blue", new THREE.MeshLambertMaterial( { color: 0x113355, envMap: cubeTarget, combine: THREE.MixOperation, reflectivity: 0.1 } ) ] ); mlib.body.push( [ "Red", new THREE.MeshLambertMaterial( { color: 0x660000, envMap: cubeTarget, combine: THREE.MixOperation, reflectivity: 0.1 } ) ] ); mlib.body.push( [ "Black", new THREE.MeshLambertMaterial( { color: 0x000000, envMap: cubeTarget, combine: THREE.MixOperation, reflectivity: 0.2 } ) ] ); @@ -549,7 +549,7 @@ function addObject( geometry, color, x, y, z, sy ) { - var object = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: color } ) ); + var object = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: color, ambient: color } ) ); object.position.set( x, y, z ); scene.add( object ); @@ -817,15 +817,15 @@ var materials = car.bodyGeometry.materials; - materials[ 0 ][ 0 ] = mlib.body[ 0 ][ 1 ]; // body - materials[ 1 ][ 0 ] = mlib[ "Dark chrome" ]; // front under lights, back + materials[ 0 ] = mlib.body[ 0 ][ 1 ]; // body + materials[ 1 ] = mlib[ "Dark chrome" ]; // front under lights, back // WHEELS materials = car.wheelGeometry.materials; - materials[ 0 ][ 0 ] = mlib[ "Chrome" ]; // insides - materials[ 1 ][ 0 ] = mlib[ "Black rough" ]; // tire + materials[ 0 ] = mlib[ "Chrome" ]; // insides + materials[ 1 ] = mlib[ "Black rough" ]; // tire } @@ -844,21 +844,21 @@ var materials = car.bodyGeometry.materials; - materials[ 0 ][ 0 ] = mlib[ "Black metal" ]; // top, front center, back sides - materials[ 1 ][ 0 ] = mlib[ "Chrome" ]; // front sides - materials[ 2 ][ 0 ] = mlib[ "Chrome" ]; // engine - materials[ 3 ][ 0 ] = mlib[ "Dark chrome" ]; // small chrome things - materials[ 4 ][ 0 ] = mlib[ "Red glass" ]; // backlights - materials[ 5 ][ 0 ] = mlib[ "Orange glass" ]; // back signals - materials[ 6 ][ 0 ] = mlib[ "Black rough" ]; // bottom, interior - materials[ 7 ][ 0 ] = mlib[ "Dark glass" ]; // windshield + materials[ 0 ] = mlib[ "Black metal" ]; // top, front center, back sides + materials[ 1 ] = mlib[ "Chrome" ]; // front sides + materials[ 2 ] = mlib[ "Chrome" ]; // engine + materials[ 3 ] = mlib[ "Dark chrome" ]; // small chrome things + materials[ 4 ] = mlib[ "Red glass" ]; // backlights + materials[ 5 ] = mlib[ "Orange glass" ]; // back signals + materials[ 6 ] = mlib[ "Black rough" ]; // bottom, interior + materials[ 7 ] = mlib[ "Dark glass" ]; // windshield // WHEELS materials = car.wheelGeometry.materials; - materials[ 0 ][ 0 ] = mlib[ "Chrome" ]; // insides - materials[ 1 ][ 0 ] = mlib[ "Black rough" ]; // tire + materials[ 0 ] = mlib[ "Chrome" ]; // insides + materials[ 1 ] = mlib[ "Black rough" ]; // tire } @@ -873,23 +873,13 @@ } - function clamp( x, a, b ) { return x < a ? a : ( x > b ? b : x ); } - - function map_linear( x, sa, sb, ea, eb ) { - - return ( x - sa ) * ( eb - ea ) / ( sb - sa ) + ea; - - }; - function render() { - var newTime = new Date().getTime(); - var delta = 0.001 * ( newTime - oldTime ); - oldTime = newTime; + var delta = clock.getDelta(); // day / night - v = clamp( v + 0.5 * delta * vdir, 0.1, 0.9 ); + v = THREE.Math.clamp( v + 0.5 * delta * vdir, 0.1, 0.9 ); scene.fog.color.setHSV( 0.51, 0.5, v ); renderer.setClearColor( scene.fog.color, 1 ); @@ -910,16 +900,16 @@ if ( veyron.loaded ) { - veyron.bodyGeometry.materials[ 1 ][ 0 ] = mlib[ "ChromeN" ]; - veyron.bodyGeometry.materials[ 2 ][ 0 ] = mlib[ "ChromeN" ]; + veyron.bodyGeometry.materials[ 1 ] = mlib[ "ChromeN" ]; + veyron.bodyGeometry.materials[ 2 ] = mlib[ "ChromeN" ]; - veyron.wheelGeometry.materials[ 0 ][ 0 ] = mlib[ "ChromeN" ]; + veyron.wheelGeometry.materials[ 0 ] = mlib[ "ChromeN" ]; } if ( gallardo.loaded ) { - gallardo.wheelGeometry.materials[ 0 ][ 0 ] = mlib[ "ChromeN" ]; + gallardo.wheelGeometry.materials[ 0 ] = mlib[ "ChromeN" ]; } @@ -927,25 +917,25 @@ if ( veyron.loaded ) { - veyron.bodyGeometry.materials[ 1 ][ 0 ] = mlib[ "Chrome" ]; - veyron.bodyGeometry.materials[ 2 ][ 0 ] = mlib[ "Chrome" ]; + veyron.bodyGeometry.materials[ 1 ] = mlib[ "Chrome" ]; + veyron.bodyGeometry.materials[ 2 ] = mlib[ "Chrome" ]; - veyron.wheelGeometry.materials[ 0 ][ 0 ] = mlib[ "Chrome" ]; + veyron.wheelGeometry.materials[ 0 ] = mlib[ "Chrome" ]; } if ( gallardo.loaded ) { - gallardo.wheelGeometry.materials[ 0 ][ 0 ] = mlib[ "Chrome" ]; + gallardo.wheelGeometry.materials[ 0 ] = mlib[ "Chrome" ]; } } - effectBloom.screenUniforms[ "opacity" ].value = map_linear( vnorm, 0, 1, 1, 0.75 ); + effectBloom.screenUniforms[ "opacity" ].value = THREE.Math.mapLinear( vnorm, 0, 1, 1, 0.75 ); - ambientLight.color.setHSV( 0, 0, map_linear( vnorm, 0, 1, 0.07, 0.33 ) ); - groundBasic.color.setHSV( 0.1, 0.45, map_linear( vnorm, 0, 1, 0.725, 0.995 ) ); + ambientLight.color.setHSV( 0, 0, THREE.Math.mapLinear( vnorm, 0, 1, 0.07, 0.33 ) ); + groundBasic.color.setHSV( 0.1, 0.45, THREE.Math.mapLinear( vnorm, 0, 1, 0.725, 0.995 ) ); // blur @@ -997,6 +987,9 @@ cubeCamera.updatePosition( currentCar.root.position ); + renderer.autoUpdateObjects = false; + renderer.initWebGLObjects( scene ); + renderer.autoClear = true; cubeCamera.updateCubeMap( renderer, scene ); @@ -1009,6 +1002,7 @@ renderer.autoClear = false; renderer.shadowMapEnabled = true; + renderer.autoUpdateObjects = true; camera.lookAt( cameraTarget ); diff --git a/examples/webgl_materials_cubemap_refraction.html b/examples/webgl_materials_cubemap_refraction.html index d4ec2ec3..c0fafefc 100644 --- a/examples/webgl_materials_cubemap_refraction.html +++ b/examples/webgl_materials_cubemap_refraction.html @@ -143,7 +143,7 @@ loader = new THREE.BinaryLoader( true ); document.body.appendChild( loader.statusDomElement ); - loader.load( { model: 'obj/lucy/Lucy100k_bin.js', callback: function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } } ); + loader.load( 'obj/lucy/Lucy100k_bin.js', function( geometry ) { createScene( geometry, cubeMaterial1, cubeMaterial2, cubeMaterial3 ) } ); document.addEventListener('mousemove', onDocumentMouseMove, false); @@ -194,7 +194,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_grass.html b/examples/webgl_materials_grass.html index f7288741..aaa762fc 100644 --- a/examples/webgl_materials_grass.html +++ b/examples/webgl_materials_grass.html @@ -47,7 +47,7 @@ for ( var i = 0; i < 15; i ++ ) { mesh = levels[ i ] = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { map: new THREE.Texture( generateTextureLevel( bitmap ) ), transparent: true, depthTest: false } ) ); - mesh.materials[0].map.needsUpdate = true; + mesh.material.map.needsUpdate = true; mesh.rotation.x = - 90 * ( Math.PI / 180 ); mesh.position.y = i * 0.25; @@ -113,7 +113,7 @@ function render() { - var time = new Date().getTime() / 6000; + var time = Date.now() / 6000; camera.position.x = 80 * Math.cos( time ); camera.position.z = 80 * Math.sin( time ); diff --git a/examples/webgl_materials_normalmap.html b/examples/webgl_materials_normalmap.html index 721963cb..642ef8fc 100644 --- a/examples/webgl_materials_normalmap.html +++ b/examples/webgl_materials_normalmap.html @@ -183,7 +183,7 @@ loader = new THREE.BinaryLoader( true ); document.body.appendChild( loader.statusDomElement ); - loader.load( { model: "obj/ninja/NinjaLo_bin.js", callback: function( geometry ) { createScene( geometry, scale, material1, material2 ) } } ); + loader.load( "obj/ninja/NinjaLo_bin.js", function( geometry ) { createScene( geometry, scale, material1, material2 ) } ); // @@ -238,6 +238,8 @@ loader.statusDomElement.style.display = "none"; + console.log( mesh1 ); + } function onDocumentMouseMove(event) { diff --git a/examples/webgl_materials_normalmap2.html b/examples/webgl_materials_normalmap2.html index ad9351f4..072ee6cf 100644 --- a/examples/webgl_materials_normalmap2.html +++ b/examples/webgl_materials_normalmap2.html @@ -132,7 +132,7 @@ loader = new THREE.JSONLoader( true ); document.body.appendChild( loader.statusDomElement ); - loader.load( { model: "obj/leeperrysmith/LeePerrySmith.js", callback: function( geometry ) { createScene( geometry, 100, material ) } } ); + loader.load( "obj/leeperrysmith/LeePerrySmith.js", function( geometry ) { createScene( geometry, 100, material ) } ); renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); diff --git a/examples/webgl_materials_shaders.html b/examples/webgl_materials_shaders.html index ed057541..8e6ab7d3 100644 --- a/examples/webgl_materials_shaders.html +++ b/examples/webgl_materials_shaders.html @@ -64,7 +64,7 @@ var windowHalfX = window.innerWidth / 2; var windowHalfY = window.innerHeight / 2; - var render_canvas = 1, render_gl = 1; + var render_canvas = 0, render_gl = 1; var has_gl = 0; var bcanvas = document.getElementById( "rcanvas" ); @@ -227,7 +227,7 @@ function render() { - var timer = - new Date().getTime() * 0.0002; + var timer = -0.0002 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_shaders_fresnel.html b/examples/webgl_materials_shaders_fresnel.html index 2e2d8fea..899e85ef 100644 --- a/examples/webgl_materials_shaders_fresnel.html +++ b/examples/webgl_materials_shaders_fresnel.html @@ -43,7 +43,7 @@ if ( ! Detector.webgl ) Detector.addGetWebGLMessage(); - var container, timer; + var container; var camera, scene, renderer; var cameraCube, sceneCube; @@ -162,7 +162,7 @@ function render() { - timer = new Date().getTime() * 0.0001; + var timer = 0.0001 * Date.now(); camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_materials_skin.html b/examples/webgl_materials_skin.html index b6257070..0ce6f8cf 100644 --- a/examples/webgl_materials_skin.html +++ b/examples/webgl_materials_skin.html @@ -147,7 +147,7 @@ loader = new THREE.JSONLoader( true ); document.body.appendChild( loader.statusDomElement ); - loader.load( { model: "obj/leeperrysmith/LeePerrySmith.js", callback: function( geometry ) { createScene( geometry, 100, material ) } } ); + loader.load( "obj/leeperrysmith/LeePerrySmith.js", function( geometry ) { createScene( geometry, 100, material ) } ); // RENDERER diff --git a/examples/webgl_materials_video.html b/examples/webgl_materials_video.html index 2c7c9a5c..d7501565 100644 --- a/examples/webgl_materials_video.html +++ b/examples/webgl_materials_video.html @@ -226,7 +226,7 @@ function render() { - var time = new Date().getTime() * 0.00005; + var time = Date.now() * 0.00005; camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.position.y += ( - mouseY - camera.position.y ) * 0.05; diff --git a/examples/webgl_morphtargets_horse.html b/examples/webgl_morphtargets_horse.html index 3abd747b..d5c78070 100644 --- a/examples/webgl_morphtargets_horse.html +++ b/examples/webgl_morphtargets_horse.html @@ -62,13 +62,13 @@ scene.add( light ); var loader = new THREE.JSONLoader( true ); - loader.load( { model: "models/animated/horse.js", callback: function( geometry ) { + loader.load( "models/animated/horse.js", function( geometry ) { mesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: 0x606060, morphTargets: true } ) ); mesh.scale.set( 1.5, 1.5, 1.5 ); scene.add( mesh ); - } } ); + } ); // @@ -118,7 +118,7 @@ // Alternate morph targets - var time = new Date().getTime() % duration; + var time = Date.now() % duration; var keyframe = Math.floor( time / interpolation ) + 1; diff --git a/examples/webgl_multiple_canvases_circle.html b/examples/webgl_multiple_canvases_circle.html index f1f0389a..2b27aa34 100644 --- a/examples/webgl_multiple_canvases_circle.html +++ b/examples/webgl_multiple_canvases_circle.html @@ -33,7 +33,7 @@ -moz-transform-style: preserve-3d; transform-style: preserve-3d; } - + #shape { position: relative; top: 160px; @@ -47,7 +47,7 @@ transform: translateZ(-0px); transform-style: preserve-3d; } - + .ring { position: absolute; height: 300px; @@ -111,7 +111,7 @@ background-color: rgba(0,0,0,0.3); width: 50%; } - + @@ -127,7 +127,7 @@ - +
three.js webgl - multiple canvases - circle
@@ -157,7 +157,7 @@ } var rot = degToRad(30); - + var fudge = 0.45; // I don't know why this is needed :-( apps.push( new App( 'container1', rot * -2 * fudge ) ); @@ -219,12 +219,14 @@ var shadowMaterial = new THREE.MeshBasicMaterial( { map: THREE.ImageUtils.loadTexture( 'textures/shadow.png' ) } ); var shadowGeo = new THREE.PlaneGeometry( 300, 300, 1, 1 ); - for ( var i = 0; i < noof_balls; i++ ) { // create shadows + for ( var i = 0; i < noof_balls; i ++ ) { // create shadows + var mesh = new THREE.Mesh( shadowGeo, shadowMaterial ); mesh.position.y = - 250; mesh.position.x = - (noof_balls - 1) /2 *400 + i * 400; mesh.rotation.x = - 90 * Math.PI / 180; scene.add( mesh ); + } var faceIndices = [ 'a', 'b', 'c', 'd' ]; @@ -233,13 +235,13 @@ geometry1 = new THREE.IcosahedronGeometry( 1 ); - for ( var i = 0; i < geometry1.faces.length; i++ ) { + for ( var i = 0; i < geometry1.faces.length; i ++ ) { f1 = geometry1.faces[ i ]; n = ( f1 instanceof THREE.Face3 ) ? 3 : 4; - for( var j = 0; j < n; j++ ) { + for( var j = 0; j < n; j ++ ) { vertexIndex = f1[ faceIndices[ j ] ]; @@ -253,20 +255,28 @@ color = new THREE.Color( 0xffffff ); color.setHSV( 0.0, ( p.y + 1 ) / 2, 1.0 ); } + } var materials = [ + new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors } ), new THREE.MeshBasicMaterial( { color: 0x000000, shading: THREE.FlatShading, wireframe: true } ) + ]; - for ( var i = 0; i < noof_balls; i++ ) { // create balls - var mesh = new THREE.Mesh( geometry1, materials ); + var scaleMatrix = new THREE.Matrix4().setScale( 200, 200, 200 ); + geometry1.applyMatrix( scaleMatrix ); + + for ( var i = 0; i < noof_balls; i ++ ) { // create balls + + var mesh = THREE.SceneUtils.createMultiMaterialObject( geometry1, materials ); + mesh.position.x = - (noof_balls - 1) /2 *400 + i *400; - mesh.scale.x = mesh.scale.y = mesh.scale.z = 200; mesh.rotation.x = i * 0.5; scene.add( mesh ); + } renderer = new THREE.WebGLRenderer( { antialias: true } ); @@ -284,7 +294,7 @@ } function onDocumentMouseWheel (event ) { - + var delta = 0; if (event.wheelDelta) { delta = event.wheelDelta / 120; @@ -306,7 +316,7 @@ }; function render() { - + virtualCamera.position.x = -mouseX * 4; virtualCamera.position.y = -mouseY * 4; virtualCamera.position.z = cameraZ; diff --git a/examples/webgl_multiple_canvases_complex.html b/examples/webgl_multiple_canvases_complex.html index 79efd67d..a99c2509 100755 --- a/examples/webgl_multiple_canvases_complex.html +++ b/examples/webgl_multiple_canvases_complex.html @@ -108,7 +108,7 @@ var camera, scene, renderer; - var mesh, mesh2, mesh3, light; + var mesh, group1, group2, group3, light; var mouseX = 0, mouseY = 0; @@ -153,30 +153,30 @@ var faceIndices = [ 'a', 'b', 'c', 'd' ]; - var color, f, f2, f3, p, n, vertexIndex, + var color, f1, f2, f3, p, n, vertexIndex, - geometry = new THREE.IcosahedronGeometry( 1 ), + geometry1 = new THREE.IcosahedronGeometry( 1 ), geometry2 = new THREE.IcosahedronGeometry( 1 ), geometry3 = new THREE.IcosahedronGeometry( 1 ); - for ( var i = 0; i < geometry.faces.length; i++ ) { + for ( var i = 0; i < geometry1.faces.length; i ++ ) { - f = geometry.faces[ i ]; + f1 = geometry1.faces[ i ]; f2 = geometry2.faces[ i ]; f3 = geometry3.faces[ i ]; - n = ( f instanceof THREE.Face3 ) ? 3 : 4; + n = ( f1 instanceof THREE.Face3 ) ? 3 : 4; - for( var j = 0; j < n; j++ ) { + for( var j = 0; j < n; j ++ ) { - vertexIndex = f[ faceIndices[ j ] ]; + vertexIndex = f1[ faceIndices[ j ] ]; - p = geometry.vertices[ vertexIndex ].position; + p = geometry1.vertices[ vertexIndex ].position; color = new THREE.Color( 0xffffff ); color.setHSV( ( p.y + 1 ) / 2, 1.0, 1.0 ); - f.vertexColors[ j ] = color; + f1.vertexColors[ j ] = color; color = new THREE.Color( 0xffffff ); color.setHSV( 0.0, ( p.y + 1 ) / 2, 1.0 ); @@ -184,7 +184,7 @@ f2.vertexColors[ j ] = color; color = new THREE.Color( 0xffffff ); - color.setHSV( 0.125 * vertexIndex/geometry.vertices.length, 1.0, 1.0 ); + color.setHSV( 0.125 * vertexIndex / geometry1.vertices.length, 1.0, 1.0 ); f3.vertexColors[ j ] = color; @@ -196,27 +196,29 @@ var materials = [ new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors } ), - new THREE.MeshBasicMaterial( { color: 0x000000, shading: THREE.FlatShading, wireframe: true } ) + new THREE.MeshBasicMaterial( { color: 0x000000, shading: THREE.FlatShading, wireframe: true, transparent: true } ) ]; - mesh = new THREE.Mesh( geometry, materials ); - mesh.position.x = -400; - mesh.scale.x = mesh.scale.y = mesh.scale.z = 200; - mesh.rotation.x = -1.87; - scene.add( mesh ); + var scaleMatrix = new THREE.Matrix4().setScale( 200, 200, 200 ); + geometry1.applyMatrix( scaleMatrix ); + geometry2.applyMatrix( scaleMatrix ); + geometry3.applyMatrix( scaleMatrix ); - mesh2 = new THREE.Mesh( geometry2, materials ); - mesh2.position.x = 400; - mesh2.rotation.x = 0; - mesh2.scale = mesh.scale; - scene.add( mesh2 ); + group1 = THREE.SceneUtils.createMultiMaterialObject( geometry1, materials ); + group1.position.x = -400; + group1.rotation.x = -1.87; + scene.add( group1 ); - mesh3 = new THREE.Mesh( geometry3, materials ); - mesh3.position.x = 0; - mesh3.rotation.x = 0; - mesh3.scale = mesh.scale; - scene.add( mesh3 ); + group2 = THREE.SceneUtils.createMultiMaterialObject( geometry2, materials ); + group2.position.x = 400; + group2.rotation.x = 0; + scene.add( group2 ); + + group3 = THREE.SceneUtils.createMultiMaterialObject( geometry3, materials ); + group3.position.x = 0; + group3.rotation.x = 0; + scene.add( group3 ); renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( container.clientWidth, container.clientHeight ); diff --git a/examples/webgl_multiple_canvases_grid.html b/examples/webgl_multiple_canvases_grid.html index bb6b7a49..833389a7 100755 --- a/examples/webgl_multiple_canvases_grid.html +++ b/examples/webgl_multiple_canvases_grid.html @@ -124,7 +124,7 @@ var camera, scene, renderer; - var mesh, mesh2, mesh3, light; + var mesh, group1, group2, group3, light; var mouseX = 0, mouseY = 0; @@ -169,30 +169,30 @@ var faceIndices = [ 'a', 'b', 'c', 'd' ]; - var color, f, f2, f3, p, n, vertexIndex, + var color, f1, f2, f3, p, n, vertexIndex, - geometry = new THREE.IcosahedronGeometry( 1 ), + geometry1 = new THREE.IcosahedronGeometry( 1 ), geometry2 = new THREE.IcosahedronGeometry( 1 ), geometry3 = new THREE.IcosahedronGeometry( 1 ); - for ( var i = 0; i < geometry.faces.length; i++ ) { + for ( var i = 0; i < geometry1.faces.length; i ++ ) { - f = geometry.faces[ i ]; + f1 = geometry1.faces[ i ]; f2 = geometry2.faces[ i ]; f3 = geometry3.faces[ i ]; - n = ( f instanceof THREE.Face3 ) ? 3 : 4; + n = ( f1 instanceof THREE.Face3 ) ? 3 : 4; - for( var j = 0; j < n; j++ ) { + for( var j = 0; j < n; j ++ ) { - vertexIndex = f[ faceIndices[ j ] ]; + vertexIndex = f1[ faceIndices[ j ] ]; - p = geometry.vertices[ vertexIndex ].position; + p = geometry1.vertices[ vertexIndex ].position; color = new THREE.Color( 0xffffff ); color.setHSV( ( p.y + 1 ) / 2, 1.0, 1.0 ); - f.vertexColors[ j ] = color; + f1.vertexColors[ j ] = color; color = new THREE.Color( 0xffffff ); color.setHSV( 0.0, ( p.y + 1 ) / 2, 1.0 ); @@ -200,7 +200,7 @@ f2.vertexColors[ j ] = color; color = new THREE.Color( 0xffffff ); - color.setHSV( 0.125 * vertexIndex/geometry.vertices.length, 1.0, 1.0 ); + color.setHSV( 0.125 * vertexIndex / geometry1.vertices.length, 1.0, 1.0 ); f3.vertexColors[ j ] = color; @@ -212,27 +212,29 @@ var materials = [ new THREE.MeshLambertMaterial( { color: 0xffffff, shading: THREE.FlatShading, vertexColors: THREE.VertexColors } ), - new THREE.MeshBasicMaterial( { color: 0x000000, shading: THREE.FlatShading, wireframe: true } ) + new THREE.MeshBasicMaterial( { color: 0x000000, shading: THREE.FlatShading, wireframe: true, transparent: true } ) ]; - mesh = new THREE.Mesh( geometry, materials ); - mesh.position.x = -400; - mesh.scale.x = mesh.scale.y = mesh.scale.z = 200; - mesh.rotation.x = -1.87; - scene.add( mesh ); + var scaleMatrix = new THREE.Matrix4().setScale( 200, 200, 200 ); + geometry1.applyMatrix( scaleMatrix ); + geometry2.applyMatrix( scaleMatrix ); + geometry3.applyMatrix( scaleMatrix ); - mesh2 = new THREE.Mesh( geometry2, materials ); - mesh2.position.x = 400; - mesh2.rotation.x = 0; - mesh2.scale = mesh.scale; - scene.add( mesh2 ); + group1 = THREE.SceneUtils.createMultiMaterialObject( geometry1, materials ); + group1.position.x = -400; + group1.rotation.x = -1.87; + scene.add( group1 ); - mesh3 = new THREE.Mesh( geometry3, materials ); - mesh3.position.x = 0; - mesh3.rotation.x = 0; - mesh3.scale = mesh.scale; - scene.add( mesh3 ); + group2 = THREE.SceneUtils.createMultiMaterialObject( geometry2, materials ); + group2.position.x = 400; + group2.rotation.x = 0; + scene.add( group2 ); + + group3 = THREE.SceneUtils.createMultiMaterialObject( geometry3, materials ); + group3.position.x = 0; + group3.rotation.x = 0; + scene.add( group3 ); renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( container.clientWidth, container.clientHeight ); diff --git a/examples/webgl_objconvert_test.html b/examples/webgl_objconvert_test.html index 6774d5b5..8f59ee2d 100644 --- a/examples/webgl_objconvert_test.html +++ b/examples/webgl_objconvert_test.html @@ -59,7 +59,7 @@ var windowHalfX = window.innerWidth / 2; var windowHalfY = window.innerHeight / 2; - var render_canvas = 1, render_gl = 1; + var render_canvas = 0, render_gl = 1; var has_gl = 0; var bcanvas = document.getElementById( "rcanvas" ); @@ -190,11 +190,11 @@ callbackMale = function( geometry ) { createScene( geometry, 90, FLOOR, 50, 105 ) }, callbackFemale = function( geometry ) { createScene( geometry, -80, FLOOR, 50, 0 ) }; - loader.load( { model: "obj/male02/Male02_slim.js", callback: callbackMale } ); - loader.load( { model: "obj/female02/Female02_slim.js", callback: callbackFemale } ); + loader.load( "obj/male02/Male02_slim.js", callbackMale ); + loader.load( "obj/female02/Female02_slim.js", callbackFemale ); - //loader.load( { model: "obj/male02/Male02_bin.js", callback: callbackMale } ); - //loader.load( { model: "obj/female02/Female02_bin.js", callback: callbackFemale } ); + //loader.load( "obj/male02/Male02_bin.js", callbackMale ); + //loader.load( "obj/female02/Female02_bin.js", callbackFemale ); } diff --git a/examples/webgl_particles_billboards.html b/examples/webgl_particles_billboards.html index f8898a61..fc7aa027 100644 --- a/examples/webgl_particles_billboards.html +++ b/examples/webgl_particles_billboards.html @@ -61,7 +61,7 @@ container = document.createElement( 'div' ); document.body.appendChild( container ); - camera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 1, 3000 ); + camera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 2, 2000 ); camera.position.z = 1000; scene = new THREE.Scene(); @@ -71,7 +71,7 @@ sprite = THREE.ImageUtils.loadTexture( "textures/sprites/disc.png" ); - for ( i = 0; i < 10000; i++ ) { + for ( i = 0; i < 10000; i ++ ) { x = 2000 * Math.random() - 1000; y = 2000 * Math.random() - 1000; @@ -91,7 +91,7 @@ // - renderer = new THREE.WebGLRenderer( { clearAlpha: 1 }); + renderer = new THREE.WebGLRenderer( { clearAlpha: 1 } ); renderer.setSize( window.innerWidth, window.innerHeight ); container.appendChild( renderer.domElement ); @@ -155,7 +155,7 @@ function render() { - var time = new Date().getTime() * 0.00005; + var time = Date.now() * 0.00005; camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.position.y += ( - mouseY - camera.position.y ) * 0.05; diff --git a/examples/webgl_particles_billboards_colors.html b/examples/webgl_particles_billboards_colors.html index b6378278..4dc5f612 100644 --- a/examples/webgl_particles_billboards_colors.html +++ b/examples/webgl_particles_billboards_colors.html @@ -71,7 +71,7 @@ sprite = THREE.ImageUtils.loadTexture( "textures/sprites/ball.png" ); - for ( i = 0; i < 5000; i++ ) { + for ( i = 0; i < 5000; i ++ ) { x = 2000 * Math.random() - 1000; y = 2000 * Math.random() - 1000; @@ -171,7 +171,7 @@ function render() { - var time = new Date().getTime() * 0.00005; + var time = Date.now() * 0.00005; camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.position.y += ( - mouseY - camera.position.y ) * 0.05; diff --git a/examples/webgl_particles_dynamic.html b/examples/webgl_particles_dynamic.html index c62771c6..9d798a7a 100644 --- a/examples/webgl_particles_dynamic.html +++ b/examples/webgl_particles_dynamic.html @@ -75,6 +75,8 @@ var composer, effectFocus; + var clock = new THREE.Clock(); + init(); animate(); @@ -98,7 +100,7 @@ document.body.appendChild( bloader.statusDomElement ); - aloader.load( { model: "obj/terrain.js", callback: function( geometry ) { + aloader.load( "obj/terrain.js", function( geometry ) { createMesh( geometry, scene, 16.8, -11000, -200, -5000, 0x00ff44, false ); createMesh( geometry, scene, 16.8, 11000, -200, -15000, 0x00ff33, false ); @@ -109,11 +111,11 @@ createMesh( geometry, scene, 16.8, 13000, -200, 5000, 0x00ff55, false ); createMesh( geometry, scene, 16.8, 13000, -200, -5000, 0x00ff66, false ); - } } ); + } ); - bloader.load( { model: "obj/veyron/VeyronNoUv_bin.js", callback: function( geometry ) { createMesh( geometry, scene, 6.8, 2200, -200, -100, 0x0055ff, false ) } } ); + bloader.load( "obj/veyron/VeyronNoUv_bin.js", function( geometry ) { createMesh( geometry, scene, 6.8, 2200, -200, -100, 0x0055ff, false ) } ); - bloader.load( { model: "obj/female02/Female02_bin.js", callback: function( geometry ) { + bloader.load( "obj/female02/Female02_bin.js", function( geometry ) { createMesh( geometry, scene, 4.05, -1000, -350, 0, 0xffdd44, true ); createMesh( geometry, scene, 4.05, 0, -350, 0, 0xffffff, true ); @@ -121,16 +123,16 @@ createMesh( geometry, scene, 4.05, 250, -350, 1500, 0xff9955, true ); createMesh( geometry, scene, 4.05, 250, -350, 2500, 0xff77dd, true ); - } } ); + } ); - bloader.load( { model: "obj/male02/Male02_bin.js", callback: function( geometry ) { + bloader.load( "obj/male02/Male02_bin.js", function( geometry ) { createMesh( geometry, scene, 4.05, -500, -350, 600, 0xff7744, true ); createMesh( geometry, scene, 4.05, 500, -350, 0, 0xff5522, true ); createMesh( geometry, scene, 4.05, -250, -350, 1500, 0xff9922, true ); createMesh( geometry, scene, 4.05, -250, -350, -1500, 0xff99ff, true ); - } } ); + } ); // @@ -285,8 +287,7 @@ } - var j, jl, cm, data, vertices, vertices_tmp, vl, d, vt, - time, oldTime, delta; + var j, jl, cm, data, vertices, vertices_tmp, vl, d, vt; function animate () { @@ -297,29 +298,20 @@ function render () { - if ( ! oldTime ) { - - oldTime = new Date().getTime(); - - } - - time = new Date().getTime(); - - delta = 0.01 * ( time - oldTime ); - oldTime = time; + delta = 10 * clock.getDelta();; delta = delta < 2 ? delta : 2; parent.rotation.y += -0.02 * delta; - for( j = 0, jl = clonemeshes.length; j < jl; j++ ) { + for( j = 0, jl = clonemeshes.length; j < jl; j ++ ) { cm = clonemeshes[ j ]; cm.mesh.rotation.y += -0.1 * delta * cm.speed; } - for( j = 0, jl = meshes.length; j < jl; j++ ) { + for( j = 0, jl = meshes.length; j < jl; j ++ ) { data = meshes[ j ]; mesh = data.mesh; @@ -411,9 +403,9 @@ // all down - if ( data.down == vl ) { + if ( data.down === vl ) { - if ( data.delay == 0 ) { + if ( data.delay === 0 ) { data.direction = 1; data.speed = 10; @@ -437,9 +429,9 @@ // all up - if ( data.up == vl ) { + if ( data.up === vl ) { - if ( data.delay == 0 ) { + if ( data.delay === 0 ) { data.direction = -1; data.speed = 35; diff --git a/examples/webgl_particles_random.html b/examples/webgl_particles_random.html index 4d23ad08..7269b12b 100644 --- a/examples/webgl_particles_random.html +++ b/examples/webgl_particles_random.html @@ -69,7 +69,7 @@ geometry = new THREE.Geometry(); - for ( i = 0; i < 4000; i++ ) { + for ( i = 0; i < 20000; i ++ ) { vector = new THREE.Vector3( Math.random() * 2000 - 1000, Math.random() * 2000 - 1000, Math.random() * 2000 - 1000 ); geometry.vertices.push( new THREE.Vertex( vector ) ); @@ -80,7 +80,7 @@ //parameters = [ [ 0xff0000, 5 ], [ 0xff3300, 4 ], [ 0xff6600, 3 ], [ 0xff9900, 2 ], [ 0xffaa00, 1 ] ]; //parameters = [ [ 0xffffff, 5 ], [ 0xdddddd, 4 ], [ 0xaaaaaa, 3 ], [ 0x999999, 2 ], [ 0x777777, 1 ] ]; - for ( i = 0; i < parameters.length; i++ ) { + for ( i = 0; i < parameters.length; i ++ ) { size = parameters[i][1]; color = parameters[i][0]; @@ -160,20 +160,20 @@ function render() { - var time = new Date().getTime() * 0.00005; + var time = Date.now() * 0.00005; camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.position.y += ( - mouseY - camera.position.y ) * 0.05; camera.lookAt( scene.position ); - for( i = 0; i < scene.objects.length; i++ ) { + for( i = 0; i < scene.objects.length; i ++ ) { scene.objects[i].rotation.y = time * ( i < 4 ? i+1 : - (i+1) ); } - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { color = parameters[i][0]; diff --git a/examples/webgl_particles_shapes.html b/examples/webgl_particles_shapes.html index 2d14ab7c..ab6acfd6 100644 --- a/examples/webgl_particles_shapes.html +++ b/examples/webgl_particles_shapes.html @@ -82,8 +82,6 @@ var text, plane; - var oldTime = new Date().getTime() * 0.001; - var delta = 1; var speed = 50; var pointLight; @@ -97,6 +95,7 @@ var windowHalfX = window.innerWidth / 2; var windowHalfY = window.innerHeight / 2; + var delta = 1, clock = new THREE.Clock(); var heartShape, particleCloud, sparksEmitter, emitterPos; var _rotation = 0; @@ -164,11 +163,13 @@ bevelThickness: 2, bevelSize: 2, - material: textMaterialFront, - extrudeMaterial: textMaterialSide + material: 0, + extrudeMaterial: 1 }); + text3d.materials = [ textMaterialFront, textMaterialSide ]; + text3d.computeVertexNormals(); text3d.computeBoundingBox(); @@ -187,8 +188,8 @@ text.rotation.y = Math.PI * 2; parent = new THREE.Object3D(); - parent.addChild( text ); - scene.addObject( parent ); + parent.add( text ); + scene.add( parent ); ///// Create particle objects for Three.js @@ -354,7 +355,7 @@ } - parent.addChild( particleCloud ); + parent.add( particleCloud ); particleCloud.y = 800; @@ -624,9 +625,7 @@ function render() { - var time = new Date().getTime() * 0.001; - delta = speed * ( time - oldTime ); - oldTime = time; + delta = speed * clock.getDelta(); particleCloud.geometry.__dirtyVertices = true; diff --git a/examples/webgl_particles_sprites.html b/examples/webgl_particles_sprites.html index 0d3565a9..5e3b235c 100644 --- a/examples/webgl_particles_sprites.html +++ b/examples/webgl_particles_sprites.html @@ -62,7 +62,7 @@ container = document.createElement( 'div' ); document.body.appendChild( container ); - camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 3000 ); + camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 2000 ); camera.position.z = 1000; scene = new THREE.Scene(); @@ -76,17 +76,21 @@ sprite4 = THREE.ImageUtils.loadTexture( "textures/sprites/snowflake4.png" ); sprite5 = THREE.ImageUtils.loadTexture( "textures/sprites/snowflake5.png" ); - for ( i = 0; i < 2000; i ++ ) { + for ( i = 0; i < 10000; i ++ ) { vector = new THREE.Vector3( Math.random() * 2000 - 1000, Math.random() * 2000 - 1000, Math.random() * 2000 - 1000 ); geometry.vertices.push( new THREE.Vertex( vector ) ); } - parameters = [ [ [1.0, 0.2, 1.0], sprite2, 20 ], [ [0.95, 0.1, 1], sprite3, 15 ], [ [0.90, 0.05, 1], sprite1, 10 ], [ [0.85, 0, 0.8], sprite5, 8 ], [ [0.80, 0, 0.7], sprite4, 5 ], + parameters = [ [ [1.0, 0.2, 1.0], sprite2, 20 ], + [ [0.95, 0.1, 1], sprite3, 15 ], + [ [0.90, 0.05, 1], sprite1, 10 ], + [ [0.85, 0, 0.8], sprite5, 8 ], + [ [0.80, 0, 0.7], sprite4, 5 ], ]; - for ( i = 0; i < parameters.length; i++ ) { + for ( i = 0; i < parameters.length; i ++ ) { color = parameters[i][0]; sprite = parameters[i][1]; @@ -165,20 +169,20 @@ function render() { - var time = new Date().getTime() * 0.00005; + var time = Date.now() * 0.00005; camera.position.x += ( mouseX - camera.position.x ) * 0.05; camera.position.y += ( - mouseY - camera.position.y ) * 0.05; camera.lookAt( scene.position ); - for( i = 0; i < scene.objects.length; i++ ) { + for( i = 0; i < scene.objects.length; i ++ ) { scene.objects[i].rotation.y = time * ( i < 4 ? i+1 : - (i+1) ); } - for( i = 0; i < materials.length; i++ ) { + for( i = 0; i < materials.length; i ++ ) { color = parameters[i][0]; diff --git a/examples/webgl_postprocessing.html b/examples/webgl_postprocessing.html index d58cdab3..1b66a82f 100644 --- a/examples/webgl_postprocessing.html +++ b/examples/webgl_postprocessing.html @@ -128,13 +128,12 @@ sceneModel = new THREE.Scene(); directionalLight = new THREE.DirectionalLight( 0xffffff ); - directionalLight.position.set( 0, 0, 1 ); - directionalLight.position.normalize(); + directionalLight.position.set( 0, 0, 1 ).normalize(); sceneModel.add( directionalLight ); loader = new THREE.JSONLoader( true ); document.body.appendChild( loader.statusDomElement ); - loader.load( { model: "obj/leeperrysmith/LeePerrySmith.js", callback: function( geometry ) { createMesh( geometry, sceneModel, 100 ) } } ); + loader.load( "obj/leeperrysmith/LeePerrySmith.js", function( geometry ) { createMesh( geometry, sceneModel, 100 ) } ); // @@ -380,7 +379,7 @@ function render() { - var time = new Date().getTime() * 0.0004; + var time = Date.now() * 0.0004; if ( mesh ) mesh.rotation.y = -time; diff --git a/examples/webgl_postprocessing_dof.html b/examples/webgl_postprocessing_dof.html index 3e9141ae..c566f9c0 100644 --- a/examples/webgl_postprocessing_dof.html +++ b/examples/webgl_postprocessing_dof.html @@ -124,9 +124,9 @@ //var s = 0.25; var s = 60; - for ( i = 0; i < xgrid; i++ ) - for ( j = 0; j < ygrid; j++ ) - for ( k = 0; k < zgrid; k++ ) { + for ( i = 0; i < xgrid; i ++ ) + for ( j = 0; j < ygrid; j ++ ) + for ( k = 0; k < zgrid; k ++ ) { if ( singleMaterial ) { @@ -153,7 +153,7 @@ scene.add( mesh ); objects.push( mesh ); - c++; + c ++; } @@ -278,7 +278,7 @@ function render() { - var time = new Date().getTime() * 0.00005; + var time = Date.now() * 0.00005; camera.position.x += ( mouseX - camera.position.x ) * 0.036; camera.position.y += ( - (mouseY) - camera.position.y ) * 0.036; @@ -287,10 +287,9 @@ if ( !singleMaterial ) { - for( i = 0; i < nobjects; i++ ) { + for( i = 0; i < nobjects; i ++ ) { - h = ( 360 * ( i/nobjects + time ) % 360 ) / 360; - //materials[ i ].color.setHSV( h, 0.5 + 0.5 * ( i % 20 / 20 ), 1 ); + h = ( 360 * ( i / nobjects + time ) % 360 ) / 360; materials[ i ].color.setHSV( h, 1, 1 ); } diff --git a/examples/webgl_ribbons.html b/examples/webgl_ribbons.html index d84183d6..8fdc6165 100644 --- a/examples/webgl_ribbons.html +++ b/examples/webgl_ribbons.html @@ -259,7 +259,7 @@ function render() { - var time = new Date().getTime() * 0.00005; + var time = Date.now() * 0.00005; camera.position.x += ( mouseX - camera.position.x ) * 0.036; camera.position.y += ( - mouseY - camera.position.y ) * 0.036; diff --git a/examples/webgl_rtt.html b/examples/webgl_rtt.html index 34cdfde3..cf21c4f0 100644 --- a/examples/webgl_rtt.html +++ b/examples/webgl_rtt.html @@ -232,7 +232,7 @@ function render() { - var time = new Date().getTime() * 0.0015; + var time = Date.now() * 0.0015; camera.position.x += ( mouseX - camera.position.x ) * .05; camera.position.y += ( - mouseY - camera.position.y ) * .05; diff --git a/examples/webgl_scene_test.html b/examples/webgl_scene_test.html index 87cbf21c..faf550f8 100644 --- a/examples/webgl_scene_test.html +++ b/examples/webgl_scene_test.html @@ -281,14 +281,14 @@ var mat_veyron = result.geometries[ "veyron" ].materials; - mat_veyron[ 0 ][ 0 ] = result.materials[ "interior" ]; - mat_veyron[ 1 ][ 0 ] = result.materials[ "chrome" ]; - mat_veyron[ 2 ][ 0 ] = result.materials[ "darkerchrome" ]; - mat_veyron[ 3 ][ 0 ] = result.materials[ "glass" ]; - mat_veyron[ 4 ][ 0 ] = result.materials[ "chrome" ]; - mat_veyron[ 5 ][ 0 ] = result.materials[ "chrome" ]; - mat_veyron[ 6 ][ 0 ] = result.materials[ "backlights" ]; - mat_veyron[ 7 ][ 0 ] = result.materials[ "backsignals" ]; + mat_veyron[ 0 ] = result.materials[ "interior" ]; + mat_veyron[ 1 ] = result.materials[ "chrome" ]; + mat_veyron[ 2 ] = result.materials[ "darkerchrome" ]; + mat_veyron[ 3 ] = result.materials[ "glass" ]; + mat_veyron[ 4 ] = result.materials[ "chrome" ]; + mat_veyron[ 5 ] = result.materials[ "chrome" ]; + mat_veyron[ 6 ] = result.materials[ "backlights" ]; + mat_veyron[ 7 ] = result.materials[ "backsignals" ]; $( "message" ).style.display = "none"; $( "progressbar" ).style.display = "none"; diff --git a/examples/webgl_shader2.html b/examples/webgl_shader2.html index 7059087e..a726ed93 100644 --- a/examples/webgl_shader2.html +++ b/examples/webgl_shader2.html @@ -199,7 +199,7 @@ scene = new THREE.Scene(); - start_time = new Date().getTime(); + start_time = Date.now(); uniforms1 = { time: { type: "f", value: 1.0 }, @@ -278,9 +278,9 @@ function render() { uniforms1.time.value += 0.05; - uniforms2.time.value = ( new Date().getTime() - start_time ) / 1000; + uniforms2.time.value = ( Date.now() - start_time ) / 1000; - for( var i = 0; i < meshes.length; ++i ) { + for( var i = 0; i < meshes.length; ++ i ) { meshes[ i ].rotation.y += 0.01 * ( i % 2 ? 1 : -1 ); meshes[ i ].rotation.x += 0.01 * ( i % 2 ? -1 : 1 ); diff --git a/examples/webgl_shader_lava.html b/examples/webgl_shader_lava.html index 28d7b9f8..58628bc5 100644 --- a/examples/webgl_shader_lava.html +++ b/examples/webgl_shader_lava.html @@ -121,7 +121,7 @@ var container, stats; - var start_time; + var clock = new THREE.Clock(); var camera, scene, renderer, composer; @@ -145,8 +145,6 @@ scene = new THREE.Scene(); - start_time = new Date().getTime(); - uniforms = { fogDensity: { type: "f", value: 0.45 }, @@ -172,9 +170,7 @@ } ); - mesh = new THREE.Mesh( new THREE.TorusGeometry( size, 0.3, 30, 30 ), [ material /*, new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, wireframeLinewidth: 2 } ) */ ] ); - mesh.position.x = 0; - mesh.position.y = 0; + mesh = new THREE.Mesh( new THREE.TorusGeometry( size, 0.3, 30, 30 ), material ); mesh.rotation.x = 0.3; scene.add( mesh ); @@ -240,10 +236,12 @@ function render() { - uniforms.time.value += 0.02; + var delta = 5 * clock.getDelta(); - mesh.rotation.y += 0.00125; - mesh.rotation.x += 0.005; + uniforms.time.value += 0.2 * delta; + + mesh.rotation.y += 0.0125 * delta; + mesh.rotation.x += 0.05 * delta; renderer.clear(); composer.render( 0.01 ); diff --git a/examples/webgl_shading_physical.html b/examples/webgl_shading_physical.html new file mode 100644 index 00000000..45cb5f21 --- /dev/null +++ b/examples/webgl_shading_physical.html @@ -0,0 +1,649 @@ + + + + three.js webgl - physically based shading + + + + + + +
+ three.js - webgl physically based shading testbed +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/webgl_shadowmap.html b/examples/webgl_shadowmap.html index 4afa3391..8aade07b 100644 --- a/examples/webgl_shadowmap.html +++ b/examples/webgl_shadowmap.html @@ -60,10 +60,12 @@ var sceneHUD, cameraOrtho, hudMaterial; - var morphs = []; + var morph, morphs = []; var light; + var clock = new THREE.Clock(); + init(); animate(); @@ -172,6 +174,7 @@ var geometry = new THREE.PlaneGeometry( 100, 100 ); var planeMaterial = new THREE.MeshLambertMaterial( { color: 0xffdd99 } ); THREE.ColorUtils.adjustHSV( planeMaterial.color, 0, 0, 0.9 ); + planeMaterial.ambient = planeMaterial.color; var ground = new THREE.Mesh( geometry, planeMaterial ); @@ -244,9 +247,20 @@ var material = new THREE.MeshLambertMaterial( { color: 0xffaa55, morphTargets: true, vertexColors: THREE.FaceColors } ); - if ( fudgeColor ) THREE.ColorUtils.adjustHSV( material.color, 0, 0.5 - Math.random(), 0.5 - Math.random() ); + //geometry.materials[ 0 ] = material; - var meshAnim = new THREE.Mesh( geometry, material ); + if ( fudgeColor ) { + + THREE.ColorUtils.adjustHSV( material.color, 0, 0.5 - Math.random(), 0.5 - Math.random() ); + material.ambient = material.color; + + } + + var meshAnim = new THREE.MorphAnimMesh( geometry, material ); + + meshAnim.speed = speed; + meshAnim.duration = duration; + meshAnim.time = 600 * Math.random(); meshAnim.position.set( x, y, z ); meshAnim.rotation.y = Math.PI/2; @@ -256,9 +270,7 @@ scene.add( meshAnim ); - morphs.push( { mesh: meshAnim, lastKeyframe: 0, currentKeyframe: 0, - offset: Math.random() * 6, speed: speed, duration: duration, - oldTime: new Date().getTime() } ); + morphs.push( meshAnim ); } @@ -280,117 +292,73 @@ var loader = new THREE.JSONLoader(); - loader.load( { model: "models/animated/horse.js", callback: function( geometry ) { + loader.load( "models/animated/horse.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.55, 1000, 100 - Math.random() * 1000, FLOOR, 300, true ); - addMorph( geometry, 0.55, 1000, 100 - Math.random() * 1000, FLOOR, 450, true ); - addMorph( geometry, 0.55, 1000, 100 - Math.random() * 1000, FLOOR, 600, true ); + addMorph( geometry, 550, 1000, 100 - Math.random() * 1000, FLOOR, 300, true ); + addMorph( geometry, 550, 1000, 100 - Math.random() * 1000, FLOOR, 450, true ); + addMorph( geometry, 550, 1000, 100 - Math.random() * 1000, FLOOR, 600, true ); - addMorph( geometry, 0.55, 1000, 100 - Math.random() * 1000, FLOOR, -300, true ); - addMorph( geometry, 0.55, 1000, 100 - Math.random() * 1000, FLOOR, -450, true ); - addMorph( geometry, 0.55, 1000, 100 - Math.random() * 1000, FLOOR, -600, true ); + addMorph( geometry, 550, 1000, 100 - Math.random() * 1000, FLOOR, -300, true ); + addMorph( geometry, 550, 1000, 100 - Math.random() * 1000, FLOOR, -450, true ); + addMorph( geometry, 550, 1000, 100 - Math.random() * 1000, FLOOR, -600, true ); - } } ); + } ); /* - loader.load( { model: "obj/morphs/fox.js", callback: function( geometry ) { + loader.load( "obj/morphs/fox.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.2, 1000, 100 - Math.random() * 500, FLOOR - 5, 600 ); + addMorph( geometry, 200, 1000, 100 - Math.random() * 500, FLOOR - 5, 600 ); - } } ); + } ); - loader.load( { model: "obj/morphs/shdw3walk.js", callback: function( geometry ) { + loader.load( "obj/morphs/shdw3walk.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.04, 2000, -500, FLOOR + 60, 245 ); + addMorph( geometry, 40, 2000, -500, FLOOR + 60, 245 ); - } } ); + } ); - loader.load( { model: "obj/morphs/flamingo.js", callback: function( geometry ) { + loader.load( "obj/morphs/flamingo.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.5, 1000, 500 - Math.random() * 500, FLOOR + 350, 40 ); + addMorph( geometry, 500, 1000, 500 - Math.random() * 500, FLOOR + 350, 40 ); - } } ); + } ); - loader.load( { model: "obj/morphs/stork.js", callback: function( geometry ) { + loader.load( "obj/morphs/stork.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.35, 1000, 500 - Math.random() * 500, FLOOR + 350, 340 ); + addMorph( geometry, 350, 1000, 500 - Math.random() * 500, FLOOR + 350, 340 ); - } } ); + } ); - loader.load( { model: "obj/morphs/mountainlion.js", callback: function( geometry ) { + loader.load( "obj/morphs/mountainlion.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.4, 1000, 500 - Math.random() * 500, FLOOR - 5, 700 ); + addMorph( geometry, 400, 1000, 500 - Math.random() * 500, FLOOR - 5, 700 ); - } } ); + } ); - loader.load( { model: "obj/morphs/bearBrown.js", callback: function( geometry ) { + loader.load( "obj/morphs/bearBrown.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.3, 2500, -500, FLOOR - 5, -750 ); + addMorph( geometry, 300, 2500, -500, FLOOR - 5, -750 ); - } } ); + } ); - loader.load( { model: "obj/morphs/parrot.js", callback: function( geometry ) { + loader.load( "obj/morphs/parrot.js", function( geometry ) { morphColorsToFaceColors( geometry ); - addMorph( geometry, 0.45, 500, 500 - Math.random() * 500, FLOOR + 300, 700 ); - - } } ); + addMorph( geometry, 450, 500, 500 - Math.random() * 500, FLOOR + 300, 700 ); + } ); */ } - - var t = 0, newTime, delta; - - - function updateMorph( morph ) { - - // Alternate morph targets - - var interpolation = morph.duration / ( morph.mesh.geometry.morphTargets.length - 1 ); - - var time = ( new Date().getTime() + morph.offset * 100 ) % morph.duration; - var keyframe = Math.floor( time / interpolation ) + 1; - - var mesh = morph.mesh; - - if ( keyframe != morph.currentKeyframe ) { - - mesh.morphTargetInfluences[ morph.lastKeyframe ] = 0; - mesh.morphTargetInfluences[ morph.currentKeyframe ] = 1; - mesh.morphTargetInfluences[ keyframe ] = 0; - - morph.lastKeyframe = morph.currentKeyframe; - morph.currentKeyframe = keyframe; - - } - - mesh.morphTargetInfluences[ keyframe ] = ( time % interpolation ) / interpolation; - mesh.morphTargetInfluences[ morph.lastKeyframe ] = 1 - mesh.morphTargetInfluences[ keyframe ]; - - var newTime = new Date().getTime(); - delta = newTime - morph.oldTime; - morph.oldTime = newTime; - - mesh.position.x += morph.speed * delta; - - if ( mesh.position.x > 2000 ) { - - mesh.position.x = -1000 - Math.random() * 500; - - } - - } - // function animate() { @@ -404,9 +372,25 @@ function render() { - for ( var i = 0; i < morphs.length; i++ ) updateMorph( morphs[ i ] ); + var delta = clock.getDelta(); - controls.update(); + for ( var i = 0; i < morphs.length; i ++ ) { + + morph = morphs[ i ]; + + morph.updateAnimation( 1000 * delta ); + + morph.position.x += morph.speed * delta; + + if ( morph.position.x > 2000 ) { + + morph.position.x = -1000 - Math.random() * 500; + + } + + } + + controls.update( delta ); renderer.clear(); renderer.render( scene, camera ); diff --git a/examples/webgl_trackballcamera_earth.html b/examples/webgl_trackballcamera_earth.html index ebda9725..72578392 100644 --- a/examples/webgl_trackballcamera_earth.html +++ b/examples/webgl_trackballcamera_earth.html @@ -63,7 +63,7 @@ geometry, meshPlanet, meshClouds, meshMoon, dirLight, ambientLight, - time = new Date().getTime(); + clock = new THREE.Clock(); window.onload = function() { @@ -187,7 +187,7 @@ vector, starsGeometry = new THREE.Geometry(); - for ( i = 0; i < 1500; i++ ) { + for ( i = 0; i < 1500; i ++ ) { vector = new THREE.Vector3( Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1 ); vector.multiplyScalar( radius ); @@ -206,7 +206,7 @@ new THREE.ParticleBasicMaterial( { color: 0x1a1a1a, size: 1, sizeAttenuation: false } ) ]; - for ( i = 10; i < 30; i++ ) { + for ( i = 10; i < 30; i ++ ) { stars = new THREE.ParticleSystem( starsGeometry, starsMaterials[ i % 6 ] ); @@ -262,14 +262,12 @@ function render() { - var t = new Date().getTime(), - dt = ( t - time ) / 1000; - time = t; + var delta = clock.getDelta(); - meshPlanet.rotation.y += rotationSpeed * dt; - meshClouds.rotation.y += 1.25 * rotationSpeed * dt; + meshPlanet.rotation.y += rotationSpeed * delta; + meshClouds.rotation.y += 1.25 * rotationSpeed * delta; - var angle = dt * rotationSpeed; + var angle = delta * rotationSpeed; meshMoon.position = new THREE.Vector3( Math.cos( angle ) * meshMoon.position.x - Math.sin( angle ) * meshMoon.position.z, diff --git a/examples/webgl_utf8loader.html b/examples/webgl_utf8loader.html index 6d312fdd..37387c9b 100644 --- a/examples/webgl_utf8loader.html +++ b/examples/webgl_utf8loader.html @@ -113,13 +113,11 @@ var loader = new THREE.UTF8Loader(); - loader.load( { model: "utf8/hand.utf8", - scale: 0.815141, offsetX: -0.371823, offsetY: -0.011920, offsetZ: -0.416061, - callback: function( geometry ) { callbackModel( geometry, 400, 0xffffff, 125, FLOOR, 0 ); } } ); + loader.load( "utf8/hand.utf8", function( geometry ) { callbackModel( geometry, 400, 0xffffff, 125, FLOOR, 0 ); }, + { scale: 0.815141, offsetX: -0.371823, offsetY: -0.011920, offsetZ: -0.416061 } ); - loader.load( { model: "utf8/ben.utf8", - scale: 0.707192, offsetX: -0.109362, offsetY: -0.006435, offsetZ: -0.268751, - callback: function( geometry ) { callbackModel( geometry, 400, 0xffaa00, -125, FLOOR, 0 ); } } ); + loader.load( "utf8/ben.utf8", function( geometry ) { callbackModel( geometry, 400, 0xffaa00, -125, FLOOR, 0 ); }, + { scale: 0.707192, offsetX: -0.109362, offsetY: -0.006435, offsetZ: -0.268751 } ); } diff --git a/src/core/Clock.js b/src/core/Clock.js new file mode 100644 index 00000000..a9f30fb7 --- /dev/null +++ b/src/core/Clock.js @@ -0,0 +1,65 @@ +/** + * @author alteredq / http://alteredqualia.com/ + */ + +THREE.Clock = function ( autoStart ) { + + this.autoStart = ( autoStart !== undefined ) ? autoStart : true; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + +}; + +THREE.Clock.prototype.start = function () { + + this.startTime = Date.now(); + this.oldTime = this.startTime; + + this.running = true; + +}; + +THREE.Clock.prototype.stop = function () { + + this.getElapsedTime(); + + this.running = false; + +}; + +THREE.Clock.prototype.getElapsedTime = function () { + + this.elapsedTime += this.getDelta(); + + return this.elapsedTime; + +}; + + +THREE.Clock.prototype.getDelta = function () { + + var diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + + } + + if ( this.running ) { + + var newTime = Date.now(); + diff = 0.001 * ( newTime - this.oldTime ); + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + +}; \ No newline at end of file diff --git a/src/core/Color.js b/src/core/Color.js index 0983a41a..5ad25f92 100644 --- a/src/core/Color.js +++ b/src/core/Color.js @@ -12,7 +12,7 @@ THREE.Color = function ( hex ) { THREE.Color.prototype = { constructor: THREE.Color, - + r: 1, g: 1, b: 1, copy: function ( color ) { @@ -25,6 +25,26 @@ THREE.Color.prototype = { }, + copyGammaToLinear: function ( color ) { + + this.r = color.r * color.r; + this.g = color.g * color.g; + this.b = color.b * color.b; + + return this; + + }, + + copyLinearToGamma: function ( color ) { + + this.r = Math.sqrt( color.r ); + this.g = Math.sqrt( color.g ); + this.b = Math.sqrt( color.b ); + + return this; + + }, + setRGB: function ( r, g, b ) { this.r = r; @@ -42,7 +62,7 @@ THREE.Color.prototype = { var i, f, p, q, t; - if ( v == 0 ) { + if ( v === 0 ) { this.r = this.g = this.b = 0; diff --git a/src/core/Face3.js b/src/core/Face3.js index d215afed..b02bf66f 100644 --- a/src/core/Face3.js +++ b/src/core/Face3.js @@ -3,9 +3,9 @@ * @author alteredq / http://alteredqualia.com/ */ -THREE.Face3 = function ( a, b, c, normal, color, materials ) { +THREE.Face3 = function ( a, b, c, normal, color, materialIndex ) { - this.a = a; + this.a = a; this.b = b; this.c = c; @@ -17,7 +17,7 @@ THREE.Face3 = function ( a, b, c, normal, color, materials ) { this.vertexTangents = []; - this.materials = materials instanceof Array ? materials : [ materials ]; + this.materialIndex = materialIndex; this.centroid = new THREE.Vector3(); diff --git a/src/core/Face4.js b/src/core/Face4.js index b5e4bc2b..ea35c1eb 100644 --- a/src/core/Face4.js +++ b/src/core/Face4.js @@ -3,9 +3,9 @@ * @author alteredq / http://alteredqualia.com/ */ -THREE.Face4 = function ( a, b, c, d, normal, color, materials ) { +THREE.Face4 = function ( a, b, c, d, normal, color, materialIndex ) { - this.a = a; + this.a = a; this.b = b; this.c = c; this.d = d; @@ -18,7 +18,7 @@ THREE.Face4 = function ( a, b, c, d, normal, color, materials ) { this.vertexTangents = []; - this.materials = materials instanceof Array ? materials : [ materials ]; + this.materialIndex = materialIndex; this.centroid = new THREE.Vector3(); diff --git a/src/core/Geometry.js b/src/core/Geometry.js index 99611277..e9a720f5 100644 --- a/src/core/Geometry.js +++ b/src/core/Geometry.js @@ -13,6 +13,8 @@ THREE.Geometry = function () { this.vertices = []; this.colors = []; // one-to-one vertex colors, used in ParticleSystem, Line and Ribbon + this.materials = []; + this.faces = []; this.faceUvs = [[]]; @@ -167,7 +169,7 @@ THREE.Geometry.prototype = { // create internal buffers for reuse when calling this method repeatedly // (otherwise memory allocation / deallocation every frame is big resource hog) - if ( this.__tmpVertices == undefined ) { + if ( this.__tmpVertices === undefined ) { this.__tmpVertices = new Array( this.vertices.length ); vertices = this.__tmpVertices; @@ -435,62 +437,71 @@ THREE.Geometry.prototype = { this.boundingSphere = { radius: radius }; }, - - /* - * Checks for duplicate vertices with hashmap. + + /* + * Checks for duplicate vertices with hashmap. * Duplicated vertices are removed - * and faces' vertices are updated. + * and faces' vertices are updated. */ + mergeVertices: function() { - + var verticesMap = {}; // Hashmap for looking up vertice by position coordinates (and making sure they are unique) var unique = [], changes = []; - + var v, key; - var precisionPoints = 4; // number of decimal points, eg. 4 for epsilon of 0.0001 - var precision = Math.pow(10, precisionPoints) + var precisionPoints = 4; // number of decimal points, eg. 4 for epsilon of 0.0001 + var precision = Math.pow( 10, precisionPoints ); var i,il, face; - - for (i=0,il=this.vertices.length;i b ) ? b : x ); + + }, + + clampBottom: function ( x, a ) { + + return x < a ? a : x; + + }, + + mapLinear: function( x, a1, a2, b1, b2 ) { + + return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); + + }, + + // Get 16 bits of randomness + // (standard Math.random() creates repetitive patterns when applied over larger space) + + random16: function() { + + return ( 65280 * Math.random() + 255 * Math.random() ) / 65535; + + } + +}; diff --git a/src/core/Matrix4.js b/src/core/Matrix4.js index 25bb0dc2..de2ccf47 100644 --- a/src/core/Matrix4.js +++ b/src/core/Matrix4.js @@ -791,7 +791,8 @@ THREE.Matrix4.makeInvert3x3 = function ( m1 ) { idet; // no inverse - if ( det == 0 ) { + + if ( det === 0 ) { console.error( 'THREE.Matrix4.makeInvert3x3: Matrix not invertible.' ); diff --git a/src/core/Quaternion.js b/src/core/Quaternion.js index eb22b32e..88d5eb8d 100644 --- a/src/core/Quaternion.js +++ b/src/core/Quaternion.js @@ -84,24 +84,24 @@ THREE.Quaternion.prototype = { return this; }, - + setFromRotationMatrix: function ( m ) { // Adapted from: http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm function copySign(a, b) { return b < 0 ? -Math.abs(a) : Math.abs(a); } var absQ = Math.pow(m.determinant(), 1.0 / 3.0); - this.w = Math.sqrt( Math.max( 0, absQ + m.n11 + m.n22 + m.n33 ) ) / 2; - this.x = Math.sqrt( Math.max( 0, absQ + m.n11 - m.n22 - m.n33 ) ) / 2; - this.y = Math.sqrt( Math.max( 0, absQ - m.n11 + m.n22 - m.n33 ) ) / 2; - this.z = Math.sqrt( Math.max( 0, absQ - m.n11 - m.n22 + m.n33 ) ) / 2; + this.w = Math.sqrt( Math.max( 0, absQ + m.n11 + m.n22 + m.n33 ) ) / 2; + this.x = Math.sqrt( Math.max( 0, absQ + m.n11 - m.n22 - m.n33 ) ) / 2; + this.y = Math.sqrt( Math.max( 0, absQ - m.n11 + m.n22 - m.n33 ) ) / 2; + this.z = Math.sqrt( Math.max( 0, absQ - m.n11 - m.n22 + m.n33 ) ) / 2; this.x = copySign( this.x, ( m.n32 - m.n23 ) ); this.y = copySign( this.y, ( m.n13 - m.n31 ) ); this.z = copySign( this.z, ( m.n21 - m.n12 ) ); this.normalize(); return this; }, - + calculateW : function () { this.w = - Math.sqrt( Math.abs( 1.0 - this.x * this.x - this.y * this.y - this.z * this.z ) ); @@ -130,7 +130,7 @@ THREE.Quaternion.prototype = { var l = Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); - if ( l == 0 ) { + if ( l === 0 ) { this.x = 0; this.y = 0; @@ -174,7 +174,7 @@ THREE.Quaternion.prototype = { this.y = -q1.x * q2.z + q1.y * q2.w + q1.z * q2.x + q1.w * q2.y; this.z = q1.x * q2.y - q1.y * q2.x + q1.z * q2.w + q1.w * q2.z; this.w = -q1.x * q2.x - q1.y * q2.y - q1.z * q2.z + q1.w * q2.w; - + return this; }, @@ -228,7 +228,7 @@ THREE.Quaternion.slerp = function ( qa, qb, qm, t ) { var halfTheta = Math.acos( cosHalfTheta ), sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta ); - if ( Math.abs( sinHalfTheta ) < 0.001 ) { + if ( Math.abs( sinHalfTheta ) < 0.001 ) { qm.w = 0.5 * ( qa.w + qb.w ); qm.x = 0.5 * ( qa.x + qb.x ); @@ -240,7 +240,7 @@ THREE.Quaternion.slerp = function ( qa, qb, qm, t ) { } var ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, - ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; + ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; qm.w = ( qa.w * ratioA + qm.w * ratioB ); qm.x = ( qa.x * ratioA + qm.x * ratioB ); diff --git a/src/core/Ray.js b/src/core/Ray.js index 444b7e33..37f46910 100644 --- a/src/core/Ray.js +++ b/src/core/Ray.js @@ -50,7 +50,7 @@ THREE.Ray.prototype = { var distance = distanceFromIntersection( this.origin, this.direction, object.matrixWorld.getPosition() ); - if ( distance == null || distance > object.scale.x ) { + if ( distance === null || distance > object.scale.x ) { return []; @@ -73,7 +73,7 @@ THREE.Ray.prototype = { var distance = distanceFromIntersection( this.origin, this.direction, object.matrixWorld.getPosition() ); - if ( distance == null || distance > object.geometry.boundingSphere.radius * Math.max( object.scale.x, Math.max( object.scale.y, object.scale.z ) ) ) { + if ( distance === null || distance > object.geometry.boundingSphere.radius * Math.max( object.scale.x, Math.max( object.scale.y, object.scale.z ) ) ) { return intersects; diff --git a/src/core/Spline.js b/src/core/Spline.js index 3365e617..0461e2b6 100644 --- a/src/core/Spline.js +++ b/src/core/Spline.js @@ -32,7 +32,7 @@ THREE.Spline = function ( points ) { intPoint = Math.floor( point ); weight = point - intPoint; - c[ 0 ] = intPoint == 0 ? intPoint : intPoint - 1; + c[ 0 ] = intPoint === 0 ? intPoint : intPoint - 1; c[ 1 ] = intPoint; c[ 2 ] = intPoint > this.points.length - 2 ? intPoint : intPoint + 1; c[ 3 ] = intPoint > this.points.length - 3 ? intPoint : intPoint + 2; diff --git a/src/core/Vector2.js b/src/core/Vector2.js index acf3a8b4..29a03afa 100644 --- a/src/core/Vector2.js +++ b/src/core/Vector2.js @@ -156,7 +156,7 @@ THREE.Vector2.prototype = { equals: function( v ) { - return ( ( v.x == this.x ) && ( v.y == this.y ) ); + return ( ( v.x === this.x ) && ( v.y === this.y ) ); } diff --git a/src/extras/ColorUtils.js b/src/extras/ColorUtils.js index 1114f48d..7ec6208b 100644 --- a/src/extras/ColorUtils.js +++ b/src/extras/ColorUtils.js @@ -3,21 +3,21 @@ */ THREE.ColorUtils = { - + adjustHSV : function ( color, h, s, v ) { var hsv = THREE.ColorUtils.__hsv; - + THREE.ColorUtils.rgbToHsv( color, hsv ); - hsv.h = THREE.ColorUtils.clamp( hsv.h + h, 0, 1 ); - hsv.s = THREE.ColorUtils.clamp( hsv.s + s, 0, 1 ); - hsv.v = THREE.ColorUtils.clamp( hsv.v + v, 0, 1 ); - + hsv.h = THREE.Math.clamp( hsv.h + h, 0, 1 ); + hsv.s = THREE.Math.clamp( hsv.s + s, 0, 1 ); + hsv.v = THREE.Math.clamp( hsv.v + v, 0, 1 ); + color.setHSV( hsv.h, hsv.s, hsv.v ); }, - + // based on MochiKit implementation by Bob Ippolito rgbToHsv : function ( color, hsv ) { @@ -25,7 +25,7 @@ THREE.ColorUtils = { var r = color.r; var g = color.g; var b = color.b; - + var max = Math.max( Math.max( r, g ), b ); var min = Math.min( Math.min( r, g ), b ); @@ -33,7 +33,7 @@ THREE.ColorUtils = { var saturation; var value = max; - if ( min == max ) { + if ( min === max ) { hue = 0; saturation = 0; @@ -43,11 +43,11 @@ THREE.ColorUtils = { var delta = ( max - min ); saturation = delta / max; - if ( r == max ) { + if ( r === max ) { hue = ( g - b ) / delta; - } else if ( g == max ) { + } else if ( g === max ) { hue = 2 + ( ( b - r ) / delta ); @@ -63,7 +63,7 @@ THREE.ColorUtils = { hue += 1; } - + if ( hue > 1 ) { hue -= 1; @@ -71,24 +71,18 @@ THREE.ColorUtils = { } } - + if ( hsv === undefined ) { - + hsv = { h: 0, s: 0, v: 0 }; } - + hsv.h = hue; hsv.s = saturation; hsv.v = value; - - return hsv; - }, - - clamp: function ( x, a, b ) { - - return x < a ? a : ( x > b ? b : x ); + return hsv; } diff --git a/src/extras/GeometryUtils.js b/src/extras/GeometryUtils.js index 81089680..1512139e 100644 --- a/src/extras/GeometryUtils.js +++ b/src/extras/GeometryUtils.js @@ -4,7 +4,7 @@ */ THREE.GeometryUtils = { - + merge: function ( geometry1, object2 /* mesh | geometry */ ) { var matrix, matrixRotation, @@ -18,6 +18,17 @@ THREE.GeometryUtils = { uvs1 = geometry1.faceVertexUvs[ 0 ], uvs2 = geometry2.faceVertexUvs[ 0 ]; + var geo1MaterialsMap = {}; + + for ( var i = 0; i < geometry1.materials.length; i ++ ) { + + var id = geometry1.materials[ i ].id; + + geo1MaterialsMap[ id ] = i; + + } + + if ( object2 instanceof THREE.Mesh ) { object2.matrixAutoUpdate && object2.updateMatrix(); @@ -83,7 +94,23 @@ THREE.GeometryUtils = { } - faceCopy.materials = face.materials.slice(); + if ( face.materialIndex !== undefined ) { + + var material2 = geometry2.materials[ face.materialIndex ]; + var materialId2 = material2.id; + + var materialIndex = geo1MaterialsMap[ materialId2 ]; + + if ( materialIndex === undefined ) { + + materialIndex = geometry1.materials.length; + geometry1.materials.push( material2 ); + + } + + faceCopy.materialIndex = materialIndex; + + } faceCopy.centroid.copy( face.centroid ); if ( matrix ) matrix.multiplyVector3( faceCopy.centroid ); @@ -120,6 +147,14 @@ THREE.GeometryUtils = { faces = geometry.faces, uvs = geometry.faceVertexUvs[ 0 ]; + // materials + + if ( geometry.materials ) { + + cloneGeo.materials = geometry.materials.slice(); + + } + // vertices for ( i = 0, il = vertices.length; i < il; i ++ ) { @@ -167,7 +202,7 @@ THREE.GeometryUtils = { } - faceCopy.materials = face.materials.slice(); + faceCopy.materialIndex = face.materialIndex; faceCopy.centroid.copy( face.centroid ); @@ -437,15 +472,6 @@ THREE.GeometryUtils = { }, - // Get 16 bits of randomness - // (standard Math.random() creates repetitive patterns when applied over larger space) - - random16: function() { - - return ( 65280 * Math.random() + 255 * Math.random() ) / 65535; - - }, - center: function( geometry ) { geometry.computeBoundingBox(); @@ -467,6 +493,6 @@ THREE.GeometryUtils = { }; -THREE.GeometryUtils.random = THREE.GeometryUtils.random16; +THREE.GeometryUtils.random = THREE.Math.random16; THREE.GeometryUtils.__v1 = new THREE.Vector3(); diff --git a/src/extras/ImageUtils.js b/src/extras/ImageUtils.js index 04da8a22..d1664532 100644 --- a/src/extras/ImageUtils.js +++ b/src/extras/ImageUtils.js @@ -28,8 +28,8 @@ THREE.ImageUtils = { images[ i ] = new Image(); images[ i ].onload = function () { - images.loadCount += 1; - if ( images.loadCount == 6 ) texture.needsUpdate = true; + images.loadCount += 1; + if ( images.loadCount === 6 ) texture.needsUpdate = true; if ( callback ) callback( this ); }; diff --git a/src/extras/SceneUtils.js b/src/extras/SceneUtils.js index 2c61dc3d..a82e8c15 100644 --- a/src/extras/SceneUtils.js +++ b/src/extras/SceneUtils.js @@ -24,6 +24,22 @@ THREE.SceneUtils = { } + }, + + createMultiMaterialObject : function ( geometry, materials ) { + + var i, il = materials.length, + group = new THREE.Object3D(); + + for ( i = 0; i < il; i ++ ) { + + var object = new THREE.Mesh( geometry, materials[ i ] ); + group.add( object ); + + } + + return group; + } }; diff --git a/src/extras/animation/Animation.js b/src/extras/animation/Animation.js index 16f456bb..daaa4440 100644 --- a/src/extras/animation/Animation.js +++ b/src/extras/animation/Animation.js @@ -37,17 +37,17 @@ THREE.Animation.prototype.play = function( loop, startTimeMS ) { var h, hl = this.hierarchy.length, object; - + for ( h = 0; h < hl; h++ ) { object = this.hierarchy[ h ]; - + if ( this.interpolationType !== THREE.AnimationHandler.CATMULLROM_FORWARD ) { object.useQuaternion = true; } - + object.matrixAutoUpdate = true; if ( object.animationCache === undefined ) { @@ -89,15 +89,15 @@ THREE.Animation.prototype.play = function( loop, startTimeMS ) { THREE.Animation.prototype.pause = function() { if( this.isPaused ) { - + THREE.AnimationHandler.addToUpdate( this ); - + } else { - + THREE.AnimationHandler.removeFromUpdate( this ); - + } - + this.isPaused = !this.isPaused; }; @@ -110,31 +110,31 @@ THREE.Animation.prototype.stop = function() { this.isPlaying = false; this.isPaused = false; THREE.AnimationHandler.removeFromUpdate( this ); - - + + // reset JIT matrix and remove cache - + for ( var h = 0; h < this.hierarchy.length; h++ ) { - + if ( this.hierarchy[ h ].animationCache !== undefined ) { - + if( this.hierarchy[ h ] instanceof THREE.Bone ) { - + this.hierarchy[ h ].skinMatrix = this.hierarchy[ h ].animationCache.originalMatrix; - + } else { - + this.hierarchy[ h ].matrix = this.hierarchy[ h ].animationCache.originalMatrix; } - - + + delete this.hierarchy[ h ].animationCache; } } - + }; @@ -161,10 +161,10 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { var JIThierarchy = this.data.JIT.hierarchy; var currentTime, unloopedCurrentTime; var currentPoint, forwardPoint, angle; - + // update - + this.currentTime += deltaTimeMS * this.timeScale; unloopedCurrentTime = this.currentTime; @@ -178,43 +178,43 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { object = this.hierarchy[ h ]; animationCache = object.animationCache; - + // use JIT? - + if ( this.JITCompile && JIThierarchy[ h ][ frame ] !== undefined ) { if( object instanceof THREE.Bone ) { - + object.skinMatrix = JIThierarchy[ h ][ frame ]; - + object.matrixAutoUpdate = false; object.matrixWorldNeedsUpdate = false; } else { - + object.matrix = JIThierarchy[ h ][ frame ]; - + object.matrixAutoUpdate = false; object.matrixWorldNeedsUpdate = true; } - + // use interpolation - + } else { // make sure so original matrix and not JIT matrix is set if ( this.JITCompile ) { - + if( object instanceof THREE.Bone ) { - + object.skinMatrix = object.animationCache.originalMatrix; - + } else { - + object.matrix = object.animationCache.originalMatrix; - + } } @@ -244,10 +244,10 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { nextKey = this.getNextKeyWith( type, h, 1 ); while( nextKey.time < currentTime ) { - + prevKey = nextKey; nextKey = this.getNextKeyWith( type, h, nextKey.index + 1 ); - + } } else { @@ -286,7 +286,7 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { if ( scale < 0 || scale > 1 ) { - console.log( "THREE.Animation.update: Warning! Scale out of bounds:" + scale + " on bone " + h ); + console.log( "THREE.Animation.update: Warning! Scale out of bounds:" + scale + " on bone " + h ); scale = scale < 0 ? 0 : 1; } @@ -295,17 +295,17 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { if ( type === "pos" ) { - vector = object.position; + vector = object.position; if( this.interpolationType === THREE.AnimationHandler.LINEAR ) { - + vector.x = prevXYZ[ 0 ] + ( nextXYZ[ 0 ] - prevXYZ[ 0 ] ) * scale; vector.y = prevXYZ[ 1 ] + ( nextXYZ[ 1 ] - prevXYZ[ 1 ] ) * scale; vector.z = prevXYZ[ 2 ] + ( nextXYZ[ 2 ] - prevXYZ[ 2 ] ) * scale; } else if ( this.interpolationType === THREE.AnimationHandler.CATMULLROM || - this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) { - + this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) { + this.points[ 0 ] = this.getPrevKeyWith( "pos", h, prevKey.index - 1 )[ "pos" ]; this.points[ 1 ] = prevXYZ; this.points[ 2 ] = nextXYZ; @@ -314,23 +314,23 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { scale = scale * 0.33 + 0.33; currentPoint = this.interpolateCatmullRom( this.points, scale ); - + vector.x = currentPoint[ 0 ]; vector.y = currentPoint[ 1 ]; vector.z = currentPoint[ 2 ]; - + if( this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) { - - forwardPoint = this.interpolateCatmullRom( this.points, scale * 1.01 ); - + + forwardPoint = this.interpolateCatmullRom( this.points, scale * 1.01 ); + this.target.set( forwardPoint[ 0 ], forwardPoint[ 1 ], forwardPoint[ 2 ] ); this.target.subSelf( vector ); this.target.y = 0; this.target.normalize(); - + angle = Math.atan2( this.target.x, this.target.z ); object.rotation.set( 0, angle, 0 ); - + } } @@ -342,7 +342,7 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { } else if( type === "scl" ) { vector = object.scale; - + vector.x = prevXYZ[ 0 ] + ( nextXYZ[ 0 ] - prevXYZ[ 0 ] ) * scale; vector.y = prevXYZ[ 1 ] + ( nextXYZ[ 1 ] - prevXYZ[ 1 ] ) * scale; vector.z = prevXYZ[ 2 ] + ( nextXYZ[ 2 ] - prevXYZ[ 2 ] ) * scale; @@ -358,25 +358,25 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { // update JIT? if ( this.JITCompile ) { - + if ( JIThierarchy[ 0 ][ frame ] === undefined ) { - + this.hierarchy[ 0 ].update( undefined, true ); - + for ( var h = 0; h < this.hierarchy.length; h++ ) { - + if( this.hierarchy[ h ] instanceof THREE.Bone ) { - + JIThierarchy[ h ][ frame ] = this.hierarchy[ h ].skinMatrix.clone(); - + } else { - + JIThierarchy[ h ][ frame ] = this.hierarchy[ h ].matrix.clone(); - + } - + } - + } } @@ -384,18 +384,18 @@ THREE.Animation.prototype.update = function( deltaTimeMS ) { }; // Catmull-Rom spline - + THREE.Animation.prototype.interpolateCatmullRom = function ( points, scale ) { var c = [], v3 = [], point, intPoint, weight, w2, w3, pa, pb, pc, pd; - + point = ( points.length - 1 ) * scale; intPoint = Math.floor( point ); weight = point - intPoint; - c[ 0 ] = intPoint == 0 ? intPoint : intPoint - 1; + c[ 0 ] = intPoint === 0 ? intPoint : intPoint - 1; c[ 1 ] = intPoint; c[ 2 ] = intPoint > points.length - 2 ? intPoint : intPoint + 1; c[ 3 ] = intPoint > points.length - 3 ? intPoint : intPoint + 2; @@ -407,11 +407,11 @@ THREE.Animation.prototype.interpolateCatmullRom = function ( points, scale ) { w2 = weight * weight; w3 = weight * w2; - + v3[ 0 ] = this.interpolate( pa[ 0 ], pb[ 0 ], pc[ 0 ], pd[ 0 ], weight, w2, w3 ); v3[ 1 ] = this.interpolate( pa[ 1 ], pb[ 1 ], pc[ 1 ], pd[ 1 ], weight, w2, w3 ); v3[ 2 ] = this.interpolate( pa[ 2 ], pb[ 2 ], pc[ 2 ], pd[ 2 ], weight, w2, w3 ); - + return v3; }; @@ -430,16 +430,16 @@ THREE.Animation.prototype.interpolate = function( p0, p1, p2, p3, t, t2, t3 ) { // Get next key with THREE.Animation.prototype.getNextKeyWith = function( type, h, key ) { - + var keys = this.data.hierarchy[ h ].keys; - + if ( this.interpolationType === THREE.AnimationHandler.CATMULLROM || this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) { - + key = key < keys.length - 1 ? key : keys.length - 1; } else { - + key = key % keys.length; } @@ -461,16 +461,16 @@ THREE.Animation.prototype.getNextKeyWith = function( type, h, key ) { // Get previous key with THREE.Animation.prototype.getPrevKeyWith = function( type, h, key ) { - + var keys = this.data.hierarchy[ h ].keys; - + if ( this.interpolationType === THREE.AnimationHandler.CATMULLROM || this.interpolationType === THREE.AnimationHandler.CATMULLROM_FORWARD ) { - + key = key > 0 ? key : 0; } else { - + key = key >= 0 ? key : key + keys.length; } diff --git a/src/extras/controls/FirstPersonControls.js b/src/extras/controls/FirstPersonControls.js index 80ee2c1c..a8128328 100644 --- a/src/extras/controls/FirstPersonControls.js +++ b/src/extras/controls/FirstPersonControls.js @@ -28,9 +28,6 @@ THREE.FirstPersonControls = function ( object, domElement ) { this.verticalMin = 0; this.verticalMax = Math.PI; - this.lastUpdate = new Date().getTime(); - this.tdiff = 0; - this.autoSpeedFactor = 0.0; this.mouseX = 0; @@ -172,21 +169,16 @@ THREE.FirstPersonControls = function ( object, domElement ) { }; - this.update = function() { - - var now = new Date().getTime(); - this.tdiff = ( now - this.lastUpdate ) / 1000; - this.lastUpdate = now; + this.update = function( delta ) { if ( !this.freeze ) { - if ( this.heightSpeed ) { - var y = clamp( this.object.position.y, this.heightMin, this.heightMax ); - var delta = y - this.heightMin; + var y = THREE.Math.clamp( this.object.position.y, this.heightMin, this.heightMax ); + var heightDelta = y - this.heightMin; - this.autoSpeedFactor = this.tdiff * ( delta * this.heightCoef ); + this.autoSpeedFactor = delta * ( heightDelta * this.heightCoef ); } else { @@ -194,7 +186,7 @@ THREE.FirstPersonControls = function ( object, domElement ) { } - var actualMoveSpeed = this.tdiff * this.movementSpeed; + var actualMoveSpeed = delta * this.movementSpeed; if ( this.moveForward || ( this.autoForward && !this.moveBackward ) ) this.object.translateZ( - ( actualMoveSpeed + this.autoSpeedFactor ) ); if ( this.moveBackward ) this.object.translateZ( actualMoveSpeed ); @@ -205,7 +197,7 @@ THREE.FirstPersonControls = function ( object, domElement ) { if ( this.moveUp ) this.object.translateY( actualMoveSpeed ); if ( this.moveDown ) this.object.translateY( - actualMoveSpeed ); - var actualLookSpeed = this.tdiff * this.lookSpeed; + var actualLookSpeed = delta * this.lookSpeed; if ( !this.activeLook ) { @@ -247,7 +239,7 @@ THREE.FirstPersonControls = function ( object, domElement ) { if ( this.constrainVertical ) { - this.phi = map_linear( this.phi, 0, Math.PI, this.verticalMin, this.verticalMax ); + this.phi = THREE.Math.mapLinear( this.phi, 0, Math.PI, this.verticalMin, this.verticalMax ); } @@ -281,22 +273,4 @@ THREE.FirstPersonControls = function ( object, domElement ) { }; - function map_linear( x, sa, sb, ea, eb ) { - - return ( x - sa ) * ( eb - ea ) / ( sb - sa ) + ea; - - }; - - function clamp_bottom( x, a ) { - - return x < a ? a : x; - - }; - - function clamp( x, a, b ) { - - return x < a ? a : ( x > b ? b : x ); - - }; - }; diff --git a/src/extras/controls/FlyControls.js b/src/extras/controls/FlyControls.js index 0ed97f7e..f2099645 100644 --- a/src/extras/controls/FlyControls.js +++ b/src/extras/controls/FlyControls.js @@ -31,9 +31,6 @@ THREE.FlyControls = function ( object, domElement ) { this.moveVector = new THREE.Vector3( 0, 0, 0 ); this.rotationVector = new THREE.Vector3( 0, 0, 0 ); - this.lastUpdate = -1; - this.tdiff = 0; - this.handleEvent = function ( event ) { if ( typeof this[ event.type ] == 'function' ) { @@ -183,17 +180,10 @@ THREE.FlyControls = function ( object, domElement ) { }; - this.update = function( parentMatrixWorld, forceUpdate, camera ) { + this.update = function( delta ) { - var now = new Date().getTime(); - - if ( this.lastUpdate == -1 ) this.lastUpdate = now; - - this.tdiff = ( now - this.lastUpdate ) / 1000; - this.lastUpdate = now; - - var moveMult = this.tdiff * this.movementSpeed; - var rotMult = this.tdiff * this.rollSpeed; + var moveMult = delta * this.movementSpeed; + var rotMult = delta * this.rollSpeed; this.object.translateX( this.moveVector.x * moveMult ); this.object.translateY( this.moveVector.y * moveMult ); diff --git a/src/extras/controls/PathControls.js b/src/extras/controls/PathControls.js index d8ab3ee6..d4398131 100644 --- a/src/extras/controls/PathControls.js +++ b/src/extras/controls/PathControls.js @@ -59,12 +59,12 @@ THREE.PathControls = function ( object, domElement ) { // methods - this.update = function () { + this.update = function ( delta ) { var srcRange, dstRange; - if( this.lookHorizontal ) this.lon += this.mouseX * this.lookSpeed; - if( this.lookVertical ) this.lat -= this.mouseY * this.lookSpeed; + if( this.lookHorizontal ) this.lon += this.mouseX * this.lookSpeed * delta; + if( this.lookVertical ) this.lat -= this.mouseY * this.lookSpeed * delta; this.lon = Math.max( 0, Math.min( 360, this.lon ) ); this.lat = Math.max( - 85, Math.min( 85, this.lat ) ); @@ -79,7 +79,7 @@ THREE.PathControls = function ( object, domElement ) { srcRange = this.verticalAngleMap.srcRange; dstRange = this.verticalAngleMap.dstRange; - var tmpPhi = map_linear( this.phi, srcRange[ 0 ], srcRange[ 1 ], dstRange[ 0 ], dstRange[ 1 ] ); + var tmpPhi = THREE.Math.mapLinear( this.phi, srcRange[ 0 ], srcRange[ 1 ], dstRange[ 0 ], dstRange[ 1 ] ); var tmpPhiFullRange = dstRange[ 1 ] - dstRange[ 0 ]; var tmpPhiNormalized = ( tmpPhi - dstRange[ 0 ] ) / tmpPhiFullRange; @@ -90,7 +90,7 @@ THREE.PathControls = function ( object, domElement ) { srcRange = this.horizontalAngleMap.srcRange; dstRange = this.horizontalAngleMap.dstRange; - var tmpTheta = map_linear( this.theta, srcRange[ 0 ], srcRange[ 1 ], dstRange[ 0 ], dstRange[ 1 ] ); + var tmpTheta = THREE.Math.mapLinear( this.theta, srcRange[ 0 ], srcRange[ 1 ], dstRange[ 0 ], dstRange[ 1 ] ); var tmpThetaFullRange = dstRange[ 1 ] - dstRange[ 0 ]; var tmpThetaNormalized = ( tmpTheta - dstRange[ 0 ] ) / tmpThetaFullRange; @@ -132,18 +132,6 @@ THREE.PathControls = function ( object, domElement ) { }; - function cap( x, a, b ) { - - return ( x < a ) ? a : ( ( x > b ) ? b : x ); - - }; - - function map_linear( x, sa, sb, ea, eb ) { - - return ( x - sa ) * ( eb - ea ) / ( sb - sa ) + ea; - - }; - function distance( a, b ) { var dx = a[ 0 ] - b[ 0 ], diff --git a/src/extras/controls/RollControls.js b/src/extras/controls/RollControls.js index e8dadb7b..2db065ba 100644 --- a/src/extras/controls/RollControls.js +++ b/src/extras/controls/RollControls.js @@ -28,9 +28,6 @@ THREE.RollControls = function ( object, domElement ) { this.forward = new THREE.Vector3( 0, 0, 1 ); this.roll = 0; - this.lastUpdate = -1; - this.delta = 0; - var xTemp = new THREE.Vector3(); var yTemp = new THREE.Vector3(); var zTemp = new THREE.Vector3(); @@ -45,25 +42,18 @@ THREE.RollControls = function ( object, domElement ) { // custom update - this.update = function() { - - var now = new Date().getTime(); - - if ( this.lastUpdate == -1 ) this.lastUpdate = now; - - this.delta = ( now - this.lastUpdate ) / 1000; - this.lastUpdate = now; + this.update = function ( delta ) { if ( this.mouseLook ) { - var actualLookSpeed = this.delta * this.lookSpeed; + var actualLookSpeed = delta * this.lookSpeed; this.rotateHorizontally( actualLookSpeed * mouseX ); this.rotateVertically( actualLookSpeed * mouseY ); } - var actualSpeed = this.delta * this.movementSpeed; + var actualSpeed = delta * this.movementSpeed; var forwardOrAuto = ( forwardSpeed > 0 || ( this.autoForward && ! ( forwardSpeed < 0 ) ) ) ? 1 : forwardSpeed; this.object.translateZ( -actualSpeed * forwardOrAuto ); @@ -72,7 +62,7 @@ THREE.RollControls = function ( object, domElement ) { if( doRoll ) { - this.roll += this.rollSpeed * this.delta * rollDirection; + this.roll += this.rollSpeed * delta * rollDirection; } diff --git a/src/extras/geometries/CubeGeometry.js b/src/extras/geometries/CubeGeometry.js index f2a459ab..bea0958c 100644 --- a/src/extras/geometries/CubeGeometry.js +++ b/src/extras/geometries/CubeGeometry.js @@ -12,6 +12,8 @@ THREE.CubeGeometry = function ( width, height, depth, segmentsWidth, segmentsHei height_half = height / 2, depth_half = depth / 2; + var mpx, mpy, mpz, mnx, mny, mnz; + if ( materials !== undefined ) { if ( materials instanceof Array ) { @@ -24,12 +26,14 @@ THREE.CubeGeometry = function ( width, height, depth, segmentsWidth, segmentsHei for ( var i = 0; i < 6; i ++ ) { - this.materials.push( [ materials ] ); + this.materials.push( materials ); } } + mpx = 0; mnx = 1; mpy = 2; mny = 3; mpz = 4; mnz = 5; + } else { this.materials = []; @@ -52,12 +56,12 @@ THREE.CubeGeometry = function ( width, height, depth, segmentsWidth, segmentsHei } - this.sides.px && buildPlane( 'z', 'y', - 1, - 1, depth, height, width_half, this.materials[ 0 ] ); // px - this.sides.nx && buildPlane( 'z', 'y', 1, - 1, depth, height, - width_half, this.materials[ 1 ] ); // nx - this.sides.py && buildPlane( 'x', 'z', 1, 1, width, depth, height_half, this.materials[ 2 ] ); // py - this.sides.ny && buildPlane( 'x', 'z', 1, - 1, width, depth, - height_half, this.materials[ 3 ] ); // ny - this.sides.pz && buildPlane( 'x', 'y', 1, - 1, width, height, depth_half, this.materials[ 4 ] ); // pz - this.sides.nz && buildPlane( 'x', 'y', - 1, - 1, width, height, - depth_half, this.materials[ 5 ] ); // nz + this.sides.px && buildPlane( 'z', 'y', - 1, - 1, depth, height, width_half, mpx ); // px + this.sides.nx && buildPlane( 'z', 'y', 1, - 1, depth, height, - width_half, mnx ); // nx + this.sides.py && buildPlane( 'x', 'z', 1, 1, width, depth, height_half, mpy ); // py + this.sides.ny && buildPlane( 'x', 'z', 1, - 1, width, depth, - height_half, mny ); // ny + this.sides.pz && buildPlane( 'x', 'y', 1, - 1, width, height, depth_half, mpz ); // pz + this.sides.nz && buildPlane( 'x', 'y', - 1, - 1, width, height, - depth_half, mnz ); // nz this.mergeVertices(); @@ -70,16 +74,16 @@ THREE.CubeGeometry = function ( width, height, depth, segmentsWidth, segmentsHei height_half = height / 2, offset = scope.vertices.length; - if ( ( u == 'x' && v == 'y' ) || ( u == 'y' && v == 'x' ) ) { + if ( ( u === 'x' && v === 'y' ) || ( u === 'y' && v === 'x' ) ) { w = 'z'; - } else if ( ( u == 'x' && v == 'z' ) || ( u == 'z' && v == 'x' ) ) { + } else if ( ( u === 'x' && v === 'z' ) || ( u === 'z' && v === 'x' ) ) { w = 'y'; gridY = segmentsDepth || 1; - } else if ( ( u == 'z' && v == 'y' ) || ( u == 'y' && v == 'z' ) ) { + } else if ( ( u === 'z' && v === 'y' ) || ( u === 'y' && v === 'z' ) ) { w = 'x'; gridX = segmentsDepth || 1; @@ -91,9 +95,9 @@ THREE.CubeGeometry = function ( width, height, depth, segmentsWidth, segmentsHei segment_width = width / gridX, segment_height = height / gridY; - for( iy = 0; iy < gridY1; iy++ ) { + for( iy = 0; iy < gridY1; iy ++ ) { - for( ix = 0; ix < gridX1; ix++ ) { + for( ix = 0; ix < gridX1; ix ++ ) { var vector = new THREE.Vector3(); vector[ u ] = ( ix * segment_width - width_half ) * udir; diff --git a/src/extras/geometries/ExtrudeGeometry.js b/src/extras/geometries/ExtrudeGeometry.js index 6a5e60e8..6dab4e5a 100644 --- a/src/extras/geometries/ExtrudeGeometry.js +++ b/src/extras/geometries/ExtrudeGeometry.js @@ -30,7 +30,7 @@ THREE.ExtrudeGeometry = function( shapes, options ) { - if( typeof( shapes ) == "undefined" ) { + if( typeof( shapes ) === "undefined" ) { shapes = []; return; @@ -312,11 +312,11 @@ THREE.ExtrudeGeometry.prototype.addShape = function( shape, options ) { // We should not reach these conditions - if ( v_dot_w_hat == 0 ) { + if ( v_dot_w_hat === 0 ) { console.log( "Either infinite or no solutions!" ); - if ( q_sub_p_dot_w_hat == 0 ) { + if ( q_sub_p_dot_w_hat === 0 ) { console.log( "Its finite solutions." ); @@ -348,8 +348,8 @@ THREE.ExtrudeGeometry.prototype.addShape = function( shape, options ) { for ( i = 0, il = contour.length, j = il-1, k = i + 1; i < il; i++, j++, k++ ) { - if ( j == il ) j = 0; - if ( k == il ) k = 0; + if ( j === il ) j = 0; + if ( k === il ) k = 0; // (j)---(i)---(k) // console.log('i,j,k', i, j , k) @@ -372,8 +372,8 @@ THREE.ExtrudeGeometry.prototype.addShape = function( shape, options ) { for ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i++, j++, k++ ) { - if ( j == il ) j = 0; - if ( k == il ) k = 0; + if ( j === il ) j = 0; + if ( k === il ) k = 0; // (j)---(i)---(k) oneHoleMovements[ i ]= getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); diff --git a/src/extras/loaders/BinaryLoader.js b/src/extras/loaders/BinaryLoader.js index b548a42c..15b3f897 100644 --- a/src/extras/loaders/BinaryLoader.js +++ b/src/extras/loaders/BinaryLoader.js @@ -16,26 +16,37 @@ THREE.BinaryLoader.prototype.supr = THREE.Loader.prototype; // Load models generated by slim OBJ converter with BINARY option (converter_obj_three_slim.py -t binary) // - binary models consist of two files: JS and BIN // - parameters -// - model (required) +// - url (required) // - callback (required) -// - bin_path (optional: if not specified, binary file will be assumed to be in the same folder as JS model file) -// - texture_path (optional: if not specified, textures will be assumed to be in the same folder as JS model file) +// - texturePath (optional: if not specified, textures will be assumed to be in the same folder as JS model file) +// - binaryPath (optional: if not specified, binary file will be assumed to be in the same folder as JS model file) -THREE.BinaryLoader.prototype.load = function( parameters ) { +THREE.BinaryLoader.prototype.load = function( url, callback, texturePath, binaryPath ) { + + if ( url instanceof Object ) { + + console.warn( 'DEPRECATED: BinaryLoader( parameters ) is now BinaryLoader( url, callback, texturePath, binaryPath ).' ); + + var parameters = url; + + url = parameters.model; + callback = parameters.callback; + texturePath = parameters.texture_path; + binaryPath = parameters.bin_path; + + } // #1 load JS part via web worker // This isn't really necessary, JS part is tiny, // could be done by more ordinary means. - var url = parameters.model, - callback = parameters.callback, - texture_path = parameters.texture_path ? parameters.texture_path : THREE.Loader.prototype.extractUrlbase( url ), - bin_path = parameters.bin_path ? parameters.bin_path : THREE.Loader.prototype.extractUrlbase( url ), + texturePath = texturePath ? texturePath : this.extractUrlbase( url ); + binaryPath = binaryPath ? binaryPath : this.extractUrlbase( url ); - s = (new Date).getTime(), + var s = Date.now(), worker = new Worker( url ), - callback_progress = this.showProgress ? THREE.Loader.prototype.updateProgress : null; + callbackProgress = this.showProgress ? THREE.Loader.prototype.updateProgress : null; worker.onmessage = function( event ) { @@ -49,11 +60,11 @@ THREE.BinaryLoader.prototype.load = function( parameters ) { // Also, worker loading huge data by Ajax still freezes browser. Go figure, // worker with baked ascii JSON data keeps browser more responsive. - THREE.BinaryLoader.prototype.loadAjaxBuffers( buffers, materials, callback, bin_path, texture_path, callback_progress ); + THREE.BinaryLoader.prototype.loadAjaxBuffers( buffers, materials, callback, binaryPath, texturePath, callbackProgress ); }; - worker.onerror = function (event) { + worker.onerror = function ( event ) { alert( "worker.onerror: " + event.message + "\n" + event.data ); event.preventDefault(); @@ -71,10 +82,10 @@ THREE.BinaryLoader.prototype.load = function( parameters ) { // See also other suggestions by Gregg Tavares // https://groups.google.com/group/o3d-discuss/browse_thread/thread/a8967bc9ce1e0978 -THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, callback, bin_path, texture_path, callback_progress ) { +THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, callback, binaryPath, texturePath, callbackProgress ) { var xhr = new XMLHttpRequest(), - url = bin_path + "/" + buffers; + url = binaryPath + "/" + buffers; var length = 0; @@ -84,7 +95,7 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal if ( xhr.status == 200 || xhr.status == 0 ) { - THREE.BinaryLoader.prototype.createBinModel( xhr.responseText, callback, texture_path, materials ); + THREE.BinaryLoader.prototype.createBinModel( xhr.responseText, callback, texturePath, materials ); } else { @@ -94,7 +105,7 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal } else if ( xhr.readyState == 3 ) { - if ( callback_progress ) { + if ( callbackProgress ) { if ( length == 0 ) { @@ -102,7 +113,7 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal } - callback_progress( { total: length, loaded: xhr.responseText.length } ); + callbackProgress( { total: length, loaded: xhr.responseText.length } ); } @@ -121,9 +132,9 @@ THREE.BinaryLoader.prototype.loadAjaxBuffers = function( buffers, materials, cal }; -THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture_path, materials ) { +THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texturePath, materials ) { - var Model = function ( texture_path ) { + var Model = function ( texturePath ) { //var s = (new Date).getTime(); @@ -144,7 +155,7 @@ THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture THREE.Geometry.call( this ); - THREE.Loader.prototype.init_materials( scope, materials, texture_path ); + THREE.Loader.prototype.initMaterials( scope, materials, texturePath ); md = parseMetaData( data, currentOffset ); currentOffset += md.header_bytes; @@ -676,22 +687,19 @@ THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture function f3 ( scope, a, b, c, mi ) { - var material = scope.materials[ mi ]; - scope.faces.push( new THREE.Face3( a, b, c, null, null, material ) ); + scope.faces.push( new THREE.Face3( a, b, c, null, null, mi ) ); }; function f4 ( scope, a, b, c, d, mi ) { - var material = scope.materials[ mi ]; - scope.faces.push( new THREE.Face4( a, b, c, d, null, null, material ) ); + scope.faces.push( new THREE.Face4( a, b, c, d, null, null, mi ) ); }; function f3n ( scope, normals, a, b, c, mi, na, nb, nc ) { - var material = scope.materials[ mi ], - nax = normals[ na*3 ], + var nax = normals[ na*3 ], nay = normals[ na*3 + 1 ], naz = normals[ na*3 + 2 ], @@ -708,14 +716,13 @@ THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture new THREE.Vector3( nbx, nby, nbz ), new THREE.Vector3( ncx, ncy, ncz )], null, - material ) ); + mi ) ); }; function f4n ( scope, normals, a, b, c, d, mi, na, nb, nc, nd ) { - var material = scope.materials[ mi ], - nax = normals[ na*3 ], + var nax = normals[ na*3 ], nay = normals[ na*3 + 1 ], naz = normals[ na*3 + 2 ], @@ -737,7 +744,7 @@ THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture new THREE.Vector3( ncx, ncy, ncz ), new THREE.Vector3( ndx, ndy, ndz )], null, - material ) ); + mi ) ); }; @@ -765,6 +772,6 @@ THREE.BinaryLoader.prototype.createBinModel = function ( data, callback, texture Model.prototype = new THREE.Geometry(); Model.prototype.constructor = Model; - callback( new Model( texture_path ) ); + callback( new Model( texturePath ) ); }; diff --git a/src/extras/loaders/JSONLoader.js b/src/extras/loaders/JSONLoader.js index bc36fa73..8295549c 100644 --- a/src/extras/loaders/JSONLoader.js +++ b/src/extras/loaders/JSONLoader.js @@ -13,19 +13,19 @@ THREE.JSONLoader.prototype = new THREE.Loader(); THREE.JSONLoader.prototype.constructor = THREE.JSONLoader; THREE.JSONLoader.prototype.supr = THREE.Loader.prototype; - THREE.JSONLoader.prototype.load = function ( url, callback, texturePath ) { - var scope = this, worker; + var worker, scope = this; if ( url instanceof Object ) { console.warn( 'DEPRECATED: JSONLoader( parameters ) is now JSONLoader( url, callback, texturePath ).' ); - var object = url; - url = object.model; - callback = object.callback; - texturePath = object.texture_path; + var parameters = url; + + url = parameters.model; + callback = parameters.callback; + texturePath = parameters.texture_path; } @@ -40,7 +40,7 @@ THREE.JSONLoader.prototype.load = function ( url, callback, texturePath ) { }; this.onLoadStart(); - worker.postMessage( new Date().getTime() ); + worker.postMessage( Date.now() ); }; @@ -50,7 +50,7 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texture_path geometry = new THREE.Geometry(), scale = ( json.scale !== undefined ) ? 1.0 / json.scale : 1.0; - this.init_materials( geometry, json.materials, texture_path ); + this.initMaterials( geometry, json.materials, texture_path ); parseModel( scale ); @@ -177,7 +177,7 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texture_path if ( hasMaterial ) { materialIndex = faces[ offset ++ ]; - face.materials = geometry.materials[ materialIndex ]; + face.materialIndex = materialIndex; } diff --git a/src/extras/loaders/Loader.js b/src/extras/loaders/Loader.js index b015b4c7..32f48899 100644 --- a/src/extras/loaders/Loader.js +++ b/src/extras/loaders/Loader.js @@ -65,13 +65,13 @@ THREE.Loader.prototype = { }, - init_materials: function ( scope, materials, texture_path ) { + initMaterials: function ( scope, materials, texture_path ) { scope.materials = []; for ( var i = 0; i < materials.length; ++ i ) { - scope.materials[ i ] = [ THREE.Loader.prototype.createMaterial( materials[ i ], texture_path ) ]; + scope.materials[ i ] = THREE.Loader.prototype.createMaterial( materials[ i ], texture_path ); } @@ -81,9 +81,9 @@ THREE.Loader.prototype = { var m, i, il = scope.materials.length; - for( i = 0; i < il; i++ ) { + for( i = 0; i < il; i ++ ) { - m = scope.materials[ i ][ 0 ]; + m = scope.materials[ i ]; if ( m instanceof THREE.ShaderMaterial ) return true; diff --git a/src/extras/loaders/SceneLoader.js b/src/extras/loaders/SceneLoader.js index 1b3e2429..cec0e9d3 100644 --- a/src/extras/loaders/SceneLoader.js +++ b/src/extras/loaders/SceneLoader.js @@ -134,12 +134,14 @@ THREE.SceneLoader.prototype = { var hasNormals = false; - materials = []; - for( i = 0; i < o.materials.length; i++ ) { + // not anymore support for multiple materials + // shouldn't really be array - materials[ i ] = result.materials[ o.materials[i] ]; + for( i = 0; i < o.materials.length; i ++ ) { - hasNormals = materials[ i ] instanceof THREE.ShaderMaterial; + materials = result.materials[ o.materials[ i ] ]; + + hasNormals = materials instanceof THREE.ShaderMaterial; } @@ -160,7 +162,7 @@ THREE.SceneLoader.prototype = { if ( materials.length == 0 ) { - materials[ 0 ] = new THREE.MeshFaceMaterial(); + materials = new THREE.MeshFaceMaterial(); } @@ -169,7 +171,7 @@ THREE.SceneLoader.prototype = { if ( materials.length > 1 ) { - materials = [ new THREE.MeshFaceMaterial() ]; + materials = new THREE.MeshFaceMaterial(); } @@ -516,15 +518,11 @@ THREE.SceneLoader.prototype = { } else if ( g.type == "bin_mesh" ) { - binLoader.load( { model: get_url( g.url, data.urlBaseType ), - callback: create_callback( dg ) - } ); + binLoader.load( get_url( g.url, data.urlBaseType ), create_callback( dg ) ); } else if ( g.type == "ascii_mesh" ) { - jsonLoader.load( { model: get_url( g.url, data.urlBaseType ), - callback: create_callback( dg ) - } ); + jsonLoader.load( get_url( g.url, data.urlBaseType ), create_callback( dg ) ); } else if ( g.type == "embedded_mesh" ) { diff --git a/src/extras/loaders/UTF8Loader.js b/src/extras/loaders/UTF8Loader.js index e11ee47c..093ae887 100644 --- a/src/extras/loaders/UTF8Loader.js +++ b/src/extras/loaders/UTF8Loader.js @@ -23,21 +23,31 @@ THREE.UTF8Loader.prototype.constructor = THREE.UTF8Loader; // Load UTF8 compressed models generated by objcompress // - parameters -// - model (required) +// - url (required) // - callback (required) +// - metaData (optional) -THREE.UTF8Loader.prototype.load = function( parameters ) { +THREE.UTF8Loader.prototype.load = function( url, callback, metaData ) { + + if ( url instanceof Object ) { + + console.warn( 'DEPRECATED: UTF8Loader( parameters ) is now UTF8Loader( url, callback, metaData ).' ); + + var parameters = url; + + url = parameters.model; + callback = parameters.callback; + metaData = { scale: parameters.scale, offsetX: parameters.offsetX, offsetY: parameters.offsetY, offsetZ: parameters.offsetZ }; + + } var xhr = new XMLHttpRequest(), - url = parameters.model, + callbackProgress = null, - callback = parameters.callback, - callback_progress = null, - - scale = parameters.scale !== undefined ? parameters.scale : 1, - offsetX = parameters.offsetX !== undefined ? parameters.offsetX : 0, - offsetY = parameters.offsetY !== undefined ? parameters.offsetY : 0, - offsetZ = parameters.offsetZ !== undefined ? parameters.offsetZ : 0; + scale = metaData.scale !== undefined ? metaData.scale : 1, + offsetX = metaData.offsetX !== undefined ? metaData.offsetX : 0, + offsetY = metaData.offsetY !== undefined ? metaData.offsetY : 0, + offsetZ = metaData.offsetZ !== undefined ? metaData.offsetZ : 0; var length = 0; @@ -57,7 +67,7 @@ THREE.UTF8Loader.prototype.load = function( parameters ) { } else if ( xhr.readyState == 3 ) { - if ( callback_progress ) { + if ( callbackProgress ) { if ( length == 0 ) { @@ -65,7 +75,7 @@ THREE.UTF8Loader.prototype.load = function( parameters ) { } - callback_progress( { total: length, loaded: xhr.responseText.length } ); + callbackProgress( { total: length, loaded: xhr.responseText.length } ); } diff --git a/src/extras/objects/MarchingCubes.js b/src/extras/objects/MarchingCubes.js index f7942a6b..143cea07 100644 --- a/src/extras/objects/MarchingCubes.js +++ b/src/extras/objects/MarchingCubes.js @@ -54,7 +54,7 @@ THREE.MarchingCubes = function ( resolution, materials ) { this.hasNormal = false; this.positionArray = new Float32Array( this.maxCount * 3 ); - this.normalArray = new Float32Array( this.maxCount * 3 ); + this.normalArray = new Float32Array( this.maxCount * 3 ); }; @@ -117,7 +117,7 @@ THREE.MarchingCubes = function ( resolution, materials ) { var q3 = q * 3; - if ( this.normal_cache [ q3 ] == 0.0 ) { + if ( this.normal_cache [ q3 ] === 0.0 ) { this.normal_cache[ q3 ] = this.field[ q - 1 ] - this.field[ q + 1 ]; this.normal_cache[ q3 + 1 ] = this.field[ q - this.yd ] - this.field[ q + this.yd ]; @@ -163,16 +163,16 @@ THREE.MarchingCubes = function ( resolution, materials ) { // if cube is entirely in/out of the surface - bail, nothing to draw var bits = THREE.edgeTable[ cubeindex ]; - if ( bits == 0 ) return 0; + if ( bits === 0 ) return 0; var d = this.delta, - fx2 = fx + d, - fy2 = fy + d, + fx2 = fx + d, + fy2 = fy + d, fz2 = fz + d; // top of the cube - if ( bits & 1 ) { + if ( bits & 1 ) { this.compNorm( q ); this.compNorm( q1 ); @@ -180,23 +180,23 @@ THREE.MarchingCubes = function ( resolution, materials ) { }; - if ( bits & 2 ) { + if ( bits & 2 ) { - this.compNorm( q1 ); - this.compNorm( q1y ); + this.compNorm( q1 ); + this.compNorm( q1y ); this.VIntY( q1 * 3, this.vlist, this.nlist, 3, isol, fx2, fy, fz, field1, field3 ); }; - if ( bits & 4 ) { + if ( bits & 4 ) { - this.compNorm( qy ); - this.compNorm( q1y ); - this.VIntX( qy * 3, this.vlist, this.nlist, 6, isol, fx, fy2, fz, field2, field3 ); + this.compNorm( qy ); + this.compNorm( q1y ); + this.VIntX( qy * 3, this.vlist, this.nlist, 6, isol, fx, fy2, fz, field2, field3 ); }; - if ( bits & 8 ) { + if ( bits & 8 ) { this.compNorm( q ); this.compNorm( qy ); @@ -206,19 +206,19 @@ THREE.MarchingCubes = function ( resolution, materials ) { // bottom of the cube - if ( bits & 16 ) { + if ( bits & 16 ) { this.compNorm( qz ); this.compNorm( q1z ); - this.VIntX( qz * 3, this.vlist, this.nlist, 12, isol, fx, fy, fz2, field4, field5 ); + this.VIntX( qz * 3, this.vlist, this.nlist, 12, isol, fx, fy, fz2, field4, field5 ); }; - if ( bits & 32 ) { + if ( bits & 32 ) { - this.compNorm( q1z ); - this.compNorm( q1yz ); - this.VIntY( q1z * 3, this.vlist, this.nlist, 15, isol, fx2, fy, fz2, field5, field7 ); + this.compNorm( q1z ); + this.compNorm( q1yz ); + this.VIntY( q1z * 3, this.vlist, this.nlist, 15, isol, fx2, fy, fz2, field5, field7 ); }; @@ -226,7 +226,7 @@ THREE.MarchingCubes = function ( resolution, materials ) { this.compNorm( qyz ); this.compNorm( q1yz ); - this.VIntX( qyz * 3, this.vlist, this.nlist, 18, isol, fx, fy2, fz2, field6, field7 ); + this.VIntX( qyz * 3, this.vlist, this.nlist, 18, isol, fx, fy2, fz2, field6, field7 ); }; @@ -234,7 +234,7 @@ THREE.MarchingCubes = function ( resolution, materials ) { this.compNorm( qz ); this.compNorm( qyz ); - this.VIntY( qz * 3, this.vlist, this.nlist, 21, isol, fx, fy, fz2, field4, field6 ); + this.VIntY( qz * 3, this.vlist, this.nlist, 21, isol, fx, fy, fz2, field4, field6 ); }; @@ -252,7 +252,7 @@ THREE.MarchingCubes = function ( resolution, materials ) { this.compNorm( q1 ); this.compNorm( q1z ); - this.VIntZ( q1 * 3, this.vlist, this.nlist, 27, isol, fx2, fy, fz, field1, field5 ); + this.VIntZ( q1 * 3, this.vlist, this.nlist, 27, isol, fx2, fy, fz, field1, field5 ); }; @@ -260,15 +260,15 @@ THREE.MarchingCubes = function ( resolution, materials ) { this.compNorm( q1y ); this.compNorm( q1yz ); - this.VIntZ( q1y * 3, this.vlist, this.nlist, 30, isol, fx2, fy2, fz, field3, field7 ); + this.VIntZ( q1y * 3, this.vlist, this.nlist, 30, isol, fx2, fy2, fz, field3, field7 ); }; - if ( bits & 2048 ) { + if ( bits & 2048 ) { this.compNorm( qy ); this.compNorm( qyz ); - this.VIntZ( qy * 3, this.vlist, this.nlist, 33, isol, fx, fy2, fz, field2, field6 ); + this.VIntZ( qy * 3, this.vlist, this.nlist, 33, isol, fx, fy2, fz, field2, field6 ); }; @@ -319,15 +319,15 @@ THREE.MarchingCubes = function ( resolution, materials ) { this.positionArray[ c + 7 ] = pos[ o3 + 1 ]; this.positionArray[ c + 8 ] = pos[ o3 + 2 ]; - this.normalArray[ c ] = norm[ o1 ]; + this.normalArray[ c ] = norm[ o1 ]; this.normalArray[ c + 1 ] = norm[ o1 + 1 ]; this.normalArray[ c + 2 ] = norm[ o1 + 2 ]; - this.normalArray[ c + 3 ] = norm[ o2 ]; + this.normalArray[ c + 3 ] = norm[ o2 ]; this.normalArray[ c + 4 ] = norm[ o2 + 1 ]; this.normalArray[ c + 5 ] = norm[ o2 + 2 ]; - this.normalArray[ c + 6 ] = norm[ o3 ]; + this.normalArray[ c + 6 ] = norm[ o3 ]; this.normalArray[ c + 7 ] = norm[ o3 + 1 ]; this.normalArray[ c + 8 ] = norm[ o3 + 2 ]; @@ -354,7 +354,7 @@ THREE.MarchingCubes = function ( resolution, materials ) { this.end = function( render_callback ) { - if ( this.count == 0 ) + if ( this.count === 0 ) return; for ( var i = this.count * 3; i < this.positionArray.length; i++ ) @@ -602,7 +602,7 @@ THREE.MarchingCubes = function ( resolution, materials ) { var geo_callback = function( object ) { - var i, x, y, z, vertex, position, normal, + var i, x, y, z, vertex, position, normal, face, a, b, c, na, nb, nc; diff --git a/src/materials/MeshLambertMaterial.js b/src/materials/MeshLambertMaterial.js index 34e223c3..1f2164cc 100644 --- a/src/materials/MeshLambertMaterial.js +++ b/src/materials/MeshLambertMaterial.js @@ -4,7 +4,9 @@ * * parameters = { * color: , + * ambient: , * opacity: , + * * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), @@ -35,6 +37,7 @@ THREE.MeshLambertMaterial = function ( parameters ) { parameters = parameters || {}; this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); + this.ambient = parameters.ambient !== undefined ? new THREE.Color( parameters.ambient ) : new THREE.Color( 0x050505 ); this.map = parameters.map !== undefined ? parameters.map : null; diff --git a/src/materials/MeshPhongMaterial.js b/src/materials/MeshPhongMaterial.js index 20773b0a..3c32db05 100644 --- a/src/materials/MeshPhongMaterial.js +++ b/src/materials/MeshPhongMaterial.js @@ -43,6 +43,9 @@ THREE.MeshPhongMaterial = function ( parameters ) { this.specular = parameters.specular !== undefined ? new THREE.Color( parameters.specular ) : new THREE.Color( 0x111111 ); this.shininess = parameters.shininess !== undefined ? parameters.shininess : 30; + this.metal = parameters.metal !== undefined ? parameters.metal : false; + this.perPixel = parameters.perPixel !== undefined ? parameters.perPixel : false; + this.map = parameters.map !== undefined ? parameters.map : null; this.lightMap = parameters.lightMap !== undefined ? parameters.lightMap : null; diff --git a/src/objects/Bone.js b/src/objects/Bone.js index c5432fd8..b91e5131 100644 --- a/src/objects/Bone.js +++ b/src/objects/Bone.js @@ -59,7 +59,7 @@ THREE.Bone.prototype.update = function( parentSkinMatrix, forceUpdate, camera ) this.matrixWorld.multiply( this.skin.matrixWorld, this.skinMatrix ); - for ( i = 0; i < l; i++ ) { + for ( i = 0; i < l; i ++ ) { child = this.children[ i ]; @@ -77,7 +77,7 @@ THREE.Bone.prototype.update = function( parentSkinMatrix, forceUpdate, camera ) } else { - for ( i = 0; i < l; i++ ) { + for ( i = 0; i < l; i ++ ) { this.children[ i ].update( this.skinMatrix, forceUpdate, camera ); @@ -92,7 +92,7 @@ THREE.Bone.prototype.update = function( parentSkinMatrix, forceUpdate, camera ) * Add child */ -THREE.Bone.prototype.addChild = function( child ) { +THREE.Bone.prototype.add = function( child ) { if ( this.children.indexOf( child ) === - 1 ) { diff --git a/src/objects/Line.js b/src/objects/Line.js index 78ddb74a..4c3ad95b 100644 --- a/src/objects/Line.js +++ b/src/objects/Line.js @@ -2,12 +2,12 @@ * @author mr.doob / http://mrdoob.com/ */ -THREE.Line = function ( geometry, materials, type ) { +THREE.Line = function ( geometry, material, type ) { THREE.Object3D.call( this ); this.geometry = geometry; - this.materials = materials instanceof Array ? materials : [ materials ]; + this.material = material; this.type = ( type != undefined ) ? type : THREE.LineStrip; diff --git a/src/objects/Mesh.js b/src/objects/Mesh.js index b88ef663..ee620f25 100644 --- a/src/objects/Mesh.js +++ b/src/objects/Mesh.js @@ -4,12 +4,12 @@ * @author mikael emtinger / http://gomo.se/ */ -THREE.Mesh = function ( geometry, materials ) { +THREE.Mesh = function ( geometry, material ) { THREE.Object3D.call( this ); this.geometry = geometry; - this.materials = materials && materials.length ? materials : [ materials ]; + this.material = material; this.overdraw = false; // TODO: Move to material? diff --git a/src/objects/MorphAnimMesh.js b/src/objects/MorphAnimMesh.js new file mode 100644 index 00000000..c5a9aaca --- /dev/null +++ b/src/objects/MorphAnimMesh.js @@ -0,0 +1,87 @@ +/** + * @author alteredq / http://alteredqualia.com/ + */ + +THREE.MorphAnimMesh = function( geometry, material ) { + + THREE.Mesh.call( this, geometry, material ); + + // API + + this.duration = 1000; // milliseconds + this.mirroredLoop = false; + this.time = 0; + + // internals + + this.lastKeyframe = 0; + this.currentKeyframe = 0; + + this.direction = 1; + this.directionBackwards = false; + +}; + +THREE.MorphAnimMesh.prototype = new THREE.Mesh(); +THREE.MorphAnimMesh.prototype.constructor = THREE.MorphAnimMesh; + +THREE.MorphAnimMesh.prototype.updateAnimation = function ( delta ) { + + var frameTime = this.duration / ( this.geometry.morphTargets.length - 1 ); + + this.time += this.direction * delta; + + if ( this.mirroredLoop ) { + + if ( this.time > this.duration || this.time < 0 ) { + + this.direction *= -1; + + if ( this.time > this.duration ) { + + this.time = this.duration; + this.directionBackwards = true; + + } + + if ( this.time < 0 ) { + + this.time = 0; + this.directionBackwards = false; + + } + + } + + } else { + + this.time = this.time % this.duration; + + } + + var keyframe = THREE.Math.clamp( Math.floor( this.time / frameTime ), 0, this.geometry.morphTargets.length - 1 ); + + if ( keyframe != this.currentKeyframe ) { + + this.morphTargetInfluences[ this.lastKeyframe ] = 0; + this.morphTargetInfluences[ this.currentKeyframe ] = 1; + + this.morphTargetInfluences[ keyframe ] = 0; + + this.lastKeyframe = this.currentKeyframe; + this.currentKeyframe = keyframe; + + } + + var mix = ( this.time % frameTime ) / frameTime; + + if ( this.directionBackwards ) { + + mix = 1 - mix; + + } + + this.morphTargetInfluences[ this.currentKeyframe ] = mix; + this.morphTargetInfluences[ this.lastKeyframe ] = 1 - mix; + +}; diff --git a/src/objects/Particle.js b/src/objects/Particle.js index ada153ac..55f81d8f 100644 --- a/src/objects/Particle.js +++ b/src/objects/Particle.js @@ -2,11 +2,11 @@ * @author mr.doob / http://mrdoob.com/ */ -THREE.Particle = function ( materials ) { +THREE.Particle = function ( material ) { THREE.Object3D.call( this ); - this.materials = materials instanceof Array ? materials : [ materials ]; + this.material = material; }; diff --git a/src/objects/ParticleSystem.js b/src/objects/ParticleSystem.js index 28b356f0..e92c67f0 100644 --- a/src/objects/ParticleSystem.js +++ b/src/objects/ParticleSystem.js @@ -2,12 +2,12 @@ * @author alteredq / http://alteredqualia.com/ */ -THREE.ParticleSystem = function ( geometry, materials ) { +THREE.ParticleSystem = function ( geometry, material ) { THREE.Object3D.call( this ); this.geometry = geometry; - this.materials = materials instanceof Array ? materials : [ materials ]; + this.material = material; this.sortParticles = false; diff --git a/src/objects/Ribbon.js b/src/objects/Ribbon.js index 01fb8f4f..03c6471f 100644 --- a/src/objects/Ribbon.js +++ b/src/objects/Ribbon.js @@ -2,12 +2,12 @@ * @author alteredq / http://alteredqualia.com/ */ -THREE.Ribbon = function ( geometry, materials ) { +THREE.Ribbon = function ( geometry, material ) { THREE.Object3D.call( this ); this.geometry = geometry; - this.materials = materials instanceof Array ? materials : [ materials ]; + this.material = material; }; diff --git a/src/objects/SkinnedMesh.js b/src/objects/SkinnedMesh.js index 17f9b83f..fda74e1e 100644 --- a/src/objects/SkinnedMesh.js +++ b/src/objects/SkinnedMesh.js @@ -2,9 +2,9 @@ * @author mikael emtinger / http://gomo.se/ */ -THREE.SkinnedMesh = function( geometry, materials ) { +THREE.SkinnedMesh = function( geometry, material ) { - THREE.Mesh.call( this, geometry, materials ); + THREE.Mesh.call( this, geometry, material ); // init bones @@ -16,7 +16,7 @@ THREE.SkinnedMesh = function( geometry, materials ) { if ( this.geometry.bones !== undefined ) { - for ( b = 0; b < this.geometry.bones.length; b++ ) { + for ( b = 0; b < this.geometry.bones.length; b ++ ) { gbone = this.geometry.bones[ b ]; @@ -27,7 +27,7 @@ THREE.SkinnedMesh = function( geometry, materials ) { bone = this.addBone(); bone.name = gbone.name; - bone.position.set( p[0], p[1], p[2] ); + bone.position.set( p[0], p[1], p[2] ); bone.quaternion.set( q[0], q[1], q[2], q[3] ); bone.useQuaternion = true; @@ -43,18 +43,18 @@ THREE.SkinnedMesh = function( geometry, materials ) { } - for ( b = 0; b < this.bones.length; b++ ) { + for ( b = 0; b < this.bones.length; b ++ ) { gbone = this.geometry.bones[ b ]; bone = this.bones[ b ]; if ( gbone.parent === -1 ) { - this.addChild( bone ); + this.add( bone ); } else { - this.bones[ gbone.parent ].addChild( bone ); + this.bones[ gbone.parent ].add( bone ); } @@ -115,7 +115,7 @@ THREE.SkinnedMesh.prototype.update = function ( parentMatrixWorld, forceUpdate, var child, i, l = this.children.length; - for ( i = 0; i < l; i++ ) { + for ( i = 0; i < l; i ++ ) { child = this.children[ i ]; @@ -138,7 +138,7 @@ THREE.SkinnedMesh.prototype.update = function ( parentMatrixWorld, forceUpdate, ba = this.bones; bm = this.boneMatrices; - for ( b = 0; b < bl; b++ ) { + for ( b = 0; b < bl; b ++ ) { ba[ b ].skinMatrix.flattenToArrayOffset( bm, b * 16 ); @@ -150,7 +150,7 @@ THREE.SkinnedMesh.prototype.update = function ( parentMatrixWorld, forceUpdate, /* - * Add + * Add */ THREE.SkinnedMesh.prototype.addBone = function( bone ) { @@ -177,7 +177,7 @@ THREE.SkinnedMesh.prototype.pose = function() { var bim, bone, boneInverses = []; - for ( var b = 0; b < this.bones.length; b++ ) { + for ( var b = 0; b < this.bones.length; b ++ ) { bone = this.bones[ b ]; @@ -187,7 +187,7 @@ THREE.SkinnedMesh.prototype.pose = function() { } - // project vertices to local + // project vertices to local if ( this.geometry.skinVerticesA === undefined ) { @@ -196,7 +196,7 @@ THREE.SkinnedMesh.prototype.pose = function() { var orgVertex, vertex; - for ( var i = 0; i < this.geometry.skinIndices.length; i++ ) { + for ( var i = 0; i < this.geometry.skinIndices.length; i ++ ) { orgVertex = this.geometry.vertices[ i ].position; diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index d907bd90..a5d4e4bd 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -105,6 +105,14 @@ THREE.WebGLRenderer = function ( parameters ) { this.sortObjects = true; + this.autoUpdateObjects = true; + + // physically based shading + + this.gammaInput = false; + this.gammaOutput = false; + this.physicallyBasedShading = false; + // shadow map this.shadowMapBias = 0.0039; @@ -117,7 +125,9 @@ THREE.WebGLRenderer = function ( parameters ) { this.shadowCameraFov = 50; this.shadowMap = []; + this.shadowMapEnabled = false; + this.shadowMapAutoUpdate = true; this.shadowMapSoft = true; var _cameraLight, _shadowMatrix = []; @@ -317,9 +327,9 @@ THREE.WebGLRenderer = function ( parameters ) { var bits = 0; - if ( color == undefined || color ) bits |= _gl.COLOR_BUFFER_BIT; - if ( depth == undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT; - if ( stencil == undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT; + if ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT; + if ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT; + if ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT; _gl.clear( bits ); @@ -412,17 +422,37 @@ THREE.WebGLRenderer = function ( parameters ) { if ( light instanceof THREE.AmbientLight ) { - r += color.r; - g += color.g; - b += color.b; + if ( _this.gammaInput ) { + + r += color.r * color.r; + g += color.g * color.g; + b += color.b * color.b; + + } else { + + r += color.r; + g += color.g; + b += color.b; + + } } else if ( light instanceof THREE.DirectionalLight ) { doffset = dlength * 3; - dcolors[ doffset ] = color.r * intensity; - dcolors[ doffset + 1 ] = color.g * intensity; - dcolors[ doffset + 2 ] = color.b * intensity; + if ( _this.gammaInput ) { + + dcolors[ doffset ] = color.r * color.r * intensity * intensity; + dcolors[ doffset + 1 ] = color.g * color.g * intensity * intensity; + dcolors[ doffset + 2 ] = color.b * color.b * intensity * intensity; + + } else { + + dcolors[ doffset ] = color.r * intensity; + dcolors[ doffset + 1 ] = color.g * intensity; + dcolors[ doffset + 2 ] = color.b * intensity; + + } dpositions[ doffset ] = position.x; dpositions[ doffset + 1 ] = position.y; @@ -434,9 +464,19 @@ THREE.WebGLRenderer = function ( parameters ) { doffset = dlength * 3; - dcolors[ doffset ] = color.r * intensity; - dcolors[ doffset + 1 ] = color.g * intensity; - dcolors[ doffset + 2 ] = color.b * intensity; + if ( _this.gammaInput ) { + + dcolors[ doffset ] = color.r * color.r * intensity * intensity; + dcolors[ doffset + 1 ] = color.g * color.g * intensity * intensity; + dcolors[ doffset + 2 ] = color.b * color.b * intensity * intensity; + + } else { + + dcolors[ doffset ] = color.r * intensity; + dcolors[ doffset + 1 ] = color.g * intensity; + dcolors[ doffset + 2 ] = color.b * intensity; + + } n = 1 / position.length(); @@ -450,9 +490,19 @@ THREE.WebGLRenderer = function ( parameters ) { poffset = plength * 3; - pcolors[ poffset ] = color.r * intensity; - pcolors[ poffset + 1 ] = color.g * intensity; - pcolors[ poffset + 2 ] = color.b * intensity; + if ( _this.gammaInput ) { + + pcolors[ poffset ] = color.r * color.r * intensity * intensity; + pcolors[ poffset + 1 ] = color.g * color.g * intensity * intensity; + pcolors[ poffset + 2 ] = color.b * color.b * intensity * intensity; + + } else { + + pcolors[ poffset ] = color.r * intensity; + pcolors[ poffset + 1 ] = color.g * intensity; + pcolors[ poffset + 2 ] = color.b * intensity; + + } ppositions[ poffset ] = position.x; ppositions[ poffset + 1 ] = position.y; @@ -640,70 +690,76 @@ THREE.WebGLRenderer = function ( parameters ) { geometry.__webglParticleCount = nvertices; - geometry.__materials = object.materials; - // custom attributes - var m, ml, material; + var material = object.material; - for ( m = 0, ml = object.materials.length; m < ml; m ++ ) { + if ( material.attributes ) { - material = object.materials[ m ]; + if ( geometry.__webglCustomAttributesList === undefined ) { - if ( material.attributes ) { - - if ( geometry.__webglCustomAttributes === undefined ) { - - geometry.__webglCustomAttributes = {}; - - } - - for ( a in material.attributes ) { - - // Do a shallow copy of the attribute object so different geometryGroup chunks use different - // attribute buffers which are correctly indexed in the setMeshBuffers function - - // Not sure how to best translate this into non-indexed arrays - // used for particles, as there are no geometry chunks here - // Probably could be simplified - - originalAttribute = material.attributes[ a ]; - - attribute = {}; - - for ( property in originalAttribute ) { - - attribute[ property ] = originalAttribute[ property ]; - - } - - if( !attribute.__webglInitialized || attribute.createUniqueBuffers ) { - - attribute.__webglInitialized = true; - - size = 1; // "f" and "i" - - if ( attribute.type === "v2" ) size = 2; - else if ( attribute.type === "v3" ) size = 3; - else if ( attribute.type === "v4" ) size = 4; - else if ( attribute.type === "c" ) size = 3; - - attribute.size = size; - attribute.array = new Float32Array( nvertices * size ); - attribute.buffer = _gl.createBuffer(); - attribute.buffer.belongsToAttribute = a; - - originalAttribute.needsUpdate = true; - attribute.__original = originalAttribute; - - } - - geometry.__webglCustomAttributes[ a ] = attribute; - - } + geometry.__webglCustomAttributesList = []; } + for ( var a in material.attributes ) { + + // Do a shallow copy of the attribute object so different geometryGroup chunks use different + // attribute buffers which are correctly indexed in the setMeshBuffers function + + // Not sure how to best translate this into non-indexed arrays + // used for particles, as there are no geometry chunks here + // Probably could be simplified + + originalAttribute = material.attributes[ a ]; + + attribute = {}; + + for ( property in originalAttribute ) { + + attribute[ property ] = originalAttribute[ property ]; + + } + + if( !attribute.__webglInitialized || attribute.createUniqueBuffers ) { + + attribute.__webglInitialized = true; + + size = 1; // "f" and "i" + + if ( attribute.type === "v2" ) size = 2; + else if ( attribute.type === "v3" ) size = 3; + else if ( attribute.type === "v4" ) size = 4; + else if ( attribute.type === "c" ) size = 3; + + attribute.size = size; + attribute.array = new Float32Array( nvertices * size ); + attribute.buffer = _gl.createBuffer(); + attribute.buffer.belongsToAttribute = a; + + originalAttribute.needsUpdate = true; + attribute.__original = originalAttribute; + + } + + geometry.__webglCustomAttributesList.push( attribute ); + + } + + } + + }; + + function getBufferMaterial( object, geometryGroup ) { + + if ( object.material && ! ( object.material instanceof THREE.MeshFaceMaterial ) ) { + + return object.material; + + } else if ( geometryGroup.materialIndex >= 0 ) { + + return object.geometry.materials[ geometryGroup.materialIndex ]; + } }; @@ -717,14 +773,14 @@ THREE.WebGLRenderer = function ( parameters ) { uvType, vertexColorType, normalType, - materials, material, + material, attribute, property, originalAttribute, geometry = object.geometry, obj_faces = geometry.faces, chunk_faces = geometryGroup.faces; - for ( f = 0, fl = chunk_faces.length; f < fl; f++ ) { + for ( f = 0, fl = chunk_faces.length; f < fl; f ++ ) { fi = chunk_faces[ f ]; face = obj_faces[ fi ]; @@ -745,21 +801,13 @@ THREE.WebGLRenderer = function ( parameters ) { } - materials = unrollGroupMaterials( geometryGroup, object ); + material = getBufferMaterial( object, geometryGroup ); - // this will not work if materials would change in run-time - // it should be refreshed every frame - // but need to do unrollGroupMaterials - // more properly without push to array - // like unrollBufferMaterials + uvType = bufferGuessUVType( material ); + normalType = bufferGuessNormalType( material ); + vertexColorType = bufferGuessVertexColorType( material ); - geometryGroup.__materials = materials; - - uvType = bufferGuessUVType( materials, geometryGroup, object ); - normalType = bufferGuessNormalType( materials, geometryGroup, object ); - vertexColorType = bufferGuessVertexColorType( materials, geometryGroup, object ); - - //console.log("uvType",uvType, "normalType",normalType, "vertexColorType",vertexColorType, object, geometryGroup, materials ); + //console.log( "uvType", uvType, "normalType", normalType, "vertexColorType", vertexColorType, object, geometryGroup, material ); geometryGroup.__vertexArray = new Float32Array( nvertices * 3 ); @@ -806,7 +854,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - geometryGroup.__faceArray = new Uint16Array( ntris * 3 + ( object.geometry.edgeFaces ? object.geometry.edgeFaces.length * 2 * 3 : 0 )); + geometryGroup.__faceArray = new Uint16Array( ntris * 3 ); geometryGroup.__lineArray = new Uint16Array( nlines * 2 ); if ( geometryGroup.numMorphTargets ) { @@ -821,70 +869,64 @@ THREE.WebGLRenderer = function ( parameters ) { } - geometryGroup.__needsSmoothNormals = ( normalType == THREE.SmoothShading ); + geometryGroup.__needsSmoothNormals = ( normalType === THREE.SmoothShading ); geometryGroup.__uvType = uvType; geometryGroup.__vertexColorType = vertexColorType; geometryGroup.__normalType = normalType; - geometryGroup.__webglFaceCount = ntris * 3 + ( object.geometry.edgeFaces ? object.geometry.edgeFaces.length * 2 * 3 : 0 ); + geometryGroup.__webglFaceCount = ntris * 3; geometryGroup.__webglLineCount = nlines * 2; // custom attributes - for ( m = 0, ml = materials.length; m < ml; m ++ ) { + if ( material.attributes ) { - material = materials[ m ]; + if ( geometryGroup.__webglCustomAttributesList === undefined ) { - if ( material.attributes ) { + geometryGroup.__webglCustomAttributesList = []; - if ( geometryGroup.__webglCustomAttributes === undefined ) { + } - geometryGroup.__webglCustomAttributes = {}; + for ( var a in material.attributes ) { + + // Do a shallow copy of the attribute object so different geometryGroup chunks use different + // attribute buffers which are correctly indexed in the setMeshBuffers function + + originalAttribute = material.attributes[ a ]; + + attribute = {}; + + for ( property in originalAttribute ) { + + attribute[ property ] = originalAttribute[ property ]; } - for ( a in material.attributes ) { + if( !attribute.__webglInitialized || attribute.createUniqueBuffers ) { - // Do a shallow copy of the attribute object so different geometryGroup chunks use different - // attribute buffers which are correctly indexed in the setMeshBuffers function + attribute.__webglInitialized = true; - originalAttribute = material.attributes[ a ]; + size = 1; // "f" and "i" - attribute = {}; + if( attribute.type === "v2" ) size = 2; + else if( attribute.type === "v3" ) size = 3; + else if( attribute.type === "v4" ) size = 4; + else if( attribute.type === "c" ) size = 3; - for ( property in originalAttribute ) { + attribute.size = size; + attribute.array = new Float32Array( nvertices * size ); + attribute.buffer = _gl.createBuffer(); + attribute.buffer.belongsToAttribute = a; - attribute[ property ] = originalAttribute[ property ]; - - } - - if( !attribute.__webglInitialized || attribute.createUniqueBuffers ) { - - attribute.__webglInitialized = true; - - size = 1; // "f" and "i" - - if( attribute.type === "v2" ) size = 2; - else if( attribute.type === "v3" ) size = 3; - else if( attribute.type === "v4" ) size = 4; - else if( attribute.type === "c" ) size = 3; - - attribute.size = size; - attribute.array = new Float32Array( nvertices * size ); - attribute.buffer = _gl.createBuffer(); - attribute.buffer.belongsToAttribute = a; - - originalAttribute.needsUpdate = true; - attribute.__original = originalAttribute; - - } - - geometryGroup.__webglCustomAttributes[ a ] = attribute; + originalAttribute.needsUpdate = true; + attribute.__original = originalAttribute; } + geometryGroup.__webglCustomAttributesList.push( attribute ); + } } @@ -914,7 +956,7 @@ THREE.WebGLRenderer = function ( parameters ) { si1, si2, si3, si4, sa1, sa2, sa3, sa4, sb1, sb2, sb3, sb4, - m, ml, i, + m, ml, i, il, vn, uvi, uv2i, vk, vkl, vka, a, @@ -950,7 +992,7 @@ THREE.WebGLRenderer = function ( parameters ) { morphTargetsArrays = geometryGroup.__morphTargetsArrays, - customAttributes = geometryGroup.__webglCustomAttributes, + customAttributes = geometryGroup.__webglCustomAttributesList, customAttribute, faceArray = geometryGroup.__faceArray, @@ -990,10 +1032,10 @@ THREE.WebGLRenderer = function ( parameters ) { if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttributes[ a ].offset = 0; - customAttributes[ a ].offsetSrc = 0; + customAttributes[ i ].offset = 0; + customAttributes[ i ].offsetSrc = 0; } @@ -1051,9 +1093,9 @@ THREE.WebGLRenderer = function ( parameters ) { if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttribute = customAttributes[ a ]; + customAttribute = customAttributes[ i ]; if ( customAttribute.__original.needsUpdate ) { @@ -1316,7 +1358,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( dirtyColors && vertexColorType ) { - if ( vertexColors.length == 3 && vertexColorType == THREE.VertexColors ) { + if ( vertexColors.length === 3 && vertexColorType === THREE.VertexColors ) { c1 = vertexColors[ 0 ]; c2 = vertexColors[ 1 ]; @@ -1373,7 +1415,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( dirtyNormals && normalType ) { - if ( vertexNormals.length == 3 && needsSmoothNormals ) { + if ( vertexNormals.length === 3 && needsSmoothNormals ) { for ( i = 0; i < 3; i ++ ) { @@ -1488,9 +1530,9 @@ THREE.WebGLRenderer = function ( parameters ) { if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttribute = customAttributes[ a ]; + customAttribute = customAttributes[ i ]; if ( customAttribute.__original.needsUpdate ) { @@ -1804,7 +1846,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( dirtyColors && vertexColorType ) { - if ( vertexColors.length == 4 && vertexColorType == THREE.VertexColors ) { + if ( vertexColors.length === 4 && vertexColorType === THREE.VertexColors ) { c1 = vertexColors[ 0 ]; c2 = vertexColors[ 1 ]; @@ -1873,7 +1915,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( dirtyNormals && normalType ) { - if ( vertexNormals.length == 4 && needsSmoothNormals ) { + if ( vertexNormals.length === 4 && needsSmoothNormals ) { for ( i = 0; i < 4; i ++ ) { @@ -1976,9 +2018,9 @@ THREE.WebGLRenderer = function ( parameters ) { if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttribute = customAttributes[ a ]; + customAttribute = customAttributes[ i ]; if ( customAttribute.__original.needsUpdate ) { @@ -2209,16 +2251,17 @@ THREE.WebGLRenderer = function ( parameters ) { dirtyElements = geometry.__dirtyElements, dirtyColors = geometry.__dirtyColors, - customAttributes = geometry.__webglCustomAttributes, + customAttributes = geometry.__webglCustomAttributesList, + i, il, a, ca, cal, v1, offset_custom, customAttribute; if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttributes[ a ].offset = 0; + customAttributes[ i ].offset = 0; } @@ -2267,9 +2310,9 @@ THREE.WebGLRenderer = function ( parameters ) { if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttribute = customAttributes[ a ]; + customAttribute = customAttributes[ i ]; cal = customAttribute.value.length; @@ -2340,7 +2383,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( dirtyVertices ) { - for ( v = 0; v < vl; v++ ) { + for ( v = 0; v < vl; v ++ ) { vertex = vertices[ v ].position; @@ -2372,9 +2415,9 @@ THREE.WebGLRenderer = function ( parameters ) { if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttribute = customAttributes[ a ]; + customAttribute = customAttributes[ i ]; if ( customAttribute.__original.needsUpdate ) { @@ -2461,9 +2504,9 @@ THREE.WebGLRenderer = function ( parameters ) { if ( customAttributes ) { - for ( a in customAttributes ) { + for ( i = 0, il = customAttributes.length; i < il; i ++ ) { - customAttribute = customAttributes[ a ]; + customAttribute = customAttributes[ i ]; if ( customAttribute.__original.needsUpdate || object.sortParticles ) { @@ -2489,10 +2532,20 @@ THREE.WebGLRenderer = function ( parameters ) { function refreshUniformsCommon( uniforms, material ) { - uniforms.diffuse.value = material.color; uniforms.opacity.value = material.opacity; + if ( _this.gammaInput ) { + + uniforms.diffuse.value.copyGammaToLinear( material.color ); + + } else { + + uniforms.diffuse.value = material.color; + + } + uniforms.map.texture = material.map; + if ( material.map ) { uniforms.offsetRepeat.value.set( material.map.offset.x, material.map.offset.y, material.map.repeat.x, material.map.repeat.y ); @@ -2503,7 +2556,18 @@ THREE.WebGLRenderer = function ( parameters ) { uniforms.envMap.texture = material.envMap; uniforms.flipEnvMap.value = ( material.envMap instanceof THREE.WebGLRenderTargetCube ) ? 1 : -1; - uniforms.reflectivity.value = material.reflectivity; + + if ( _this.gammaInput ) { + + //uniforms.reflectivity.value = material.reflectivity * material.reflectivity; + uniforms.reflectivity.value = material.reflectivity; + + } else { + + uniforms.reflectivity.value = material.reflectivity; + + } + uniforms.refractionRatio.value = material.refractionRatio; uniforms.combine.value = material.combine; uniforms.useRefract.value = material.envMap && material.envMap.mapping instanceof THREE.CubeRefractionMapping; @@ -2547,12 +2611,35 @@ THREE.WebGLRenderer = function ( parameters ) { function refreshUniformsPhong( uniforms, material ) { - uniforms.ambient.value = material.ambient; - uniforms.specular.value = material.specular; uniforms.shininess.value = material.shininess; + if ( _this.gammaInput ) { + + uniforms.ambient.value.copyGammaToLinear( material.ambient ); + uniforms.specular.value.copyGammaToLinear( material.specular ); + + } else { + + uniforms.ambient.value = material.ambient; + uniforms.specular.value = material.specular; + + } + }; + function refreshUniformsLambert( uniforms, material ) { + + if ( _this.gammaInput ) { + + uniforms.ambient.value.copyGammaToLinear( material.ambient ); + + } else { + + uniforms.ambient.value = material.ambient; + + } + + }; function refreshUniformsLights( uniforms, lights ) { @@ -2652,7 +2739,9 @@ THREE.WebGLRenderer = function ( parameters ) { shadowMapWidth: this.shadowMapWidth, shadowMapHeight: this.shadowMapHeight, maxShadows: maxShadows, - alphaTest: material.alphaTest + alphaTest: material.alphaTest, + metal: material.metal, + perPixel: material.perPixel }; @@ -2747,7 +2836,7 @@ THREE.WebGLRenderer = function ( parameters ) { p_uniforms = program.uniforms, m_uniforms = material.uniforms; - if ( program != _currentProgram ) { + if ( program !== _currentProgram ) { _gl.useProgram( program ); _currentProgram = program; @@ -2756,7 +2845,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - if ( material.id != _currentMaterialId ) { + if ( material.id !== _currentMaterialId ) { _currentMaterialId = material.id; refreshMaterial = true; @@ -2806,6 +2895,10 @@ THREE.WebGLRenderer = function ( parameters ) { refreshUniformsPhong( m_uniforms, material ); + } else if ( material instanceof THREE.MeshLambertMaterial ) { + + refreshUniformsLambert( m_uniforms, material ); + } else if ( material instanceof THREE.MeshDepthMaterial ) { m_uniforms.mNear.value = camera.near; @@ -2885,9 +2978,9 @@ THREE.WebGLRenderer = function ( parameters ) { function renderBuffer( camera, lights, fog, material, geometryGroup, object ) { - if ( material.opacity == 0 ) return; + if ( material.opacity === 0 ) return; - var program, attributes, linewidth, primitives, a, attribute; + var program, attributes, linewidth, primitives, a, attribute, i, il; program = setProgram( camera, lights, fog, material, object ); @@ -2897,7 +2990,7 @@ THREE.WebGLRenderer = function ( parameters ) { wireframeBit = material.wireframe ? 1 : 0, geometryGroupHash = ( geometryGroup.id * 0xffffff ) + ( program.id * 2 ) + wireframeBit; - if ( geometryGroupHash != _currentGeometryGroupHash ) { + if ( geometryGroupHash !== _currentGeometryGroupHash ) { _currentGeometryGroupHash = geometryGroupHash; updateBuffers = true; @@ -2932,16 +3025,16 @@ THREE.WebGLRenderer = function ( parameters ) { // Use the per-geometryGroup custom attribute arrays which are setup in initMeshBuffers - if ( geometryGroup.__webglCustomAttributes ) { + if ( geometryGroup.__webglCustomAttributesList ) { - for( a in geometryGroup.__webglCustomAttributes ) { + for ( i = 0, il = geometryGroup.__webglCustomAttributesList.length; i < il; i ++ ) { - if( attributes[ a ] >= 0 ) { + attribute = geometryGroup.__webglCustomAttributesList[ i ]; - attribute = geometryGroup.__webglCustomAttributes[ a ]; + if( attributes[ attribute.buffer.belongsToAttribute ] >= 0 ) { _gl.bindBuffer( _gl.ARRAY_BUFFER, attribute.buffer ); - _gl.vertexAttribPointer( attributes[ a ], attribute.size, _gl.FLOAT, false, 0, 0 ); + _gl.vertexAttribPointer( attributes[ attribute.buffer.belongsToAttribute ], attribute.size, _gl.FLOAT, false, 0, 0 ); } @@ -2950,29 +3043,6 @@ THREE.WebGLRenderer = function ( parameters ) { } - /* if ( material.attributes ) { - - for( a in material.attributes ) { - - if( attributes[ a ] !== undefined && attributes[ a ] >= 0 ) { - - attribute = material.attributes[ a ]; - - if( attribute.buffer ) { - - _gl.bindBuffer( _gl.ARRAY_BUFFER, attribute.buffer ); - _gl.vertexAttribPointer( attributes[ a ], attribute.size, _gl.FLOAT, false, 0, 0 ); - - } - - } - - } - - }*/ - - - // colors if ( attributes.color >= 0 ) { @@ -3086,7 +3156,7 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( object instanceof THREE.Line ) { - primitives = ( object.type == THREE.LineStrip ) ? _gl.LINE_STRIP : _gl.LINES; + primitives = ( object.type === THREE.LineStrip ) ? _gl.LINE_STRIP : _gl.LINES; _gl.lineWidth( material.linewidth ); _gl.drawArrays( primitives, 0, geometryGroup.__webglLineCount ); @@ -3222,7 +3292,7 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.bindBuffer( _gl.ARRAY_BUFFER, object.__webglNormalBuffer ); - if ( shading == THREE.FlatShading ) { + if ( shading === THREE.FlatShading ) { var nx, ny, nz, nax, nbx, ncx, nay, nby, ncy, naz, nbz, ncz, @@ -3279,7 +3349,7 @@ THREE.WebGLRenderer = function ( parameters ) { function setObjectFaces( object ) { - if ( _oldDoubleSided != object.doubleSided ) { + if ( _oldDoubleSided !== object.doubleSided ) { if( object.doubleSided ) { @@ -3295,7 +3365,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - if ( _oldFlipSided != object.flipSided ) { + if ( _oldFlipSided !== object.flipSided ) { if( object.flipSided ) { @@ -3315,7 +3385,7 @@ THREE.WebGLRenderer = function ( parameters ) { function setDepthTest( depthTest ) { - if ( _oldDepthTest != depthTest ) { + if ( _oldDepthTest !== depthTest ) { if( depthTest ) { @@ -3335,7 +3405,7 @@ THREE.WebGLRenderer = function ( parameters ) { function setDepthWrite( depthWrite ) { - if ( _oldDepthWrite != depthWrite ) { + if ( _oldDepthWrite !== depthWrite ) { _gl.depthMask( depthWrite ); _oldDepthWrite = depthWrite; @@ -3346,7 +3416,7 @@ THREE.WebGLRenderer = function ( parameters ) { function setPolygonOffset ( polygonoffset, factor, units ) { - if ( _oldPolygonOffset != polygonoffset ) { + if ( _oldPolygonOffset !== polygonoffset ) { if ( polygonoffset ) { @@ -3362,7 +3432,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - if ( polygonoffset && ( _oldPolygonOffsetFactor != factor || _oldPolygonOffsetUnits != units ) ) { + if ( polygonoffset && ( _oldPolygonOffsetFactor !== factor || _oldPolygonOffsetUnits !== units ) ) { _gl.polygonOffset( factor, units ); @@ -3416,53 +3486,72 @@ THREE.WebGLRenderer = function ( parameters ) { }; - function unrollImmediateBufferMaterials( globject ) { + function unrollImmediateBufferMaterial( globject ) { - var i, l, m, ml, material, - object = globject.object, - opaque = globject.opaque, - transparent = globject.transparent; + var object = globject.object, + material = object.material; - transparent.count = 0; - opaque.count = 0; + if ( material.transparent ) { - for ( m = 0, ml = object.materials.length; m < ml; m ++ ) { + globject.transparent = material; + globject.opaque = null; - material = object.materials[ m ]; - material.transparent ? addToFixedArray( transparent, material ) : addToFixedArray( opaque, material ); + } else { + + globject.opaque = material; + globject.transparent = null; } }; - function unrollBufferMaterials( globject ) { + function unrollBufferMaterial( globject ) { - var i, l, m, ml, material, meshMaterial, - object = globject.object, + var object = globject.object, buffer = globject.buffer, - opaque = globject.opaque, - transparent = globject.transparent; + material, materialIndex, meshMaterial; - transparent.count = 0; - opaque.count = 0; + meshMaterial = object.material; - for ( m = 0, ml = object.materials.length; m < ml; m ++ ) { + if ( meshMaterial instanceof THREE.MeshFaceMaterial ) { - meshMaterial = object.materials[ m ]; + materialIndex = buffer.materialIndex; - if ( meshMaterial instanceof THREE.MeshFaceMaterial ) { + if ( materialIndex >= 0 ) { - for ( i = 0, l = buffer.materials.length; i < l; i ++ ) { + material = object.geometry.materials[ materialIndex ]; - material = buffer.materials[ i ]; - if ( material ) material.transparent ? addToFixedArray( transparent, material ) : addToFixedArray( opaque, material ); + if ( material.transparent ) { + + globject.transparent = material; + globject.opaque = null; + + } else { + + globject.opaque = material; + globject.transparent = null; } - } else { + } - material = meshMaterial; - if ( material ) material.transparent ? addToFixedArray( transparent, material ) : addToFixedArray( opaque, material ); + } else { + + material = meshMaterial; + + if ( material ) { + + if ( material.transparent ) { + + globject.transparent = material; + globject.opaque = null; + + } else { + + globject.opaque = material; + globject.transparent = null; + + } } @@ -3484,13 +3573,9 @@ THREE.WebGLRenderer = function ( parameters ) { oil, material, o, ol, webglObject, object, - lights, + lights = scene.lights, fog = null; - _this.initWebGLObjects( scene ); - - lights = scene.__webglLights; - if ( ! _cameraLight ) { _cameraLight = new THREE.PerspectiveCamera( _this.shadowCameraFov, _this.shadowMapWidth / _this.shadowMapHeight, _this.shadowCameraNear, _this.shadowCameraFar ); @@ -3524,25 +3609,16 @@ THREE.WebGLRenderer = function ( parameters ) { _cameraLight.position.copy( light.position ); _cameraLight.lookAt( light.target.position ); - if ( _cameraLight.parent == null ) { + _cameraLight.update( undefined, true ); - console.warn( "Camera is not on the Scene. Adding it..." ); - scene.add( _cameraLight ); - - } - - scene.updateMatrixWorld(); - - _cameraLight.matrixWorldInverse.getInverse( _cameraLight.matrixWorld ); + scene.update( undefined, false, _cameraLight ); // compute shadow matrix - shadowMatrix.set( - 0.5, 0.0, 0.0, 0.5, - 0.0, 0.5, 0.0, 0.5, - 0.0, 0.0, 0.5, 0.5, - 0.0, 0.0, 0.0, 1.0 - ); + shadowMatrix.set( 0.5, 0.0, 0.0, 0.5, + 0.0, 0.5, 0.0, 0.5, + 0.0, 0.0, 0.5, 0.5, + 0.0, 0.0, 0.0, 1.0 ); shadowMatrix.multiplySelf( _cameraLight.projectionMatrix ); shadowMatrix.multiplySelf( _cameraLight.matrixWorldInverse ); @@ -3553,11 +3629,8 @@ THREE.WebGLRenderer = function ( parameters ) { _cameraLight.projectionMatrix.flattenToArray( _projectionMatrixArray ); _projScreenMatrix.multiply( _cameraLight.projectionMatrix, _cameraLight.matrixWorldInverse ); - computeFrustum( _projScreenMatrix ); - - setRenderTarget( shadowMap ); // using arbitrary clear color in depth pass @@ -3694,31 +3767,46 @@ THREE.WebGLRenderer = function ( parameters ) { }; + this.updateShadowMap = function ( scene, camera ) { + + renderShadowMap( scene, camera ); + + }; + this.render = function( scene, camera, renderTarget, forceClear ) { - var i, program, opaque, transparent, material, + var i, program, material, o, ol, oil, webglObject, object, buffer, - lights, + lights = scene.lights, fog = scene.fog; _currentMaterialId = -1; - if ( this.shadowMapEnabled ) renderShadowMap( scene, camera ); + if ( this.autoUpdateObjects ) this.initWebGLObjects( scene ); + + if ( this.shadowMapEnabled && this.shadowMapAutoUpdate ) renderShadowMap( scene, camera ); _this.info.render.calls = 0; _this.info.render.vertices = 0; _this.info.render.faces = 0; - if ( camera.parent == null ) { + // hack: find parent of camera. - console.warn( "Camera is not on the Scene. Adding it..." ); - scene.add( camera ); + if ( camera.matrixAutoUpdate ) { + + var parent = camera; + + while ( parent.parent ) { + + parent = parent.parent; + + } + + parent.update( undefined, true ); } - scene.updateMatrixWorld(); - - camera.matrixWorldInverse.getInverse( camera.matrixWorld ); + scene.update( undefined, false, camera ); camera.matrixWorldInverse.flattenToArray( _viewMatrixArray ); camera.projectionMatrix.flattenToArray( _projectionMatrixArray ); @@ -3726,10 +3814,6 @@ THREE.WebGLRenderer = function ( parameters ) { _projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse ); computeFrustum( _projScreenMatrix ); - this.initWebGLObjects( scene ); - - lights = scene.__webglLights; - setRenderTarget( renderTarget ); if ( this.autoClear || forceClear ) { @@ -3755,15 +3839,15 @@ THREE.WebGLRenderer = function ( parameters ) { setupMatrices( object, camera, true ); - unrollBufferMaterials( webglObject ); + unrollBufferMaterial( webglObject ); webglObject.render = true; if ( this.sortObjects ) { - if ( webglObject.object.renderDepth ) { + if ( object.renderDepth ) { - webglObject.z = webglObject.object.renderDepth; + webglObject.z = object.renderDepth; } else { @@ -3813,7 +3897,7 @@ THREE.WebGLRenderer = function ( parameters ) { setupMatrices( object, camera, true ); - unrollImmediateBufferMaterials( webglObject ); + unrollImmediateBufferMaterial( webglObject ); } @@ -3883,20 +3967,16 @@ THREE.WebGLRenderer = function ( parameters ) { object = webglObject.object; buffer = webglObject.buffer; - opaque = webglObject.opaque; + material = webglObject.opaque; + + if ( ! material ) continue; setObjectFaces( object ); - for ( i = 0; i < opaque.count; i ++ ) { - - material = opaque.list[ i ]; - - setDepthTest( material.depthTest ); - setDepthWrite( material.depthWrite ); - setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - renderBuffer( camera, lights, fog, material, buffer, object ); - - } + setDepthTest( material.depthTest ); + setDepthWrite( material.depthWrite ); + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + renderBuffer( camera, lights, fog, material, buffer, object ); } @@ -3904,7 +3984,7 @@ THREE.WebGLRenderer = function ( parameters ) { // opaque pass (immediate simulator) - for ( o = 0; o < oil; o++ ) { + for ( o = 0; o < oil; o ++ ) { webglObject = scene.__webglObjectsImmediate[ o ]; object = webglObject.object; @@ -3913,29 +3993,25 @@ THREE.WebGLRenderer = function ( parameters ) { _currentGeometryGroupHash = -1; - opaque = webglObject.opaque; + material = webglObject.opaque; + + if ( ! material ) continue; setObjectFaces( object ); - for( i = 0; i < opaque.count; i++ ) { + setDepthTest( material.depthTest ); + setDepthWrite( material.depthWrite ); + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - material = opaque.list[ i ]; + program = setProgram( camera, lights, fog, material, object ); - setDepthTest( material.depthTest ); - setDepthWrite( material.depthWrite ); - setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + if ( object.immediateRenderCallback ) { - program = setProgram( camera, lights, fog, material, object ); + object.immediateRenderCallback( program, _gl, _frustum ); - if ( object.immediateRenderCallback ) { + } else { - object.immediateRenderCallback( program, _gl, _frustum ); - - } else { - - object.render( function( object ) { renderBufferImmediate( object, program, material.shading ); } ); - - } + object.render( function( object ) { renderBufferImmediate( object, program, material.shading ); } ); } @@ -3954,22 +4030,18 @@ THREE.WebGLRenderer = function ( parameters ) { object = webglObject.object; buffer = webglObject.buffer; - transparent = webglObject.transparent; + material = webglObject.transparent; + + if ( ! material ) continue; setObjectFaces( object ); - for ( i = 0; i < transparent.count; i ++ ) { + setBlending( material.blending ); + setDepthTest( material.depthTest ); + setDepthWrite( material.depthWrite ); + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - material = transparent.list[ i ]; - - setBlending( material.blending ); - setDepthTest( material.depthTest ); - setDepthWrite( material.depthWrite ); - setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - - renderBuffer( camera, lights, fog, material, buffer, object ); - - } + renderBuffer( camera, lights, fog, material, buffer, object ); } @@ -3977,7 +4049,7 @@ THREE.WebGLRenderer = function ( parameters ) { // transparent pass (immediate simulator) - for ( o = 0; o < oil; o++ ) { + for ( o = 0; o < oil; o ++ ) { webglObject = scene.__webglObjectsImmediate[ o ]; object = webglObject.object; @@ -3986,30 +4058,26 @@ THREE.WebGLRenderer = function ( parameters ) { _currentGeometryGroupHash = -1; - transparent = webglObject.transparent; + material = webglObject.transparent; + + if ( ! material ) continue; setObjectFaces( object ); - for ( i = 0; i < transparent.count; i ++ ) { + setBlending( material.blending ); + setDepthTest( material.depthTest ); + setDepthWrite( material.depthWrite ); + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); - material = transparent.list[ i ]; + program = setProgram( camera, lights, fog, material, object ); - setBlending( material.blending ); - setDepthTest( material.depthTest ); - setDepthWrite( material.depthWrite ); - setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + if ( object.immediateRenderCallback ) { - program = setProgram( camera, lights, fog, material, object ); + object.immediateRenderCallback( program, _gl, _frustum ); - if ( object.immediateRenderCallback ) { + } else { - object.immediateRenderCallback( program, _gl, _frustum ); - - } else { - - object.render( function( object ) { renderBufferImmediate( object, program, material.shading ); } ); - - } + object.render( function( object ) { renderBufferImmediate( object, program, material.shading ); } ); } @@ -4094,7 +4162,7 @@ THREE.WebGLRenderer = function ( parameters ) { object = scene.__webglSprites[ o ]; - if ( !object.visible || object.opacity == 0 ) continue; + if ( !object.visible || object.opacity === 0 ) continue; if( !object.useScreenCoordinates ) { @@ -4117,7 +4185,7 @@ THREE.WebGLRenderer = function ( parameters ) { object = scene.__webglSprites[ o ]; - if ( !object.visible || object.opacity == 0 ) continue; + if ( !object.visible || object.opacity === 0 ) continue; if ( object.map && object.map.image && object.map.image.width ) { @@ -4200,16 +4268,9 @@ THREE.WebGLRenderer = function ( parameters ) { scene.__webglObjects = []; scene.__webglObjectsImmediate = []; scene.__webglSprites = []; - scene.__webglLights = []; } - THREE.SceneUtils.traverseHierarchy( scene, function ( node ) { - - addObject( node, scene ); - - } ); -/* while ( scene.__objectsAdded.length ) { addObject( scene.__objectsAdded[ 0 ], scene ); @@ -4223,12 +4284,12 @@ THREE.WebGLRenderer = function ( parameters ) { scene.__objectsRemoved.splice( 0, 1 ); } -*/ + // update must be called after objects adding / removal for ( var o = 0, ol = scene.__webglObjects.length; o < ol; o ++ ) { - updateObject( scene.__webglObjects[ o ].object, scene ); + updateObject( scene.__webglObjects[ o ].object ); } @@ -4254,7 +4315,7 @@ THREE.WebGLRenderer = function ( parameters ) { geometry = object.geometry; - if ( geometry.geometryGroups == undefined ) { + if ( geometry.geometryGroups === undefined ) { sortFacesByMaterial( geometry ); @@ -4360,10 +4421,6 @@ THREE.WebGLRenderer = function ( parameters ) { scene.__webglSprites.push( object ); - } else if ( object instanceof THREE.Light ) { - - scene.__webglLights.push( object ); - } object.__webglActive = true; @@ -4372,25 +4429,11 @@ THREE.WebGLRenderer = function ( parameters ) { }; - function areCustomAttributesDirty( geometryGroup ) { + function areCustomAttributesDirty( material ) { - var a, m, ml, material, materials; + for ( var a in material.attributes ) { - materials = geometryGroup.__materials; - - for ( m = 0, ml = materials.length; m < ml; m ++ ) { - - material = materials[ m ]; - - if ( material.attributes ) { - - for ( a in material.attributes ) { - - if ( material.attributes[ a ].needsUpdate ) return true; - - } - - } + if ( material.attributes[ a ].needsUpdate ) return true; } @@ -4398,49 +4441,36 @@ THREE.WebGLRenderer = function ( parameters ) { }; - function clearCustomAttributes( geometryGroup ) { + function clearCustomAttributes( material ) { - var a, m, ml, material, materials; + for ( var a in material.attributes ) { - materials = geometryGroup.__materials; - - for ( m = 0, ml = materials.length; m < ml; m ++ ) { - - material = materials[ m ]; - - if ( material.attributes ) { - - for ( a in material.attributes ) { - - material.attributes[ a ].needsUpdate = false; - - } - - } + material.attributes[ a ].needsUpdate = false; } }; - function updateObject( object, scene ) { + function updateObject( object ) { - var g, geometry, geometryGroup, a, customAttributeDirty; + var geometry = object.geometry, + geometryGroup, customAttributesDirty, material; if ( object instanceof THREE.Mesh ) { - geometry = object.geometry; - // check all geometry groups for( var i = 0, il = geometry.geometryGroupsList.length; i < il; i ++ ) { geometryGroup = geometry.geometryGroupsList[ i ]; - customAttributeDirty = areCustomAttributesDirty( geometryGroup ); + material = getBufferMaterial( object, geometryGroup ); + + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); if ( geometry.__dirtyVertices || geometry.__dirtyMorphTargets || geometry.__dirtyElements || geometry.__dirtyUvs || geometry.__dirtyNormals || - geometry.__dirtyColors || geometry.__dirtyTangents || customAttributeDirty ) { + geometry.__dirtyColors || geometry.__dirtyTangents || customAttributesDirty ) { setMeshBuffers( geometryGroup, object, _gl.DYNAMIC_DRAW, !geometry.dynamic ); @@ -4453,16 +4483,14 @@ THREE.WebGLRenderer = function ( parameters ) { geometry.__dirtyElements = false; geometry.__dirtyUvs = false; geometry.__dirtyNormals = false; - geometry.__dirtyTangents = false; geometry.__dirtyColors = false; + geometry.__dirtyTangents = false; - clearCustomAttributes( geometryGroup ); + material.attributes && clearCustomAttributes( material ); } else if ( object instanceof THREE.Ribbon ) { - geometry = object.geometry; - - if( geometry.__dirtyVertices || geometry.__dirtyColors ) { + if ( geometry.__dirtyVertices || geometry.__dirtyColors ) { setRibbonBuffers( geometry, _gl.DYNAMIC_DRAW ); @@ -4473,9 +4501,7 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( object instanceof THREE.Line ) { - geometry = object.geometry; - - if( geometry.__dirtyVertices || geometry.__dirtyColors ) { + if ( geometry.__dirtyVertices || geometry.__dirtyColors ) { setLineBuffers( geometry, _gl.DYNAMIC_DRAW ); @@ -4486,11 +4512,11 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( object instanceof THREE.ParticleSystem ) { - geometry = object.geometry; + material = getBufferMaterial( object, geometryGroup ); - customAttributeDirty = areCustomAttributesDirty( geometry ); + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); - if ( geometry.__dirtyVertices || geometry.__dirtyColors || object.sortParticles || customAttributeDirty ) { + if ( geometry.__dirtyVertices || geometry.__dirtyColors || object.sortParticles || customAttributesDirty ) { setParticleBuffers( geometry, _gl.DYNAMIC_DRAW, object ); @@ -4499,30 +4525,17 @@ THREE.WebGLRenderer = function ( parameters ) { geometry.__dirtyVertices = false; geometry.__dirtyColors = false; - clearCustomAttributes( geometry ); - - }/* else if ( THREE.MarchingCubes !== undefined && object instanceof THREE.MarchingCubes ) { - - // it updates itself in render callback + material.attributes && clearCustomAttributes( material ); } - */ - - /* - delete geometry.vertices; - delete geometry.faces; - delete geometryGroup.faces; - */ }; function removeInstances( objlist, object ) { - var o, ol; + for ( var o = objlist.length - 1; o >= 0; o -- ) { - for ( o = objlist.length - 1; o >= 0; o -- ) { - - if ( objlist[ o ].object == object ) { + if ( objlist[ o ].object === object ) { objlist.splice( o, 1 ); @@ -4534,11 +4547,9 @@ THREE.WebGLRenderer = function ( parameters ) { function removeInstancesDirect( objlist, object ) { - var o, ol; + for ( var o = objlist.length - 1; o >= 0; o -- ) { - for ( o = objlist.length - 1; o >= 0; o -- ) { - - if ( objlist[ o ] == object ) { + if ( objlist[ o ] === object ) { objlist.splice( o, 1 ); @@ -4573,76 +4584,52 @@ THREE.WebGLRenderer = function ( parameters ) { function sortFacesByMaterial( geometry ) { - // TODO - // Should optimize by grouping faces with ColorFill / ColorStroke materials - // which could then use vertex color attributes instead of each being - // in its separate VBO + var f, fl, face, materialIndex, vertices, + materialHash, groupHash, + hash_map = {}; - var i, l, f, fl, face, material, materials, vertices, mhash, ghash, hash_map = {}; - var numMorphTargets = geometry.morphTargets !== undefined ? geometry.morphTargets.length : 0; + var numMorphTargets = geometry.morphTargets.length; geometry.geometryGroups = {}; - function materialHash( material ) { - - var hash_array = []; - - for ( i = 0, l = material.length; i < l; i ++ ) { - - if ( material[ i ] == undefined ) { - - hash_array.push( "undefined" ); - - } else { - - hash_array.push( material[ i ].id ); - - } - - } - - return hash_array.join( '_' ); - - } - for ( f = 0, fl = geometry.faces.length; f < fl; f ++ ) { face = geometry.faces[ f ]; - materials = face.materials; + materialIndex = face.materialIndex; - mhash = materialHash( materials ); + materialHash = ( materialIndex !== undefined ) ? materialIndex : -1; - if ( hash_map[ mhash ] == undefined ) { + if ( hash_map[ materialHash ] === undefined ) { - hash_map[ mhash ] = { 'hash': mhash, 'counter': 0 }; + hash_map[ materialHash ] = { 'hash': materialHash, 'counter': 0 }; } - ghash = hash_map[ mhash ].hash + '_' + hash_map[ mhash ].counter; + groupHash = hash_map[ materialHash ].hash + '_' + hash_map[ materialHash ].counter; - if ( geometry.geometryGroups[ ghash ] == undefined ) { + if ( geometry.geometryGroups[ groupHash ] === undefined ) { - geometry.geometryGroups[ ghash ] = { 'faces': [], 'materials': materials, 'vertices': 0, 'numMorphTargets': numMorphTargets }; + geometry.geometryGroups[ groupHash ] = { 'faces': [], 'materialIndex': materialIndex, 'vertices': 0, 'numMorphTargets': numMorphTargets }; } vertices = face instanceof THREE.Face3 ? 3 : 4; - if ( geometry.geometryGroups[ ghash ].vertices + vertices > 65535 ) { + if ( geometry.geometryGroups[ groupHash ].vertices + vertices > 65535 ) { - hash_map[ mhash ].counter += 1; - ghash = hash_map[ mhash ].hash + '_' + hash_map[ mhash ].counter; + hash_map[ materialHash ].counter += 1; + groupHash = hash_map[ materialHash ].hash + '_' + hash_map[ materialHash ].counter; - if ( geometry.geometryGroups[ ghash ] == undefined ) { + if ( geometry.geometryGroups[ groupHash ] === undefined ) { - geometry.geometryGroups[ ghash ] = { 'faces': [], 'materials': materials, 'vertices': 0, 'numMorphTargets': numMorphTargets }; + geometry.geometryGroups[ groupHash ] = { 'faces': [], 'materialIndex': materialIndex, 'vertices': 0, 'numMorphTargets': numMorphTargets }; } } - geometry.geometryGroups[ ghash ].faces.push( f ); - geometry.geometryGroups[ ghash ].vertices += vertices; + geometry.geometryGroups[ groupHash ].faces.push( f ); + geometry.geometryGroups[ groupHash ].vertices += vertices; } @@ -4660,21 +4647,26 @@ THREE.WebGLRenderer = function ( parameters ) { function addBuffer( objlist, buffer, object ) { - objlist.push( { - buffer: buffer, object: object, - opaque: { list: [], count: 0 }, - transparent: { list: [], count: 0 } - } ); + objlist.push( + { + buffer: buffer, + object: object, + opaque: null, + transparent: null + } + ); }; function addBufferImmediate( objlist, object ) { - objlist.push( { - object: object, - opaque: { list: [], count: 0 }, - transparent: { list: [], count: 0 } - } ); + objlist.push( + { + object: object, + opaque: null, + transparent: null + } + ); }; @@ -4682,7 +4674,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( cullFace ) { - if ( !frontFace || frontFace == "ccw" ) { + if ( !frontFace || frontFace === "ccw" ) { _gl.frontFace( _gl.CCW ); @@ -4692,11 +4684,11 @@ THREE.WebGLRenderer = function ( parameters ) { } - if( cullFace == "back" ) { + if( cullFace === "back" ) { _gl.cullFace( _gl.BACK ); - } else if( cullFace == "front" ) { + } else if( cullFace === "front" ) { _gl.cullFace( _gl.FRONT ); @@ -4759,7 +4751,7 @@ THREE.WebGLRenderer = function ( parameters ) { for ( p = 0, pl = _programs.length; p < pl; p ++ ) { - if ( _programs[ p ].code == code ) { + if ( _programs[ p ].code === code ) { // console.log( "Code already compiled." /*: \n\n" + code*/ ); @@ -4779,6 +4771,10 @@ THREE.WebGLRenderer = function ( parameters ) { _supportsVertexTextures ? "#define VERTEX_TEXTURES" : "", + _this.gammaInput ? "#define GAMMA_INPUT" : "", + _this.gammaOutput ? "#define GAMMA_OUTPUT" : "", + _this.physicallyBasedShading ? "#define PHYSICALLY_BASED_SHADING" : "", + "#define MAX_DIR_LIGHTS " + parameters.maxDirLights, "#define MAX_POINT_LIGHTS " + parameters.maxPointLights, @@ -4857,6 +4853,10 @@ THREE.WebGLRenderer = function ( parameters ) { parameters.alphaTest ? "#define ALPHATEST " + parameters.alphaTest: "", + _this.gammaInput ? "#define GAMMA_INPUT" : "", + _this.gammaOutput ? "#define GAMMA_OUTPUT" : "", + _this.physicallyBasedShading ? "#define PHYSICALLY_BASED_SHADING" : "", + ( parameters.useFog && parameters.fog ) ? "#define USE_FOG" : "", ( parameters.useFog && parameters.fog instanceof THREE.FogExp2 ) ? "#define FOG_EXP2" : "", @@ -4865,6 +4865,9 @@ THREE.WebGLRenderer = function ( parameters ) { parameters.lightMap ? "#define USE_LIGHTMAP" : "", parameters.vertexColors ? "#define USE_COLOR" : "", + parameters.metal ? "#define METAL" : "", + parameters.perPixel ? "#define PHONG_PER_PIXEL" : "", + parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "", parameters.shadowMapSoft ? "#define SHADOWMAP_SOFT" : "", parameters.shadowMapSoft ? "#define SHADOWMAP_WIDTH " + parameters.shadowMapWidth.toFixed( 1 ) : "", @@ -4981,55 +4984,55 @@ THREE.WebGLRenderer = function ( parameters ) { // single integer - if( type == "i" ) { + if( type === "i" ) { _gl.uniform1i( location, value ); // single float - } else if( type == "f" ) { + } else if( type === "f" ) { _gl.uniform1f( location, value ); // single THREE.Vector2 - } else if( type == "v2" ) { + } else if( type === "v2" ) { _gl.uniform2f( location, value.x, value.y ); // single THREE.Vector3 - } else if( type == "v3" ) { + } else if( type === "v3" ) { _gl.uniform3f( location, value.x, value.y, value.z ); // single THREE.Vector4 - } else if( type == "v4" ) { + } else if( type === "v4" ) { _gl.uniform4f( location, value.x, value.y, value.z, value.w ); // single THREE.Color - } else if( type == "c" ) { + } else if( type === "c" ) { _gl.uniform3f( location, value.r, value.g, value.b ); // flat array of floats (JS or typed array) - } else if( type == "fv1" ) { + } else if( type === "fv1" ) { _gl.uniform1fv( location, value ); // flat array of floats with 3 x N size (JS or typed array) - } else if( type == "fv" ) { + } else if( type === "fv" ) { _gl.uniform3fv( location, value ); // array of THREE.Vector3 - } else if( type == "v3v" ) { + } else if( type === "v3v" ) { if ( ! uniform._array ) { @@ -5051,7 +5054,7 @@ THREE.WebGLRenderer = function ( parameters ) { // single THREE.Matrix4 - } else if( type == "m4" ) { + } else if( type === "m4" ) { if ( ! uniform._array ) { @@ -5064,7 +5067,7 @@ THREE.WebGLRenderer = function ( parameters ) { // array of THREE.Matrix4 - } else if( type == "m4v" ) { + } else if( type === "m4v" ) { if ( ! uniform._array ) { @@ -5083,7 +5086,7 @@ THREE.WebGLRenderer = function ( parameters ) { // single THREE.Texture (2d or cube) - } else if( type == "t" ) { + } else if( type === "t" ) { _gl.uniform1i( location, value ); @@ -5091,7 +5094,7 @@ THREE.WebGLRenderer = function ( parameters ) { if ( !texture ) continue; - if ( texture.image instanceof Array && texture.image.length == 6 ) { + if ( texture.image instanceof Array && texture.image.length === 6 ) { setCubeTexture( texture, value ); @@ -5107,7 +5110,7 @@ THREE.WebGLRenderer = function ( parameters ) { // array of THREE.Texture (2d) - } else if( type == "tv" ) { + } else if( type === "tv" ) { if ( ! uniform._array ) { @@ -5141,7 +5144,7 @@ THREE.WebGLRenderer = function ( parameters ) { function setBlending( blending ) { - if ( blending != _oldBlending ) { + if ( blending !== _oldBlending ) { switch ( blending ) { @@ -5225,7 +5228,7 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.activeTexture( _gl.TEXTURE0 + slot ); _gl.bindTexture( _gl.TEXTURE_2D, texture.__webglTexture ); - if ( texture instanceof THREE.DataTexture) { + if ( texture instanceof THREE.DataTexture ) { _gl.texImage2D( _gl.TEXTURE_2D, 0, paramThreeToGL( texture.format ), texture.image.width, texture.image.height, 0, paramThreeToGL( texture.format ), _gl.UNSIGNED_BYTE, texture.image.data ); @@ -5250,7 +5253,7 @@ THREE.WebGLRenderer = function ( parameters ) { function setCubeTexture( texture, slot ) { - if ( texture.image.length == 6 ) { + if ( texture.image.length === 6 ) { if ( texture.needsUpdate ) { @@ -5427,7 +5430,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - if ( framebuffer != _currentFramebuffer ) { + if ( framebuffer !== _currentFramebuffer ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); _gl.viewport( vx, vy, width, height ); @@ -5486,11 +5489,11 @@ THREE.WebGLRenderer = function ( parameters ) { var shader; - if ( type == "fragment" ) { + if ( type === "fragment" ) { shader = _gl.createShader( _gl.FRAGMENT_SHADER ); - } else if ( type == "vertex" ) { + } else if ( type === "vertex" ) { shader = _gl.createShader( _gl.VERTEX_SHADER ); @@ -5570,113 +5573,21 @@ THREE.WebGLRenderer = function ( parameters ) { function isPowerOfTwo( value ) { - return ( value & ( value - 1 ) ) == 0; + return ( value & ( value - 1 ) ) === 0; }; function materialNeedsSmoothNormals( material ) { - return material && material.shading != undefined && material.shading == THREE.SmoothShading; + return material && material.shading !== undefined && material.shading === THREE.SmoothShading; }; - function bufferNeedsSmoothNormals( geometryGroup, object ) { + function bufferGuessVertexColorType( material ) { - var m, ml, i, l, meshMaterial, needsSmoothNormals = false; + if ( material.vertexColors ) { - for ( m = 0, ml = object.materials.length; m < ml; m++ ) { - - meshMaterial = object.materials[ m ]; - - if ( meshMaterial instanceof THREE.MeshFaceMaterial ) { - - for ( i = 0, l = geometryGroup.materials.length; i < l; i++ ) { - - if ( materialNeedsSmoothNormals( geometryGroup.materials[ i ] ) ) { - - needsSmoothNormals = true; - break; - - } - - } - - } else { - - if ( materialNeedsSmoothNormals( meshMaterial ) ) { - - needsSmoothNormals = true; - break; - - } - - } - - if ( needsSmoothNormals ) break; - - } - - return needsSmoothNormals; - - }; - - function unrollGroupMaterials( geometryGroup, object ) { - - var m, ml, i, il, - material, meshMaterial, - materials = []; - - for ( m = 0, ml = object.materials.length; m < ml; m ++ ) { - - meshMaterial = object.materials[ m ]; - - if ( meshMaterial instanceof THREE.MeshFaceMaterial ) { - - for ( i = 0, l = geometryGroup.materials.length; i < l; i ++ ) { - - material = geometryGroup.materials[ i ]; - - if ( material ) { - - materials.push( material ); - - } - - } - - } else { - - material = meshMaterial; - - if ( material ) { - - materials.push( material ); - - } - - } - - } - - return materials; - - }; - - function bufferGuessVertexColorType( materials, geometryGroup, object ) { - - var i, m, ml = materials.length; - - // use vertexColor type from the first material in unrolled materials - - for ( i = 0; i < ml; i ++ ) { - - m = materials[ i ]; - - if ( m.vertexColors ) { - - return m.vertexColors; - - } + return material.vertexColors; } @@ -5684,49 +5595,35 @@ THREE.WebGLRenderer = function ( parameters ) { }; - function bufferGuessNormalType( materials, geometryGroup, object ) { - - var i, m, ml = materials.length; + function bufferGuessNormalType( material ) { // only MeshBasicMaterial and MeshDepthMaterial don't need normals - for ( i = 0; i < ml; i ++ ) { + if ( ( material instanceof THREE.MeshBasicMaterial && !material.envMap ) || material instanceof THREE.MeshDepthMaterial ) { - m = materials[ i ]; - - if ( ( m instanceof THREE.MeshBasicMaterial && !m.envMap ) || m instanceof THREE.MeshDepthMaterial ) continue; - - if ( materialNeedsSmoothNormals( m ) ) { - - return THREE.SmoothShading; - - } else { - - return THREE.FlatShading; - - } + return false; } - return false; + if ( materialNeedsSmoothNormals( material ) ) { + + return THREE.SmoothShading; + + } else { + + return THREE.FlatShading; + + } }; - function bufferGuessUVType( materials, geometryGroup, object ) { - - var i, m, ml = materials.length; + function bufferGuessUVType( material ) { // material must use some texture to require uvs - for ( i = 0; i < ml; i ++ ) { + if ( material.map || material.lightMap || material instanceof THREE.ShaderMaterial ) { - m = materials[ i ]; - - if ( m.map || m.lightMap || m instanceof THREE.ShaderMaterial ) { - - return true; - - } + return true; } diff --git a/src/renderers/WebGLShaders.js b/src/renderers/WebGLShaders.js index 0d35f1ae..549eb502 100644 --- a/src/renderers/WebGLShaders.js +++ b/src/renderers/WebGLShaders.js @@ -76,6 +76,12 @@ THREE.ShaderChunk = { "vec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * vReflect.x, vReflect.yz ) );", + "#ifdef GAMMA_INPUT", + + "cubeColor.xyz *= cubeColor.xyz;", + + "#endif", + "if ( combine == 1 ) {", "gl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity );", @@ -185,7 +191,18 @@ THREE.ShaderChunk = { "#ifdef USE_MAP", - "gl_FragColor = gl_FragColor * texture2D( map, vUv );", + "#ifdef GAMMA_INPUT", + + "vec4 texelColor = texture2D( map, vUv );", + "texelColor.xyz *= texelColor.xyz;", + + "gl_FragColor = gl_FragColor * texelColor;", + + "#else", + + "gl_FragColor = gl_FragColor * texture2D( map, vUv );", + + "#endif", "#endif" @@ -236,7 +253,10 @@ THREE.ShaderChunk = { // LIGHTS LAMBERT - lights_pars_vertex: [ + lights_lambert_pars_vertex: [ + + "uniform vec3 ambient;", + "uniform vec3 diffuse;", "uniform bool enableLighting;", "uniform vec3 ambientLightColor;", @@ -258,7 +278,7 @@ THREE.ShaderChunk = { ].join("\n"), - lights_vertex: [ + lights_lambert_vertex: [ "if ( !enableLighting ) {", @@ -266,7 +286,7 @@ THREE.ShaderChunk = { "} else {", - "vLightWeighting = ambientLightColor;", + "vLightWeighting = vec3( 0.0 );", "#if MAX_DIR_LIGHTS > 0", @@ -302,6 +322,8 @@ THREE.ShaderChunk = { "#endif", + "vLightWeighting = vLightWeighting * diffuse + ambient * ambientLightColor;", + "}" ].join("\n"), @@ -311,12 +333,14 @@ THREE.ShaderChunk = { lights_phong_pars_vertex: [ "#if MAX_POINT_LIGHTS > 0", + "#ifndef PHONG_PER_PIXEL", "uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];", "uniform float pointLightDistance[ MAX_POINT_LIGHTS ];", "varying vec4 vPointLight[ MAX_POINT_LIGHTS ];", + "#endif", "#endif" ].join("\n"), @@ -325,6 +349,7 @@ THREE.ShaderChunk = { lights_phong_vertex: [ "#if MAX_POINT_LIGHTS > 0", + "#ifndef PHONG_PER_PIXEL", "for( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {", @@ -344,10 +369,11 @@ THREE.ShaderChunk = { "}", "#endif", + "#endif" ].join("\n"), - lights_pars_fragment: [ + lights_phong_pars_fragment: [ "uniform vec3 ambientLightColor;", @@ -361,7 +387,17 @@ THREE.ShaderChunk = { "#if MAX_POINT_LIGHTS > 0", "uniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];", - "varying vec4 vPointLight[ MAX_POINT_LIGHTS ];", + + "#ifdef PHONG_PER_PIXEL", + + "uniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];", + "uniform float pointLightDistance[ MAX_POINT_LIGHTS ];", + + "#else", + + "varying vec4 vPointLight[ MAX_POINT_LIGHTS ];", + + "#endif", "#endif", @@ -370,7 +406,7 @@ THREE.ShaderChunk = { ].join("\n"), - lights_fragment: [ + lights_phong_fragment: [ "vec3 normal = normalize( vNormal );", "vec3 viewPosition = normalize( vViewPosition );", @@ -382,17 +418,46 @@ THREE.ShaderChunk = { "for ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {", - "vec3 pointVector = normalize( vPointLight[ i ].xyz );", - "vec3 pointHalfVector = normalize( vPointLight[ i ].xyz + viewPosition );", - "float pointDistance = vPointLight[ i ].w;", + "#ifdef PHONG_PER_PIXEL", + + "vec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );", + + "vec3 lVector = lPosition.xyz + vViewPosition.xyz;", + + "float lDistance = 1.0;", + + "if ( pointLightDistance[ i ] > 0.0 )", + "lDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );", + + "lVector = normalize( lVector );", + + "#else", + + "vec3 lVector = normalize( vPointLight[ i ].xyz );", + "float lDistance = vPointLight[ i ].w;", + + "#endif", + + "vec3 pointHalfVector = normalize( lVector + viewPosition );", + "float pointDistance = lDistance;", "float pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );", - "float pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );", + "float pointDiffuseWeight = max( dot( normal, lVector ), 0.0 );", "float pointSpecularWeight = pow( pointDotNormalHalf, shininess );", + "#ifdef PHYSICALLY_BASED_SHADING", + + "vec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( lVector, pointHalfVector ), 5.0 );", + "pointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;", + + "#else", + + "pointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;", + + "#endif", + "pointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * pointDistance;", - "pointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance;", "}", @@ -415,8 +480,42 @@ THREE.ShaderChunk = { "float dirSpecularWeight = pow( dirDotNormalHalf, shininess );", + "#ifdef PHYSICALLY_BASED_SHADING", + + /* + // fresnel term from skin shader + "const float F0 = 0.128;", + + "float base = 1.0 - dot( viewPosition, dirHalfVector );", + "float exponential = pow( base, 5.0 );", + + "float fresnel = exponential + F0 * ( 1.0 - exponential );", + */ + + /* + // fresnel term from fresnel shader + "const float mFresnelBias = 0.08;", + "const float mFresnelScale = 0.3;", + "const float mFresnelPower = 5.0;", + + "float fresnel = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( -viewPosition ), normal ), mFresnelPower );", + */ + + // normalization factor + //float specularNormalization = ( shininess + 2.0 ) / 8.0; + + //"dirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization * fresnel;", + + "vec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( dirVector, dirHalfVector ), 5.0 );", + "dirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;", + + "#else", + + "dirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;", + + "#endif", + "dirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;", - "dirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;", "}", @@ -439,7 +538,15 @@ THREE.ShaderChunk = { "#endif", - "gl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;" + "#ifdef METAL", + + "gl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );", + + "#else", + + "gl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;", + + "#endif", ].join("\n"), @@ -481,7 +588,15 @@ THREE.ShaderChunk = { "#ifdef USE_COLOR", - "vColor = color;", + "#ifdef GAMMA_INPUT", + + "vColor = color * color;", + + "#else", + + "vColor = color;", + + "#endif", "#endif" @@ -600,7 +715,7 @@ THREE.ShaderChunk = { "#endif", - "vec4 shadowColor = vec4( 1.0 );", + "vec3 shadowColor = vec3( 1.0 );", "for( int i = 0; i < MAX_SHADOWS; i ++ ) {", @@ -633,8 +748,7 @@ THREE.ShaderChunk = { "}", "shadow /= 9.0;", - - "shadowColor = shadowColor * vec4( vec3( ( 1.0 - shadowDarkness * shadow ) ), 1.0 );", + "shadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness * shadow ) );", "#else", @@ -645,11 +759,11 @@ THREE.ShaderChunk = { // spot with multiple shadows is darker - "shadowColor = shadowColor * vec4( vec3( shadowDarkness ), 1.0 );", + "shadowColor = shadowColor * vec3( shadowDarkness );", // spot with multiple shadows has the same color as single shadow spot - //"shadowColor = min( shadowColor, vec4( vec3( shadowDarkness ), 1.0 ) );", + //"shadowColor = min( shadowColor, vec3( shadowDarkness ) );", "#endif", @@ -658,11 +772,17 @@ THREE.ShaderChunk = { // uncomment to see light frustum boundaries //"if ( !( shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0 ) )", - // "gl_FragColor = gl_FragColor * vec4( 1.0, 0.0, 0.0, 1.0 );", + // "gl_FragColor.xyz = gl_FragColor.xyz * vec3( 1.0, 0.0, 0.0 );", "}", - "gl_FragColor = gl_FragColor * shadowColor;", + "#ifdef GAMMA_OUTPUT", + + "shadowColor *= shadowColor;", + + "#endif", + + "gl_FragColor.xyz = gl_FragColor.xyz * shadowColor;", "#endif" @@ -703,7 +823,20 @@ THREE.ShaderChunk = { "#endif" - ].join("\n") + ].join("\n"), + + // LINEAR SPACE + + linear_to_gamma_fragment: [ + + "#ifdef GAMMA_OUTPUT", + + "gl_FragColor.xyz = sqrt( gl_FragColor.xyz );", + + "#endif" + + ].join("\n"), + }; @@ -1050,6 +1183,9 @@ THREE.ShaderLib = { THREE.ShaderChunk[ "color_fragment" ], THREE.ShaderChunk[ "envmap_fragment" ], THREE.ShaderChunk[ "shadowmap_fragment" ], + + THREE.ShaderChunk[ "linear_to_gamma_fragment" ], + THREE.ShaderChunk[ "fog_fragment" ], "}" @@ -1065,7 +1201,11 @@ THREE.ShaderLib = { THREE.UniformsLib[ "common" ], THREE.UniformsLib[ "fog" ], THREE.UniformsLib[ "lights" ], - THREE.UniformsLib[ "shadowmap" ] + THREE.UniformsLib[ "shadowmap" ], + + { + "ambient" : { type: "c", value: new THREE.Color( 0x050505 ) } + } ] ), @@ -1076,7 +1216,7 @@ THREE.ShaderLib = { THREE.ShaderChunk[ "map_pars_vertex" ], THREE.ShaderChunk[ "lightmap_pars_vertex" ], THREE.ShaderChunk[ "envmap_pars_vertex" ], - THREE.ShaderChunk[ "lights_pars_vertex" ], + THREE.ShaderChunk[ "lights_lambert_pars_vertex" ], THREE.ShaderChunk[ "color_pars_vertex" ], THREE.ShaderChunk[ "skinning_pars_vertex" ], THREE.ShaderChunk[ "morphtarget_pars_vertex" ], @@ -1093,7 +1233,7 @@ THREE.ShaderLib = { "vec3 transformedNormal = normalize( normalMatrix * normal );", - THREE.ShaderChunk[ "lights_vertex" ], + THREE.ShaderChunk[ "lights_lambert_vertex" ], THREE.ShaderChunk[ "skinning_vertex" ], THREE.ShaderChunk[ "morphtarget_vertex" ], THREE.ShaderChunk[ "default_vertex" ], @@ -1106,7 +1246,6 @@ THREE.ShaderLib = { fragmentShader: [ - "uniform vec3 diffuse;", "uniform float opacity;", "varying vec3 vLightWeighting;", @@ -1120,17 +1259,20 @@ THREE.ShaderLib = { "void main() {", - "gl_FragColor = vec4( diffuse, opacity );", + "gl_FragColor = vec4( vec3 ( 1.0 ), opacity );", THREE.ShaderChunk[ "map_fragment" ], THREE.ShaderChunk[ "alphatest_fragment" ], - "gl_FragColor = gl_FragColor * vec4( vLightWeighting, 1.0 );", + "gl_FragColor.xyz = gl_FragColor.xyz * vLightWeighting;", THREE.ShaderChunk[ "lightmap_fragment" ], THREE.ShaderChunk[ "color_fragment" ], THREE.ShaderChunk[ "envmap_fragment" ], THREE.ShaderChunk[ "shadowmap_fragment" ], + + THREE.ShaderChunk[ "linear_to_gamma_fragment" ], + THREE.ShaderChunk[ "fog_fragment" ], "}" @@ -1187,7 +1329,7 @@ THREE.ShaderLib = { "vViewPosition = -mvPosition.xyz;", - "vec3 transformedNormal = normalize( normalMatrix * normal );", + "vec3 transformedNormal = normalMatrix * normal;", "vNormal = transformedNormal;", THREE.ShaderChunk[ "lights_phong_vertex" ], @@ -1214,7 +1356,7 @@ THREE.ShaderLib = { THREE.ShaderChunk[ "lightmap_pars_fragment" ], THREE.ShaderChunk[ "envmap_pars_fragment" ], THREE.ShaderChunk[ "fog_pars_fragment" ], - THREE.ShaderChunk[ "lights_pars_fragment" ], + THREE.ShaderChunk[ "lights_phong_pars_fragment" ], THREE.ShaderChunk[ "shadowmap_pars_fragment" ], "void main() {", @@ -1224,12 +1366,15 @@ THREE.ShaderLib = { THREE.ShaderChunk[ "map_fragment" ], THREE.ShaderChunk[ "alphatest_fragment" ], - THREE.ShaderChunk[ "lights_fragment" ], + THREE.ShaderChunk[ "lights_phong_fragment" ], THREE.ShaderChunk[ "lightmap_fragment" ], THREE.ShaderChunk[ "color_fragment" ], THREE.ShaderChunk[ "envmap_fragment" ], THREE.ShaderChunk[ "shadowmap_fragment" ], + + THREE.ShaderChunk[ "linear_to_gamma_fragment" ], + THREE.ShaderChunk[ "fog_fragment" ], "}" diff --git a/utils/build.py b/utils/build.py index 432906a7..fa182166 100644 --- a/utils/build.py +++ b/utils/build.py @@ -13,12 +13,14 @@ import sys COMMON_FILES = [ 'Three.js', +'core/Clock.js', 'core/Color.js', 'core/Vector2.js', 'core/Vector3.js', 'core/Vector4.js', 'core/Ray.js', 'core/Rectangle.js', +'core/Math.js', 'core/Matrix3.js', 'core/Matrix4.js', 'core/Object3D.js', @@ -60,6 +62,7 @@ COMMON_FILES = [ 'objects/Mesh.js', 'objects/Bone.js', 'objects/SkinnedMesh.js', +'objects/MorphAnimMesh.js', 'objects/Ribbon.js', 'objects/LOD.js', 'objects/Sprite.js', diff --git a/utils/exporters/blender/2.59/scripts/addons/io_mesh_threejs/__init__.py b/utils/exporters/blender/2.60/scripts/addons/io_mesh_threejs/__init__.py similarity index 100% rename from utils/exporters/blender/2.59/scripts/addons/io_mesh_threejs/__init__.py rename to utils/exporters/blender/2.60/scripts/addons/io_mesh_threejs/__init__.py diff --git a/utils/exporters/blender/2.59/scripts/addons/io_mesh_threejs/export_threejs.py b/utils/exporters/blender/2.60/scripts/addons/io_mesh_threejs/export_threejs.py similarity index 99% rename from utils/exporters/blender/2.59/scripts/addons/io_mesh_threejs/export_threejs.py rename to utils/exporters/blender/2.60/scripts/addons/io_mesh_threejs/export_threejs.py index ce8eed4d..2ff9cf54 100644 --- a/utils/exporters/blender/2.59/scripts/addons/io_mesh_threejs/export_threejs.py +++ b/utils/exporters/blender/2.60/scripts/addons/io_mesh_threejs/export_threejs.py @@ -79,7 +79,7 @@ COLORS = [0xeeeeee, 0xee0000, 0x00ee00, 0x0000ee, 0xeeee00, 0x00eeee, 0xee00ee] TEMPLATE_SCENE_ASCII = """\ /* Converted from: %(fname)s * - * File generated with Blender 2.58 Exporter + * File generated with Blender 2.60 Exporter * https://github.com/mrdoob/three.js/tree/master/utils/exporters/blender/ * * objects: %(nobjects)s diff --git a/utils/exporters/blender/2.59/scripts/addons/io_mesh_threejs/import_threejs.py b/utils/exporters/blender/2.60/scripts/addons/io_mesh_threejs/import_threejs.py similarity index 100% rename from utils/exporters/blender/2.59/scripts/addons/io_mesh_threejs/import_threejs.py rename to utils/exporters/blender/2.60/scripts/addons/io_mesh_threejs/import_threejs.py diff --git a/utils/exporters/convert_obj_three.py b/utils/exporters/convert_obj_three.py index be19e19d..6c775de7 100644 --- a/utils/exporters/convert_obj_three.py +++ b/utils/exporters/convert_obj_three.py @@ -46,12 +46,12 @@ How to use generated JS file in your HTML document // load ascii model var jsonLoader = new THREE.JSONLoader(); - jsonLoader.load( { model: "Model_ascii.js", callback: function( geometry ) { createScene( geometry) } } ); + jsonLoader.load( "Model_ascii.js", function( geometry ) { createScene( geometry ) } ); // load binary model var binLoader = new THREE.BinaryLoader(); - binLoader.load( { model: "Model_bin.js", callback: function( geometry ) { createScene( geometry) } } ); + binLoader.load( "Model_bin.js", function( geometry ) { createScene( geometry) } ); function createScene( geometry ) {