diff --git a/build/three.min.js b/build/three.min.js index fa7e2a7b3e06feef1e7c5db65d69e9a3bbd4a67c..1b6b9d613f566ea7623485149ca51338103ebb72 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -18,9 +18,9 @@ THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a; a;this.z=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=this.x-a.x;this.y=this.y-a.y;this.z=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=this.x*a.x;this.y=this.y*a.y;this.z=this.z*a.z;return this},multiplyScalar:function(a){this.x=this.x*a;this.y=this.y*a;this.z=this.z*a;return this},divideSelf:function(a){this.x=this.x/a.x;this.y= this.y/a.y;this.z=this.z/a.z;return this},divideScalar:function(a){if(a){this.x=this.x/a;this.y=this.y/a;this.z=this.z/a}else this.z=this.y=this.x=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 Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())}, setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x=this.x+(a.x-this.x)*b;this.y=this.y+(a.y-this.y)*b;this.z=this.z+(a.z-this.z)*b;return this},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){var b=this.x,c=this.y,d=this.z;this.x=c*a.z-d*a.y;this.y=d*a.x-b*a.z;this.z=b*a.y-c*a.x;return this},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){return(new THREE.Vector3).sub(this, -a).lengthSq()},getPositionFromMatrix:function(a){this.x=a.elements[12];this.y=a.elements[13];this.z=a.elements[14];return this},setEulerFromRotationMatrix:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.elements,f=d[0],e=d[4],g=d[8],h=d[1],i=d[5],l=d[9],j=d[2],o=d[6],d=d[10];if(b===void 0||b==="XYZ"){this.y=Math.asin(c(g));if(Math.abs(g)<0.99999){this.x=Math.atan2(-l,d);this.z=Math.atan2(-e,f)}else{this.x=Math.atan2(h,i);this.z=0}}else if(b==="YXZ"){this.x=Math.asin(-c(l));if(Math.abs(l)< -0.99999){this.y=Math.atan2(g,d);this.z=Math.atan2(h,i)}else{this.y=Math.atan2(-j,f);this.z=0}}else if(b==="ZXY"){this.x=Math.asin(c(o));if(Math.abs(o)<0.99999){this.y=Math.atan2(-j,d);this.z=Math.atan2(-e,i)}else{this.y=0;this.z=Math.atan2(g,f)}}else if(b==="ZYX"){this.y=Math.asin(-c(j));if(Math.abs(j)<0.99999){this.x=Math.atan2(o,d);this.z=Math.atan2(h,f)}else{this.x=0;this.z=Math.atan2(-e,i)}}else if(b==="YZX"){this.z=Math.asin(c(h));if(Math.abs(h)<0.99999){this.x=Math.atan2(-l,i);this.y=Math.atan2(-j, -f)}else{this.x=0;this.y=Math.atan2(j,d)}}else if(b==="XZY"){this.z=Math.asin(-c(e));if(Math.abs(e)<0.99999){this.x=Math.atan2(o,i);this.y=Math.atan2(g,f)}else{this.x=Math.atan2(-g,d);this.y=0}}return this},setEulerFromQuaternion:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.x*a.x,f=a.y*a.y,e=a.z*a.z,g=a.w*a.w;if(b===void 0||b==="XYZ"){this.x=Math.atan2(2*(a.x*a.w-a.y*a.z),g-d-f+e);this.y=Math.asin(c(2*(a.x*a.z+a.y*a.w)));this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g+d-f-e)}else if(b=== +a).lengthSq()},getPositionFromMatrix:function(a){this.x=a.elements[12];this.y=a.elements[13];this.z=a.elements[14];return this},setEulerFromRotationMatrix:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.elements,f=d[0],e=d[4],g=d[8],h=d[1],i=d[5],l=d[9],j=d[2],n=d[6],d=d[10];if(b===void 0||b==="XYZ"){this.y=Math.asin(c(g));if(Math.abs(g)<0.99999){this.x=Math.atan2(-l,d);this.z=Math.atan2(-e,f)}else{this.x=Math.atan2(h,i);this.z=0}}else if(b==="YXZ"){this.x=Math.asin(-c(l));if(Math.abs(l)< +0.99999){this.y=Math.atan2(g,d);this.z=Math.atan2(h,i)}else{this.y=Math.atan2(-j,f);this.z=0}}else if(b==="ZXY"){this.x=Math.asin(c(n));if(Math.abs(n)<0.99999){this.y=Math.atan2(-j,d);this.z=Math.atan2(-e,i)}else{this.y=0;this.z=Math.atan2(g,f)}}else if(b==="ZYX"){this.y=Math.asin(-c(j));if(Math.abs(j)<0.99999){this.x=Math.atan2(n,d);this.z=Math.atan2(h,f)}else{this.x=0;this.z=Math.atan2(-e,i)}}else if(b==="YZX"){this.z=Math.asin(c(h));if(Math.abs(h)<0.99999){this.x=Math.atan2(-l,i);this.y=Math.atan2(-j, +f)}else{this.x=0;this.y=Math.atan2(j,d)}}else if(b==="XZY"){this.z=Math.asin(-c(e));if(Math.abs(e)<0.99999){this.x=Math.atan2(n,i);this.y=Math.atan2(g,f)}else{this.x=Math.atan2(-g,d);this.y=0}}return this},setEulerFromQuaternion:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.x*a.x,f=a.y*a.y,e=a.z*a.z,g=a.w*a.w;if(b===void 0||b==="XYZ"){this.x=Math.atan2(2*(a.x*a.w-a.y*a.z),g-d-f+e);this.y=Math.asin(c(2*(a.x*a.z+a.y*a.w)));this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g+d-f-e)}else if(b=== "YXZ"){this.x=Math.asin(c(2*(a.x*a.w-a.y*a.z)));this.y=Math.atan2(2*(a.x*a.z+a.y*a.w),g-d-f+e);this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g-d+f-e)}else if(b==="ZXY"){this.x=Math.asin(c(2*(a.x*a.w+a.y*a.z)));this.y=Math.atan2(2*(a.y*a.w-a.z*a.x),g-d-f+e);this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g-d+f-e)}else if(b==="ZYX"){this.x=Math.atan2(2*(a.x*a.w+a.z*a.y),g-d-f+e);this.y=Math.asin(c(2*(a.y*a.w-a.x*a.z)));this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g+d-f-e)}else if(b==="YZX"){this.x=Math.atan2(2*(a.x*a.w-a.z* a.y),g-d+f-e);this.y=Math.atan2(2*(a.y*a.w-a.x*a.z),g+d-f-e);this.z=Math.asin(c(2*(a.x*a.y+a.z*a.w)))}else if(b==="XZY"){this.x=Math.atan2(2*(a.x*a.w+a.y*a.z),g-d+f-e);this.y=Math.atan2(2*(a.x*a.z+a.y*a.w),g+d-f-e);this.z=Math.asin(c(2*(a.z*a.w-a.x*a.y)))}return this},getScaleFromMatrix:function(a){var b=this.set(a.elements[0],a.elements[1],a.elements[2]).length(),c=this.set(a.elements[4],a.elements[5],a.elements[6]).length(),a=this.set(a.elements[8],a.elements[9],a.elements[10]).length();this.x= b;this.y=c;this.z=a;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},isZero:function(){return this.lengthSq()<1E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1}; @@ -30,41 +30,41 @@ lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(thi Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);if(b<1E-4){this.x=1;this.z=this.y=0}else{this.x=a.x/b;this.y=a.y/b;this.z=a.z/b}return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d,a=a.elements,f=a[0];d=a[4];var e=a[8],g=a[1],h=a[5],i=a[9];c=a[2];b=a[6];var l=a[10];if(Math.abs(d-g)<0.01&&Math.abs(e-c)<0.01&&Math.abs(i-b)<0.01){if(Math.abs(d+g)<0.1&&Math.abs(e+c)<0.1&&Math.abs(i+b)<0.1&&Math.abs(f+h+l-3)<0.1){this.set(1,0,0,0);return this}a=Math.PI;f=(f+1)/2;h=(h+1)/2;l=(l+1)/2;d=(d+g)/4;e= (e+c)/4;i=(i+b)/4;if(f>h&&f>l)if(f<0.01){b=0;d=c=0.707106781}else{b=Math.sqrt(f);c=d/b;d=e/b}else if(h>l)if(h<0.01){b=0.707106781;c=0;d=0.707106781}else{c=Math.sqrt(h);b=d/c;d=i/c}else if(l<0.01){c=b=0.707106781;d=0}else{d=Math.sqrt(l);b=e/d;c=i/d}this.set(b,c,d,a);return this}a=Math.sqrt((b-i)*(b-i)+(e-c)*(e-c)+(g-d)*(g-d));Math.abs(a)<0.001&&(a=1);this.x=(b-i)/a;this.y=(e-c)/a;this.z=(g-d)/a;this.w=Math.acos((f+h+l-1)/2);return this}};THREE.Matrix3=function(){this.elements=new Float32Array(9)}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,getInverse:function(a){var b=a.elements,a=b[10]*b[5]-b[6]*b[9],c=-b[10]*b[1]+b[2]*b[9],d=b[6]*b[1]-b[2]*b[5],f=-b[10]*b[4]+b[6]*b[8],e=b[10]*b[0]-b[2]*b[8],g=-b[6]*b[0]+b[2]*b[4],h=b[9]*b[4]-b[5]*b[8],i=-b[9]*b[0]+b[1]*b[8],l=b[5]*b[0]-b[1]*b[4],b=b[0]*a+b[1]*f+b[2]*h;b===0&&console.warn("Matrix3.getInverse(): determinant == 0");var b=1/b,j=this.elements;j[0]=b*a;j[1]=b*c;j[2]=b*d;j[3]=b*f;j[4]=b*e;j[5]=b*g;j[6]=b*h;j[7]=b*i;j[8]=b*l;return this}, -transpose:function(){var a,b=this.elements;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,i,l,j,o,m,p,q,n){this.elements=new Float32Array(16);this.set(a!==void 0?a:1,b||0,c||0,d||0,f||0,e!==void 0?e:1,g||0,h||0,i||0,l||0,j!==void 0?j:1,o||0,m||0,p||0,q||0,n!==void 0?n:1)}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,i,l,j,o,m,p,q,n){var s=this.elements;s[0]=a;s[4]=b;s[8]=c;s[12]=d;s[1]=f;s[5]=e;s[9]=g;s[13]=h;s[2]=i;s[6]=l;s[10]=j;s[14]=o;s[3]=m;s[7]=p;s[11]=q;s[15]=n;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){a=a.elements;this.set(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]);return this},lookAt:function(a,b,c){var d=this.elements, -f=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();if(g.length()===0)g.z=1;f.cross(c,g).normalize();if(f.length()===0){g.x=g.x+1E-4;f.cross(c,g).normalize()}e.cross(g,f);d[0]=f.x;d[4]=e.x;d[8]=g.x;d[1]=f.y;d[5]=e.y;d[9]=g.y;d[2]=f.z;d[6]=e.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,f=this.elements,e=c[0],g=c[4],h=c[8],i=c[12],l=c[1],j=c[5],o=c[9],m=c[13],p=c[2],q=c[6],n=c[10],s=c[14],r=c[3],u=c[7],v=c[11],c=c[15],t=d[0],A=d[4], -y=d[8],B=d[12],G=d[1],x=d[5],I=d[9],F=d[13],L=d[2],H=d[6],M=d[10],C=d[14],E=d[3],P=d[7],N=d[11],d=d[15];f[0]=e*t+g*G+h*L+i*E;f[4]=e*A+g*x+h*H+i*P;f[8]=e*y+g*I+h*M+i*N;f[12]=e*B+g*F+h*C+i*d;f[1]=l*t+j*G+o*L+m*E;f[5]=l*A+j*x+o*H+m*P;f[9]=l*y+j*I+o*M+m*N;f[13]=l*B+j*F+o*C+m*d;f[2]=p*t+q*G+n*L+s*E;f[6]=p*A+q*x+n*H+s*P;f[10]=p*y+q*I+n*M+s*N;f[14]=p*B+q*F+n*C+s*d;f[3]=r*t+u*G+v*L+c*E;f[7]=r*A+u*x+v*H+c*P;f[11]=r*y+u*I+v*M+c*N;f[15]=r*B+u*F+v*C+c*d;return this},multiplySelf:function(a){return this.multiply(this, +transpose:function(){var a,b=this.elements;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,i,l,j,n,m,q,o,p){this.elements=new Float32Array(16);this.set(a!==void 0?a:1,b||0,c||0,d||0,f||0,e!==void 0?e:1,g||0,h||0,i||0,l||0,j!==void 0?j:1,n||0,m||0,q||0,o||0,p!==void 0?p:1)}; +THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,i,l,j,n,m,q,o,p){var s=this.elements;s[0]=a;s[4]=b;s[8]=c;s[12]=d;s[1]=f;s[5]=e;s[9]=g;s[13]=h;s[2]=i;s[6]=l;s[10]=j;s[14]=n;s[3]=m;s[7]=q;s[11]=o;s[15]=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){a=a.elements;this.set(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]);return this},lookAt:function(a,b,c){var d=this.elements, +f=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();if(g.length()===0)g.z=1;f.cross(c,g).normalize();if(f.length()===0){g.x=g.x+1E-4;f.cross(c,g).normalize()}e.cross(g,f);d[0]=f.x;d[4]=e.x;d[8]=g.x;d[1]=f.y;d[5]=e.y;d[9]=g.y;d[2]=f.z;d[6]=e.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,f=this.elements,e=c[0],g=c[4],h=c[8],i=c[12],l=c[1],j=c[5],n=c[9],m=c[13],q=c[2],o=c[6],p=c[10],s=c[14],r=c[3],u=c[7],v=c[11],c=c[15],t=d[0],A=d[4], +y=d[8],B=d[12],G=d[1],x=d[5],I=d[9],F=d[13],L=d[2],E=d[6],P=d[10],H=d[14],D=d[3],S=d[7],R=d[11],d=d[15];f[0]=e*t+g*G+h*L+i*D;f[4]=e*A+g*x+h*E+i*S;f[8]=e*y+g*I+h*P+i*R;f[12]=e*B+g*F+h*H+i*d;f[1]=l*t+j*G+n*L+m*D;f[5]=l*A+j*x+n*E+m*S;f[9]=l*y+j*I+n*P+m*R;f[13]=l*B+j*F+n*H+m*d;f[2]=q*t+o*G+p*L+s*D;f[6]=q*A+o*x+p*E+s*S;f[10]=q*y+o*I+p*P+s*R;f[14]=q*B+o*F+p*H+s*d;f[3]=r*t+u*G+v*L+c*D;f[7]=r*A+u*x+v*E+c*S;f[11]=r*y+u*I+v*P+c*R;f[15]=r*B+u*F+v*H+c*d;return this},multiplySelf:function(a){return this.multiply(this, a)},multiplyToArray:function(a,b,c){var d=this.elements;this.multiply(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]=b[0]*a;b[4]=b[4]*a;b[8]=b[8]*a;b[12]=b[12]*a;b[1]=b[1]*a;b[5]=b[5]*a;b[9]=b[9]*a;b[13]=b[13]*a;b[2]=b[2]*a;b[6]=b[6]*a;b[10]=b[10]*a;b[14]=b[14]*a;b[3]=b[3]*a;b[7]=b[7]*a;b[11]=b[11]*a;b[15]= b[15]*a;return this},multiplyVector3:function(a){var b=this.elements,c=a.x,d=a.y,f=a.z,e=1/(b[3]*c+b[7]*d+b[11]*f+b[15]);a.x=(b[0]*c+b[4]*d+b[8]*f+b[12])*e;a.y=(b[1]*c+b[5]*d+b[9]*f+b[13])*e;a.z=(b[2]*c+b[6]*d+b[10]*f+b[14])*e;return a},multiplyVector4:function(a){var b=this.elements,c=a.x,d=a.y,f=a.z,e=a.w;a.x=b[0]*c+b[4]*d+b[8]*f+b[12]*e;a.y=b[1]*c+b[5]*d+b[9]*f+b[13]*e;a.z=b[2]*c+b[6]*d+b[10]*f+b[14]*e;a.w=b[3]*c+b[7]*d+b[11]*f+b[15]*e;return a},multiplyVector3Array:function(a){for(var b=THREE.Matrix4.__v1, c=0,d=a.length;c=0&&a>=0&&f+a<1},q=function(i,j,l){var o,n;if(i instanceof a.Particle){o=m(j.origin,j.direction,i.matrixWorld.getPosition());if(o>i.scale.x)return l;n={distance:o,point:i.position,face:null,object:i};l.push(n)}else if(i instanceof a.Mesh){var q=i.geometry.boundingSphere.radius*i.matrixWorld.getMaxScaleOnAxis();o=m(j.origin,j.direction,i.matrixWorld.getPosition());if(o>q)return l;var y, -B,G=i.geometry,x=G.vertices,I,F,L;I=i.geometry.materials;F=i.material instanceof a.MeshFaceMaterial;var H,M=j.precision;i.matrixRotationWorld.extractRotation(i.matrixWorld);b.copy(j.origin);h.getInverse(i.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(j.direction);h.rotateAxis(d).normalize();q=0;for(y=G.faces.length;q0))){g.add(c,d.multiplyScalar(B));if(n instanceof a.Face3){o=x[n.a];B=x[n.b];L=x[n.c];if(p(g,o,B,L)){B=i.matrixWorld.multiplyVector3(g.clone());o=b.distanceTo(B);if(!(oj.far)){n={distance:o,point:B,face:n,faceIndex:q,object:i};l.push(n)}}}else if(n instanceof a.Face4){o=x[n.a];B=x[n.b];L=x[n.c];H=x[n.d];if(p(g,o,B,H)||p(g,B,L,H)){B=i.matrixWorld.multiplyVector3(g.clone());o=b.distanceTo(B);if(!(oj.far)){n={distance:o,point:B,face:n,faceIndex:q, -object:i};l.push(n)}}}}}}}}},n=function(a,b,c){for(var a=a.getDescendants(),d=0,f=a.length;de?d:e;f=f>g?f:g}a()};this.add3Points=function(e,g,j,o,m,p){if(h===true){h=false;b=ej?e>m?e:m:j>m?j:m;f=g>o?g>p?g:p:o>p?o:p}else{b=ej?e>m?e>d?e:d:m>d?m:d:j>m?j>d?j:d:m>d?m:d;f=g>o?g>p?g>f?g:f:p>f?p:f:o>p?o>f?o:f:p>f?p:f}a()};this.addRectangle=function(e){if(h===true){h=false;b=e.getLeft();c=e.getTop();d=e.getRight();f=e.getBottom()}else{b=b=0&&a>=0&&f+a<1},o=function(i,j,l){var n,o;if(i instanceof a.Particle){n=m(j.origin,j.direction,i.matrixWorld.getPosition());if(n>i.scale.x)return l;o={distance:n,point:i.position,face:null,object:i};l.push(o)}else if(i instanceof a.Mesh){var p=i.geometry.boundingSphere.radius*i.matrixWorld.getMaxScaleOnAxis();n=m(j.origin,j.direction,i.matrixWorld.getPosition());if(n>p)return l;var y, +B,G=i.geometry,x=G.vertices,I,F,L;I=i.geometry.materials;F=i.material instanceof a.MeshFaceMaterial;var E,P=j.precision;i.matrixRotationWorld.extractRotation(i.matrixWorld);b.copy(j.origin);h.getInverse(i.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(j.direction);h.rotateAxis(d).normalize();p=0;for(y=G.faces.length;p0))){g.add(c,d.multiplyScalar(B));if(o instanceof a.Face3){n=x[o.a];B=x[o.b];L=x[o.c];if(q(g,n,B,L)){B=i.matrixWorld.multiplyVector3(g.clone());n=b.distanceTo(B);if(!(nj.far)){o={distance:n,point:B,face:o,faceIndex:p,object:i};l.push(o)}}}else if(o instanceof a.Face4){n=x[o.a];B=x[o.b];L=x[o.c];E=x[o.d];if(q(g,n,B,E)||q(g,B,L,E)){B=i.matrixWorld.multiplyVector3(g.clone());n=b.distanceTo(B);if(!(nj.far)){o={distance:n,point:B,face:o,faceIndex:p, +object:i};l.push(o)}}}}}}}}},p=function(a,b,c){for(var a=a.getDescendants(),d=0,f=a.length;de?d:e;f=f>g?f:g}a()};this.add3Points=function(e,g,j,n,m,q){if(h===true){h=false;b=ej?e>m?e:m:j>m?j:m;f=g>n?g>q?g:q:n>q?n:q}else{b=ej?e>m?e>d?e:d:m>d?m:d:j>m?j>d?j:d:m>d?m:d;f=g>n?g>q?g>f?g:f:q>f?q:f:n>q?n>f?n:f:q>f?q:f}a()};this.addRectangle=function(e){if(h===true){h=false;b=e.getLeft();c=e.getTop();d=e.getRight();f=e.getBottom()}else{b=be.getRight()?d:e.getRight();f=f>e.getBottom()?f:e.getBottom()}a()};this.inflate=function(e){b=b-e;c=c-e;d=d+e;f=f+e;a()};this.minSelf=function(e){b=b>e.getLeft()?b:e.getLeft();c=c>e.getTop()?c:e.getTop();d=da.getRight()||fa.getBottom()?false:true};this.empty=function(){h=true;f=d=c=b=0;a()};this.isEmpty=function(){return h}}; THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a0?1:0}}; THREE.Object3D=function(){this.id=THREE.Object3DCount++;this.name="";this.properties={};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.renderDepth=null;this.rotationAutoUpdate=true;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate=true;this.quaternion= @@ -75,25 +75,25 @@ else if(a instanceof THREE.Object3D){a.parent!==void 0&&a.parent.remove(a);a.par if(f.name===a)return f;if(b){f=f.getChildByName(a,b);if(f!==void 0)return f}}},getDescendants:function(a){a===void 0&&(a=[]);Array.prototype.push.apply(a,this.children);for(var b=0,c=this.children.length;b=0&&e>=0&&g>=0&&h>=0)return true;if(f<0&&e<0||g<0&&h<0)return false;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))); -if(dK&&i.positionScreen.z0)){V=j[l-2];P.copy(W.positionScreen);N.copy(V.positionScreen);if(d(P,N)===true){P.multiplyScalar(1/P.w);N.multiplyScalar(1/N.w);if(t===y){Ja=new THREE.RenderableLine;A.push(Ja);y++;t++;v=Ja}else v=A[t++];v.v1.positionScreen.copy(P);v.v2.positionScreen.copy(N);v.z=Math.max(P.z,N.z);v.material=oa.material;F.elements.push(v)}}}}}g=0;for(ra=F.sprites.length;g0&&H.z<1){if(G===I){K=new THREE.RenderableParticle;x.push(K);I++;G++;B=K}else B=x[G++];B.object=oa;B.x=H.x/H.w;B.y=H.y/H.w;B.z=H.z;B.rotation=oa.rotation.z;B.scale.x=oa.scale.x*Math.abs(B.x-(H.x+h.projectionMatrix.elements[0])/(H.w+h.projectionMatrix.elements[12]));B.scale.y=oa.scale.y*Math.abs(B.y-(H.y+h.projectionMatrix.elements[5])/(H.w+h.projectionMatrix.elements[13]));B.material=oa.material;F.elements.push(B)}}}o&&F.elements.sort(c); +THREE.Projector=function(){function a(){if(e===h){var a=new THREE.RenderableObject;g.push(a);h++;e++;return a}return g[e++]}function b(){if(l===n){var a=new THREE.RenderableVertex;j.push(a);n++;l++;return a}return j[l++]}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,f=a.z+a.w,e=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(f>=0&&e>=0&&g>=0&&h>=0)return true;if(f<0&&e<0||g<0&&h<0)return false;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))); +if(dK&&i.positionScreen.z0)){W=j[l-2];S.copy(M.positionScreen);R.copy(W.positionScreen);if(d(S,R)===true){S.multiplyScalar(1/S.w);R.multiplyScalar(1/R.w);if(t===y){Ia=new THREE.RenderableLine;A.push(Ia);y++;t++;v=Ia}else v=A[t++];v.v1.positionScreen.copy(S);v.v2.positionScreen.copy(R);v.z=Math.max(S.z,R.z);v.material=oa.material;F.elements.push(v)}}}}}g=0;for(ra=F.sprites.length;g0&&E.z<1){if(G===I){K=new THREE.RenderableParticle;x.push(K);I++;G++;B=K}else B=x[G++];B.object=oa;B.x=E.x/E.w;B.y=E.y/E.w;B.z=E.z;B.rotation=oa.rotation.z;B.scale.x=oa.scale.x*Math.abs(B.x-(E.x+h.projectionMatrix.elements[0])/(E.w+h.projectionMatrix.elements[12]));B.scale.y=oa.scale.y*Math.abs(B.y-(E.y+h.projectionMatrix.elements[5])/(E.w+h.projectionMatrix.elements[13]));B.material=oa.material;F.elements.push(B)}}}n&&F.elements.sort(c); return F}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=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,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),f=Math.cos(a.z/2),e=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);if(b===void 0||b==="XYZ"){this.x=e*d*f+c*g*h;this.y=c*g*f-e*d*h;this.z=c*d*h+e*g*f;this.w=c*d*f-e*g*h}else if(b==="YXZ"){this.x=e*d*f+c*g*h;this.y=c*g*f-e*d*h;this.z= c*d*h-e*g*f;this.w=c*d*f+e*g*h}else if(b==="ZXY"){this.x=e*d*f-c*g*h;this.y=c*g*f+e*d*h;this.z=c*d*h+e*g*f;this.w=c*d*f-e*g*h}else if(b==="ZYX"){this.x=e*d*f-c*g*h;this.y=c*g*f+e*d*h;this.z=c*d*h-e*g*f;this.w=c*d*f+e*g*h}else if(b==="YZX"){this.x=e*d*f+c*g*h;this.y=c*g*f+e*d*h;this.z=c*d*h-e*g*f;this.w=c*d*f-e*g*h}else if(b==="XZY"){this.x=e*d*f-c*g*h;this.y=c*g*f-e*d*h;this.z=c*d*h+e*g*f;this.w=c*d*f+e*g*h}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=a.elements,c=b[0],a=b[4],d=b[8],f=b[1],e=b[5],g=b[9],h=b[2],i=b[6],b=b[10],l=c+e+b;if(l>0){c=0.5/Math.sqrt(l+1);this.w=0.25/c;this.x=(i-g)*c;this.y=(d-h)*c;this.z=(f-a)*c}else if(c>e&&c>b){c=2*Math.sqrt(1+c-e-b);this.w=(i-g)/c;this.x=0.25*c;this.y=(a+f)/c;this.z=(d+h)/c}else if(e>b){c=2*Math.sqrt(1+e-c-b);this.w=(d-h)/c;this.x=(a+f)/c;this.y=0.25*c;this.z=(g+i)/c}else{c=2*Math.sqrt(1+b-c-e);this.w=(f-a)/c;this.x= (d+h)/c;this.y=(g+i)/c;this.z=0.25*c}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=this.x*-1;this.y=this.y*-1;this.z=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);if(a===0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x=this.x*a;this.y= this.y*a;this.z=this.z*a;this.w=this.w*a}return this},multiply:function(a,b){var c=a.x,d=a.y,f=a.z,e=a.w,g=b.x,h=b.y,i=b.z,l=b.w;this.x=c*l+d*i-f*h+e*g;this.y=-c*i+d*l+f*g+e*h;this.z=c*h-d*g+f*l+e*i;this.w=-c*g-d*h-f*i+e*l;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},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,i=this.w,l=i*c+g*f-h*d,j=i*d+h*c-e*f,o=i*f+e*d-g*c,c=-e*c-g*d-h*f;b.x=l*i+c*-e+j*-h-o*-g;b.y=j*i+c*-g+o*-e-l*-h;b.z=o*i+c*-h+l*-g-j*-e;return b},slerpSelf:function(a,b){var c=this.x,d=this.y,f=this.z,e=this.w,g=e*a.w+c*a.x+d*a.y+f*a.z;if(g<0){this.w=-a.w;this.x=-a.x;this.y=-a.y;this.z=-a.z;g=-g}else this.copy(a);if(g>=1){this.w=e;this.x=c;this.y=d;this.z=f;return this}var h=Math.acos(g),i=Math.sqrt(1-g*g);if(Math.abs(i)<0.001){this.w=0.5*(e+this.w);this.x=0.5*(c+this.x);this.y=0.5* +this.y,h=this.z,i=this.w,l=i*c+g*f-h*d,j=i*d+h*c-e*f,n=i*f+e*d-g*c,c=-e*c-g*d-h*f;b.x=l*i+c*-e+j*-h-n*-g;b.y=j*i+c*-g+n*-e-l*-h;b.z=n*i+c*-h+l*-g-j*-e;return b},slerpSelf:function(a,b){var c=this.x,d=this.y,f=this.z,e=this.w,g=e*a.w+c*a.x+d*a.y+f*a.z;if(g<0){this.w=-a.w;this.x=-a.x;this.y=-a.y;this.z=-a.z;g=-g}else this.copy(a);if(g>=1){this.w=e;this.x=c;this.y=d;this.z=f;return this}var h=Math.acos(g),i=Math.sqrt(1-g*g);if(Math.abs(i)<0.001){this.w=0.5*(e+this.w);this.x=0.5*(c+this.x);this.y=0.5* (d+this.y);this.z=0.5*(f+this.z);return this}g=Math.sin((1-b)*h)/i;h=Math.sin(b*h)/i;this.w=e*g+this.w*h;this.x=c*g+this.x*h;this.y=d*g+this.y*h;this.z=f*g+this.z*h;return this},clone:function(){return new THREE.Quaternion(this.x,this.y,this.z,this.w)}}; 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(f<0){c.w=-b.w;c.x=-b.x;c.y=-b.y;c.z=-b.z;f=-f}else c.copy(b);if(Math.abs(f)>=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var b=Math.acos(f),e=Math.sqrt(1-f*f);if(Math.abs(e)<0.001){c.w=0.5*(a.w+c.w);c.x=0.5*(a.x+c.x);c.y=0.5*(a.y+c.y);c.z=0.5*(a.z+c.z);return c}f=Math.sin((1-d)*b)/e;d=Math.sin(d*b)/e;c.w=a.w*f+c.w*d;c.x=a.x*f+c.x*d;c.y=a.y*f+c.y*d;c.z=a.z*f+c.z*d;return c}; THREE.Vertex=function(a){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");return a};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}; @@ -109,24 +109,24 @@ else if(c instanceof THREE.Face4)c.vertexNormals=[new THREE.Vector3,new THREE.Ve for(b=this.vertices.length;a0){var a;a=this.vertices[0];this.boundingBox.min.copy(a);this.boundingBox.max.copy(a);for(var b=this.boundingBox.min,c=this.boundingBox.max,d=1,f=this.vertices.length;dc.x)c.x= +i=g.faceNormals[c];l=g.vertexNormals[c];i.copy(f.normal);if(f instanceof THREE.Face3){l.a.copy(f.vertexNormals[0]);l.b.copy(f.vertexNormals[1]);l.c.copy(f.vertexNormals[2])}else{l.a.copy(f.vertexNormals[0]);l.b.copy(f.vertexNormals[1]);l.c.copy(f.vertexNormals[2]);l.d.copy(f.vertexNormals[3])}}}c=0;for(d=this.faces.length;c0){var a;a=this.vertices[0];this.boundingBox.min.copy(a);this.boundingBox.max.copy(a);for(var b=this.boundingBox.min,c=this.boundingBox.max,d=1,f=this.vertices.length;dc.x)c.x= a.x;if(a.yc.y)c.y=a.y;if(a.zc.z)c.z=a.z}}else{this.boundingBox.min.set(0,0,0);this.boundingBox.max.set(0,0,0)}},computeBoundingSphere:function(){var a=0;if(this.boundingSphere===null)this.boundingSphere={radius:0};for(var b=0,c=this.vertices.length;ba&&(a=d)}this.boundingSphere.radius=Math.sqrt(a)},mergeVertices:function(){var a={},b=[],c=[],d,f=Math.pow(10,4),e,g,h,i;e=0;for(g=this.vertices.length;e0;f--)if(d.indexOf(a["abcd"[f]])!==f){d.splice(f,1);this.faces[e]=new THREE.Face3(d[0],d[1],d[2],a.normal,a.color, a.materialIndex);d=0;for(h=this.faceVertexUvs.length;db.max.x)b.max.x=c;if(db.max.y)b.max.y=d;if(fb.max.z)b.max.z=f}if(a===void 0||a.length===0){this.boundingBox.min.set(0,0,0);this.boundingBox.max.set(0,0,0)}},computeBoundingSphere:function(){if(!this.boundingSphere)this.boundingSphere= {radius:0};var a=this.attributes.position.array;if(a){for(var b,c=0,d,f,e=0,g=a.length;ec&&(c=b)}this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position&&this.attributes.index){var a,b,c,d;a=this.attributes.position.array.length;if(this.attributes.normal===void 0)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;athis.points.length-2?this.points.length-1:e+1;c[3]=e>this.points.length-3?this.points.length-1: -e+2;l=this.points[c[0]];j=this.points[c[1]];o=this.points[c[2]];m=this.points[c[3]];h=g*g;i=g*h;d.x=b(l.x,j.x,o.x,m.x,g,h,i);d.y=b(l.y,j.y,o.y,m.y,g,h,i);d.z=b(l.z,j.z,o.z,m.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;athis.points.length-2?this.points.length-1:e+1;c[3]=e>this.points.length-3?this.points.length-1: +e+2;l=this.points[c[0]];j=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;i=g*h;d.x=b(l.x,j.x,n.x,m.x,g,h,i);d.y=b(l.y,j.y,n.y,m.y,g,h,i);d.z=b(l.z,j.z,n.z,m.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a1&&(L=new THREE.MeshFaceMaterial);c=new THREE.Mesh(F, L);c.name=m;if(u){c.matrixAutoUpdate=false;c.matrix.set(u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9],u[10],u[11],u[12],u[13],u[14],u[15])}else{c.position.set(A[0],A[1],A[2]);if(B){c.quaternion.set(B[0],B[1],B[2],B[3]);c.useQuaternion=true}else c.rotation.set(y[0],y[1],y[2]);c.scale.set(G[0],G[1],G[2])}c.visible=r.visible;c.castShadow=r.castShadow;c.receiveShadow=r.receiveShadow;a.add(c);J.objects[m]=c}}else{A=r.position;y=r.rotation;B=r.quaternion;G=r.scale;B=0;c=new THREE.Object3D;c.name=m; -c.position.set(A[0],A[1],A[2]);if(B){c.quaternion.set(B[0],B[1],B[2],B[3]);c.useQuaternion=true}else c.rotation.set(y[0],y[1],y[2]);c.scale.set(G[0],G[1],G[2]);c.visible=r.visible!==void 0?r.visible:false;a.add(c);J.objects[m]=c;J.empties[m]=c}if(r.properties!==void 0)for(var d in r.properties)c.properties[d]=r.properties[d];r.children!==void 0&&f(c,r.children)}}function e(a){return function(b){J.geometries[a]=b;f(J.scene,C.objects);P=P-1;i.onLoadComplete();h()}}function g(a){return function(b){J.geometries[a]= -b}}function h(){i.callbackProgress({totalModels:Q,totalTextures:Y,loadedModels:Q-P,loadedTextures:Y-N},J);i.onLoadProgress();P===0&&N===0&&b(J)}var i=this,l=THREE.Loader.prototype.extractUrlBase(c),j,o,m,p,q,n,s,r,u,v,t,A,y,B,G,x,I,F,L,H,M,C,E,P,N,Q,Y,J;C=a;c=new THREE.BinaryLoader;E=new THREE.JSONLoader;N=P=0;J={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(C.transform){a=C.transform.position;v=C.transform.rotation;x=C.transform.scale; -a&&J.scene.position.set(a[0],a[1],a[2]);v&&J.scene.rotation.set(v[0],v[1],v[2]);x&&J.scene.scale.set(x[0],x[1],x[2]);if(a||v||x){J.scene.updateMatrix();J.scene.updateMatrixWorld()}}a=function(a){return function(){N=N-a;h();i.onLoadComplete()}};for(q in C.cameras){x=C.cameras[q];x.type==="perspective"?H=new THREE.PerspectiveCamera(x.fov,x.aspect,x.near,x.far):x.type==="ortho"&&(H=new THREE.OrthographicCamera(x.left,x.right,x.top,x.bottom,x.near,x.far));A=x.position;v=x.target;x=x.up;H.position.set(A[0], -A[1],A[2]);H.target=new THREE.Vector3(v[0],v[1],v[2]);x&&H.up.set(x[0],x[1],x[2]);J.cameras[q]=H}for(p in C.lights){v=C.lights[p];q=v.color!==void 0?v.color:16777215;H=v.intensity!==void 0?v.intensity:1;if(v.type==="directional"){A=v.direction;t=new THREE.DirectionalLight(q,H);t.position.set(A[0],A[1],A[2]);t.position.normalize()}else if(v.type==="point"){A=v.position;t=v.distance;t=new THREE.PointLight(q,H,t);t.position.set(A[0],A[1],A[2])}else v.type==="ambient"&&(t=new THREE.AmbientLight(q));J.scene.add(t); -J.lights[p]=t}for(n in C.fogs){p=C.fogs[n];p.type==="linear"?M=new THREE.Fog(0,p.near,p.far):p.type==="exp2"&&(M=new THREE.FogExp2(0,p.density));x=p.color;M.color.setRGB(x[0],x[1],x[2]);J.fogs[n]=M}if(J.cameras&&C.defaults.camera)J.currentCamera=J.cameras[C.defaults.camera];if(J.fogs&&C.defaults.fog)J.scene.fog=J.fogs[C.defaults.fog];x=C.defaults.bgcolor;J.bgColor=new THREE.Color;J.bgColor.setRGB(x[0],x[1],x[2]);J.bgColorAlpha=C.defaults.bgalpha;for(j in C.geometries){n=C.geometries[j];if(n.type== -"bin_mesh"||n.type=="ascii_mesh"){P=P+1;i.onLoadStart()}}Q=P;for(j in C.geometries){n=C.geometries[j];if(n.type==="cube"){F=new THREE.CubeGeometry(n.width,n.height,n.depth,n.segmentsWidth,n.segmentsHeight,n.segmentsDepth,null,n.flipped,n.sides);J.geometries[j]=F}else if(n.type==="plane"){F=new THREE.PlaneGeometry(n.width,n.height,n.segmentsWidth,n.segmentsHeight);J.geometries[j]=F}else if(n.type==="sphere"){F=new THREE.SphereGeometry(n.radius,n.segmentsWidth,n.segmentsHeight);J.geometries[j]=F}else if(n.type=== -"cylinder"){F=new THREE.CylinderGeometry(n.topRad,n.botRad,n.height,n.radSegs,n.heightSegs);J.geometries[j]=F}else if(n.type==="torus"){F=new THREE.TorusGeometry(n.radius,n.tube,n.segmentsR,n.segmentsT);J.geometries[j]=F}else if(n.type==="icosahedron"){F=new THREE.IcosahedronGeometry(n.radius,n.subdivisions);J.geometries[j]=F}else if(n.type==="bin_mesh")c.load(d(n.url,C.urlBaseType),e(j));else if(n.type==="ascii_mesh")E.load(d(n.url,C.urlBaseType),e(j));else if(n.type==="embedded_mesh"){n=C.embeds[n.id]; -n.metadata=C.metadata;n&&E.createModel(n,g(j),"")}}for(s in C.textures){j=C.textures[s];if(j.url instanceof Array){N=N+j.url.length;for(n=0;n0){c(THREE.NormalBlending);b(1);f("rgba("+Math.floor(s.r*255)+","+Math.floor(s.g*255)+","+Math.floor(s.b*255)+","+r+")");n.fillRect(Math.floor(Ga.getX()),Math.floor(Ga.getY()),Math.floor(Ga.getWidth()),Math.floor(Ga.getHeight()))}Ga.empty()}};this.render=function(a,k){function j(a,b,c){for(var d=0,f=i.length;d1?1:a}function sb(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;if(f!==0){f=1/Math.sqrt(f);c=c*f;d=d*f;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}if(k instanceof THREE.Camera===false)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var Vb,Ec,A,Z;this.autoClear=== -true?this.clear():n.setTransform(1,0,0,-1,p,q);e.info.render.vertices=0;e.info.render.faces=0;g=l.projectScene(a,k,this.sortElements);h=g.elements;i=g.lights;xb=i.length>0;if(xb===true){Ha.setRGB(0,0,0);$a.setRGB(0,0,0);rb.setRGB(0,0,0);Vb=0;for(Ec=i.length;Vb>1;Tc=Wb.height>>1;jb=pa.scale.x*p;kb=pa.scale.y*q;Fa=jb*A;tb=kb*Tc;ya.set(ba.x-Fa,ba.y-tb,ba.x+Fa,ba.y+tb);if(fb.intersects(ya)!==false){n.save();n.translate(ba.x,ba.y);n.rotate(-pa.rotation);n.scale(jb,-kb);n.translate(-A,-Tc);n.drawImage(Wb,0,0);n.restore()}}else if(Z instanceof THREE.ParticleCanvasMaterial){Fa=pa.scale.x*p; -tb=pa.scale.y*q;ya.set(ba.x-Fa,ba.y-tb,ba.x+Fa,ba.y+tb);if(fb.intersects(ya)!==false){d(Z.color.getContextStyle());f(Z.color.getContextStyle());n.save();n.translate(ba.x,ba.y);n.rotate(-pa.rotation);n.scale(Fa,tb);Z.program(n);n.restore()}}}else if(A instanceof THREE.RenderableLine){x=A.v1;I=A.v2;x.positionScreen.x=x.positionScreen.x*p;x.positionScreen.y=x.positionScreen.y*q;I.positionScreen.x=I.positionScreen.x*p;I.positionScreen.y=I.positionScreen.y*q;ya.addPoint(x.positionScreen.x,x.positionScreen.y); -ya.addPoint(I.positionScreen.x,I.positionScreen.y);if(fb.intersects(ya)===true){ba=x;pa=I;b(Z.opacity);c(Z.blending);n.beginPath();n.moveTo(ba.positionScreen.x,ba.positionScreen.y);n.lineTo(pa.positionScreen.x,pa.positionScreen.y);if(Z instanceof THREE.LineBasicMaterial){ba=Z.linewidth;if(y!==ba)y=n.lineWidth=ba;ba=Z.linecap;if(B!==ba)B=n.lineCap=ba;ba=Z.linejoin;if(G!==ba)G=n.lineJoin=ba;d(Z.color.getContextStyle());n.stroke();ya.inflate(Z.linewidth*2)}}}else if(A instanceof THREE.RenderableFace3){x= -A.v1;I=A.v2;F=A.v3;x.positionScreen.x=x.positionScreen.x*p;x.positionScreen.y=x.positionScreen.y*q;I.positionScreen.x=I.positionScreen.x*p;I.positionScreen.y=I.positionScreen.y*q;F.positionScreen.x=F.positionScreen.x*p;F.positionScreen.y=F.positionScreen.y*q;if(Z.overdraw===true){sb(x.positionScreen,I.positionScreen);sb(I.positionScreen,F.positionScreen);sb(F.positionScreen,x.positionScreen)}ya.add3Points(x.positionScreen.x,x.positionScreen.y,I.positionScreen.x,I.positionScreen.y,F.positionScreen.x, -F.positionScreen.y);fb.intersects(ya)===true&&o(x,I,F,0,1,2,A,Z,a)}else if(A instanceof THREE.RenderableFace4){x=A.v1;I=A.v2;F=A.v3;L=A.v4;x.positionScreen.x=x.positionScreen.x*p;x.positionScreen.y=x.positionScreen.y*q;I.positionScreen.x=I.positionScreen.x*p;I.positionScreen.y=I.positionScreen.y*q;F.positionScreen.x=F.positionScreen.x*p;F.positionScreen.y=F.positionScreen.y*q;L.positionScreen.x=L.positionScreen.x*p;L.positionScreen.y=L.positionScreen.y*q;H.positionScreen.copy(I.positionScreen);M.positionScreen.copy(L.positionScreen); -if(Z.overdraw===true){sb(x.positionScreen,I.positionScreen);sb(I.positionScreen,L.positionScreen);sb(L.positionScreen,x.positionScreen);sb(F.positionScreen,H.positionScreen);sb(F.positionScreen,M.positionScreen)}ya.addPoint(x.positionScreen.x,x.positionScreen.y);ya.addPoint(I.positionScreen.x,I.positionScreen.y);ya.addPoint(F.positionScreen.x,F.positionScreen.y);ya.addPoint(L.positionScreen.x,L.positionScreen.y);if(fb.intersects(ya)===true){pa=x;Fa=I;tb=F;jb=L;kb=H;Wb=M;ba=A;A=a;e.info.render.vertices= -e.info.render.vertices+4;e.info.render.faces++;b(Z.opacity);c(Z.blending);if(Z.map!==void 0&&Z.map!==null||Z.envMap!==void 0&&Z.envMap!==null){o(pa,Fa,jb,0,1,3,ba,Z,A);o(kb,tb,Wb,1,2,3,ba,Z,A)}else{C=pa.positionScreen.x;E=pa.positionScreen.y;P=Fa.positionScreen.x;N=Fa.positionScreen.y;Q=tb.positionScreen.x;Y=tb.positionScreen.y;J=jb.positionScreen.x;K=jb.positionScreen.y;fa=kb.positionScreen.x;O=kb.positionScreen.y;ra=Wb.positionScreen.x;va=Wb.positionScreen.y;if(Z instanceof THREE.MeshLambertMaterial|| -Z instanceof THREE.MeshPhongMaterial)if(xb===true){pa=Z.color;Fa=Z.emissive;if(Z.wireframe===false&&Z.shading==THREE.SmoothShading&&ba.vertexNormalsLength==4){ca.r=W.r=V.r=ha.r=Ha.r;ca.g=W.g=V.g=ha.g=Ha.g;ca.b=W.b=V.b=ha.b=Ha.b;j(ba.v1.positionWorld,ba.vertexNormalsWorld[0],ca);j(ba.v2.positionWorld,ba.vertexNormalsWorld[1],W);j(ba.v4.positionWorld,ba.vertexNormalsWorld[3],V);j(ba.v3.positionWorld,ba.vertexNormalsWorld[2],ha);ca.r=pa.r*ca.r+Fa.r;ca.g=pa.g*ca.g+Fa.g;ca.b=pa.b*ca.b+Fa.b;W.r=pa.r*W.r+ -Fa.r;W.g=pa.g*W.g+Fa.g;W.b=pa.b*W.b+Fa.b;V.r=pa.r*V.r+Fa.r;V.g=pa.g*V.g+Fa.g;V.b=pa.b*V.b+Fa.b;ha.r=pa.r*ha.r+Fa.r;ha.g=pa.g*ha.g+Fa.g;ha.b=pa.b*ha.b+Fa.b;Ja=wa(ca,W,V,ha);m(C,E,P,N,J,K);v(C,E,P,N,J,K,0,0,1,0,0,1,Ja);m(fa,O,Q,Y,ra,va);v(fa,O,Q,Y,ra,va,1,0,1,1,0,1,Ja)}else{da.r=Ha.r;da.g=Ha.g;da.b=Ha.b;j(ba.centroidWorld,ba.normalWorld,da);da.r=pa.r*da.r+Fa.r;da.g=pa.g*da.g+Fa.g;da.b=pa.b*da.b+Fa.b;t(C,E,P,N,Q,Y,J,K);Z.wireframe===true?r(da,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin): -s(da)}}else{t(C,E,P,N,Q,Y,J,K);Z.wireframe===true?r(Z.color,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):s(Z.color)}else if(Z instanceof THREE.MeshBasicMaterial){t(C,E,P,N,Q,Y,J,K);Z.wireframe===true?r(Z.color,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):s(Z.color)}else if(Z instanceof THREE.MeshNormalMaterial){da.r=jc(ba.normalWorld.x);da.g=jc(ba.normalWorld.y);da.b=jc(ba.normalWorld.z);t(C,E,P,N,Q,Y,J,K);Z.wireframe===true?r(da,Z.wireframeLinewidth,Z.wireframeLinecap, -Z.wireframeLinejoin):s(da)}else if(Z instanceof THREE.MeshDepthMaterial){ta=k.near;Da=k.far;ca.r=ca.g=ca.b=1-fc(pa.positionScreen.z,ta,Da);W.r=W.g=W.b=1-fc(Fa.positionScreen.z,ta,Da);V.r=V.g=V.b=1-fc(jb.positionScreen.z,ta,Da);ha.r=ha.g=ha.b=1-fc(tb.positionScreen.z,ta,Da);Ja=wa(ca,W,V,ha);m(C,E,P,N,J,K);v(C,E,P,N,J,K,0,0,1,0,0,1,Ja);m(fa,O,Q,Y,ra,va);v(fa,O,Q,Y,ra,va,1,0,1,1,0,1,Ja)}}}}Ga.addRectangle(ya)}}n.setTransform(1,0,0,1,0,0)}}}; +THREE.CanvasRenderer=function(a){function b(a){if(u!==a)u=p.globalAlpha=a}function c(a){if(v!==a){if(a===THREE.NormalBlending)p.globalCompositeOperation="source-over";else if(a===THREE.AdditiveBlending)p.globalCompositeOperation="lighter";else if(a===THREE.SubtractiveBlending)p.globalCompositeOperation="darker";v=a}}function d(a){if(t!==a)t=p.strokeStyle=a}function f(a){if(A!==a)A=p.fillStyle=a}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},e=this,g,h,i,l=new THREE.Projector,j=a.canvas!== +void 0?a.canvas:document.createElement("canvas"),n,m,q,o,p=j.getContext("2d"),s=new THREE.Color(0),r=0,u=1,v=0,t=null,A=null,y=null,B=null,G=null,x,I,F,L,E=new THREE.RenderableVertex,P=new THREE.RenderableVertex,H,D,S,R,J,N,Y,K,fa,O,ra,va,da=new THREE.Color,ba=new THREE.Color,M=new THREE.Color,W=new THREE.Color,ha=new THREE.Color,ia={},oa={},ta,Ca,Ia,Wa,ja,ob,Na,Xa,pb,wb,eb=new THREE.Rectangle,Fa=new THREE.Rectangle,xa=new THREE.Rectangle,xb=false,Ga=new THREE.Color,Za=new THREE.Color,qb=new THREE.Color, +Da=new THREE.Vector3,$a,ab,fb,Oa,Pa,gb,a=16;$a=document.createElement("canvas");$a.width=$a.height=2;ab=$a.getContext("2d");ab.fillStyle="rgba(0,0,0,1)";ab.fillRect(0,0,2,2);fb=ab.getImageData(0,0,2,2);Oa=fb.data;Pa=document.createElement("canvas");Pa.width=Pa.height=a;gb=Pa.getContext("2d");gb.translate(-a/2,-a/2);gb.scale(a,a);a--;this.domElement=j;this.sortElements=this.sortObjects=this.autoClear=true;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;m=b;q=Math.floor(n/2); +o=Math.floor(m/2);j.width=n;j.height=m;eb.set(-q,-o,q,o);Fa.set(-q,-o,q,o);u=1;v=0;G=B=y=A=t=null};this.setClearColor=function(a,b){s.copy(a);r=b!==void 0?b:1;Fa.set(-q,-o,q,o)};this.setClearColorHex=function(a,b){s.setHex(a);r=b!==void 0?b:1;Fa.set(-q,-o,q,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){p.setTransform(1,0,0,-1,q,o);if(Fa.isEmpty()===false){Fa.minSelf(eb);Fa.inflate(2);r<1&&p.clearRect(Math.floor(Fa.getX()),Math.floor(Fa.getY()),Math.floor(Fa.getWidth()),Math.floor(Fa.getHeight())); +if(r>0){c(THREE.NormalBlending);b(1);f("rgba("+Math.floor(s.r*255)+","+Math.floor(s.g*255)+","+Math.floor(s.b*255)+","+r+")");p.fillRect(Math.floor(Fa.getX()),Math.floor(Fa.getY()),Math.floor(Fa.getWidth()),Math.floor(Fa.getHeight()))}Fa.empty()}};this.render=function(a,k){function j(a,b,c){for(var d=0,f=i.length;d1?1:a}function sb(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;if(f!==0){f=1/Math.sqrt(f);c=c*f;d=d*f;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}if(k instanceof THREE.Camera===false)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var Vb,Ec,A,Z;this.autoClear===true?this.clear(): +p.setTransform(1,0,0,-1,q,o);e.info.render.vertices=0;e.info.render.faces=0;g=l.projectScene(a,k,this.sortElements);h=g.elements;i=g.lights;xb=i.length>0;if(xb===true){Ga.setRGB(0,0,0);Za.setRGB(0,0,0);qb.setRGB(0,0,0);Vb=0;for(Ec=i.length;Vb>1;Tc=Wb.height>>1;ib=pa.scale.x*q;jb=pa.scale.y*o;Ea=ib*A;tb=jb*Tc;xa.set(ca.x-Ea,ca.y-tb,ca.x+Ea,ca.y+tb);if(eb.intersects(xa)!==false){p.save();p.translate(ca.x,ca.y);p.rotate(-pa.rotation);p.scale(ib,-jb);p.translate(-A,-Tc);p.drawImage(Wb,0,0);p.restore()}}else if(Z instanceof THREE.ParticleCanvasMaterial){Ea=pa.scale.x*q; +tb=pa.scale.y*o;xa.set(ca.x-Ea,ca.y-tb,ca.x+Ea,ca.y+tb);if(eb.intersects(xa)!==false){d(Z.color.getContextStyle());f(Z.color.getContextStyle());p.save();p.translate(ca.x,ca.y);p.rotate(-pa.rotation);p.scale(Ea,tb);Z.program(p);p.restore()}}}else if(A instanceof THREE.RenderableLine){x=A.v1;I=A.v2;x.positionScreen.x=x.positionScreen.x*q;x.positionScreen.y=x.positionScreen.y*o;I.positionScreen.x=I.positionScreen.x*q;I.positionScreen.y=I.positionScreen.y*o;xa.addPoint(x.positionScreen.x,x.positionScreen.y); +xa.addPoint(I.positionScreen.x,I.positionScreen.y);if(eb.intersects(xa)===true){ca=x;pa=I;b(Z.opacity);c(Z.blending);p.beginPath();p.moveTo(ca.positionScreen.x,ca.positionScreen.y);p.lineTo(pa.positionScreen.x,pa.positionScreen.y);if(Z instanceof THREE.LineBasicMaterial){ca=Z.linewidth;if(y!==ca)y=p.lineWidth=ca;ca=Z.linecap;if(B!==ca)B=p.lineCap=ca;ca=Z.linejoin;if(G!==ca)G=p.lineJoin=ca;d(Z.color.getContextStyle());p.stroke();xa.inflate(Z.linewidth*2)}}}else if(A instanceof THREE.RenderableFace3){x= +A.v1;I=A.v2;F=A.v3;x.positionScreen.x=x.positionScreen.x*q;x.positionScreen.y=x.positionScreen.y*o;I.positionScreen.x=I.positionScreen.x*q;I.positionScreen.y=I.positionScreen.y*o;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y=F.positionScreen.y*o;if(Z.overdraw===true){sb(x.positionScreen,I.positionScreen);sb(I.positionScreen,F.positionScreen);sb(F.positionScreen,x.positionScreen)}xa.add3Points(x.positionScreen.x,x.positionScreen.y,I.positionScreen.x,I.positionScreen.y,F.positionScreen.x, +F.positionScreen.y);eb.intersects(xa)===true&&n(x,I,F,0,1,2,A,Z,a)}else if(A instanceof THREE.RenderableFace4){x=A.v1;I=A.v2;F=A.v3;L=A.v4;x.positionScreen.x=x.positionScreen.x*q;x.positionScreen.y=x.positionScreen.y*o;I.positionScreen.x=I.positionScreen.x*q;I.positionScreen.y=I.positionScreen.y*o;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y=F.positionScreen.y*o;L.positionScreen.x=L.positionScreen.x*q;L.positionScreen.y=L.positionScreen.y*o;E.positionScreen.copy(I.positionScreen);P.positionScreen.copy(L.positionScreen); +if(Z.overdraw===true){sb(x.positionScreen,I.positionScreen);sb(I.positionScreen,L.positionScreen);sb(L.positionScreen,x.positionScreen);sb(F.positionScreen,E.positionScreen);sb(F.positionScreen,P.positionScreen)}xa.addPoint(x.positionScreen.x,x.positionScreen.y);xa.addPoint(I.positionScreen.x,I.positionScreen.y);xa.addPoint(F.positionScreen.x,F.positionScreen.y);xa.addPoint(L.positionScreen.x,L.positionScreen.y);if(eb.intersects(xa)===true){pa=x;Ea=I;tb=F;ib=L;jb=E;Wb=P;ca=A;A=a;e.info.render.vertices= +e.info.render.vertices+4;e.info.render.faces++;b(Z.opacity);c(Z.blending);if(Z.map!==void 0&&Z.map!==null||Z.envMap!==void 0&&Z.envMap!==null){n(pa,Ea,ib,0,1,3,ca,Z,A);n(jb,tb,Wb,1,2,3,ca,Z,A)}else{H=pa.positionScreen.x;D=pa.positionScreen.y;S=Ea.positionScreen.x;R=Ea.positionScreen.y;J=tb.positionScreen.x;N=tb.positionScreen.y;Y=ib.positionScreen.x;K=ib.positionScreen.y;fa=jb.positionScreen.x;O=jb.positionScreen.y;ra=Wb.positionScreen.x;va=Wb.positionScreen.y;if(Z instanceof THREE.MeshLambertMaterial|| +Z instanceof THREE.MeshPhongMaterial)if(xb===true){pa=Z.color;Ea=Z.emissive;if(Z.wireframe===false&&Z.shading==THREE.SmoothShading&&ca.vertexNormalsLength==4){ba.r=M.r=W.r=ha.r=Ga.r;ba.g=M.g=W.g=ha.g=Ga.g;ba.b=M.b=W.b=ha.b=Ga.b;j(ca.v1.positionWorld,ca.vertexNormalsWorld[0],ba);j(ca.v2.positionWorld,ca.vertexNormalsWorld[1],M);j(ca.v4.positionWorld,ca.vertexNormalsWorld[3],W);j(ca.v3.positionWorld,ca.vertexNormalsWorld[2],ha);ba.r=pa.r*ba.r+Ea.r;ba.g=pa.g*ba.g+Ea.g;ba.b=pa.b*ba.b+Ea.b;M.r=pa.r*M.r+ +Ea.r;M.g=pa.g*M.g+Ea.g;M.b=pa.b*M.b+Ea.b;W.r=pa.r*W.r+Ea.r;W.g=pa.g*W.g+Ea.g;W.b=pa.b*W.b+Ea.b;ha.r=pa.r*ha.r+Ea.r;ha.g=pa.g*ha.g+Ea.g;ha.b=pa.b*ha.b+Ea.b;Ia=rb(ba,M,W,ha);m(H,D,S,R,Y,K);v(H,D,S,R,Y,K,0,0,1,0,0,1,Ia);m(fa,O,J,N,ra,va);v(fa,O,J,N,ra,va,1,0,1,1,0,1,Ia)}else{da.r=Ga.r;da.g=Ga.g;da.b=Ga.b;j(ca.centroidWorld,ca.normalWorld,da);da.r=pa.r*da.r+Ea.r;da.g=pa.g*da.g+Ea.g;da.b=pa.b*da.b+Ea.b;t(H,D,S,R,J,N,Y,K);Z.wireframe===true?r(da,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin): +s(da)}}else{t(H,D,S,R,J,N,Y,K);Z.wireframe===true?r(Z.color,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):s(Z.color)}else if(Z instanceof THREE.MeshBasicMaterial){t(H,D,S,R,J,N,Y,K);Z.wireframe===true?r(Z.color,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):s(Z.color)}else if(Z instanceof THREE.MeshNormalMaterial){da.r=jc(ca.normalWorld.x);da.g=jc(ca.normalWorld.y);da.b=jc(ca.normalWorld.z);t(H,D,S,R,J,N,Y,K);Z.wireframe===true?r(da,Z.wireframeLinewidth,Z.wireframeLinecap, +Z.wireframeLinejoin):s(da)}else if(Z instanceof THREE.MeshDepthMaterial){ta=k.near;Ca=k.far;ba.r=ba.g=ba.b=1-fc(pa.positionScreen.z,ta,Ca);M.r=M.g=M.b=1-fc(Ea.positionScreen.z,ta,Ca);W.r=W.g=W.b=1-fc(ib.positionScreen.z,ta,Ca);ha.r=ha.g=ha.b=1-fc(tb.positionScreen.z,ta,Ca);Ia=rb(ba,M,W,ha);m(H,D,S,R,Y,K);v(H,D,S,R,Y,K,0,0,1,0,0,1,Ia);m(fa,O,J,N,ra,va);v(fa,O,J,N,ra,va,1,0,1,1,0,1,Ia)}}}}Fa.addRectangle(xa)}}p.setTransform(1,0,0,1,0,0)}}}; THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif", envmap_pars_fragment:"#ifdef USE_ENVMAP\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform float flipEnvMap;\nuniform int combine;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nreflectVec = refract( cameraToVertex, normal, refractionRatio );\n} else { \nreflectVec = reflect( cameraToVertex, normal );\n}\n#else\nreflectVec = vReflect;\n#endif\n#ifdef DOUBLE_SIDED\nfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\nvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#else\nvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#endif\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\nif ( combine == 1 ) {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n} else {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n}\n#endif", envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n#ifdef USE_SKINNING\nvec4 mPosition = modelMatrix * skinned;\n#endif\n#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 mPosition = modelMatrix * vec4( morphed, 1.0 );\n#endif\n#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 mPosition = modelMatrix * vec4( position, 1.0 );\n#endif\n#endif", @@ -333,147 +333,147 @@ THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}}; THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){if(a.__webglCustomAttributesList===void 0)a.__webglCustomAttributesList=[];for(var f in d.attributes){var e=d.attributes[f];if(!e.__webglInitialized||e.createUniqueBuffers){e.__webglInitialized=true;var g=1;e.type==="v2"?g=2:e.type==="v3"?g=3:e.type==="v4"?g=4:e.type==="c"&&(g=3);e.size=g;e.array=new Float32Array(c*g);e.buffer=k.createBuffer();e.buffer.belongsToAttribute=f;e.needsUpdate=true}a.__webglCustomAttributesList.push(e)}}} function c(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function d(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?false:a&&a.shading!==void 0&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function f(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?true:false}function e(a){var b, -c,d;for(b in a.attributes){d=b==="index"?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER;c=a.attributes[b];c.buffer=k.createBuffer();k.bindBuffer(d,c.buffer);k.bufferData(d,c.array,k.STATIC_DRAW)}}function g(a,b,c){var d,f,e,g,h=a.vertices;g=h.length;var i=a.colors,j=i.length,l=a.__vertexArray,m=a.__colorArray,o=a.__sortArray,n=a.verticesNeedUpdate,q=a.colorsNeedUpdate,p=a.__webglCustomAttributesList;if(c.sortParticles){gb.copy(bb);gb.multiplySelf(c.matrixWorld);for(d=0;d=0;c--)a[c].object===b&&a.splice(c,1)}function r(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function u(a,b,c,d,f){oa=0;if(d.needsUpdate){d.program&&O.deallocateMaterial(d);O.initMaterial(d,b,c,f);d.needsUpdate=false}if(d.morphTargets&&!f.__webglMorphTargetInfluences)f.__webglMorphTargetInfluences=new Float32Array(O.maxMorphTargets);var e=false,g=d.program,h=g.uniforms,i=d.uniforms;if(g!==da){k.useProgram(g);da=g;e=true}if(d.id!==W){W=d.id; +j;k++){h=a[k];i=h.object;if(i.visible){if(g)h=g;else{h=h[b];if(!h)continue;e&&O.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);O.setDepthTest(h.depthTest);O.setDepthWrite(h.depthWrite);B(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}O.renderImmediateObject(c,d,f,h,i)}}}function q(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function o(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return true;return false}function p(a){for(var b in a.attributes)a.attributes[b].needsUpdate= +false}function s(a,b){for(var c=a.length-1;c>=0;c--)a[c].object===b&&a.splice(c,1)}function r(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function u(a,b,c,d,f){oa=0;if(d.needsUpdate){d.program&&O.deallocateMaterial(d);O.initMaterial(d,b,c,f);d.needsUpdate=false}if(d.morphTargets&&!f.__webglMorphTargetInfluences)f.__webglMorphTargetInfluences=new Float32Array(O.maxMorphTargets);var e=false,g=d.program,h=g.uniforms,i=d.uniforms;if(g!==da){k.useProgram(g);da=g;e=true}if(d.id!==M){M=d.id; e=true}if(e||a!==ha){k.uniformMatrix4fv(h.projectionMatrix,false,a._projectionMatrixArray);a!==ha&&(ha=a)}if(d.skinning)if(ec&&f.useVertexTexture){if(h.boneTexture!==null){var j=v();k.uniform1i(h.boneTexture,j);O.setTexture(f.boneTexture,j)}}else h.boneGlobalMatrices!==null&&k.uniformMatrix4fv(h.boneGlobalMatrices,false,f.boneMatrices);if(e){if(c&&d.fog){i.fogColor.value=c.color;if(c instanceof THREE.Fog){i.fogNear.value=c.near;i.fogFar.value=c.far}else if(c instanceof THREE.FogExp2)i.fogDensity.value= -c.density}if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(hb){for(var l=0,m=0,o=0,n,q,p,t,r=qc,s=r.directional.colors,u=r.directional.positions,x=r.point.colors,B=r.point.positions,C=r.point.distances,G=r.spot.colors,F=r.spot.positions,K=r.spot.distances,E=r.spot.directions,J=r.spot.angles,L=r.spot.exponents,N=r.hemi.skyColors,V=r.hemi.groundColors,P=r.hemi.positions,Q=0,ca=0,Y=0,fa=0,c=n=p=p=q=0,e=b.length;c=Dc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+Dc);oa=oa+1;return a}function t(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse, -a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function A(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function y(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function B(a,b,c){if(qb!==a){a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL);qb=a}if(a&&(wb!==b||fb!==c)){k.polygonOffset(b,c);wb=b;fb=c}}function G(a){for(var a=a.split("\n"),b=0,c=a.length;b1||b.__oldAnisotropy)){k.texParameterf(a,Pb.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,rc));b.__oldAnisotropy=b.anisotropy}}function F(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16, -b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_STENCIL,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a)}else k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height)}function L(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function H(a){if(a=== +b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_STENCIL,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a)}else k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height)}function L(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function E(a){if(a=== THREE.RepeatWrapping)return k.REPEAT;if(a===THREE.ClampToEdgeWrapping)return k.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return k.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return k.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return k.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return k.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return k.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return k.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return k.LINEAR_MIPMAP_LINEAR; if(a===THREE.UnsignedByteType)return k.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return k.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return k.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return k.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return k.BYTE;if(a===THREE.ShortType)return k.SHORT;if(a===THREE.UnsignedShortType)return k.UNSIGNED_SHORT;if(a===THREE.IntType)return k.INT;if(a===THREE.UnsignedIntType)return k.UNSIGNED_INT;if(a===THREE.FloatType)return k.FLOAT; if(a===THREE.AlphaFormat)return k.ALPHA;if(a===THREE.RGBFormat)return k.RGB;if(a===THREE.RGBAFormat)return k.RGBA;if(a===THREE.LuminanceFormat)return k.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return k.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return k.FUNC_ADD;if(a===THREE.SubtractEquation)return k.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return k.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return k.ZERO;if(a===THREE.OneFactor)return k.ONE;if(a===THREE.SrcColorFactor)return k.SRC_COLOR; if(a===THREE.OneMinusSrcColorFactor)return k.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return k.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return k.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return k.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return k.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return k.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return k.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return k.SRC_ALPHA_SATURATE;if(yb!==void 0){if(a===THREE.RGB_S3TC_DXT1_Format)return yb.COMPRESSED_RGB_S3TC_DXT1_EXT; -if(a===THREE.RGBA_S3TC_DXT1_Format)return yb.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return yb.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return yb.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},M=a.canvas!==void 0?a.canvas:document.createElement("canvas"),C=a.precision!==void 0?a.precision:"highp",E=a.alpha!==void 0?a.alpha:true,P=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,N=a.antialias!== -void 0?a.antialias:false,Q=a.stencil!==void 0?a.stencil:true,Y=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,J=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),K=a.clearAlpha!==void 0?a.clearAlpha:0,fa=a.maxLights!==void 0?a.maxLights:4;this.domElement=M;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading= -this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var O=this,ra=[],va=0,da=null,ca=null,W=-1,V=null,ha=null,ia=0,oa=0,ta=-1,Da=-1,Ja=-1,Xa=-1,ja=-1,pb=-1,Oa=-1, -Ya=-1,qb=null,wb=null,fb=null,Ga=null,ya=0,xb=0,Ha=0,$a=0,rb=0,Ea=0,ab=new THREE.Frustum,bb=new THREE.Matrix4,gb=new THREE.Matrix4,Pa=new THREE.Vector4,Qa=new THREE.Vector3,hb=true,qc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},k,Pb,yb;try{if(!(k=M.getContext("experimental-webgl", -{alpha:E,premultipliedAlpha:P,antialias:N,stencil:Q,preserveDrawingBuffer:Y})))throw"Error creating WebGL context.";}catch(Rc){console.error(Rc)}a=k.getExtension("OES_texture_float");E=k.getExtension("OES_standard_derivatives");Pb=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");yb=k.getExtension("WEBGL_compressed_texture_s3tc")||k.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||k.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); -a||console.log("THREE.WebGLRenderer: Float textures not supported.");E||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");Pb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");yb||console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");k.clearColor(0,0,0,1);k.clearDepth(1);k.clearStencil(0);k.enable(k.DEPTH_TEST);k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD); -k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(J.r,J.g,J.b,K);this.context=k;var Dc=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),E=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Sc=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),rc=Pb?k.getParameter(Pb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,ic=E>0,ec=ic&&a;yb&&k.getParameter(k.COMPRESSED_TEXTURE_FORMATS);this.getContext=function(){return k};this.supportsVertexTextures=function(){return ic};this.getMaxAnisotropy= -function(){return rc};this.setSize=function(a,b){M.width=a;M.height=b;this.setViewport(0,0,M.width,M.height)};this.setViewport=function(a,b,c,d){ya=a!==void 0?a:0;xb=b!==void 0?b:0;Ha=c!==void 0?c:M.width;$a=d!==void 0?d:M.height;k.viewport(ya,xb,Ha,$a)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex=function(a,b){J.setHex(a);K=b;k.clearColor(J.r,J.g,J.b,K)};this.setClearColor=function(a, -b){J.copy(a);K=b;k.clearColor(J.r,J.g,J.b,K)};this.getClearColor=function(){return J};this.getClearAlpha=function(){return K};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|k.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|k.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)}; +if(a===THREE.RGBA_S3TC_DXT1_Format)return yb.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return yb.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return yb.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},P=a.canvas!==void 0?a.canvas:document.createElement("canvas"),H=a.precision!==void 0?a.precision:"highp",D=a.alpha!==void 0?a.alpha:true,S=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,R=a.antialias!== +void 0?a.antialias:false,J=a.stencil!==void 0?a.stencil:true,N=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,Y=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),K=a.clearAlpha!==void 0?a.clearAlpha:0,fa=a.maxLights!==void 0?a.maxLights:4;this.domElement=P;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading= +this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var O=this,ra=[],va=0,da=null,ba=null,M=-1,W=null,ha=null,ia=0,oa=0,ta=-1,Ca=-1,Ia=-1,Wa=-1,ja=-1,ob=-1,Na=-1, +Xa=-1,pb=null,wb=null,eb=null,Fa=null,xa=0,xb=0,Ga=0,Za=0,qb=0,Da=0,$a=new THREE.Frustum,ab=new THREE.Matrix4,fb=new THREE.Matrix4,Oa=new THREE.Vector4,Pa=new THREE.Vector3,gb=true,qc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},k,Pb,yb;try{if(!(k=P.getContext("experimental-webgl", +{alpha:D,premultipliedAlpha:S,antialias:R,stencil:J,preserveDrawingBuffer:N})))throw"Error creating WebGL context.";}catch(Rc){console.error(Rc)}a=k.getExtension("OES_texture_float");D=k.getExtension("OES_standard_derivatives");Pb=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");yb=k.getExtension("WEBGL_compressed_texture_s3tc")||k.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||k.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); +a||console.log("THREE.WebGLRenderer: Float textures not supported.");D||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");Pb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");yb||console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");k.clearColor(0,0,0,1);k.clearDepth(1);k.clearStencil(0);k.enable(k.DEPTH_TEST);k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD); +k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(Y.r,Y.g,Y.b,K);this.context=k;var Dc=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),D=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Sc=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),rc=Pb?k.getParameter(Pb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,ic=D>0,ec=ic&&a;yb&&k.getParameter(k.COMPRESSED_TEXTURE_FORMATS);this.getContext=function(){return k};this.supportsVertexTextures=function(){return ic};this.getMaxAnisotropy= +function(){return rc};this.setSize=function(a,b){P.width=a;P.height=b;this.setViewport(0,0,P.width,P.height)};this.setViewport=function(a,b,c,d){xa=a!==void 0?a:0;xb=b!==void 0?b:0;Ga=c!==void 0?c:P.width;Za=d!==void 0?d:P.height;k.viewport(xa,xb,Ga,Za)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex=function(a,b){Y.setHex(a);K=b;k.clearColor(Y.r,Y.g,Y.b,K)};this.setClearColor=function(a, +b){Y.copy(a);K=b;k.clearColor(Y.r,Y.g,Y.b,K)};this.getClearColor=function(){return Y};this.getClearAlpha=function(){return K};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|k.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|k.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)}; this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._modelMatrixArray;if(a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];k.deleteBuffer(c.__webglVertexBuffer);k.deleteBuffer(c.__webglNormalBuffer);k.deleteBuffer(c.__webglTangentBuffer);k.deleteBuffer(c.__webglColorBuffer);k.deleteBuffer(c.__webglUVBuffer);k.deleteBuffer(c.__webglUV2Buffer); k.deleteBuffer(c.__webglSkinIndicesBuffer);k.deleteBuffer(c.__webglSkinWeightsBuffer);k.deleteBuffer(c.__webglFaceBuffer);k.deleteBuffer(c.__webglLineBuffer);var d=void 0,f=void 0;if(c.numMorphTargets){d=0;for(f=c.numMorphTargets;d1&&(b=true);d=0;for(c=e.length;d=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.normal,i,k.FLOAT,false,0,g*i*4)}h=f.attributes.uv; +u(a,b,c,d,e);a=c.attributes;b=false;d=f.id*16777215+c.id*2+(d.wireframe?1:0);if(d!==W){W=d;b=true}if(e instanceof THREE.Mesh){e=f.offsets;e.length>1&&(b=true);d=0;for(c=e.length;d=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.normal,i,k.FLOAT,false,0,g*i*4)}h=f.attributes.uv; if(a.uv>=0&&h)if(h.buffer){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.uv,i,k.FLOAT,false,0,g*i*4);k.enableVertexAttribArray(a.uv)}else k.disableVertexAttribArray(a.uv);i=f.attributes.color;if(a.color>=0&&i){var j=i.itemSize;k.bindBuffer(k.ARRAY_BUFFER,i.buffer);k.vertexAttribPointer(a.color,j,k.FLOAT,false,0,g*j*4)}h=f.attributes.tangent;if(a.tangent>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.tangent,i,k.FLOAT,false,0,g*i*4)}k.bindBuffer(k.ELEMENT_ARRAY_BUFFER, f.attributes.index.buffer)}k.drawElements(k.TRIANGLES,e[d].count,k.UNSIGNED_SHORT,e[d].start*2);O.info.render.calls++;O.info.render.vertices=O.info.render.vertices+e[d].count;O.info.render.faces=O.info.render.faces+e[d].count/3}}else if(e instanceof THREE.ParticleSystem&&b){h=f.attributes.position;i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.position,i,k.FLOAT,false,0,0);i=f.attributes.color;if(a.color>=0&&i){j=i.itemSize;k.bindBuffer(k.ARRAY_BUFFER,i.buffer);k.vertexAttribPointer(a.color, -j,k.FLOAT,false,0,0)}k.drawArrays(k.POINTS,0,h.numItems/3);O.info.render.calls++;O.info.render.points=O.info.render.points+h.numItems/3}}};this.renderBuffer=function(a,b,c,d,f,e){if(d.visible!==false){var g,h,c=u(a,b,c,d,e),b=c.attributes,a=false,c=f.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==V){V=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){k.bindBuffer(k.ARRAY_BUFFER,f.__webglVertexBuffer);k.vertexAttribPointer(b.position,3,k.FLOAT,false,0,0)}}else if(e.morphTargetBase){c=d.program.attributes; +j,k.FLOAT,false,0,0)}k.drawArrays(k.POINTS,0,h.numItems/3);O.info.render.calls++;O.info.render.points=O.info.render.points+h.numItems/3}}};this.renderBuffer=function(a,b,c,d,f,e){if(d.visible!==false){var g,h,c=u(a,b,c,d,e),b=c.attributes,a=false,c=f.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==W){W=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){k.bindBuffer(k.ARRAY_BUFFER,f.__webglVertexBuffer);k.vertexAttribPointer(b.position,3,k.FLOAT,false,0,0)}}else if(e.morphTargetBase){c=d.program.attributes; if(e.morphTargetBase!==-1){k.bindBuffer(k.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[e.morphTargetBase]);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}else if(c.position>=0){k.bindBuffer(k.ARRAY_BUFFER,f.__webglVertexBuffer);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}if(e.morphTargetForcedOrder.length){var i=0;h=e.morphTargetForcedOrder;for(g=e.morphTargetInfluences;i0&&h.push([j,i])}if(h.length>d.numSupportedMorphTargets){h.sort(l);h.length=d.numSupportedMorphTargets}else h.length>d.numSupportedMorphNormals?h.sort(l):h.length===0&&h.push([0,0]);for(i=0;i=0){k.bindBuffer(k.ARRAY_BUFFER,c.buffer);k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,false,0,0)}}}if(b.color>=0){k.bindBuffer(k.ARRAY_BUFFER,f.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.normal>= 0){k.bindBuffer(k.ARRAY_BUFFER,f.__webglNormalBuffer);k.vertexAttribPointer(b.normal,3,k.FLOAT,false,0,0)}if(b.tangent>=0){k.bindBuffer(k.ARRAY_BUFFER,f.__webglTangentBuffer);k.vertexAttribPointer(b.tangent,4,k.FLOAT,false,0,0)}if(b.uv>=0)if(f.__webglUVBuffer){k.bindBuffer(k.ARRAY_BUFFER,f.__webglUVBuffer);k.vertexAttribPointer(b.uv,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv)}else k.disableVertexAttribArray(b.uv);if(b.uv2>=0)if(f.__webglUV2Buffer){k.bindBuffer(k.ARRAY_BUFFER,f.__webglUV2Buffer); -k.vertexAttribPointer(b.uv2,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv2)}else k.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinIndex>=0&&b.skinWeight>=0){k.bindBuffer(k.ARRAY_BUFFER,f.__webglSkinIndicesBuffer);k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,f.__webglSkinWeightsBuffer);k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,false,0,0)}}if(e instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==Ga){k.lineWidth(d);Ga=d}a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER, -f.__webglLineBuffer);k.drawElements(k.LINES,f.__webglLineCount,k.UNSIGNED_SHORT,0)}else{a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer);k.drawElements(k.TRIANGLES,f.__webglFaceCount,k.UNSIGNED_SHORT,0)}O.info.render.calls++;O.info.render.vertices=O.info.render.vertices+f.__webglFaceCount;O.info.render.faces=O.info.render.faces+f.__webglFaceCount/3}else if(e instanceof THREE.Line){e=e.type===THREE.LineStrip?k.LINE_STRIP:k.LINES;d=d.linewidth;if(d!==Ga){k.lineWidth(d);Ga=d}k.drawArrays(e, +k.vertexAttribPointer(b.uv2,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv2)}else k.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinIndex>=0&&b.skinWeight>=0){k.bindBuffer(k.ARRAY_BUFFER,f.__webglSkinIndicesBuffer);k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,f.__webglSkinWeightsBuffer);k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,false,0,0)}}if(e instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==Fa){k.lineWidth(d);Fa=d}a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER, +f.__webglLineBuffer);k.drawElements(k.LINES,f.__webglLineCount,k.UNSIGNED_SHORT,0)}else{a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer);k.drawElements(k.TRIANGLES,f.__webglFaceCount,k.UNSIGNED_SHORT,0)}O.info.render.calls++;O.info.render.vertices=O.info.render.vertices+f.__webglFaceCount;O.info.render.faces=O.info.render.faces+f.__webglFaceCount/3}else if(e instanceof THREE.Line){e=e.type===THREE.LineStrip?k.LINE_STRIP:k.LINES;d=d.linewidth;if(d!==Fa){k.lineWidth(d);Fa=d}k.drawArrays(e, 0,f.__webglLineCount);O.info.render.calls++}else if(e instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,f.__webglParticleCount);O.info.render.calls++;O.info.render.points=O.info.render.points+f.__webglParticleCount}else if(e instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,f.__webglVertexCount);O.info.render.calls++}}};this.render=function(a,b,c,d){if(b instanceof THREE.Camera===false)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var f, -e,g,h,l=a.__lights,n=a.fog;W=-1;hb=true;this.autoUpdateScene&&a.updateMatrixWorld();b.parent===void 0&&b.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);bb.multiply(b.projectionMatrix,b.matrixWorldInverse);ab.setFromMatrix(bb);this.autoUpdateObjects&& -this.initWebGLObjects(a);j(this.renderPluginsPre,a,b);O.info.render.calls=0;O.info.render.vertices=0;O.info.render.faces=0;O.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjects;d=0;for(f=h.length;d=0){s=p.geometry.materials[s];if(s.transparent){q.transparent=s;q.opaque=null}else{q.opaque=s;q.transparent=null}}}else if(s)if(s.transparent){q.transparent=s;q.opaque=null}else{q.opaque=s;q.transparent=null}e.render=true;if(this.sortObjects)if(g.renderDepth)e.z=g.renderDepth;else{Pa.copy(g.matrixWorld.getPosition());bb.multiplyVector3(Pa);e.z=Pa.z}}}this.sortObjects&&h.sort(i);h=a.__webglObjectsImmediate;d=0;for(f= -h.length;d65535){G[B].counter=G[B].counter+1;C=G[B].hash+"_"+G[B].counter;t.geometryGroups[C]===void 0&&(t.geometryGroups[C]={faces3:[],faces4:[],materialIndex:y,vertices:0,numMorphTargets:H,numMorphNormals:F})}x instanceof THREE.Face3?t.geometryGroups[C].faces3.push(u): -t.geometryGroups[C].faces4.push(u);t.geometryGroups[C].vertices=t.geometryGroups[C].vertices+A}t.geometryGroupsList=[];var I=void 0;for(I in t.geometryGroups){t.geometryGroups[I].id=ia++;t.geometryGroupsList.push(t.geometryGroups[I])}}for(l in m.geometryGroups){o=m.geometryGroups[l];if(!o.__webglVertexBuffer){var E=o;E.__webglVertexBuffer=k.createBuffer();E.__webglNormalBuffer=k.createBuffer();E.__webglTangentBuffer=k.createBuffer();E.__webglColorBuffer=k.createBuffer();E.__webglUVBuffer=k.createBuffer(); -E.__webglUV2Buffer=k.createBuffer();E.__webglSkinIndicesBuffer=k.createBuffer();E.__webglSkinWeightsBuffer=k.createBuffer();E.__webglFaceBuffer=k.createBuffer();E.__webglLineBuffer=k.createBuffer();var K=void 0,W=void 0;if(E.numMorphTargets){E.__webglMorphTargetsBuffers=[];K=0;for(W=E.numMorphTargets;K0||M.faceVertexUvs.length>0)J.__uvArray=new Float32Array(V*2);if(M.faceUvs.length>1||M.faceVertexUvs.length> -1)J.__uv2Array=new Float32Array(V*2)}if(L.geometry.skinWeights.length&&L.geometry.skinIndices.length){J.__skinIndexArray=new Float32Array(V*4);J.__skinWeightArray=new Float32Array(V*4)}J.__faceArray=new Uint16Array(P*3);J.__lineArray=new Uint16Array(ca*2);var oa=void 0,ta=void 0;if(J.numMorphTargets){J.__morphTargetsArrays=[];oa=0;for(ta=J.numMorphTargets;oa0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglSkinIndicesBuffer);k.bufferData(k.ARRAY_BUFFER,Aa,mb);k.bindBuffer(k.ARRAY_BUFFER,la.__webglSkinWeightsBuffer);k.bufferData(k.ARRAY_BUFFER,Ba,mb)}}if(hd&&ec){D=0;for(X=ma.length;D< -X;D++){R=Wa[ma[D]];vb=R.vertexColors;Gc=R.color;if(vb.length===3&&ec===THREE.VertexColors){Fb=vb[0];Gb=vb[1];Hb=vb[2]}else Hb=Gb=Fb=Gc;Ta[Ka]=Fb.r;Ta[Ka+1]=Fb.g;Ta[Ka+2]=Fb.b;Ta[Ka+3]=Gb.r;Ta[Ka+4]=Gb.g;Ta[Ka+5]=Gb.b;Ta[Ka+6]=Hb.r;Ta[Ka+7]=Hb.g;Ta[Ka+8]=Hb.b;Ka=Ka+9}D=0;for(X=na.length;D0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Ta,mb)}}if(Sc&&db.hasTangents){D=0;for(X=ma.length;D0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglUVBuffer);k.bufferData(k.ARRAY_BUFFER,xc,mb)}}if(ad&&Yc&&ic){D=0;for(X=ma.length;D0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglUV2Buffer);k.bufferData(k.ARRAY_BUFFER,yc,mb)}}if(Dc){D=0;for(X=ma.length;D=0){s=q.geometry.materials[s];if(s.transparent){p.transparent=s;p.opaque=null}else{p.opaque=s;p.transparent=null}}}else if(s)if(s.transparent){p.transparent=s;p.opaque=null}else{p.opaque=s;p.transparent=null}e.render=true;if(this.sortObjects)if(g.renderDepth)e.z=g.renderDepth;else{Oa.copy(g.matrixWorld.getPosition());ab.multiplyVector3(Oa);e.z=Oa.z}}}this.sortObjects&&h.sort(i);h=a.__webglObjectsImmediate;d=0;for(f= +h.length;d65535){E[B].counter=E[B].counter+1;G=E[B].hash+"_"+E[B].counter;t.geometryGroups[G]===void 0&&(t.geometryGroups[G]={faces3:[],faces4:[],materialIndex:y,vertices:0,numMorphTargets:F,numMorphNormals:K})}x instanceof THREE.Face3?t.geometryGroups[G].faces3.push(u): +t.geometryGroups[G].faces4.push(u);t.geometryGroups[G].vertices=t.geometryGroups[G].vertices+A}t.geometryGroupsList=[];var H=void 0;for(H in t.geometryGroups){t.geometryGroups[H].id=ia++;t.geometryGroupsList.push(t.geometryGroups[H])}}for(l in m.geometryGroups){n=m.geometryGroups[l];if(!n.__webglVertexBuffer){var D=n;D.__webglVertexBuffer=k.createBuffer();D.__webglNormalBuffer=k.createBuffer();D.__webglTangentBuffer=k.createBuffer();D.__webglColorBuffer=k.createBuffer();D.__webglUVBuffer=k.createBuffer(); +D.__webglUV2Buffer=k.createBuffer();D.__webglSkinIndicesBuffer=k.createBuffer();D.__webglSkinWeightsBuffer=k.createBuffer();D.__webglFaceBuffer=k.createBuffer();D.__webglLineBuffer=k.createBuffer();var I=void 0,J=void 0;if(D.numMorphTargets){D.__webglMorphTargetsBuffers=[];I=0;for(J=D.numMorphTargets;I0||N.faceVertexUvs.length>0)M.__uvArray=new Float32Array(W*2);if(N.faceUvs.length>1||N.faceVertexUvs.length> +1)M.__uv2Array=new Float32Array(W*2)}if(L.geometry.skinWeights.length&&L.geometry.skinIndices.length){M.__skinIndexArray=new Float32Array(W*4);M.__skinWeightArray=new Float32Array(W*4)}M.__faceArray=new Uint16Array(R*3);M.__lineArray=new Uint16Array(S*2);var oa=void 0,ta=void 0;if(M.numMorphTargets){M.__morphTargetsArrays=[];oa=0;for(ta=M.numMorphTargets;oa0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglSkinIndicesBuffer);k.bufferData(k.ARRAY_BUFFER,za,lb);k.bindBuffer(k.ARRAY_BUFFER,la.__webglSkinWeightsBuffer);k.bufferData(k.ARRAY_BUFFER,Aa,lb)}}if(hd&&ec){C=0;for(X=ma.length;C0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Sa,lb)}}if(Sc&&cb.hasTangents){C=0;for(X=ma.length;C0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglUVBuffer);k.bufferData(k.ARRAY_BUFFER,xc,lb)}}if(ad&&Yc&&ic){C=0;for(X=ma.length;C0){k.bindBuffer(k.ARRAY_BUFFER,la.__webglUV2Buffer);k.bufferData(k.ARRAY_BUFFER,yc,lb)}}if(Dc){C=0;for(X=ma.length;C=0&&k.enableVertexAttribArray(t.position);t.color>=0&&k.enableVertexAttribArray(t.color);t.normal>=0&&k.enableVertexAttribArray(t.normal);t.tangent>=0&&k.enableVertexAttribArray(t.tangent); +"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");f=x("fragment",f+q);d=x("vertex",d+p);k.attachShader(s,d);k.attachShader(s,f);k.linkProgram(s);k.getProgramParameter(s,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(s, +k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");k.deleteShader(f);k.deleteShader(d);s.uniforms={};s.attributes={};var r,d=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","modelMatrix","cameraPosition","morphTargetInfluences"];c.useVertexTexture?d.push("boneTexture"):d.push("boneGlobalMatrices");for(r in o)d.push(r);r=d;d=0;for(o=r.length;d=0&&k.enableVertexAttribArray(t.position);t.color>=0&&k.enableVertexAttribArray(t.color);t.normal>=0&&k.enableVertexAttribArray(t.normal);t.tangent>=0&&k.enableVertexAttribArray(t.tangent); if(a.skinning&&t.skinIndex>=0&&t.skinWeight>=0){k.enableVertexAttribArray(t.skinIndex);k.enableVertexAttribArray(t.skinWeight)}if(a.attributes)for(j in a.attributes)t[j]!==void 0&&t[j]>=0&&k.enableVertexAttribArray(t[j]);if(a.morphTargets){a.numSupportedMorphTargets=0;s="morphTarget";for(j=0;j=0){k.enableVertexAttribArray(t[r]);a.numSupportedMorphTargets++}}}if(a.morphNormals){a.numSupportedMorphNormals=0;s="morphNormal";for(j=0;j=0){k.enableVertexAttribArray(t[r]);a.numSupportedMorphNormals++}}}a.uniformsList=[];for(i in a.uniforms)a.uniformsList.push([a.uniforms[i],i])};this.setFaceCulling=function(a,b){if(a){!b||b==="ccw"?k.frontFace(k.CCW):k.frontFace(k.CW);a==="back"?k.cullFace(k.BACK):a==="front"?k.cullFace(k.FRONT):k.cullFace(k.FRONT_AND_BACK);k.enable(k.CULL_FACE)}else k.disable(k.CULL_FACE)};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide,a=a.side===THREE.BackSide;if(ta!==b){b?k.disable(k.CULL_FACE): -k.enable(k.CULL_FACE);ta=b}if(Da!==a){a?k.frontFace(k.CW):k.frontFace(k.CCW);Da=a}};this.setDepthTest=function(a){if(Oa!==a){a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST);Oa=a}};this.setDepthWrite=function(a){if(Ya!==a){k.depthMask(a);Ya=a}};this.setBlending=function(a,b,c,d){if(a!==Ja){if(a===THREE.NoBlending)k.disable(k.BLEND);else if(a===THREE.AdditiveBlending){k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE)}else if(a===THREE.SubtractiveBlending){k.enable(k.BLEND); -k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR)}else if(a===THREE.MultiplyBlending){k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.SRC_COLOR)}else if(a===THREE.CustomBlending)k.enable(k.BLEND);else{k.enable(k.BLEND);k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD);k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)}Ja=a}if(a===THREE.CustomBlending){if(b!==Xa){k.blendEquation(H(b));Xa=b}if(c!==ja||d!==pb){k.blendFunc(H(c),H(d)); -ja=c;pb=d}}else pb=ja=Xa=null};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit){a.__webglInit=true;a.__webglTexture=k.createTexture();O.info.memory.textures++}k.activeTexture(k.TEXTURE0+b);k.bindTexture(k.TEXTURE_2D,a.__webglTexture);k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,a.flipY);k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);var c=a.image,d=(c.width&c.width-1)===0&&(c.height&c.height-1)===0,f=H(a.format),e=H(a.type);I(k.TEXTURE_2D,a,d);if(a instanceof THREE.CompressedTexture)for(var e= +k.enable(k.CULL_FACE);ta=b}if(Ca!==a){a?k.frontFace(k.CW):k.frontFace(k.CCW);Ca=a}};this.setDepthTest=function(a){if(Na!==a){a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST);Na=a}};this.setDepthWrite=function(a){if(Xa!==a){k.depthMask(a);Xa=a}};this.setBlending=function(a,b,c,d){if(a!==Ia){if(a===THREE.NoBlending)k.disable(k.BLEND);else if(a===THREE.AdditiveBlending){k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE)}else if(a===THREE.SubtractiveBlending){k.enable(k.BLEND); +k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR)}else if(a===THREE.MultiplyBlending){k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.SRC_COLOR)}else if(a===THREE.CustomBlending)k.enable(k.BLEND);else{k.enable(k.BLEND);k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD);k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)}Ia=a}if(a===THREE.CustomBlending){if(b!==Wa){k.blendEquation(E(b));Wa=b}if(c!==ja||d!==ob){k.blendFunc(E(c),E(d)); +ja=c;ob=d}}else ob=ja=Wa=null};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit){a.__webglInit=true;a.__webglTexture=k.createTexture();O.info.memory.textures++}k.activeTexture(k.TEXTURE0+b);k.bindTexture(k.TEXTURE_2D,a.__webglTexture);k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,a.flipY);k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);var c=a.image,d=(c.width&c.width-1)===0&&(c.height&c.height-1)===0,f=E(a.format),e=E(a.type);I(k.TEXTURE_2D,a,d);if(a instanceof THREE.CompressedTexture)for(var e= a.mipmaps,g=0,h=e.length;g1&&(c=c-1)}b===void 0&&(b={h:0,s:0,v:0});b.h=c;b.s=g;b.v=e;return b}}; THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(a,b){for(var c,d,f=a.vertices.length,e=b instanceof THREE.Mesh?b.geometry:b,g=a.vertices,h=e.vertices,i=a.faces,l=e.faces,j=a.faceVertexUvs[0],o=e.faceVertexUvs[0],m={},p=0;p1){d=1-d;f=1-f}e=1-d-f;g.copy(a);g.multiplyScalar(d);h.copy(b);h.multiplyScalar(f);g.addSelf(h);h.copy(c);h.multiplyScalar(e);g.addSelf(h);return g},randomPointInFace:function(a,b,c){var d,f,e;if(a instanceof THREE.Face3){d=b.vertices[a.a];f=b.vertices[a.b];e=b.vertices[a.c];return THREE.GeometryUtils.randomPointInTriangle(d,f,e)}if(a instanceof THREE.Face4){d=b.vertices[a.a];f=b.vertices[a.b];e=b.vertices[a.c];var b=b.vertices[a.d],g;if(c)if(a._area1&&a._area2){c=a._area1;g=a._area2}else{c=THREE.GeometryUtils.triangleArea(d,f,b);g=THREE.GeometryUtils.triangleArea(f,e,b);a._area1=c;a._area2=g}else{c=THREE.GeometryUtils.triangleArea(d,f,b);g=THREE.GeometryUtils.triangleArea(f,e,b)}return THREE.GeometryUtils.random()* -(c+g)a?b(c,f-1):l[f]a?b(c,f-1):l[f] -b||q>b||m>b){i=a.vertices.length;v=f.clone();t=f.clone();if(p>=q&&p>=m){l=l.clone();l.lerpSelf(j,0.5);v.a=e;v.b=i;v.c=h;t.a=i;t.b=g;t.c=h;if(f.vertexNormals.length===3){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[1],0.5);v.vertexNormals[1].copy(e);t.vertexNormals[0].copy(e)}if(f.vertexColors.length===3){e=f.vertexColors[0].clone();e.lerpSelf(f.vertexColors[1],0.5);v.vertexColors[1].copy(e);t.vertexColors[0].copy(e)}f=0}else if(q>=p&&q>=m){l=j.clone();l.lerpSelf(o,0.5);v.a=e;v.b=g;v.c= +e.a;h=e.b;i=e.c;g=a.vertices[g];h=a.vertices[h];i=a.vertices[i];b.push(g.clone());b.push(h.clone());b.push(i.clone());e.a=f;e.b=f+1;e.c=f+2}}a.vertices=b;delete a.__tmpVertices},tessellate:function(a,b){var c,d,f,e,g,h,i,l,j,n,m,q,o,p,s,r,u,v,t,A=[],y=[];c=0;for(d=a.faceVertexUvs.length;c +b||o>b||m>b){i=a.vertices.length;v=f.clone();t=f.clone();if(q>=o&&q>=m){l=l.clone();l.lerpSelf(j,0.5);v.a=e;v.b=i;v.c=h;t.a=i;t.b=g;t.c=h;if(f.vertexNormals.length===3){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[1],0.5);v.vertexNormals[1].copy(e);t.vertexNormals[0].copy(e)}if(f.vertexColors.length===3){e=f.vertexColors[0].clone();e.lerpSelf(f.vertexColors[1],0.5);v.vertexColors[1].copy(e);t.vertexColors[0].copy(e)}f=0}else if(o>=q&&o>=m){l=j.clone();l.lerpSelf(n,0.5);v.a=e;v.b=g;v.c= i;t.a=i;t.b=h;t.c=e;if(f.vertexNormals.length===3){e=f.vertexNormals[1].clone();e.lerpSelf(f.vertexNormals[2],0.5);v.vertexNormals[2].copy(e);t.vertexNormals[0].copy(e);t.vertexNormals[1].copy(f.vertexNormals[2]);t.vertexNormals[2].copy(f.vertexNormals[0])}if(f.vertexColors.length===3){e=f.vertexColors[1].clone();e.lerpSelf(f.vertexColors[2],0.5);v.vertexColors[2].copy(e);t.vertexColors[0].copy(e);t.vertexColors[1].copy(f.vertexColors[2]);t.vertexColors[2].copy(f.vertexColors[0])}f=1}else{l=l.clone(); -l.lerpSelf(o,0.5);v.a=e;v.b=g;v.c=i;t.a=i;t.b=g;t.c=h;if(f.vertexNormals.length===3){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[2],0.5);v.vertexNormals[2].copy(e);t.vertexNormals[0].copy(e)}if(f.vertexColors.length===3){e=f.vertexColors[0].clone();e.lerpSelf(f.vertexColors[2],0.5);v.vertexColors[2].copy(e);t.vertexColors[0].copy(e)}f=2}A.push(v,t);a.vertices.push(l);e=0;for(g=a.faceVertexUvs.length;eb||q>b||n>b||s>b){r=a.vertices.length;u=a.vertices.length+1;v=f.clone();t=f.clone();if(p>=q&&p>=n&&p>=s||n>=q&&n>=p&&n>=s){p=l.clone();p.lerpSelf(j,0.5);j=o.clone();j.lerpSelf(m,0.5);v.a=e;v.b=r;v.c=u;v.d=i;t.a=r;t.b=g;t.c=h;t.d=u;if(f.vertexNormals.length===4){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[1],0.5);g=f.vertexNormals[2].clone();g.lerpSelf(f.vertexNormals[3],0.5);v.vertexNormals[1].copy(e); -v.vertexNormals[2].copy(g);t.vertexNormals[0].copy(e);t.vertexNormals[3].copy(g)}if(f.vertexColors.length===4){e=f.vertexColors[0].clone();e.lerpSelf(f.vertexColors[1],0.5);g=f.vertexColors[2].clone();g.lerpSelf(f.vertexColors[3],0.5);v.vertexColors[1].copy(e);v.vertexColors[2].copy(g);t.vertexColors[0].copy(e);t.vertexColors[3].copy(g)}f=0}else{p=j.clone();p.lerpSelf(o,0.5);j=m.clone();j.lerpSelf(l,0.5);v.a=e;v.b=g;v.c=r;v.d=u;t.a=u;t.b=r;t.c=h;t.d=i;if(f.vertexNormals.length===4){e=f.vertexNormals[1].clone(); -e.lerpSelf(f.vertexNormals[2],0.5);g=f.vertexNormals[3].clone();g.lerpSelf(f.vertexNormals[0],0.5);v.vertexNormals[2].copy(e);v.vertexNormals[3].copy(g);t.vertexNormals[0].copy(g);t.vertexNormals[1].copy(e)}if(f.vertexColors.length===4){e=f.vertexColors[1].clone();e.lerpSelf(f.vertexColors[2],0.5);g=f.vertexColors[3].clone();g.lerpSelf(f.vertexColors[0],0.5);v.vertexColors[2].copy(e);v.vertexColors[3].copy(g);t.vertexColors[0].copy(g);t.vertexColors[1].copy(e)}f=1}A.push(v,t);a.vertices.push(p,j); -e=0;for(g=a.faceVertexUvs.length;eb||o>b||p>b||s>b){r=a.vertices.length;u=a.vertices.length+1;v=f.clone();t=f.clone();if(q>=o&&q>=p&&q>=s||p>=o&&p>=q&&p>=s){q=l.clone();q.lerpSelf(j,0.5);j=n.clone();j.lerpSelf(m,0.5);v.a=e;v.b=r;v.c=u;v.d=i;t.a=r;t.b=g;t.c=h;t.d=u;if(f.vertexNormals.length===4){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[1],0.5);g=f.vertexNormals[2].clone();g.lerpSelf(f.vertexNormals[3],0.5);v.vertexNormals[1].copy(e); +v.vertexNormals[2].copy(g);t.vertexNormals[0].copy(e);t.vertexNormals[3].copy(g)}if(f.vertexColors.length===4){e=f.vertexColors[0].clone();e.lerpSelf(f.vertexColors[1],0.5);g=f.vertexColors[2].clone();g.lerpSelf(f.vertexColors[3],0.5);v.vertexColors[1].copy(e);v.vertexColors[2].copy(g);t.vertexColors[0].copy(e);t.vertexColors[3].copy(g)}f=0}else{q=j.clone();q.lerpSelf(n,0.5);j=m.clone();j.lerpSelf(l,0.5);v.a=e;v.b=g;v.c=r;v.d=u;t.a=u;t.b=r;t.c=h;t.d=i;if(f.vertexNormals.length===4){e=f.vertexNormals[1].clone(); +e.lerpSelf(f.vertexNormals[2],0.5);g=f.vertexNormals[3].clone();g.lerpSelf(f.vertexNormals[0],0.5);v.vertexNormals[2].copy(e);v.vertexNormals[3].copy(g);t.vertexNormals[0].copy(g);t.vertexNormals[1].copy(e)}if(f.vertexColors.length===4){e=f.vertexColors[1].clone();e.lerpSelf(f.vertexColors[2],0.5);g=f.vertexColors[3].clone();g.lerpSelf(f.vertexColors[0],0.5);v.vertexColors[2].copy(e);v.vertexColors[3].copy(g);t.vertexColors[0].copy(g);t.vertexColors[1].copy(e)}f=1}A.push(v,t);a.vertices.push(q,j); +e=0;for(g=a.faceVertexUvs.length;e>8&255,i>>16&255,i>>24&255));return d}d.mipmapCount=1;if(h[2]&131072&&b!==false)d.mipmapCount=Math.max(1,h[7]);d.width=h[4];d.height=h[3];h=h[1]+4;e=d.width;g=d.height;for(i=0;if-1?f-1:o+1,q=j-1<0?0:j-1,n=j+1>d-1?d-1:j+1,s=[], -r=[0,0,h[(o*d+j)*4]/255*b];s.push([-1,0,h[(o*d+q)*4]/255*b]);s.push([-1,-1,h[(m*d+q)*4]/255*b]);s.push([0,-1,h[(m*d+j)*4]/255*b]);s.push([1,-1,h[(m*d+n)*4]/255*b]);s.push([1,0,h[(o*d+n)*4]/255*b]);s.push([1,1,h[(p*d+n)*4]/255*b]);s.push([0,1,h[(p*d+j)*4]/255*b]);s.push([-1,1,h[(p*d+q)*4]/255*b]);m=[];q=s.length;for(p=0;pf-1?f-1:n+1,o=j-1<0?0:j-1,p=j+1>d-1?d-1:j+1,s=[], +r=[0,0,h[(n*d+j)*4]/255*b];s.push([-1,0,h[(n*d+o)*4]/255*b]);s.push([-1,-1,h[(m*d+o)*4]/255*b]);s.push([0,-1,h[(m*d+j)*4]/255*b]);s.push([1,-1,h[(m*d+p)*4]/255*b]);s.push([1,0,h[(n*d+p)*4]/255*b]);s.push([1,1,h[(q*d+p)*4]/255*b]);s.push([0,1,h[(q*d+j)*4]/255*b]);s.push([-1,1,h[(q*d+o)*4]/255*b]);m=[];o=s.length;for(q=0;q0)for(l=0;l2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");break}i=l;f<=i&&(i=0);l=i+1;f<=l&&(l=0);j=l+1;f<=j&&(j=0);var m;a:{m=a;var p=i,q=l,n=j,s=f,r=g,u=void 0,v=void 0,t=void 0,A=void 0,y=void 0, -B=void 0,G=void 0,x=void 0,I=void 0,v=m[r[p]].x,t=m[r[p]].y,A=m[r[q]].x,y=m[r[q]].y,B=m[r[n]].x,G=m[r[n]].y;if(1E-10>(A-v)*(G-t)-(y-t)*(B-v))m=false;else{for(u=0;u=0&&H>=0&&C>=0){m=false;break a}}m=true}}if(m){e.push([a[g[i]], -a[g[l]],a[g[j]]]);h.push([g[i],g[l],g[j]]);i=l;for(j=l+1;j0)for(l=0;l2;){if(n--<=0){console.log("Warning, unable to triangulate polygon!");break}i=l;f<=i&&(i=0);l=i+1;f<=l&&(l=0);j=l+1;f<=j&&(j=0);var m;a:{m=a;var q=i,o=l,p=j,s=f,r=g,u=void 0,v=void 0,t=void 0,A=void 0,y=void 0, +B=void 0,G=void 0,x=void 0,I=void 0,v=m[r[q]].x,t=m[r[q]].y,A=m[r[o]].x,y=m[r[o]].y,B=m[r[p]].x,G=m[r[p]].y;if(1E-10>(A-v)*(G-t)-(y-t)*(B-v))m=false;else{for(u=0;u=0&&E>=0&&H>=0){m=false;break a}}m=true}}if(m){e.push([a[g[i]], +a[g[l]],a[g[j]]]);h.push([g[i],g[l],g[j]]);i=l;for(j=l+1;j0)h=d-1;else{h=d;break}}d=h;if(c[d]==e)return d/(f-1);g=c[d];return c=(d+(e-g)/(c[d+1]-g))/(f-1)};THREE.Curve.prototype.getNormalVector=function(a){a=this.getTangent(a);return new THREE.Vector2(-a.y,a.x)}; @@ -554,7 +554,7 @@ THREE.ClosedSplineCurve3=THREE.Curve.create(function(a){this.points=a==void 0?[] d[c[1]].z,d[c[2]].z,d[c[3]].z,f);return b});THREE.CurvePath=function(){this.curves=[];this.bends=[];this.autoClose=false};THREE.CurvePath.prototype=Object.create(THREE.Curve.prototype);THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new THREE.LineCurve(b,a))}; THREE.CurvePath.prototype.getPoint=function(a){for(var b=a*this.getLength(),c=this.getCurveLengths(),a=0;a=b){b=c[a]-b;a=this.curves[a];b=1-b/a.getLength();return 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,d=this.curves.length;for(c=0;cb)b=h.x;else if(h.xc)c=h.y;else if(h.yd)d=h.z;else if(h.zb)b=h.x;else if(h.xc)c=h.y;else if(h.yd)d=h.z;else if(h.z0){g=c[c.length-1]; -p=g.x;q=g.y}else{g=this.actions[d-1].args;p=g[g.length-2];q=g[g.length-1]}for(e=1;e<=a;e++){n=e/a;g=THREE.Shape.Utils.b2(n,p,o,h);n=THREE.Shape.Utils.b2(n,q,m,i);c.push(new THREE.Vector2(g,n))}break;case THREE.PathActions.BEZIER_CURVE_TO:h=e[4];i=e[5];o=e[0];m=e[1];l=e[2];j=e[3];if(c.length>0){g=c[c.length-1];p=g.x;q=g.y}else{g=this.actions[d-1].args;p=g[g.length-2];q=g[g.length-1]}for(e=1;e<=a;e++){n=e/a;g=THREE.Shape.Utils.b3(n,p,o,l,h);n=THREE.Shape.Utils.b3(n,q,m,j,i);c.push(new THREE.Vector2(g, -n))}break;case THREE.PathActions.CSPLINE_THRU:g=this.actions[d-1].args;n=[new THREE.Vector2(g[g.length-2],g[g.length-1])];g=a*e[0].length;n=n.concat(e[0]);n=new THREE.SplineCurve(n);for(e=1;e<=g;e++)c.push(n.getPointAt(e/g));break;case THREE.PathActions.ARC:h=e[0];i=e[1];m=e[2];l=e[3];g=e[4];o=!!e[5];p=g-l;q=a*2;for(e=1;e<=q;e++){n=e/q;o||(n=1-n);n=l+n*p;g=h+m*Math.cos(n);n=i+m*Math.sin(n);c.push(new THREE.Vector2(g,n))}break;case THREE.PathActions.ELLIPSE:h=e[0];i=e[1];m=e[2];j=e[3];l=e[4];g=e[5]; -o=!!e[6];p=g-l;q=a*2;for(e=1;e<=q;e++){n=e/q;o||(n=1-n);n=l+n*p;g=h+m*Math.cos(n);n=i+j*Math.sin(n);c.push(new THREE.Vector2(g,n))}}}d=c[c.length-1];Math.abs(d.x-c[0].x)<1E-10&&Math.abs(d.y-c[0].y)<1E-10&&c.splice(c.length-1,1);b&&c.push(c[0]);return c}; +THREE.Path.prototype.getPoints=function(a,b){if(this.useSpacedPoints){console.log("tata");return this.getSpacedPoints(a,b)}var a=a||12,c=[],d,f,e,g,h,i,l,j,n,m,q,o,p;d=0;for(f=this.actions.length;d0){g=c[c.length-1]; +q=g.x;o=g.y}else{g=this.actions[d-1].args;q=g[g.length-2];o=g[g.length-1]}for(e=1;e<=a;e++){p=e/a;g=THREE.Shape.Utils.b2(p,q,n,h);p=THREE.Shape.Utils.b2(p,o,m,i);c.push(new THREE.Vector2(g,p))}break;case THREE.PathActions.BEZIER_CURVE_TO:h=e[4];i=e[5];n=e[0];m=e[1];l=e[2];j=e[3];if(c.length>0){g=c[c.length-1];q=g.x;o=g.y}else{g=this.actions[d-1].args;q=g[g.length-2];o=g[g.length-1]}for(e=1;e<=a;e++){p=e/a;g=THREE.Shape.Utils.b3(p,q,n,l,h);p=THREE.Shape.Utils.b3(p,o,m,j,i);c.push(new THREE.Vector2(g, +p))}break;case THREE.PathActions.CSPLINE_THRU:g=this.actions[d-1].args;p=[new THREE.Vector2(g[g.length-2],g[g.length-1])];g=a*e[0].length;p=p.concat(e[0]);p=new THREE.SplineCurve(p);for(e=1;e<=g;e++)c.push(p.getPointAt(e/g));break;case THREE.PathActions.ARC:h=e[0];i=e[1];m=e[2];l=e[3];g=e[4];n=!!e[5];q=g-l;o=a*2;for(e=1;e<=o;e++){p=e/o;n||(p=1-p);p=l+p*q;g=h+m*Math.cos(p);p=i+m*Math.sin(p);c.push(new THREE.Vector2(g,p))}break;case THREE.PathActions.ELLIPSE:h=e[0];i=e[1];m=e[2];j=e[3];l=e[4];g=e[5]; +n=!!e[6];q=g-l;o=a*2;for(e=1;e<=o;e++){p=e/o;n||(p=1-p);p=l+p*q;g=h+m*Math.cos(p);p=i+j*Math.sin(p);c.push(new THREE.Vector2(g,p))}}}d=c[c.length-1];Math.abs(d.x-c[0].x)<1E-10&&Math.abs(d.y-c[0].y)<1E-10&&c.splice(c.length-1,1);b&&c.push(c[0]);return c}; THREE.Path.prototype.toShapes=function(){var a,b,c,d,f=[],e=new THREE.Path;a=0;for(b=this.actions.length;a=0?h-1:c.length-1;e=g-1>=0?g-1:l.length-1;var n=[l[g],c[h],c[f]];o=THREE.FontUtils.Triangulate.area(n);var s=[l[g],l[e],c[h]];m=THREE.FontUtils.Triangulate.area(s);p=h;j=g;h=h+1;g=g+ --1;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+l.length);g=g%l.length;f=h-1>=0?h-1:c.length-1;e=g-1>=0?g-1:l.length-1;n=[l[g],c[h],c[f]];n=THREE.FontUtils.Triangulate.area(n);s=[l[g],l[e],c[h]];s=THREE.FontUtils.Triangulate.area(s);if(o+m>n+s){h=p;g=j;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+l.length);g=g%l.length;f=h-1>=0?h-1:c.length-1;e=g-1>=0?g-1:l.length-1}o=c.slice(0,h);m=c.slice(h);p=l.slice(g);j=l.slice(0,g);e=[l[g],l[e],c[h]];q.push([l[g],c[h],c[f]]);q.push(e);c=o.concat(p).concat(j).concat(m)}return{shape:c, -isolatedPts:q,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,f=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,false),e,g,h,i,l={};e=0;for(g=d.length;e=0?h-1:c.length-1;e=g-1>=0?g-1:l.length-1;var p=[l[g],c[h],c[f]];n=THREE.FontUtils.Triangulate.area(p);var s=[l[g],l[e],c[h]];m=THREE.FontUtils.Triangulate.area(s);q=h;j=g;h=h+1;g=g+ +-1;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+l.length);g=g%l.length;f=h-1>=0?h-1:c.length-1;e=g-1>=0?g-1:l.length-1;p=[l[g],c[h],c[f]];p=THREE.FontUtils.Triangulate.area(p);s=[l[g],l[e],c[h]];s=THREE.FontUtils.Triangulate.area(s);if(n+m>p+s){h=q;g=j;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+l.length);g=g%l.length;f=h-1>=0?h-1:c.length-1;e=g-1>=0?g-1:l.length-1}n=c.slice(0,h);m=c.slice(h);q=l.slice(g);j=l.slice(0,g);e=[l[g],l[e],c[h]];o.push([l[g],c[h],c[f]]);o.push(e);c=n.concat(q).concat(j).concat(m)}return{shape:c, +isolatedPts:o,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,f=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,false),e,g,h,i,l={};e=0;for(g=d.length;e1){console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+o);d=d<0?0:1}if(c==="pos"){c=a.position;if(this.interpolationType===THREE.AnimationHandler.LINEAR){c.x=f[0]+ -(e[0]-f[0])*d;c.y=f[1]+(e[1]-f[1])*d;c.z=f[2]+(e[2]-f[2])*d}else if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){this.points[0]=this.getPrevKeyWith("pos",o,g.index-1).pos;this.points[1]=f;this.points[2]=e;this.points[3]=this.getNextKeyWith("pos",o,h.index+1).pos;d=d*0.33+0.33;f=this.interpolateCatmullRom(this.points,d);c.x=f[0];c.y=f[1];c.z=f[2];if(this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){d= +THREE.Animation.prototype.update=function(a){if(this.isPlaying!==false){var b=["pos","rot","scl"],c,d,f,e,g,h,i,l,j;j=this.currentTime=this.currentTime+a*this.timeScale;l=this.currentTime=this.currentTime%this.data.length;parseInt(Math.min(l*this.data.fps,this.data.length*this.data.fps),10);for(var n=0,m=this.hierarchy.length;n1){console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+n);d=d<0?0:1}if(c==="pos"){c=a.position;if(this.interpolationType===THREE.AnimationHandler.LINEAR){c.x=f[0]+ +(e[0]-f[0])*d;c.y=f[1]+(e[1]-f[1])*d;c.z=f[2]+(e[2]-f[2])*d}else if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){this.points[0]=this.getPrevKeyWith("pos",n,g.index-1).pos;this.points[1]=f;this.points[2]=e;this.points[3]=this.getNextKeyWith("pos",n,h.index+1).pos;d=d*0.33+0.33;f=this.interpolateCatmullRom(this.points,d);c.x=f[0];c.y=f[1];c.z=f[2];if(this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){d= this.interpolateCatmullRom(this.points,d*1.01);this.target.set(d[0],d[1],d[2]);this.target.subSelf(c);this.target.y=0;this.target.normalize();d=Math.atan2(this.target.x,this.target.z);a.rotation.set(0,d,0)}}}else if(c==="rot")THREE.Quaternion.slerp(f,e,a.quaternion,d);else if(c==="scl"){c=a.scale;c.x=f[0]+(e[0]-f[0])*d;c.y=f[1]+(e[1]-f[1])*d;c.z=f[2]+(e[2]-f[2])*d}}}}}; THREE.Animation.prototype.interpolateCatmullRom=function(a,b){var c=[],d=[],f,e,g,h,i,l;f=(a.length-1)*b;e=Math.floor(f);f=f-e;c[0]=e===0?e:e-1;c[1]=e;c[2]=e>a.length-2?e:e+1;c[3]=e>a.length-3?e:e+2;e=a[c[0]];h=a[c[1]];i=a[c[2]];l=a[c[3]];c=f*f;g=f*c;d[0]=this.interpolate(e[0],h[0],i[0],l[0],f,c,g);d[1]=this.interpolate(e[1],h[1],i[1],l[1],f,c,g);d[2]=this.interpolate(e[2],h[2],i[2],l[2],f,c,g);return d}; THREE.Animation.prototype.interpolate=function(a,b,c,d,f,e,g){a=(c-a)*0.5;d=(d-b)*0.5;return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*e+a*f+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c=g?b.interpolate(c,g):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=true}}if(this.JITCompile&&e[0][f]===void 0){this.hierarchy[0].updateMatrixWorld(true); +this.hierarchy[a];if(j.length){for(j=0;j=g?b.interpolate(c,g):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=true}}if(this.JITCompile&&e[0][f]===void 0){this.hierarchy[0].updateMatrixWorld(true); for(a=0;a=0?c:c+b.length;c>=0;c--)if(b[c].hasTarget(a))return b[c];return b[b.length-1]}; THREE.CubeCamera=function(a,b,c){THREE.Object3D.call(this);var d=new THREE.PerspectiveCamera(90,1,a,b);d.up.set(0,-1,0);d.lookAt(new THREE.Vector3(1,0,0));this.add(d);var f=new THREE.PerspectiveCamera(90,1,a,b);f.up.set(0,-1,0);f.lookAt(new THREE.Vector3(-1,0,0));this.add(f);var e=new THREE.PerspectiveCamera(90,1,a,b);e.up.set(0,0,1);e.lookAt(new THREE.Vector3(0,1,0));this.add(e);var g=new THREE.PerspectiveCamera(90,1,a,b);g.up.set(0,0,-1);g.lookAt(new THREE.Vector3(0,-1,0));this.add(g);var h=new THREE.PerspectiveCamera(90, @@ -630,7 +630,7 @@ document){this.viewHalfX=window.innerWidth/2;this.viewHalfY=window.innerHeight/2 a>=0?a:a+g;b=this.verticalAngleMap.srcRange;a=this.verticalAngleMap.dstRange;b=THREE.Math.mapLinear(this.phi,b[0],b[1],a[0],a[1]);var d=a[1]-a[0];this.phi=c((b-a[0])/d)*d+a[0];b=this.horizontalAngleMap.srcRange;a=this.horizontalAngleMap.dstRange;b=THREE.Math.mapLinear(this.theta,b[0],b[1],a[0],a[1]);d=a[1]-a[0];this.theta=c((b-a[0])/d)*d+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){if(this.domElement===document){this.mouseX=a.pageX-this.viewHalfX;this.mouseY=a.pageY-this.viewHalfY}else{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,g=e(b,10),c=e(b,10),h=new THREE.LineBasicMaterial({color:16711680,linewidth:3}),g=new THREE.Line(g,h),c=new THREE.ParticleSystem(c,new THREE.ParticleBasicMaterial({color:16755200,size:3}));g.scale.set(1,1,1);a.add(g);c.scale.set(1,1,1);a.add(c);for(var g=new THREE.SphereGeometry(1,16,8),h=new THREE.MeshBasicMaterial({color:65280}),p=0;p0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*l);this.object.translateY(b*j);if(g)this.roll=this.roll+this.rollSpeed*a*h;if(this.forward.y>this.constrainVertical[1]){this.forward.y=this.constrainVertical[1];this.forward.normalize()}else if(this.forward.y0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*l);this.object.translateY(b*j);if(g)this.roll=this.roll+this.rollSpeed*a*h;if(this.forward.y>this.constrainVertical[1]){this.forward.y=this.constrainVertical[1];this.forward.normalize()}else if(this.forward.y1?d.normalize():d.z=Math.sqrt(1-e*e);g.copy(c.object.position).subSelf(c.target);e=c.object.up.clone().setLength(d.y);e.addSelf(c.object.up.clone().crossSelf(g).setLength(d.x));e.addSelf(g.setLength(d.z));return e}; this.rotateCamera=function(){var a=Math.acos(h.dot(i)/h.length()/i.length());if(a){var b=(new THREE.Vector3).cross(h,i).normalize(),d=new THREE.Quaternion,a=a*c.rotateSpeed;d.setFromAxisAngle(b,-a);d.multiplyVector3(g);d.multiplyVector3(c.object.up);d.multiplyVector3(i);if(c.staticMoving)h=i;else{d.setFromAxisAngle(b,a*(c.dynamicDampingFactor-1));d.multiplyVector3(h)}}};this.zoomCamera=function(){var a=1+(j.y-l.y)*c.zoomSpeed;if(a!==1&&a>0){g.multiplyScalar(a);c.staticMoving?l=j:l.y=l.y+(j.y-l.y)* -this.dynamicDampingFactor}};this.panCamera=function(){var a=m.clone().subSelf(o);if(a.lengthSq()){a.multiplyScalar(g.length()*c.panSpeed);var b=g.clone().crossSelf(c.object.up).setLength(a.x);b.addSelf(c.object.up.clone().setLength(a.y));c.object.position.addSelf(b);c.target.addSelf(b);c.staticMoving?o=m:o.addSelf(a.sub(m,o).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); -g.lengthSq()0){c.dispatchEvent(p);d.copy(c.object.position)}};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},false); -this.domElement.addEventListener("mousemove",function(a){if(c.enabled){if(f){h=i=c.getMouseProjectionOnBall(a.clientX,a.clientY);l=j=c.getMouseOnScreen(a.clientX,a.clientY);o=m=c.getMouseOnScreen(a.clientX,a.clientY);f=false}e!==-1&&(e===0&&!c.noRotate?i=c.getMouseProjectionOnBall(a.clientX,a.clientY):e===1&&!c.noZoom?j=c.getMouseOnScreen(a.clientX,a.clientY):e===2&&!c.noPan&&(m=c.getMouseOnScreen(a.clientX,a.clientY)))}},false);this.domElement.addEventListener("mousedown",function(a){if(c.enabled){a.preventDefault(); -a.stopPropagation();if(e===-1){e=a.button;e===0&&!c.noRotate?h=i=c.getMouseProjectionOnBall(a.clientX,a.clientY):e===1&&!c.noZoom?l=j=c.getMouseOnScreen(a.clientX,a.clientY):this.noPan||(o=m=c.getMouseOnScreen(a.clientX,a.clientY))}}},false);this.domElement.addEventListener("mouseup",function(a){if(c.enabled){a.preventDefault();a.stopPropagation();e=-1}},false);window.addEventListener("keydown",function(a){if(c.enabled&&e===-1){a.keyCode===c.keys[0]&&!c.noRotate?e=0:a.keyCode===c.keys[1]&&!c.noZoom? +this.dynamicDampingFactor}};this.panCamera=function(){var a=m.clone().subSelf(n);if(a.lengthSq()){a.multiplyScalar(g.length()*c.panSpeed);var b=g.clone().crossSelf(c.object.up).setLength(a.x);b.addSelf(c.object.up.clone().setLength(a.y));c.object.position.addSelf(b);c.target.addSelf(b);c.staticMoving?n=m:n.addSelf(a.sub(m,n).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); +g.lengthSq()0){c.dispatchEvent(q);d.copy(c.object.position)}};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},false); +this.domElement.addEventListener("mousemove",function(a){if(c.enabled){if(f){h=i=c.getMouseProjectionOnBall(a.clientX,a.clientY);l=j=c.getMouseOnScreen(a.clientX,a.clientY);n=m=c.getMouseOnScreen(a.clientX,a.clientY);f=false}e!==-1&&(e===0&&!c.noRotate?i=c.getMouseProjectionOnBall(a.clientX,a.clientY):e===1&&!c.noZoom?j=c.getMouseOnScreen(a.clientX,a.clientY):e===2&&!c.noPan&&(m=c.getMouseOnScreen(a.clientX,a.clientY)))}},false);this.domElement.addEventListener("mousedown",function(a){if(c.enabled){a.preventDefault(); +a.stopPropagation();if(e===-1){e=a.button;e===0&&!c.noRotate?h=i=c.getMouseProjectionOnBall(a.clientX,a.clientY):e===1&&!c.noZoom?l=j=c.getMouseOnScreen(a.clientX,a.clientY):this.noPan||(n=m=c.getMouseOnScreen(a.clientX,a.clientY))}}},false);this.domElement.addEventListener("mouseup",function(a){if(c.enabled){a.preventDefault();a.stopPropagation();e=-1}},false);window.addEventListener("keydown",function(a){if(c.enabled&&e===-1){a.keyCode===c.keys[0]&&!c.noRotate?e=0:a.keyCode===c.keys[1]&&!c.noZoom? e=1:a.keyCode===c.keys[2]&&!c.noPan&&(e=2);e!==-1&&(f=true)}},false);window.addEventListener("keyup",function(){c.enabled&&e!==-1&&(e=-1)},false);this.handleResize()}; -THREE.OrbitControls=function(a,b){function c(){return 2*Math.PI/60/60*e.autoRotateSpeed}function d(a){a.preventDefault();if(u===r.ROTATE){i.set(a.clientX,a.clientY);l.sub(i,h);e.rotateLeft(2*Math.PI*l.x/g*e.userRotateSpeed);e.rotateUp(2*Math.PI*l.y/g*e.userRotateSpeed);h.copy(i)}else if(u===r.ZOOM){o.set(a.clientX,a.clientY);m.sub(o,j);m.y>0?e.zoomIn():e.zoomOut();j.copy(o)}}function f(){if(e.userRotate){document.removeEventListener("mousemove",d,false);document.removeEventListener("mouseup",f,false); -u=r.NONE}}THREE.EventTarget.call(this);this.object=a;this.domElement=b!==void 0?b:document;this.center=new THREE.Vector3;this.userZoom=true;this.userZoomSpeed=1;this.userRotate=true;this.userRotateSpeed=1;this.autoRotate=false;this.autoRotateSpeed=2;var e=this,g=1800,h=new THREE.Vector2,i=new THREE.Vector2,l=new THREE.Vector2,j=new THREE.Vector2,o=new THREE.Vector2,m=new THREE.Vector2,p=0,q=0,n=1,s=new THREE.Vector3,r={NONE:-1,ROTATE:0,ZOOM:1},u=r.NONE,v={type:"change"};this.rotateLeft=function(a){a=== -void 0&&(a=c());q=q-a};this.rotateRight=function(a){a===void 0&&(a=c());q=q+a};this.rotateUp=function(a){a===void 0&&(a=c());p=p-a};this.rotateDown=function(a){a===void 0&&(a=c());p=p+a};this.zoomIn=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));n=n/a};this.zoomOut=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));n=n*a};this.update=function(){var a=this.object.position,b=a.clone().subSelf(this.center),d=Math.atan2(b.x,b.z),e=Math.atan2(Math.sqrt(b.x*b.x+b.z*b.z),b.y);this.autoRotate&& -this.rotateLeft(c());var d=d+q,e=e+p,e=Math.max(1E-6,Math.min(Math.PI-1E-6,e)),f=b.length();b.x=f*Math.sin(e)*Math.sin(d);b.y=f*Math.cos(e);b.z=f*Math.sin(e)*Math.cos(d);b.multiplyScalar(n);a.copy(this.center).addSelf(b);this.object.lookAt(this.center);p=q=0;n=1;if(s.distanceTo(this.object.position)>0){this.dispatchEvent(v);s.copy(this.object.position)}};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},false);this.domElement.addEventListener("mousedown",function(a){if(e.userRotate){a.preventDefault(); +THREE.OrbitControls=function(a,b){function c(){return 2*Math.PI/60/60*e.autoRotateSpeed}function d(a){a.preventDefault();if(u===r.ROTATE){i.set(a.clientX,a.clientY);l.sub(i,h);e.rotateLeft(2*Math.PI*l.x/g*e.userRotateSpeed);e.rotateUp(2*Math.PI*l.y/g*e.userRotateSpeed);h.copy(i)}else if(u===r.ZOOM){n.set(a.clientX,a.clientY);m.sub(n,j);m.y>0?e.zoomIn():e.zoomOut();j.copy(n)}}function f(){if(e.userRotate){document.removeEventListener("mousemove",d,false);document.removeEventListener("mouseup",f,false); +u=r.NONE}}THREE.EventTarget.call(this);this.object=a;this.domElement=b!==void 0?b:document;this.center=new THREE.Vector3;this.userZoom=true;this.userZoomSpeed=1;this.userRotate=true;this.userRotateSpeed=1;this.autoRotate=false;this.autoRotateSpeed=2;var e=this,g=1800,h=new THREE.Vector2,i=new THREE.Vector2,l=new THREE.Vector2,j=new THREE.Vector2,n=new THREE.Vector2,m=new THREE.Vector2,q=0,o=0,p=1,s=new THREE.Vector3,r={NONE:-1,ROTATE:0,ZOOM:1},u=r.NONE,v={type:"change"};this.rotateLeft=function(a){a=== +void 0&&(a=c());o=o-a};this.rotateRight=function(a){a===void 0&&(a=c());o=o+a};this.rotateUp=function(a){a===void 0&&(a=c());q=q-a};this.rotateDown=function(a){a===void 0&&(a=c());q=q+a};this.zoomIn=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));p=p/a};this.zoomOut=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));p=p*a};this.update=function(){var a=this.object.position,b=a.clone().subSelf(this.center),d=Math.atan2(b.x,b.z),e=Math.atan2(Math.sqrt(b.x*b.x+b.z*b.z),b.y);this.autoRotate&& +this.rotateLeft(c());var d=d+o,e=e+q,e=Math.max(1E-6,Math.min(Math.PI-1E-6,e)),f=b.length();b.x=f*Math.sin(e)*Math.sin(d);b.y=f*Math.cos(e);b.z=f*Math.sin(e)*Math.cos(d);b.multiplyScalar(p);a.copy(this.center).addSelf(b);this.object.lookAt(this.center);q=o=0;p=1;if(s.distanceTo(this.object.position)>0){this.dispatchEvent(v);s.copy(this.object.position)}};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},false);this.domElement.addEventListener("mousedown",function(a){if(e.userRotate){a.preventDefault(); if(a.button===0||a.button===2){u=r.ROTATE;h.set(a.clientX,a.clientY)}else if(a.button===1){u=r.ZOOM;j.set(a.clientX,a.clientY)}document.addEventListener("mousemove",d,false);document.addEventListener("mouseup",f,false)}},false);this.domElement.addEventListener("mousewheel",function(a){e.userZoom&&(a.wheelDelta>0?e.zoomOut():e.zoomIn())},false)}; THREE.CircleGeometry=function(a,b,c,d){THREE.Geometry.call(this);var a=a||50,c=c!==void 0?c:0,d=d!==void 0?d:Math.PI*2,b=b!==void 0?Math.max(3,b):8,f,e=[];f=new THREE.Vector3;var g=new THREE.UV(0.5,0.5);this.vertices.push(f);e.push(g);for(f=0;f<=b;f++){var h=new THREE.Vector3;h.x=a*Math.cos(c+f/b*d);h.y=a*Math.sin(c+f/b*d);this.vertices.push(h);e.push(new THREE.UV((h.x/a+1)/2,-(h.y/a+1)/2+1))}c=new THREE.Vector3(0,0,-1);for(f=1;f<=b;f++){this.faces.push(new THREE.Face3(f,f+1,0,[c,c,c]));this.faceVertexUvs[0].push([e[f], e[f+1],g])}this.computeCentroids();this.computeFaceNormals();this.boundingSphere={radius:a}};THREE.CircleGeometry.prototype=Object.create(THREE.Geometry.prototype); -THREE.CubeGeometry=function(a,b,c,d,f,e,g,h){function i(a,b,c,g,h,i,j,m){var o,n=d||1,p=f||1,q=h/2,r=i/2,s=l.vertices.length;if(a==="x"&&b==="y"||a==="y"&&b==="x")o="z";else if(a==="x"&&b==="z"||a==="z"&&b==="x"){o="y";p=e||1}else if(a==="z"&&b==="y"||a==="y"&&b==="z"){o="x";n=e||1}var u=n+1,v=p+1,Y=h/n,J=i/p,K=new THREE.Vector3;K[o]=j>0?1:-1;for(h=0;h -0){this.vertices.push(new THREE.Vector3(0,g,0));for(h=0;h0){this.vertices.push(new THREE.Vector3(0,-g,0));for(h=0;h0?1:-1;for(h=0;h +0){this.vertices.push(new THREE.Vector3(0,g,0));for(h=0;h0){this.vertices.push(new THREE.Vector3(0,-g,0));for(h=0;ha&&(a=a+Math.PI*2);c=(b+a)/2;a=-Math.cos(c);c=-Math.sin(c);return new THREE.Vector2(a,c)}return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function f(c,d){var e,f;for(K=c.length;--K>=0;){e=K;f=K-1;f<0&&(f= -c.length-1);for(var g=0,h=m+j*2,g=0;g=0;C--){B=C/j;P=i*(1-B);E=l*Math.sin(B*Math.PI/2);K=0;for(fa=H.length;K=0;H--){B=H/j;S=i*(1-B);D=l*Math.sin(B*Math.PI/2);K=0;for(fa=E.length;K1E-4){h.normalize();d=Math.acos(f[l-1].dot(f[l]));i.makeRotationAxis(h,d).multiplyVector3(e[l])}g[l].cross(f[l],e[l])}if(c){d=Math.acos(e[0].dot(e[b-1]));d=d/(b-1);f[0].dot(h.cross(e[0],e[b-1]))>0&&(d=-d);for(l=1;l=j){for(l=0;l<3;l++){j=[i[l],i[(l+1)%3]];o=true;for(m=0;m=j){for(l=0;l<3;l++){j=[i[l],i[(l+1)%3]];n=true;for(m=0;m0;)this.smooth(a)}; -THREE.SubdivisionModifier.prototype.smooth=function(a){function b(){j.debug&&console.log.apply(console,arguments)}function c(){console&&console.log.apply(console,arguments)}function d(a,c,d,f,g,h,m){var o=new THREE.Face4(a,c,d,f,null,g.color,g.materialIndex);if(j.useOldVertexColors){o.vertexColors=[];for(var n,p,q,r=0;r<4;r++){q=h[r];n=new THREE.Color;n.setRGB(0,0,0);for(var s=0;s=r&&a=r&&ad.duration||d.time<0){d.direction=d.direction*-1;if(d.time>d.duration){d.time=d.duration;d.directionBackwards=true}if(d.time<0){d.time=0;d.directionBackwards=false}}}else{d.time=d.time%d.duration;if(d.time<0)d.time=d.time+d.duration}var e=d.startFrame+THREE.Math.clamp(Math.floor(d.time/ f),0,d.length-1),g=d.weight;if(e!==d.currentFrame){this.morphTargetInfluences[d.lastFrame]=0;this.morphTargetInfluences[d.currentFrame]=1*g;this.morphTargetInfluences[e]=0;d.lastFrame=d.currentFrame;d.currentFrame=e}f=d.time%f/f;d.directionBackwards&&(f=1-f);this.morphTargetInfluences[d.currentFrame]=f*g;this.morphTargetInfluences[d.lastFrame]=(1-f)*g}}}; -THREE.LensFlarePlugin=function(){function a(a){var c=b.createProgram(),d=b.createShader(b.FRAGMENT_SHADER),e=b.createShader(b.VERTEX_SHADER);b.shaderSource(d,a.fragmentShader);b.shaderSource(e,a.vertexShader);b.compileShader(d);b.compileShader(e);b.attachShader(c,d);b.attachShader(c,e);b.linkProgram(c);return c}var b,c,d,f,e,g,h,i,l,j,o,m,p;this.init=function(q){b=q.context;c=q;d=new Float32Array(16);f=new Uint16Array(6);q=0;d[q++]=-1;d[q++]=-1;d[q++]=0;d[q++]=0;d[q++]=1;d[q++]=-1;d[q++]=1;d[q++]= -0;d[q++]=1;d[q++]=1;d[q++]=1;d[q++]=1;d[q++]=-1;d[q++]=1;d[q++]=0;d[q++]=1;q=0;f[q++]=0;f[q++]=1;f[q++]=2;f[q++]=0;f[q++]=2;f[q++]=3;e=b.createBuffer();g=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,e);b.bufferData(b.ARRAY_BUFFER,d,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);h=b.createTexture();i=b.createTexture();b.bindTexture(b.TEXTURE_2D,h);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D, +THREE.LensFlarePlugin=function(){function a(a){var c=b.createProgram(),d=b.createShader(b.FRAGMENT_SHADER),e=b.createShader(b.VERTEX_SHADER);b.shaderSource(d,a.fragmentShader);b.shaderSource(e,a.vertexShader);b.compileShader(d);b.compileShader(e);b.attachShader(c,d);b.attachShader(c,e);b.linkProgram(c);return c}var b,c,d,f,e,g,h,i,l,j,n,m,q;this.init=function(o){b=o.context;c=o;d=new Float32Array(16);f=new Uint16Array(6);o=0;d[o++]=-1;d[o++]=-1;d[o++]=0;d[o++]=0;d[o++]=1;d[o++]=-1;d[o++]=1;d[o++]= +0;d[o++]=1;d[o++]=1;d[o++]=1;d[o++]=1;d[o++]=-1;d[o++]=1;d[o++]=0;d[o++]=1;o=0;f[o++]=0;f[o++]=1;f[o++]=2;f[o++]=0;f[o++]=2;f[o++]=3;e=b.createBuffer();g=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,e);b.bufferData(b.ARRAY_BUFFER,d,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);h=b.createTexture();i=b.createTexture();b.bindTexture(b.TEXTURE_2D,h);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.bindTexture(b.TEXTURE_2D,i);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,16,16,0,b.RGBA,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST); -b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);if(b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<=0){l=false;j=a(THREE.ShaderFlares.lensFlare)}else{l=true;j=a(THREE.ShaderFlares.lensFlareVertexTexture)}o={};m={};o.vertex=b.getAttribLocation(j,"position");o.uv=b.getAttribLocation(j,"uv");m.renderType=b.getUniformLocation(j,"renderType");m.map=b.getUniformLocation(j,"map");m.occlusionMap=b.getUniformLocation(j,"occlusionMap");m.opacity=b.getUniformLocation(j,"opacity");m.color=b.getUniformLocation(j, -"color");m.scale=b.getUniformLocation(j,"scale");m.rotation=b.getUniformLocation(j,"rotation");m.screenPosition=b.getUniformLocation(j,"screenPosition");p=false};this.render=function(a,d,f,r){var a=a.__webglFlares,u=a.length;if(u){var v=new THREE.Vector3,t=r/f,A=f*0.5,y=r*0.5,B=16/r,G=new THREE.Vector2(B*t,B),x=new THREE.Vector3(1,1,0),I=new THREE.Vector2(1,1),F=m,B=o;b.useProgram(j);if(!p){b.enableVertexAttribArray(o.vertex);b.enableVertexAttribArray(o.uv);p=true}b.uniform1i(F.occlusionMap,0);b.uniform1i(F.map, -1);b.bindBuffer(b.ARRAY_BUFFER,e);b.vertexAttribPointer(B.vertex,2,b.FLOAT,false,16,0);b.vertexAttribPointer(B.uv,2,b.FLOAT,false,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(false);var L,H,M,C,E;for(L=0;L0&&I.x0&& +b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);if(b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<=0){l=false;j=a(THREE.ShaderFlares.lensFlare)}else{l=true;j=a(THREE.ShaderFlares.lensFlareVertexTexture)}n={};m={};n.vertex=b.getAttribLocation(j,"position");n.uv=b.getAttribLocation(j,"uv");m.renderType=b.getUniformLocation(j,"renderType");m.map=b.getUniformLocation(j,"map");m.occlusionMap=b.getUniformLocation(j,"occlusionMap");m.opacity=b.getUniformLocation(j,"opacity");m.color=b.getUniformLocation(j, +"color");m.scale=b.getUniformLocation(j,"scale");m.rotation=b.getUniformLocation(j,"rotation");m.screenPosition=b.getUniformLocation(j,"screenPosition");q=false};this.render=function(a,d,f,r){var a=a.__webglFlares,u=a.length;if(u){var v=new THREE.Vector3,t=r/f,A=f*0.5,y=r*0.5,B=16/r,G=new THREE.Vector2(B*t,B),x=new THREE.Vector3(1,1,0),I=new THREE.Vector2(1,1),F=m,B=n;b.useProgram(j);if(!q){b.enableVertexAttribArray(n.vertex);b.enableVertexAttribArray(n.uv);q=true}b.uniform1i(F.occlusionMap,0);b.uniform1i(F.map, +1);b.bindBuffer(b.ARRAY_BUFFER,e);b.vertexAttribPointer(B.vertex,2,b.FLOAT,false,16,0);b.vertexAttribPointer(B.uv,2,b.FLOAT,false,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(false);var L,E,P,H,D;for(L=0;L0&&I.x0&& I.y0.001&&E.scale>0.001){x.x=E.x;x.y=E.y;x.z=E.z;B=E.size*E.scale/r;G.x=B*t;G.y=B;b.uniform3f(F.screenPosition,x.x,x.y,x.z);b.uniform2f(F.scale,G.x,G.y);b.uniform1f(F.rotation,E.rotation);b.uniform1f(F.opacity,E.opacity); -b.uniform3f(F.color,E.color.r,E.color.g,E.color.b);c.setBlending(E.blending,E.blendEquation,E.blendSrc,E.blendDst);c.setTexture(E.texture,1);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}}}}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(true)}}}; +b.bindTexture(b.TEXTURE_2D,h);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0);H.positionScreen.copy(x);H.customUpdateCallback?H.customUpdateCallback(H):H.updateLensFlares();b.uniform1i(F.renderType,2);b.enable(b.BLEND);E=0;for(P=H.lensFlares.length;E0.001&&D.scale>0.001){x.x=D.x;x.y=D.y;x.z=D.z;B=D.size*D.scale/r;G.x=B*t;G.y=B;b.uniform3f(F.screenPosition,x.x,x.y,x.z);b.uniform2f(F.scale,G.x,G.y);b.uniform1f(F.rotation,D.rotation);b.uniform1f(F.opacity,D.opacity); +b.uniform3f(F.color,D.color.r,D.color.g,D.color.b);c.setBlending(D.blending,D.blendEquation,D.blendSrc,D.blendDst);c.setTexture(D.texture,1);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}}}}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(true)}}}; THREE.ShadowMapPlugin=function(){var a,b,c,d,f,e,g=new THREE.Frustum,h=new THREE.Matrix4,i=new THREE.Vector3,l=new THREE.Vector3;this.init=function(g){a=g.context;b=g;var g=THREE.ShaderLib.depthRGBA,h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader, -vertexShader:g.vertexShader,uniforms:h,skinning:true});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true,skinning:true});c._shadowPass=true;d._shadowPass=true;f._shadowPass=true;e._shadowPass=true};this.render=function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(j,o){var m,p,q,n,s,r,u,v,t,A=[];n=0;a.clearColor(1,1,1,1);a.disable(a.BLEND);a.enable(a.CULL_FACE);a.frontFace(a.CCW);b.shadowMapCullFrontFaces? -a.cullFace(a.FRONT):a.cullFace(a.BACK);b.setDepthTest(true);m=0;for(p=j.__lights.length;ml.x)l.x=v.x;if(v.yl.y)l.y=v.y;if(v.z -l.z)l.z=v.z}n.left=i.x;n.right=l.x;n.top=l.y;n.bottom=i.y;n.updateProjectionMatrix()}n=q.shadowMap;r=q.shadowMatrix;s=q.shadowCamera;s.position.copy(q.matrixWorld.getPosition());s.lookAt(q.target.matrixWorld.getPosition());s.updateMatrixWorld();s.matrixWorldInverse.getInverse(s.matrixWorld);if(q.cameraHelper)q.cameraHelper.visible=q.shadowCameraVisible;q.shadowCameraVisible&&q.cameraHelper.update();r.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);r.multiplySelf(s.projectionMatrix);r.multiplySelf(s.matrixWorldInverse); -if(!s._viewMatrixArray)s._viewMatrixArray=new Float32Array(16);if(!s._projectionMatrixArray)s._projectionMatrixArray=new Float32Array(16);s.matrixWorldInverse.flattenToArray(s._viewMatrixArray);s.projectionMatrix.flattenToArray(s._projectionMatrixArray);h.multiply(s.projectionMatrix,s.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(n);b.clear();t=j.__webglObjects;q=0;for(n=t.length;ql.x)l.x=v.x;if(v.yl.y)l.y=v.y;if(v.z +l.z)l.z=v.z}p.left=i.x;p.right=l.x;p.top=l.y;p.bottom=i.y;p.updateProjectionMatrix()}p=o.shadowMap;r=o.shadowMatrix;s=o.shadowCamera;s.position.copy(o.matrixWorld.getPosition());s.lookAt(o.target.matrixWorld.getPosition());s.updateMatrixWorld();s.matrixWorldInverse.getInverse(s.matrixWorld);if(o.cameraHelper)o.cameraHelper.visible=o.shadowCameraVisible;o.shadowCameraVisible&&o.cameraHelper.update();r.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);r.multiplySelf(s.projectionMatrix);r.multiplySelf(s.matrixWorldInverse); +if(!s._viewMatrixArray)s._viewMatrixArray=new Float32Array(16);if(!s._projectionMatrixArray)s._projectionMatrixArray=new Float32Array(16);s.matrixWorldInverse.flattenToArray(s._viewMatrixArray);s.projectionMatrix.flattenToArray(s._projectionMatrixArray);h.multiply(s.projectionMatrix,s.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(p);b.clear();t=j.__webglObjects;o=0;for(p=t.length;o + + + + @@ -230,6 +234,10 @@ renderer.domElement.style.position = "relative"; container.appendChild( renderer.domElement ); + renderer.gammaInput = true; + renderer.gammaOutput = true; + renderer.physicallyBasedShading = true; + stats = new Stats(); stats.domElement.style.position = 'absolute'; stats.domElement.style.top = '0px'; diff --git a/src/loaders/SceneLoader.js b/src/loaders/SceneLoader.js index 34d6daab5921a46975a61bcee5335502f7753c58..1ebf0b7ebf45dfac07cc0066205c9ab0f5c21661 100644 --- a/src/loaders/SceneLoader.js +++ b/src/loaders/SceneLoader.js @@ -58,15 +58,17 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) { geometry, material, camera, fog, texture, images, light, - data, binLoader, jsonLoader, counter_models, counter_textures, total_models, total_textures, result; - data = json; + var data = json; - binLoader = new THREE.BinaryLoader(); - jsonLoader = new THREE.JSONLoader(); + var binLoader = new THREE.BinaryLoader(); + var jsonLoader = new THREE.JSONLoader(); + var ctmLoader = new THREE.CTMLoader(); + + var useWorker, useBuffers; counter_models = 0; counter_textures = 0; @@ -123,7 +125,7 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) { }; - // the toplevel loader function, delegates to handle_children + // toplevel loader function, delegates to handle_children function handle_objects() { @@ -273,7 +275,7 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) { } - if ( o.properties !== undefined) { + if ( o.properties !== undefined ) { for ( var key in o.properties ) { @@ -495,7 +497,7 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) { g = data.geometries[ dg ]; - if ( g.type == "bin_mesh" || g.type == "ascii_mesh" ) { + if ( g.type === "bin_mesh" || g.type === "ascii_mesh" || g.type === "ctm_mesh" ) { counter_models += 1; @@ -541,6 +543,12 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) { geometry = new THREE.IcosahedronGeometry( g.radius, g.subdivisions ); result.geometries[ dg ] = geometry; + } else if ( g.type === "ctm_mesh" ) { + + useWorker = data.useWorker !== undefined ? data.useWorker : true; + useBuffers = data.useBuffers !== undefined ? data.useBuffers : true; + ctmLoader.load( get_url( g.url, data.urlBaseType ), create_callback( dg ), useWorker, useBuffers ); + } else if ( g.type === "bin_mesh" ) { binLoader.load( get_url( g.url, data.urlBaseType ), create_callback( dg ) );