diff --git a/build/three.min.js b/build/three.min.js index d85708fc77d82eaf118bb0b8cf66057ceb9f655e..a09fedb08a4ea685f42149b6091b4488bf630bd1 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -17,53 +17,53 @@ 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],j=d[9],l=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(-j,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(j));if(Math.abs(j)< -0.99999){this.y=Math.atan2(g,d);this.z=Math.atan2(h,i)}else{this.y=Math.atan2(-l,f);this.z=0}}else if(b==="ZXY"){this.x=Math.asin(c(n));if(Math.abs(n)<0.99999){this.y=Math.atan2(-l,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(l));if(Math.abs(l)<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(-j,i);this.y=Math.atan2(-l, -f)}else{this.x=0;this.y=Math.atan2(l,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=== +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=== "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}; THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1;return this},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x=this.x+a.x;this.y=this.y+a.y;this.z=this.z+a.z;this.w=this.w+a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x= this.x-a.x;this.y=this.y-a.y;this.z=this.z-a.z;this.w=this.w-a.w;return this},multiplyScalar:function(a){this.x=this.x*a;this.y=this.y*a;this.z=this.z*a;this.w=this.w*a;return this},divideScalar:function(a){if(a){this.x=this.x/a;this.y=this.y/a;this.z=this.z/a;this.w=this.w/a}else{this.z=this.y=this.x=0;this.w=1}return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},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;this.w=this.w+(a.w-this.w)*b;return this},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},setAxisAngleFromQuaternion:function(a){this.w=2* -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 j=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+j-3)<0.1){this.set(1,0,0,0);return this}a=Math.PI;f=(f+1)/2;h=(h+1)/2;j=(j+1)/2;d=(d+g)/4;e= -(e+c)/4;i=(i+b)/4;if(f>h&&f>j)if(f<0.01){b=0;d=c=0.707106781}else{b=Math.sqrt(f);c=d/b;d=e/b}else if(h>j)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(j<0.01){c=b=0.707106781;d=0}else{d=Math.sqrt(j);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+j-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],j=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,l=this.elements;l[0]=b*a;l[1]=b*c;l[2]=b*d;l[3]=b*f;l[4]=b*e;l[5]=b*g;l[6]=b*h;l[7]=b*i;l[8]=b*j;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,j,l,n,m,q,p,o){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,j||0,l!==void 0?l:1,n||0,m||0,q||0,p||0,o!==void 0?o:1)}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,i,j,l,n,m,q,p,o){var r=this.elements;r[0]=a;r[4]=b;r[8]=c;r[12]=d;r[1]=f;r[5]=e;r[9]=g;r[13]=h;r[2]=i;r[6]=j;r[10]=l;r[14]=n;r[3]=m;r[7]=q;r[11]=p;r[15]=o;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],j=c[1],l=c[5],n=c[9],m=c[13],q=c[2],p=c[6],o=c[10],r=c[14],s=c[3],t=c[7],v=c[11],c=c[15],u=d[0],A=d[4], -x=d[8],B=d[12],J=d[1],y=d[5],I=d[9],F=d[13],H=d[2],G=d[6],M=d[10],D=d[14],K=d[3],P=d[7],L=d[11],d=d[15];f[0]=e*u+g*J+h*H+i*K;f[4]=e*A+g*y+h*G+i*P;f[8]=e*x+g*I+h*M+i*L;f[12]=e*B+g*F+h*D+i*d;f[1]=j*u+l*J+n*H+m*K;f[5]=j*A+l*y+n*G+m*P;f[9]=j*x+l*I+n*M+m*L;f[13]=j*B+l*F+n*D+m*d;f[2]=q*u+p*J+o*H+r*K;f[6]=q*A+p*y+o*G+r*P;f[10]=q*x+p*I+o*M+r*L;f[14]=q*B+p*F+o*D+r*d;f[3]=s*u+t*J+v*H+c*K;f[7]=s*A+t*y+v*G+c*P;f[11]=s*x+t*I+v*M+c*L;f[15]=s*B+t*F+v*D+c*d;return this},multiplySelf:function(a){return this.multiply(this, +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 t=this.elements;t[0]=a;t[4]=b;t[8]=c;t[12]=d;t[1]=f;t[5]=e;t[9]=g;t[13]=h;t[2]=i;t[6]=l;t[10]=j;t[14]=o;t[3]=m;t[7]=p;t[11]=q;t[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],t=c[14],r=c[3],u=c[7],v=c[11],c=c[15],s=d[0],B=d[4], +y=d[8],A=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*s+g*G+h*L+i*E;f[4]=e*B+g*x+h*H+i*P;f[8]=e*y+g*I+h*M+i*N;f[12]=e*A+g*F+h*C+i*d;f[1]=l*s+j*G+o*L+m*E;f[5]=l*B+j*x+o*H+m*P;f[9]=l*y+j*I+o*M+m*N;f[13]=l*A+j*F+o*C+m*d;f[2]=p*s+q*G+n*L+t*E;f[6]=p*B+q*x+n*H+t*P;f[10]=p*y+q*I+n*M+t*N;f[14]=p*A+q*F+n*C+t*d;f[3]=r*s+u*G+v*L+c*E;f[7]=r*B+u*x+v*H+c*P;f[11]=r*y+u*I+v*M+c*N;f[15]=r*A+u*F+v*C+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},p=function(i,l,j){var n,o;if(i instanceof a.Particle){n=m(l.origin,l.direction,i.matrixWorld.getPosition());if(n>i.scale.x)return j;o={distance:n,point:i.position,face:null,object:i};j.push(o)}else if(i instanceof a.Mesh){var p=i.geometry.boundingSphere.radius*i.matrixWorld.getMaxScaleOnAxis();n=m(l.origin,l.direction,i.matrixWorld.getPosition());if(n>p)return j;var x, -B,J=i.geometry,y=J.vertices,I,F,H;I=i.geometry.materials;F=i.material instanceof a.MeshFaceMaterial;var G,M=l.precision;i.matrixRotationWorld.extractRotation(i.matrixWorld);b.copy(l.origin);h.getInverse(i.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(l.direction);h.rotateAxis(d).normalize();p=0;for(x=J.faces.length;p0))){g.add(c,d.multiplyScalar(B));if(o instanceof a.Face3){n=y[o.a];B=y[o.b];H=y[o.c];if(q(g,n,B,H)){B=i.matrixWorld.multiplyVector3(g.clone());n=b.distanceTo(B);if(!(nl.far)){o={distance:n,point:B,face:o,faceIndex:p,object:i};j.push(o)}}}else if(o instanceof a.Face4){n=y[o.a];B=y[o.b];H=y[o.c];G=y[o.d];if(q(g,n,B,G)||q(g,B,H,G)){B=i.matrixWorld.multiplyVector3(g.clone());n=b.distanceTo(B);if(!(nl.far)){o={distance:n,point:B,face:o,faceIndex:p, -object:i};j.push(o)}}}}}}}}},o=function(a,b,c){for(var a=a.getDescendants(),b=0,d=a.length;be?d:e;f=f>g?f:g}a()};this.add3Points=function(e,g,l,n,m,q){if(h===true){h=false;b=el?e>m?e:m:l>m?l:m;f=g>n?g>q?g:q:n>q?n:q}else{b=el?e>m?e>d?e:d:m>d?m:d:l>m?l>d?l: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=b=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, +A,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(A));if(n instanceof a.Face3){o=x[n.a];A=x[n.b];L=x[n.c];if(p(g,o,A,L)){A=i.matrixWorld.multiplyVector3(g.clone());o=b.distanceTo(A);if(!(oj.far)){n={distance:o,point:A,face:n,faceIndex:q,object:i};l.push(n)}}}else if(n instanceof a.Face4){o=x[n.a];A=x[n.b];L=x[n.c];H=x[n.d];if(p(g,o,A,H)||p(g,A,L,H)){A=i.matrixWorld.multiplyVector3(g.clone());o=b.distanceTo(A);if(!(oj.far)){n={distance:o,point:A,face:n,faceIndex:q, +object:i};l.push(n)}}}}}}}}},n=function(a,b,c){for(var a=a.getDescendants(),b=0,d=a.length;be?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=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= @@ -74,25 +74,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(dC&&i.positionScreen.z0)){$=l[j-2];P.copy(U.positionScreen);L.copy($.positionScreen);if(d(P,L)===true){P.multiplyScalar(1/P.w);L.multiplyScalar(1/L.w);if(u===x){Ga=new THREE.RenderableLine;A.push(Ga);x++;u++;v=Ga}else v=A[u++];v.v1.positionScreen.copy(P);v.v2.positionScreen.copy(L);v.z=Math.max(P.z,L.z);v.material=ia.material;F.elements.push(v)}}}}}g=0;for(ka=F.sprites.length;g0&&G.z<1){if(J===I){C=new THREE.RenderableParticle;y.push(C);I++;J++;B=C}else B=y[J++];B.object=ia;B.x=G.x/G.w;B.y=G.y/G.w;B.z=G.z;B.rotation=ia.rotation.z;B.scale.x=ia.scale.x*Math.abs(B.x-(G.x+h.projectionMatrix.elements[0])/(G.w+h.projectionMatrix.elements[12]));B.scale.y=ia.scale.y*Math.abs(B.y-(G.y+h.projectionMatrix.elements[5])/(G.w+h.projectionMatrix.elements[13]));B.material=ia.material;F.elements.push(B)}}}n&&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===o){var a=new THREE.RenderableVertex;j.push(a);o++;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)){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(s===y){Ia=new THREE.RenderableLine;B.push(Ia);y++;s++;v=Ia}else v=B[s++];v.v1.positionScreen.copy(P);v.v2.positionScreen.copy(N);v.z=Math.max(P.z,N.z);v.material=pa.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++;A=K}else A=x[G++];A.object=pa;A.x=H.x/H.w;A.y=H.y/H.w;A.z=H.z;A.rotation=pa.rotation.z;A.scale.x=pa.scale.x*Math.abs(A.x-(H.x+h.projectionMatrix.elements[0])/(H.w+h.projectionMatrix.elements[12]));A.scale.y=pa.scale.y*Math.abs(A.y-(H.y+h.projectionMatrix.elements[5])/(H.w+h.projectionMatrix.elements[13]));A.material=pa.material;F.elements.push(A)}}}o&&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],j=c+e+b;if(j>0){c=0.5/Math.sqrt(j+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;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,j=b.w;this.x=c*j+d*i-f*h+e*g;this.y=-c*i+d*j+f*g+e*h;this.z=c*h-d*g+f*j+e*i;this.w=-c*g-d*h-f*i+e*j;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,j=i*c+g*f-h*d,l=i*d+h*c-e*f,n=i*f+e*d-g*c,c=-e*c-g*d-h*f;b.x=j*i+c*-e+l*-h-n*-g;b.y=l*i+c*-g+n*-e-j*-h;b.z=n*i+c*-h+j*-g-l*-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*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* (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}; @@ -107,26 +107,26 @@ b;a++){c=this.faces[a];d=this.vertices[c.a];f=this.vertices[c.b];e=this.vertices else if(c instanceof THREE.Face4)c.vertexNormals=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3]}}else{d=this.__tmpVertices;a=0;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= +[];var g=this.morphNormals[a].faceNormals,h=this.morphNormals[a].vertexNormals,i,l;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;j=this.points[c[0]];l=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;i=g*h;d.x=b(j.x,l.x,n.x,m.x,g,h,i);d.y=b(j.y,l.y,n.y,m.y,g,h,i);d.z=b(j.z,l.z,n.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]];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;a1&&(H=new THREE.MeshFaceMaterial);c= -new THREE.Mesh(F,H);c.name=m;if(t){c.matrixAutoUpdate=false;c.matrix.set(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[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(x[0],x[1],x[2]);c.scale.set(J[0],J[1],J[2])}c.visible=s.visible;c.castShadow=s.castShadow;c.receiveShadow=s.receiveShadow;a.add(c);O.objects[m]=c}}else{A=s.position;x=s.rotation;B=s.quaternion;J=s.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(x[0],x[1],x[2]);c.scale.set(J[0],J[1],J[2]);c.visible=s.visible!==void 0?s.visible:false;a.add(c);O.objects[m]=c;O.empties[m]=c}if(s.properties!==void 0)for(var d in s.properties)c.properties[d]=s.properties[d];s.children!==void 0&&f(c,s.children)}}function e(a){return function(b){O.geometries[a]=b;f(O.scene,D.objects);P=P-1;i.onLoadComplete();h()}}function g(a){return function(b){O.geometries[a]= -b}}function h(){i.callbackProgress({totalModels:N,totalTextures:X,loadedModels:N-P,loadedTextures:X-L},O);i.onLoadProgress();P===0&&L===0&&b(O)}var i=this,j=THREE.Loader.prototype.extractUrlBase(c),l,n,m,q,p,o,r,s,t,v,u,A,x,B,J,y,I,F,H,G,M,D,K,P,L,N,X,O;D=a;c=new THREE.BinaryLoader;K=new THREE.JSONLoader;L=P=0;O={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},empties:{}};if(D.transform){a=D.transform.position;v=D.transform.rotation;y=D.transform.scale; -a&&O.scene.position.set(a[0],a[1],a[2]);v&&O.scene.rotation.set(v[0],v[1],v[2]);y&&O.scene.scale.set(y[0],y[1],y[2]);if(a||v||y){O.scene.updateMatrix();O.scene.updateMatrixWorld()}}a=function(a){return function(){L=L-a;h();i.onLoadComplete()}};for(p in D.cameras){y=D.cameras[p];y.type==="perspective"?G=new THREE.PerspectiveCamera(y.fov,y.aspect,y.near,y.far):y.type==="ortho"&&(G=new THREE.OrthographicCamera(y.left,y.right,y.top,y.bottom,y.near,y.far));A=y.position;v=y.target;y=y.up;G.position.set(A[0], -A[1],A[2]);G.target=new THREE.Vector3(v[0],v[1],v[2]);y&&G.up.set(y[0],y[1],y[2]);O.cameras[p]=G}for(q in D.lights){v=D.lights[q];p=v.color!==void 0?v.color:16777215;G=v.intensity!==void 0?v.intensity:1;if(v.type==="directional"){A=v.direction;u=new THREE.DirectionalLight(p,G);u.position.set(A[0],A[1],A[2]);u.position.normalize()}else if(v.type==="point"){A=v.position;u=v.distance;u=new THREE.PointLight(p,G,u);u.position.set(A[0],A[1],A[2])}else v.type==="ambient"&&(u=new THREE.AmbientLight(p));O.scene.add(u); -O.lights[q]=u}for(o in D.fogs){q=D.fogs[o];q.type==="linear"?M=new THREE.Fog(0,q.near,q.far):q.type==="exp2"&&(M=new THREE.FogExp2(0,q.density));y=q.color;M.color.setRGB(y[0],y[1],y[2]);O.fogs[o]=M}if(O.cameras&&D.defaults.camera)O.currentCamera=O.cameras[D.defaults.camera];if(O.fogs&&D.defaults.fog)O.scene.fog=O.fogs[D.defaults.fog];y=D.defaults.bgcolor;O.bgColor=new THREE.Color;O.bgColor.setRGB(y[0],y[1],y[2]);O.bgColorAlpha=D.defaults.bgalpha;for(l in D.geometries){o=D.geometries[l];if(o.type== -"bin_mesh"||o.type=="ascii_mesh"){P=P+1;i.onLoadStart()}}N=P;for(l in D.geometries){o=D.geometries[l];if(o.type==="cube"){F=new THREE.CubeGeometry(o.width,o.height,o.depth,o.segmentsWidth,o.segmentsHeight,o.segmentsDepth,null,o.flipped,o.sides);O.geometries[l]=F}else if(o.type==="plane"){F=new THREE.PlaneGeometry(o.width,o.height,o.segmentsWidth,o.segmentsHeight);O.geometries[l]=F}else if(o.type==="sphere"){F=new THREE.SphereGeometry(o.radius,o.segmentsWidth,o.segmentsHeight);O.geometries[l]=F}else if(o.type=== -"cylinder"){F=new THREE.CylinderGeometry(o.topRad,o.botRad,o.height,o.radSegs,o.heightSegs);O.geometries[l]=F}else if(o.type==="torus"){F=new THREE.TorusGeometry(o.radius,o.tube,o.segmentsR,o.segmentsT);O.geometries[l]=F}else if(o.type==="icosahedron"){F=new THREE.IcosahedronGeometry(o.radius,o.subdivisions);O.geometries[l]=F}else if(o.type==="bin_mesh")c.load(d(o.url,D.urlBaseType),e(l));else if(o.type==="ascii_mesh")K.load(d(o.url,D.urlBaseType),e(l));else if(o.type==="embedded_mesh"){o=D.embeds[o.id]; -o.metadata=D.metadata;o&&K.createModel(o,g(l),"")}}for(r in D.textures){l=D.textures[r];if(l.url instanceof Array){L=L+l.url.length;for(o=0;o1&&(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(B[0],B[1],B[2]);if(A){c.quaternion.set(A[0],A[1],A[2],A[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{B=r.position;y=r.rotation;A=r.quaternion;G=r.scale;A=0;c=new THREE.Object3D; +c.name=m;c.position.set(B[0],B[1],B[2]);if(A){c.quaternion.set(A[0],A[1],A[2],A[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:Z,loadedModels:Q-P,loadedTextures:Z-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,t,r,u,v,s,B,y,A,G,x,I,F,L,H,M,C,E,P,N,Q,Z,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));B=x.position;v=x.target;x=x.up;H.position.set(B[0], +B[1],B[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"){B=v.direction;s=new THREE.DirectionalLight(q,H);s.position.set(B[0],B[1],B[2]);s.position.normalize()}else if(v.type==="point"){B=v.position;s=v.distance;s=new THREE.PointLight(q,H,s);s.position.set(B[0],B[1],B[2])}else v.type==="ambient"&&(s=new THREE.AmbientLight(q));J.scene.add(s); +J.lights[p]=s}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(t in C.textures){j=C.textures[t];if(j.url instanceof Array){N=N+j.url.length;for(n=0;n0){c(THREE.NormalBlending);b(1); -f("rgba("+Math.floor(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b*255)+","+s+")");o.fillRect(Math.floor(Ha.getX()),Math.floor(Ha.getY()),Math.floor(Ha.getWidth()),Math.floor(Ha.getHeight()))}Ha.empty()}};this.render=function(a,l){function n(a,b,c){for(var d=0,f=i.length;d255?255:f;Ka[1]=e<0?0:e>255?255:e;Ka[2]=a<0?0:a>255?255:a;Ka[4]=g<0?0:g>255?255:g;Ka[5]=h<0?0:h>255?255:h;Ka[6]=b<0?0:b>255?255:b;Ka[8]=i<0?0:i>255?255:i;Ka[9]=j<0?0:j>255?255:j;Ka[10]=c<0?0:c>255?255:c;Ka[12]=l<0?0:l>255?255:l;Ka[13]=m<0?0:m>255?255:m;Ka[14]=d<0?0:d>255?255:d;Va.putImageData(Xa,0,0);k.drawImage(tb,0,0);return fb}function v(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function jc(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function A(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(l instanceof THREE.Camera===false)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var Wb,Fc,la,V;this.autoClear===true?this.clear():o.setTransform(1,0,0,-1,q,p);e.info.render.vertices=0;e.info.render.faces=0;g=j.projectScene(a,l,this.sortElements);h=g.elements;i=g.lights;eb=i.length>0;if(eb===true){Ia.setRGB(0,0,0);ib.setRGB(0,0,0);jb.setRGB(0,0,0);Wb=0;for(Fc=i.length;Wb< -Fc;Wb++){V=i[Wb];var ha=V.color;if(V instanceof THREE.AmbientLight){Ia.r=Ia.r+ha.r;Ia.g=Ia.g+ha.g;Ia.b=Ia.b+ha.b}else if(V instanceof THREE.DirectionalLight){ib.r=ib.r+ha.r;ib.g=ib.g+ha.g;ib.b=ib.b+ha.b}else if(V instanceof THREE.PointLight){jb.r=jb.r+ha.r;jb.g=jb.g+ha.g;jb.b=jb.b+ha.b}}}Wb=0;for(Fc=h.length;Wb>1;Uc=la.height>>1;kb=Wa.scale.x*q;lb=Wa.scale.y*p;rb=kb* -kc;sb=lb*Uc;Ca.set(ha.x-rb,ha.y-sb,ha.x+rb,ha.y+sb);if(cb.intersects(Ca)!==false){o.save();o.translate(ha.x,ha.y);o.rotate(-Wa.rotation);o.scale(kb,-lb);o.translate(-kc,-Uc);o.drawImage(la,0,0);o.restore()}}else if(V instanceof THREE.ParticleCanvasMaterial){rb=Wa.scale.x*q;sb=Wa.scale.y*p;Ca.set(ha.x-rb,ha.y-sb,ha.x+rb,ha.y+sb);if(cb.intersects(Ca)!==false){d(V.color.getContextStyle());f(V.color.getContextStyle());o.save();o.translate(ha.x,ha.y);o.rotate(-Wa.rotation);o.scale(rb,sb);V.program(o); -o.restore()}}}else if(la instanceof THREE.RenderableLine){y=la.v1;I=la.v2;y.positionScreen.x=y.positionScreen.x*q;y.positionScreen.y=y.positionScreen.y*p;I.positionScreen.x=I.positionScreen.x*q;I.positionScreen.y=I.positionScreen.y*p;Ca.addPoint(y.positionScreen.x,y.positionScreen.y);Ca.addPoint(I.positionScreen.x,I.positionScreen.y);if(cb.intersects(Ca)===true){ha=y;Wa=I;b(V.opacity);c(V.blending);o.beginPath();o.moveTo(ha.positionScreen.x,ha.positionScreen.y);o.lineTo(Wa.positionScreen.x,Wa.positionScreen.y); -if(V instanceof THREE.LineBasicMaterial){ha=V.linewidth;if(x!==ha)x=o.lineWidth=ha;ha=V.linecap;if(B!==ha)B=o.lineCap=ha;ha=V.linejoin;if(J!==ha)J=o.lineJoin=ha;d(V.color.getContextStyle());o.stroke();Ca.inflate(V.linewidth*2)}}}else if(la instanceof THREE.RenderableFace3){y=la.v1;I=la.v2;F=la.v3;y.positionScreen.x=y.positionScreen.x*q;y.positionScreen.y=y.positionScreen.y*p;I.positionScreen.x=I.positionScreen.x*q;I.positionScreen.y=I.positionScreen.y*p;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y= -F.positionScreen.y*p;if(V.overdraw===true){A(y.positionScreen,I.positionScreen);A(I.positionScreen,F.positionScreen);A(F.positionScreen,y.positionScreen)}Ca.add3Points(y.positionScreen.x,y.positionScreen.y,I.positionScreen.x,I.positionScreen.y,F.positionScreen.x,F.positionScreen.y);cb.intersects(Ca)===true&&m(y,I,F,0,1,2,la,V,a)}else if(la instanceof THREE.RenderableFace4){y=la.v1;I=la.v2;F=la.v3;H=la.v4;y.positionScreen.x=y.positionScreen.x*q;y.positionScreen.y=y.positionScreen.y*p;I.positionScreen.x= -I.positionScreen.x*q;I.positionScreen.y=I.positionScreen.y*p;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y=F.positionScreen.y*p;H.positionScreen.x=H.positionScreen.x*q;H.positionScreen.y=H.positionScreen.y*p;G.positionScreen.copy(I.positionScreen);M.positionScreen.copy(H.positionScreen);if(V.overdraw===true){A(y.positionScreen,I.positionScreen);A(I.positionScreen,H.positionScreen);A(H.positionScreen,y.positionScreen);A(F.positionScreen,G.positionScreen);A(F.positionScreen,M.positionScreen)}Ca.addPoint(y.positionScreen.x, -y.positionScreen.y);Ca.addPoint(I.positionScreen.x,I.positionScreen.y);Ca.addPoint(F.positionScreen.x,F.positionScreen.y);Ca.addPoint(H.positionScreen.x,H.positionScreen.y);if(cb.intersects(Ca)===true){ha=y;Wa=I;rb=F;sb=H;kb=G;lb=M;kc=a;e.info.render.vertices=e.info.render.vertices+4;e.info.render.faces++;b(V.opacity);c(V.blending);if(V.map!==void 0&&V.map!==null||V.envMap!==void 0&&V.envMap!==null){m(ha,Wa,sb,0,1,3,la,V,kc);m(kb,rb,lb,1,2,3,la,V,kc)}else{D=ha.positionScreen.x;K=ha.positionScreen.y; -P=Wa.positionScreen.x;L=Wa.positionScreen.y;N=rb.positionScreen.x;X=rb.positionScreen.y;O=sb.positionScreen.x;C=sb.positionScreen.y;aa=kb.positionScreen.x;wa=kb.positionScreen.y;ka=lb.positionScreen.x;Ba=lb.positionScreen.y;if(V instanceof THREE.MeshBasicMaterial){s(D,K,P,L,N,X,O,C);V.wireframe===true?r(V.color,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Nb(V.color)}else if(V instanceof THREE.MeshLambertMaterial)if(eb===true)if(V.wireframe===false&&V.shading==THREE.SmoothShading&& -la.vertexNormalsLength==4){Y.r=U.r=$.r=ea.r=Ia.r;Y.g=U.g=$.g=ea.g=Ia.g;Y.b=U.b=$.b=ea.b=Ia.b;n(la.v1.positionWorld,la.vertexNormalsWorld[0],Y);n(la.v2.positionWorld,la.vertexNormalsWorld[1],U);n(la.v4.positionWorld,la.vertexNormalsWorld[3],$);n(la.v3.positionWorld,la.vertexNormalsWorld[2],ea);Y.r=Math.max(0,Math.min(V.color.r*Y.r,1));Y.g=Math.max(0,Math.min(V.color.g*Y.g,1));Y.b=Math.max(0,Math.min(V.color.b*Y.b,1));U.r=Math.max(0,Math.min(V.color.r*U.r,1));U.g=Math.max(0,Math.min(V.color.g*U.g,1)); -U.b=Math.max(0,Math.min(V.color.b*U.b,1));$.r=Math.max(0,Math.min(V.color.r*$.r,1));$.g=Math.max(0,Math.min(V.color.g*$.g,1));$.b=Math.max(0,Math.min(V.color.b*$.b,1));ea.r=Math.max(0,Math.min(V.color.r*ea.r,1));ea.g=Math.max(0,Math.min(V.color.g*ea.g,1));ea.b=Math.max(0,Math.min(V.color.b*ea.b,1));Ga=Vb(Y,U,$,ea);u(D,K,P,L,O,C);wb(D,K,P,L,O,C,0,0,1,0,0,1,Ga);u(aa,wa,N,X,ka,Ba);wb(aa,wa,N,X,ka,Ba,1,0,1,1,0,1,Ga)}else{ca.r=Ia.r;ca.g=Ia.g;ca.b=Ia.b;n(la.centroidWorld,la.normalWorld,ca);ca.r=Math.max(0, -Math.min(V.color.r*ca.r,1));ca.g=Math.max(0,Math.min(V.color.g*ca.g,1));ca.b=Math.max(0,Math.min(V.color.b*ca.b,1));s(D,K,P,L,N,X,O,C);V.wireframe===true?r(ca,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Nb(ca)}else{s(D,K,P,L,N,X,O,C);V.wireframe===true?r(V.color,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Nb(V.color)}else if(V instanceof THREE.MeshNormalMaterial){ca.r=jc(la.normalWorld.x);ca.g=jc(la.normalWorld.y);ca.b=jc(la.normalWorld.z);s(D,K,P,L,N,X,O,C);V.wireframe=== -true?r(ca,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Nb(ca)}else if(V instanceof THREE.MeshDepthMaterial){ta=l.near;Fa=l.far;Y.r=Y.g=Y.b=1-v(ha.positionScreen.z,ta,Fa);U.r=U.g=U.b=1-v(Wa.positionScreen.z,ta,Fa);$.r=$.g=$.b=1-v(sb.positionScreen.z,ta,Fa);ea.r=ea.g=ea.b=1-v(rb.positionScreen.z,ta,Fa);Ga=Vb(Y,U,$,ea);u(D,K,P,L,O,C);wb(D,K,P,L,O,C,0,0,1,0,0,1,Ga);u(aa,wa,N,X,ka,Ba);wb(aa,wa,N,X,ka,Ba,1,0,1,1,0,1,Ga)}}}}Ha.addRectangle(Ca)}}o.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#ifdef USE_BUMPMAP\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#ifdef USE_BUMPMAP\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", +THREE.CanvasRenderer=function(a){function b(a){if(u!==a)u=n.globalAlpha=a}function c(a){if(v!==a){if(a===THREE.NormalBlending)n.globalCompositeOperation="source-over";else if(a===THREE.AdditiveBlending)n.globalCompositeOperation="lighter";else if(a===THREE.SubtractiveBlending)n.globalCompositeOperation="darker";v=a}}function d(a){if(s!==a)s=n.strokeStyle=a}function f(a){if(B!==a)B=n.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"),o,m,p,q,n=j.getContext("2d"),t=new THREE.Color(0),r=0,u=1,v=0,s=null,B=null,y=null,A=null,G=null,x,I,F,L,H=new THREE.RenderableVertex,M=new THREE.RenderableVertex,C,E,P,N,Q,Z,J,K,ea,O,ra,wa,ca=new THREE.Color,ba=new THREE.Color,W=new THREE.Color,V=new THREE.Color,ga=new THREE.Color,ha=[],pa=[],ta,Da,Ia,Xa,ja,ob,Na,Ya,pb,vb,fb=new THREE.Rectangle,Fa=new THREE.Rectangle,ya=new THREE.Rectangle,wb=false,Ga=new THREE.Color,$a=new THREE.Color,qb=new THREE.Color, +Ea=new THREE.Vector3,ab,bb,Ob,Oa,Pa,gb,a=16;ab=document.createElement("canvas");ab.width=ab.height=2;bb=ab.getContext("2d");bb.fillStyle="rgba(0,0,0,1)";bb.fillRect(0,0,2,2);Ob=bb.getImageData(0,0,2,2);Oa=Ob.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){o=a;m=b;p=Math.floor(o/2); +q=Math.floor(m/2);j.width=o;j.height=m;fb.set(-p,-q,p,q);Fa.set(-p,-q,p,q);u=1;v=0;G=A=y=B=s=null};this.setClearColor=function(a,b){t.copy(a);r=b!==void 0?b:1;Fa.set(-p,-q,p,q)};this.setClearColorHex=function(a,b){t.setHex(a);r=b!==void 0?b:1;Fa.set(-p,-q,p,q)};this.clear=function(){n.setTransform(1,0,0,-1,p,q);if(Fa.isEmpty()===false){Fa.minSelf(fb);Fa.inflate(2);r<1&&n.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(t.r*255)+","+Math.floor(t.g*255)+","+Math.floor(t.b*255)+","+r+")");n.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;d255?255:f;Oa[1]=e<0?0:e>255?255:e;Oa[2]=a<0?0:a>255?255:a;Oa[4]=g<0?0:g>255?255:g;Oa[5]=h<0?0:h>255?255:h;Oa[6]=b<0?0:b>255?255:b;Oa[8]=i<0?0:i>255?255:i;Oa[9]=k<0?0:k>255?255:k;Oa[10]=c<0?0:c>255?255:c;Oa[12]=j<0?0:j>255?255:j;Oa[13]=l<0?0:l>255?255:l;Oa[14]=d<0?0:d>255?255:d;bb.putImageData(Ob,0,0);gb.drawImage(ab,0,0);return Pa}function ec(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function xb(a){a=(a+1)*0.5;return a<0?0: +a>1?1:a}function v(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,B,la,X;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;wb=i.length>0;if(wb===true){Ga.setRGB(0,0,0); +$a.setRGB(0,0,0);qb.setRGB(0,0,0);Vb=0;for(B=i.length;Vb>1; +Tc=la.height>>1;ib=Wa.scale.x*p;jb=Wa.scale.y*q;rb=ib*jc;sb=jb*Tc;ya.set(ia.x-rb,ia.y-sb,ia.x+rb,ia.y+sb);if(fb.intersects(ya)!==false){n.save();n.translate(ia.x,ia.y);n.rotate(-Wa.rotation);n.scale(ib,-jb);n.translate(-jc,-Tc);n.drawImage(la,0,0);n.restore()}}else if(X instanceof THREE.ParticleCanvasMaterial){rb=Wa.scale.x*p;sb=Wa.scale.y*q;ya.set(ia.x-rb,ia.y-sb,ia.x+rb,ia.y+sb);if(fb.intersects(ya)!==false){d(X.color.getContextStyle());f(X.color.getContextStyle());n.save();n.translate(ia.x,ia.y); +n.rotate(-Wa.rotation);n.scale(rb,sb);X.program(n);n.restore()}}}else if(la instanceof THREE.RenderableLine){x=la.v1;I=la.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){ia=x;Wa=I;b(X.opacity);c(X.blending);n.beginPath();n.moveTo(ia.positionScreen.x,ia.positionScreen.y); +n.lineTo(Wa.positionScreen.x,Wa.positionScreen.y);if(X instanceof THREE.LineBasicMaterial){ia=X.linewidth;if(y!==ia)y=n.lineWidth=ia;ia=X.linecap;if(A!==ia)A=n.lineCap=ia;ia=X.linejoin;if(G!==ia)G=n.lineJoin=ia;d(X.color.getContextStyle());n.stroke();ya.inflate(X.linewidth*2)}}}else if(la instanceof THREE.RenderableFace3){x=la.v1;I=la.v2;F=la.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(X.overdraw===true){v(x.positionScreen,I.positionScreen);v(I.positionScreen,F.positionScreen);v(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,la,X,a)}else if(la instanceof THREE.RenderableFace4){x=la.v1;I=la.v2;F=la.v3;L=la.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(X.overdraw===true){v(x.positionScreen,I.positionScreen);v(I.positionScreen,L.positionScreen);v(L.positionScreen,x.positionScreen);v(F.positionScreen, +H.positionScreen);v(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){ia=x;Wa=I;rb=F;sb=L;ib=H;jb=M;jc=a;e.info.render.vertices=e.info.render.vertices+4;e.info.render.faces++;b(X.opacity);c(X.blending);if(X.map!==void 0&&X.map!==null||X.envMap!==void 0&&X.envMap!==null){o(ia,Wa,sb,0, +1,3,la,X,jc);o(ib,rb,jb,1,2,3,la,X,jc)}else{C=ia.positionScreen.x;E=ia.positionScreen.y;P=Wa.positionScreen.x;N=Wa.positionScreen.y;Q=rb.positionScreen.x;Z=rb.positionScreen.y;J=sb.positionScreen.x;K=sb.positionScreen.y;ea=ib.positionScreen.x;O=ib.positionScreen.y;ra=jb.positionScreen.x;wa=jb.positionScreen.y;if(X instanceof THREE.MeshBasicMaterial){s(C,E,P,N,Q,Z,J,K);X.wireframe===true?r(X.color,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin):t(X.color)}else if(X instanceof THREE.MeshLambertMaterial)if(wb=== +true)if(X.wireframe===false&&X.shading==THREE.SmoothShading&&la.vertexNormalsLength==4){ba.r=W.r=V.r=ga.r=Ga.r;ba.g=W.g=V.g=ga.g=Ga.g;ba.b=W.b=V.b=ga.b=Ga.b;j(la.v1.positionWorld,la.vertexNormalsWorld[0],ba);j(la.v2.positionWorld,la.vertexNormalsWorld[1],W);j(la.v4.positionWorld,la.vertexNormalsWorld[3],V);j(la.v3.positionWorld,la.vertexNormalsWorld[2],ga);ba.r=Math.max(0,Math.min(X.color.r*ba.r,1));ba.g=Math.max(0,Math.min(X.color.g*ba.g,1));ba.b=Math.max(0,Math.min(X.color.b*ba.b,1));W.r=Math.max(0, +Math.min(X.color.r*W.r,1));W.g=Math.max(0,Math.min(X.color.g*W.g,1));W.b=Math.max(0,Math.min(X.color.b*W.b,1));V.r=Math.max(0,Math.min(X.color.r*V.r,1));V.g=Math.max(0,Math.min(X.color.g*V.g,1));V.b=Math.max(0,Math.min(X.color.b*V.b,1));ga.r=Math.max(0,Math.min(X.color.r*ga.r,1));ga.g=Math.max(0,Math.min(X.color.g*ga.g,1));ga.b=Math.max(0,Math.min(X.color.b*ga.b,1));Ia=Ec(ba,W,V,ga);m(C,E,P,N,J,K);ua(C,E,P,N,J,K,0,0,1,0,0,1,Ia);m(ea,O,Q,Z,ra,wa);ua(ea,O,Q,Z,ra,wa,1,0,1,1,0,1,Ia)}else{ca.r=Ga.r;ca.g= +Ga.g;ca.b=Ga.b;j(la.centroidWorld,la.normalWorld,ca);ca.r=Math.max(0,Math.min(X.color.r*ca.r,1));ca.g=Math.max(0,Math.min(X.color.g*ca.g,1));ca.b=Math.max(0,Math.min(X.color.b*ca.b,1));s(C,E,P,N,Q,Z,J,K);X.wireframe===true?r(ca,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin):t(ca)}else{s(C,E,P,N,Q,Z,J,K);X.wireframe===true?r(X.color,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin):t(X.color)}else if(X instanceof THREE.MeshNormalMaterial){ca.r=xb(la.normalWorld.x);ca.g=xb(la.normalWorld.y); +ca.b=xb(la.normalWorld.z);s(C,E,P,N,Q,Z,J,K);X.wireframe===true?r(ca,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin):t(ca)}else if(X instanceof THREE.MeshDepthMaterial){ta=k.near;Da=k.far;ba.r=ba.g=ba.b=1-ec(ia.positionScreen.z,ta,Da);W.r=W.g=W.b=1-ec(Wa.positionScreen.z,ta,Da);V.r=V.g=V.b=1-ec(sb.positionScreen.z,ta,Da);ga.r=ga.g=ga.b=1-ec(rb.positionScreen.z,ta,Da);Ia=Ec(ba,W,V,ga);m(C,E,P,N,J,K);ua(C,E,P,N,J,K,0,0,1,0,0,1,Ia);m(ea,O,Q,Z,ra,wa);ua(ea,O,Q,Z,ra,wa,1,0,1,1,0,1,Ia)}}}}Fa.addRectangle(ya)}}n.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#ifdef USE_BUMPMAP\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif", +envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#ifdef USE_BUMPMAP\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 )\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", envmap_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP )\nvec3 nWorld = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refractionRatio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );\n#endif", map_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_SPECULARMAP )\nvarying vec2 vUv;\nuniform vec4 offsetRepeat;\n#endif",map_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_SPECULARMAP )\nvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif",map_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_SPECULARMAP )\nvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif",map_fragment:"#ifdef USE_MAP\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( map, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( map, vUv );\n#endif\n#endif", @@ -326,144 +327,145 @@ THREE.ShaderChunk.lights_phong_fragment,THREE.ShaderChunk.lightmap_fragment,THRE THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {",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.specularMap||a instanceof THREE.ShaderMaterial?true:false}function e(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,n=a.__sortArray,o=a.verticesNeedUpdate,p=a.colorsNeedUpdate,q=a.__webglCustomAttributesList;if(c.sortParticles){tb.copy(ua);tb.multiplySelf(c.matrixWorld);for(d=0;d=0;c--)a[c].object===b&&a.splice(c,1)}function o(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function r(a,b,c,d,f){ea=0;if(d.needsUpdate){d.program&&C.deallocateMaterial(d);C.initMaterial(d,b,c,f);d.needsUpdate=false}if(d.morphTargets&&!f.__webglMorphTargetInfluences)f.__webglMorphTargetInfluences=new Float32Array(C.maxMorphTargets);var e=false,g=d.program,h=g.uniforms,i=d.uniforms;if(g!==ka){k.useProgram(g);ka=g;e=true}if(d.id!==ca){ca= -d.id;e=true}if(e||a!==U){k.uniformMatrix4fv(h.projectionMatrix,false,a._projectionMatrixArray);a!==U&&(U=a)}if(d.skinning)if(ec&&f.useVertexTexture){if(h.boneTexture!==null){var j=s();k.uniform1i(h.boneTexture,j);C.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(Ka){for(var l=0,m=0,n=0,o,p,q,r,t=fb,y=t.directional.colors,x=t.directional.positions,A=t.point.colors,B=t.point.positions,D=t.point.distances,G=t.spot.colors,I=t.spot.positions,K=t.spot.distances,O=t.spot.directions,M=t.spot.angles,L=t.spot.exponents,N=t.hemi.skyColors,P=t.hemi.groundColors,Y=t.hemi.positions,$=0,X=0,aa=0,ia=0,c=o=q=q=p=0,e=b.length;c=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.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,n=a.__sortArray,o=a.verticesNeedUpdate,q=a.colorsNeedUpdate,p=a.__webglCustomAttributesList;if(c.sortParticles){Ob.copy(bb);Ob.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){pa=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!==ca){k.useProgram(g);ca=g;e=true}if(d.id!==W){W=d.id; +e=true}if(e||a!==ga){k.uniformMatrix4fv(h.projectionMatrix,false,a._projectionMatrixArray);a!==ga&&(ga=a)}if(d.skinning)if(dc&&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(gb){for(var l=0,m=0,n=0,o,q,p,s,r=qc,t=r.directional.colors,u=r.directional.positions,x=r.point.colors,A=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,ba=0,Z=0,ea=0,c=o=p=p=q=0,e=b.length;c=sc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+sc);ea=ea+1;return a}function t(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function v(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 u(a,b,c,d){a[b]= -c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function A(a,b,c){if(Ua!==a){a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL);Ua=a}if(a&&(qb!==b||hb!==c)){k.polygonOffset(b,c);qb=b;hb=c}}function x(a){for(var a=a.split("\n"),b=0,c=a.length;b1||b.__oldAnisotropy)){k.texParameterf(a,Ub.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,Ec));b.__oldAnisotropy=b.anisotropy}}function y(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 I(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function F(a){return a===THREE.RepeatWrapping?k.REPEAT:a===THREE.ClampToEdgeWrapping?k.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?k.MIRRORED_REPEAT:a===THREE.NearestFilter?k.NEAREST:a===THREE.NearestMipMapNearestFilter? +false,f._normalMatrix.elements);h.modelMatrix!==null&&k.uniformMatrix4fv(h.modelMatrix,false,f.matrixWorld.elements);return g}function v(){var a=pa;a>=rc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+rc);pa=pa+1;return a}function s(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function B(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 A(a,b,c){if(pb!==a){a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL);pb=a}if(a&&(vb!==b||fb!==c)){k.polygonOffset(b,c);vb=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,Dc));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){return a===THREE.RepeatWrapping?k.REPEAT:a===THREE.ClampToEdgeWrapping?k.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?k.MIRRORED_REPEAT:a===THREE.NearestFilter?k.NEAREST:a===THREE.NearestMipMapNearestFilter? k.NEAREST_MIPMAP_NEAREST:a===THREE.NearestMipMapLinearFilter?k.NEAREST_MIPMAP_LINEAR:a===THREE.LinearFilter?k.LINEAR:a===THREE.LinearMipMapNearestFilter?k.LINEAR_MIPMAP_NEAREST:a===THREE.LinearMipMapLinearFilter?k.LINEAR_MIPMAP_LINEAR:a===THREE.UnsignedByteType?k.UNSIGNED_BYTE:a===THREE.UnsignedShort4444Type?k.UNSIGNED_SHORT_4_4_4_4:a===THREE.UnsignedShort5551Type?k.UNSIGNED_SHORT_5_5_5_1:a===THREE.UnsignedShort565Type?k.UNSIGNED_SHORT_5_6_5:a===THREE.ByteType?k.BYTE:a===THREE.ShortType?k.SHORT:a=== THREE.UnsignedShortType?k.UNSIGNED_SHORT:a===THREE.IntType?k.INT:a===THREE.UnsignedIntType?k.UNSIGNED_INT:a===THREE.FloatType?k.FLOAT:a===THREE.AlphaFormat?k.ALPHA:a===THREE.RGBFormat?k.RGB:a===THREE.RGBAFormat?k.RGBA:a===THREE.LuminanceFormat?k.LUMINANCE:a===THREE.LuminanceAlphaFormat?k.LUMINANCE_ALPHA:a===THREE.AddEquation?k.FUNC_ADD:a===THREE.SubtractEquation?k.FUNC_SUBTRACT:a===THREE.ReverseSubtractEquation?k.FUNC_REVERSE_SUBTRACT:a===THREE.ZeroFactor?k.ZERO:a===THREE.OneFactor?k.ONE:a===THREE.SrcColorFactor? -k.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?k.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?k.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?k.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?k.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?k.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?k.DST_COLOR:a===THREE.OneMinusDstColorFactor?k.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?k.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},H=a.canvas!==void 0?a.canvas:document.createElement("canvas"), -G=a.precision!==void 0?a.precision:"highp",M=a.alpha!==void 0?a.alpha:true,D=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,K=a.antialias!==void 0?a.antialias:false,P=a.stencil!==void 0?a.stencil:true,L=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,N=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),X=a.clearAlpha!==void 0?a.clearAlpha:0,O=a.maxLights!==void 0?a.maxLights:4;this.domElement=H;this.context=null;this.autoUpdateScene=this.autoUpdateObjects= +k.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?k.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?k.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?k.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?k.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?k.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?k.DST_COLOR:a===THREE.OneMinusDstColorFactor?k.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?k.SRC_ALPHA_SATURATE: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,Z=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,ea=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 C=this,aa=[],wa=0,ka=null,Ba=null,ca=-1,Y=null,U=null,$=0,ea=0,da=-1,ia=-1,ta=-1,Fa=-1,Ga=-1,Qa=-1,pa=-1,Za=-1,Ua=null,qb=null,hb=null,db=null,cb=0,Ha=0,Ca=0,eb=0,Ia=0,ib=0,jb=new THREE.Frustum,ua=new THREE.Matrix4,tb=new THREE.Matrix4,Va=new THREE.Vector4,Xa=new THREE.Vector3,Ka=true,fb={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,Ub;try{if(!(k=H.getContext("experimental-webgl",{alpha:M,premultipliedAlpha:D,antialias:K,stencil:P,preserveDrawingBuffer:L})))throw"Error creating WebGL context.";}catch(Sc){console.error(Sc)}a=k.getExtension("OES_texture_float");M=k.getExtension("OES_standard_derivatives");Ub=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic"); -a||console.log("THREE.WebGLRenderer: Float textures not supported.");M||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");Ub||console.log("THREE.WebGLRenderer: Anisotropic texture filtering 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(N.r,N.g, -N.b,X);this.context=k;var sc=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),M=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Tc=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),Ec=Ub?k.getParameter(Ub.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,fc=M>0,ec=fc&&a;this.getContext=function(){return k};this.supportsVertexTextures=function(){return fc};this.getMaxAnisotropy=function(){return Ec};this.setSize=function(a,b){H.width=a;H.height=b;this.setViewport(0,0,H.width,H.height)}; -this.setViewport=function(a,b,c,d){cb=a!==void 0?a:0;Ha=b!==void 0?b:0;Ca=c!==void 0?c:H.width;eb=d!==void 0?d:H.height;k.viewport(cb,Ha,Ca,eb)};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){N.setHex(a);X=b;k.clearColor(N.r,N.g,N.b,X)};this.setClearColor=function(a,b){N.copy(a);X=b;k.clearColor(N.r,N.g,N.b,X)};this.getClearColor=function(){return N};this.getClearAlpha= -function(){return X};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; +vertices:0,faces:0,points:0}};var O=this,ra=[],wa=0,ca=null,ba=null,W=-1,V=null,ga=null,ha=0,pa=0,ta=-1,Da=-1,Ia=-1,Xa=-1,ja=-1,ob=-1,Na=-1,Ya=-1,pb=null,vb=null,fb=null,Fa=null,ya=0,wb=0,Ga=0,$a=0,qb=0,Ea=0,ab=new THREE.Frustum,bb=new THREE.Matrix4,Ob=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;try{if(!(k=M.getContext("experimental-webgl",{alpha:E,premultipliedAlpha:P,antialias:N,stencil:Q,preserveDrawingBuffer:Z})))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"); +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.");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 rc=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),Dc=Pb?k.getParameter(Pb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,ic=E>0,dc=ic&&a;this.getContext=function(){return k};this.supportsVertexTextures=function(){return ic};this.getMaxAnisotropy=function(){return Dc};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;wb=b!==void 0?b:0;Ga=c!==void 0?c:M.width;$a=d!==void 0?d:M.height;k.viewport(ya,wb,Ga,$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)};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,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d1&&(b=true);d=0;for(c=f.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=e.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);h=e.attributes.color;if(a.color>=0&&h){i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.color,i,k.FLOAT,false,0,g*i*4)}h=e.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, -e.attributes.index.buffer)}k.drawElements(k.TRIANGLES,f[d].count,k.UNSIGNED_SHORT,f[d].start*2);C.info.render.calls++;C.info.render.vertices=C.info.render.vertices+f[d].count;C.info.render.faces=C.info.render.faces+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var g,i,c=r(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==Y){Y=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(b.position, -3,k.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;if(f.morphTargetBase!==-1){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}else if(c.position>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var j=0;i=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;j0&&i.push([l,j])}if(i.length>d.numSupportedMorphTargets){i.sort(h);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals? -i.sort(h):i.length===0&&i.push([0,0]);for(j=0;j=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, -e.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.normal>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer);k.vertexAttribPointer(b.normal,3,k.FLOAT,false,0,0)}if(b.tangent>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer);k.vertexAttribPointer(b.tangent,4,k.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){k.bindBuffer(k.ARRAY_BUFFER,e.__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(e.__webglUV2Buffer){k.bindBuffer(k.ARRAY_BUFFER,e.__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,e.__webglSkinIndicesBuffer);k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d= -d.wireframeLinewidth;if(d!==db){k.lineWidth(d);db=d}a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)}else{a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)}C.info.render.calls++;C.info.render.vertices=C.info.render.vertices+e.__webglFaceCount;C.info.render.faces=C.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip? -k.LINE_STRIP:k.LINES;d=d.linewidth;if(d!==db){k.lineWidth(d);db=d}k.drawArrays(f,0,e.__webglLineCount);C.info.render.calls++}else if(f instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,e.__webglParticleCount);C.info.render.calls++;C.info.render.points=C.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount);C.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 e,f,h,m,n=a.__lights,o=a.fog;ca=-1;Ka=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);ua.multiply(b.projectionMatrix,b.matrixWorldInverse);jb.setFromMatrix(ua); -this.autoUpdateObjects&&this.initWebGLObjects(a);i(this.renderPluginsPre,a,b);C.info.render.calls=0;C.info.render.vertices=0;C.info.render.faces=0;C.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;for(e=m.length;d=0){u=q.geometry.materials[u];if(u.transparent){p.transparent=u;p.opaque=null}else{p.opaque=u;p.transparent=null}}}else if(u)if(u.transparent){p.transparent=u;p.opaque=null}else{p.opaque=u;p.transparent=null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{Va.copy(h.matrixWorld.getPosition());ua.multiplyVector3(Va);f.z=Va.z}}}this.sortObjects&&m.sort(g);m=a.__webglObjectsImmediate; -d=0;for(e=m.length;d65535){B[x].counter=B[x].counter+1;A=B[x].hash+"_"+B[x].counter;r.geometryGroups[A]===void 0&&(r.geometryGroups[A]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:D,numMorphNormals:J})}t instanceof THREE.Face3?r.geometryGroups[A].faces3.push(u): -r.geometryGroups[A].faces4.push(u);r.geometryGroups[A].vertices=r.geometryGroups[A].vertices+y}r.geometryGroupsList=[];var F=void 0;for(F in r.geometryGroups){r.geometryGroups[F].id=$++;r.geometryGroupsList.push(r.geometryGroups[F])}}for(i in j.geometryGroups){l=j.geometryGroups[i];if(!l.__webglVertexBuffer){var G=l;G.__webglVertexBuffer=k.createBuffer();G.__webglNormalBuffer=k.createBuffer();G.__webglTangentBuffer=k.createBuffer();G.__webglColorBuffer=k.createBuffer();G.__webglUVBuffer=k.createBuffer(); -G.__webglUV2Buffer=k.createBuffer();G.__webglSkinIndicesBuffer=k.createBuffer();G.__webglSkinWeightsBuffer=k.createBuffer();G.__webglFaceBuffer=k.createBuffer();G.__webglLineBuffer=k.createBuffer();var I=void 0,U=void 0;if(G.numMorphTargets){G.__webglMorphTargetsBuffers=[];I=0;for(U=G.numMorphTargets;I0||O.faceVertexUvs.length>0)H.__uvArray=new Float32Array(L*2);if(O.faceUvs.length>1||O.faceVertexUvs.length> -1)H.__uv2Array=new Float32Array(L*2)}if(K.geometry.skinWeights.length&&K.geometry.skinIndices.length){H.__skinIndexArray=new Float32Array(L*4);H.__skinWeightArray=new Float32Array(L*4)}H.__faceArray=new Uint16Array(N*3);H.__lineArray=new Uint16Array(P*2);var ea=void 0,ia=void 0;if(H.numMorphTargets){H.__morphTargetsArrays=[];ea=0;for(ia=H.numMorphTargets;ea0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglSkinIndicesBuffer);k.bufferData(k.ARRAY_BUFFER,ya,nb);k.bindBuffer(k.ARRAY_BUFFER,ma.__webglSkinWeightsBuffer);k.bufferData(k.ARRAY_BUFFER,za,nb)}}if(vd&&$c){E=0;for(W=na.length;E0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Pa,nb)}}if(ud&&ab.hasTangents){E=0;for(W=na.length;E0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglUVBuffer);k.bufferData(k.ARRAY_BUFFER,yc,nb)}}if(ld&&ed&&id){E=0;for(W=na.length;E0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglUV2Buffer);k.bufferData(k.ARRAY_BUFFER,zc,nb)}}if(sd){E=0;for(W=na.length;E1&&(b=true);d=0;for(c=f.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=e.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=e.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=e.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, +e.attributes.index.buffer)}k.drawElements(k.TRIANGLES,f[d].count,k.UNSIGNED_SHORT,f[d].start*2);O.info.render.calls++;O.info.render.vertices=O.info.render.vertices+f[d].count;O.info.render.faces=O.info.render.faces+f[d].count/3}}else if(f instanceof THREE.ParticleSystem&&b){h=e.attributes.position;i=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.position,i,k.FLOAT,false,0,0);i=e.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,e,f){if(d.visible!==false){var g,h,c=u(a,b,c,d,f),b=c.attributes,a=false,c=e.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,e.__webglVertexBuffer);k.vertexAttribPointer(b.position,3,k.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes; +if(f.morphTargetBase!==-1){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}else if(c.position>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var i=0;h=f.morphTargetForcedOrder;for(g=f.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,e.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.normal>= +0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer);k.vertexAttribPointer(b.normal,3,k.FLOAT,false,0,0)}if(b.tangent>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer);k.vertexAttribPointer(b.tangent,4,k.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){k.bindBuffer(k.ARRAY_BUFFER,e.__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(e.__webglUV2Buffer){k.bindBuffer(k.ARRAY_BUFFER,e.__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,e.__webglSkinIndicesBuffer);k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==Fa){k.lineWidth(d);Fa=d}a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER, +e.__webglLineBuffer);k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)}else{a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)}O.info.render.calls++;O.info.render.vertices=O.info.render.vertices+e.__webglFaceCount;O.info.render.faces=O.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES;d=d.linewidth;if(d!==Fa){k.lineWidth(d);Fa=d}k.drawArrays(f, +0,e.__webglLineCount);O.info.render.calls++}else if(f instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,e.__webglParticleCount);O.info.render.calls++;O.info.render.points=O.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__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 e, +f,g,h,l=a.__lights,n=a.fog;W=-1;gb=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(e=h.length;d=0){t=p.geometry.materials[t];if(t.transparent){q.transparent=t;q.opaque=null}else{q.opaque=t;q.transparent=null}}}else if(t)if(t.transparent){q.transparent=t;q.opaque=null}else{q.opaque=t;q.transparent=null}f.render=true;if(this.sortObjects)if(g.renderDepth)f.z=g.renderDepth;else{Oa.copy(g.matrixWorld.getPosition());bb.multiplyVector3(Oa);f.z=Oa.z}}}this.sortObjects&&h.sort(i);h=a.__webglObjectsImmediate;d=0;for(e= +h.length;d65535){G[A].counter=G[A].counter+1;C=G[A].hash+"_"+G[A].counter;s.geometryGroups[C]===void 0&&(s.geometryGroups[C]={faces3:[],faces4:[],materialIndex:y,vertices:0,numMorphTargets:H,numMorphNormals:F})}x instanceof THREE.Face3?s.geometryGroups[C].faces3.push(u): +s.geometryGroups[C].faces4.push(u);s.geometryGroups[C].vertices=s.geometryGroups[C].vertices+B}s.geometryGroupsList=[];var I=void 0;for(I in s.geometryGroups){s.geometryGroups[I].id=ha++;s.geometryGroupsList.push(s.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(ba*2);var pa=void 0,ta=void 0;if(J.numMorphTargets){J.__morphTargetsArrays=[];pa=0;for(ta=J.numMorphTargets;pa0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglSkinIndicesBuffer);k.bufferData(k.ARRAY_BUFFER,Aa,lb);k.bindBuffer(k.ARRAY_BUFFER,ma.__webglSkinWeightsBuffer);k.bufferData(k.ARRAY_BUFFER,Ba,lb)}}if(hd&&dc){D=0;for(Y=na.length;D< +Y;D++){R=Va[na[D]];ub=R.vertexColors;Gc=R.color;if(ub.length===3&&dc===THREE.VertexColors){Eb=ub[0];Fb=ub[1];Gb=ub[2]}else Gb=Fb=Eb=Gc;Sa[Ja]=Eb.r;Sa[Ja+1]=Eb.g;Sa[Ja+2]=Eb.b;Sa[Ja+3]=Fb.r;Sa[Ja+4]=Fb.g;Sa[Ja+5]=Fb.b;Sa[Ja+6]=Gb.r;Sa[Ja+7]=Gb.g;Sa[Ja+8]=Gb.b;Ja=Ja+9}D=0;for(Y=oa.length;D0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Sa,lb)}}if(Sc&&db.hasTangents){D=0;for(Y=na.length;D0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglUVBuffer);k.bufferData(k.ARRAY_BUFFER,xc,lb)}}if(ad&&Yc&&ic){D=0;for(Y=na.length;D0){k.bindBuffer(k.ARRAY_BUFFER,ma.__webglUV2Buffer);k.bufferData(k.ARRAY_BUFFER,yc,lb)}}if(Dc){D=0;for(Y=na.length;D=0&&k.enableVertexAttribArray(r.position);r.color>=0&&k.enableVertexAttribArray(r.color);r.normal>=0&&k.enableVertexAttribArray(r.normal);r.tangent>=0&&k.enableVertexAttribArray(r.tangent);if(a.skinning&&r.skinIndex>=0&&r.skinWeight>=0){k.enableVertexAttribArray(r.skinIndex); -k.enableVertexAttribArray(r.skinWeight)}if(a.attributes)for(j in a.attributes)r[j]!==void 0&&r[j]>=0&&k.enableVertexAttribArray(r[j]);if(a.morphTargets){a.numSupportedMorphTargets=0;u="morphTarget";for(j=0;j=0){k.enableVertexAttribArray(r[s]);a.numSupportedMorphTargets++}}}if(a.morphNormals){a.numSupportedMorphNormals=0;u="morphNormal";for(j=0;j=0){k.enableVertexAttribArray(r[s]);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(da!==b){b?k.disable(k.CULL_FACE):k.enable(k.CULL_FACE);da=b}if(ia!==a){a?k.frontFace(k.CW):k.frontFace(k.CCW); -ia=a}};this.setDepthTest=function(a){if(pa!==a){a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST);pa=a}};this.setDepthWrite=function(a){if(Za!==a){k.depthMask(a);Za=a}};this.setBlending=function(a,b,c,d){if(a!==ta){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)}ta=a}if(a===THREE.CustomBlending){if(b!==Fa){k.blendEquation(F(b));Fa=b}if(c!==Ga||d!==Qa){k.blendFunc(F(c),F(d));Ga=c;Qa=d}}else Qa=Ga=Fa=null};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit){a.__webglInit= -true;a.__webglTexture=k.createTexture();C.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,e=F(a.format),f=F(a.type);J(k.TEXTURE_2D,a,d);a instanceof THREE.DataTexture?k.texImage2D(k.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data):k.texImage2D(k.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&& -d&&k.generateMipmap(k.TEXTURE_2D);a.needsUpdate=false;if(a.onUpdate)a.onUpdate()}else{k.activeTexture(k.TEXTURE0+b);k.bindTexture(k.TEXTURE_2D,a.__webglTexture)}};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=true;if(a.stencilBuffer===void 0)a.stencilBuffer=true;a.__webglTexture=k.createTexture();var c=(a.width&a.width-1)===0&&(a.height&a.height-1)===0,d=F(a.format),e=F(a.type);if(b){a.__webglFramebuffer= -[];a.__webglRenderbuffer=[];k.bindTexture(k.TEXTURE_CUBE_MAP,a.__webglTexture);J(k.TEXTURE_CUBE_MAP,a,c);for(var f=0;f<6;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);y(a.__webglRenderbuffer[f], -a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else{a.__webglFramebuffer=k.createFramebuffer();a.__webglRenderbuffer=k.createRenderbuffer();k.bindTexture(k.TEXTURE_2D,a.__webglTexture);J(k.TEXTURE_2D,a,c);k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null);d=k.TEXTURE_2D;k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,d,a.__webglTexture,0);y(a.__webglRenderbuffer,a);c&&k.generateMipmap(k.TEXTURE_2D)}b?k.bindTexture(k.TEXTURE_CUBE_MAP, -null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}if(a){b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer;c=a.width;a=a.height;e=d=0}else{b=null;c=Ca;a=eb;d=cb;e=Ha}if(b!==Ba){k.bindFramebuffer(k.FRAMEBUFFER,b);k.viewport(d,e,c,a);Ba=b}Ia=c;ib=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; +"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");e=x("fragment",e+p);d=x("vertex",d+q);k.attachShader(r,d);k.attachShader(r,e);k.linkProgram(r);k.getProgramParameter(r,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(r,k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");k.deleteShader(e); +k.deleteShader(d);r.uniforms={};r.attributes={};var t,d=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","modelMatrix","cameraPosition","morphTargetInfluences"];c.useVertexTexture?d.push("boneTexture"):d.push("boneGlobalMatrices");for(t in o)d.push(t);t=d;d=0;for(o=t.length;d=0&&k.enableVertexAttribArray(s.position);s.color>=0&&k.enableVertexAttribArray(s.color);s.normal>=0&&k.enableVertexAttribArray(s.normal);s.tangent>=0&&k.enableVertexAttribArray(s.tangent);if(a.skinning&&s.skinIndex>=0&&s.skinWeight>=0){k.enableVertexAttribArray(s.skinIndex); +k.enableVertexAttribArray(s.skinWeight)}if(a.attributes)for(j in a.attributes)s[j]!==void 0&&s[j]>=0&&k.enableVertexAttribArray(s[j]);if(a.morphTargets){a.numSupportedMorphTargets=0;r="morphTarget";for(j=0;j=0){k.enableVertexAttribArray(s[t]);a.numSupportedMorphTargets++}}}if(a.morphNormals){a.numSupportedMorphNormals=0;r="morphNormal";for(j=0;j=0){k.enableVertexAttribArray(s[t]);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(Na!==a){a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST);Na=a}};this.setDepthWrite=function(a){if(Ya!==a){k.depthMask(a);Ya=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!==Xa){k.blendEquation(H(b));Xa=b}if(c!==ja||d!==ob){k.blendFunc(H(c),H(d));ja=c;ob=d}}else ob=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,e=H(a.format),f=H(a.type);I(k.TEXTURE_2D,a,d);a instanceof THREE.DataTexture?k.texImage2D(k.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data):k.texImage2D(k.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&& +d&&k.generateMipmap(k.TEXTURE_2D);a.needsUpdate=false;if(a.onUpdate)a.onUpdate()}else{k.activeTexture(k.TEXTURE0+b);k.bindTexture(k.TEXTURE_2D,a.__webglTexture)}};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=true;if(a.stencilBuffer===void 0)a.stencilBuffer=true;a.__webglTexture=k.createTexture();var c=(a.width&a.width-1)===0&&(a.height&a.height-1)===0,d=H(a.format),e=H(a.type);if(b){a.__webglFramebuffer= +[];a.__webglRenderbuffer=[];k.bindTexture(k.TEXTURE_CUBE_MAP,a.__webglTexture);I(k.TEXTURE_CUBE_MAP,a,c);for(var f=0;f<6;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);F(a.__webglRenderbuffer[f], +a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else{a.__webglFramebuffer=k.createFramebuffer();a.__webglRenderbuffer=k.createRenderbuffer();k.bindTexture(k.TEXTURE_2D,a.__webglTexture);I(k.TEXTURE_2D,a,c);k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null);d=k.TEXTURE_2D;k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,d,a.__webglTexture,0);F(a.__webglRenderbuffer,a);c&&k.generateMipmap(k.TEXTURE_2D)}b?k.bindTexture(k.TEXTURE_CUBE_MAP, +null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}if(a){b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer;c=a.width;a=a.height;e=d=0}else{b=null;c=Ga;a=$a;d=ya;e=wb}if(b!==ba){k.bindFramebuffer(k.FRAMEBUFFER,b);k.viewport(d,e,c,a);ba=b}qb=c;Ea=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=c.wrapS!==void 0?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=c.wrapT!==void 0?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=c.magFilter!==void 0?c.magFilter:THREE.LinearFilter;this.minFilter=c.minFilter!==void 0?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=c.anisotropy!==void 0?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=c.format!==void 0?c.format: THREE.RGBAFormat;this.type=c.type!==void 0?c.type:THREE.UnsignedByteType;this.depthBuffer=c.depthBuffer!==void 0?c.depthBuffer:true;this.stencilBuffer=c.stencilBuffer!==void 0?c.stencilBuffer:true;this.generateMipmaps=true}; THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.anisotropy=this.anisotropy;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;return a}; @@ -473,31 +475,31 @@ THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=this.object=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null}; THREE.ColorUtils={adjustHSV:function(a,b,c,d){var f=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,f);f.h=THREE.Math.clamp(f.h+b,0,1);f.s=THREE.Math.clamp(f.s+c,0,1);f.v=THREE.Math.clamp(f.v+d,0,1);a.setHSV(f.h,f.s,f.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,f=a.b,e=Math.max(Math.max(c,d),f),g=Math.min(Math.min(c,d),f);if(g===e)g=c=0;else{var h=e-g,g=h/e,c=(c===e?(d-f)/h:d===e?2+(f-c)/h:4+(c-d)/h)/6;c<0&&(c=c+1);c>1&&(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,j=e.faces,l=a.faceVertexUvs[0],n=e.faceVertexUvs[0],m={},q=0;q1){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,e-1):j[e]a?b(c,e-1):l[e] -b||p>b||m>b){i=a.vertices.length;v=f.clone();u=f.clone();if(q>=p&&q>=m){j=j.clone();j.lerpSelf(l,0.5);v.a=e;v.b=i;v.c=h;u.a=i;u.b=g;u.c=h;if(f.vertexNormals.length===3){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[1],0.5);v.vertexNormals[1].copy(e);u.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);u.vertexColors[0].copy(e)}f=0}else if(p>=q&&p>=m){j=l.clone();j.lerpSelf(n,0.5);v.a=e;v.b=g;v.c= -i;u.a=i;u.b=h;u.c=e;if(f.vertexNormals.length===3){e=f.vertexNormals[1].clone();e.lerpSelf(f.vertexNormals[2],0.5);v.vertexNormals[2].copy(e);u.vertexNormals[0].copy(e);u.vertexNormals[1].copy(f.vertexNormals[2]);u.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);u.vertexColors[0].copy(e);u.vertexColors[1].copy(f.vertexColors[2]);u.vertexColors[2].copy(f.vertexColors[0])}f=1}else{j=j.clone(); -j.lerpSelf(n,0.5);v.a=e;v.b=g;v.c=i;u.a=i;u.b=g;u.c=h;if(f.vertexNormals.length===3){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[2],0.5);v.vertexNormals[2].copy(e);u.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);u.vertexColors[0].copy(e)}f=2}A.push(v,u);a.vertices.push(j);e=0;for(g=a.faceVertexUvs.length;eb||p>b||o>b||r>b){s=a.vertices.length;t=a.vertices.length+1;v=f.clone();u=f.clone();if(q>=p&&q>=o&&q>=r||o>=p&&o>=q&&o>=r){q=j.clone();q.lerpSelf(l,0.5);l=n.clone();l.lerpSelf(m,0.5);v.a=e;v.b=s;v.c=t;v.d=i;u.a=s;u.b=g;u.c=h;u.d=t;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);u.vertexNormals[0].copy(e);u.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);u.vertexColors[0].copy(e);u.vertexColors[3].copy(g)}f=0}else{q=l.clone();q.lerpSelf(n,0.5);l=m.clone();l.lerpSelf(j,0.5);v.a=e;v.b=g;v.c=s;v.d=t;u.a=t;u.b=s;u.c=h;u.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);u.vertexNormals[0].copy(g);u.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);u.vertexColors[0].copy(g);u.vertexColors[1].copy(e)}f=1}A.push(v,u);a.vertices.push(q,l); -e=0;for(g=a.faceVertexUvs.length;e +b||q>b||m>b){i=a.vertices.length;v=f.clone();s=f.clone();if(p>=q&&p>=m){l=l.clone();l.lerpSelf(j,0.5);v.a=e;v.b=i;v.c=h;s.a=i;s.b=g;s.c=h;if(f.vertexNormals.length===3){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[1],0.5);v.vertexNormals[1].copy(e);s.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);s.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= +i;s.a=i;s.b=h;s.c=e;if(f.vertexNormals.length===3){e=f.vertexNormals[1].clone();e.lerpSelf(f.vertexNormals[2],0.5);v.vertexNormals[2].copy(e);s.vertexNormals[0].copy(e);s.vertexNormals[1].copy(f.vertexNormals[2]);s.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);s.vertexColors[0].copy(e);s.vertexColors[1].copy(f.vertexColors[2]);s.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;s.a=i;s.b=g;s.c=h;if(f.vertexNormals.length===3){e=f.vertexNormals[0].clone();e.lerpSelf(f.vertexNormals[2],0.5);v.vertexNormals[2].copy(e);s.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);s.vertexColors[0].copy(e)}f=2}B.push(v,s);a.vertices.push(l);e=0;for(g=a.faceVertexUvs.length;eb||q>b||n>b||t>b){r=a.vertices.length;u=a.vertices.length+1;v=f.clone();s=f.clone();if(p>=q&&p>=n&&p>=t||n>=q&&n>=p&&n>=t){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;s.a=r;s.b=g;s.c=h;s.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);s.vertexNormals[0].copy(e);s.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);s.vertexColors[0].copy(e);s.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;s.a=u;s.b=r;s.c=h;s.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);s.vertexNormals[0].copy(g);s.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);s.vertexColors[0].copy(g);s.vertexColors[1].copy(e)}f=1}B.push(v,s);a.vertices.push(p,j); +e=0;for(g=a.faceVertexUvs.length;ef- -1?f-1:n+1,p=l-1<0?0:l-1,o=l+1>d-1?d-1:l+1,r=[],s=[0,0,h[(n*d+l)*4]/255*b];r.push([-1,0,h[(n*d+p)*4]/255*b]);r.push([-1,-1,h[(m*d+p)*4]/255*b]);r.push([0,-1,h[(m*d+l)*4]/255*b]);r.push([1,-1,h[(m*d+o)*4]/255*b]);r.push([1,0,h[(n*d+o)*4]/255*b]);r.push([1,1,h[(q*d+o)*4]/255*b]);r.push([0,1,h[(q*d+l)*4]/255*b]);r.push([-1,1,h[(q*d+p)*4]/255*b]);m=[];p=r.length;for(q=0;qf- +1?f-1:o+1,q=j-1<0?0:j-1,n=j+1>d-1?d-1:j+1,t=[],r=[0,0,h[(o*d+j)*4]/255*b];t.push([-1,0,h[(o*d+q)*4]/255*b]);t.push([-1,-1,h[(m*d+q)*4]/255*b]);t.push([0,-1,h[(m*d+j)*4]/255*b]);t.push([1,-1,h[(m*d+n)*4]/255*b]);t.push([1,0,h[(o*d+n)*4]/255*b]);t.push([1,1,h[(p*d+n)*4]/255*b]);t.push([0,1,h[(p*d+j)*4]/255*b]);t.push([-1,1,h[(p*d+q)*4]/255*b]);m=[];q=t.length;for(p=0;p0)for(j=0;j2;){if(n--<=0){console.log("Warning, unable to triangulate polygon!");break}i=j;f<=i&&(i=0);j=i+1;f<=j&&(j=0);l=j+1;f<=l&&(l=0);var m;a:{m=a;var q=i,p=j,o=l,r=f,s=g,t=void 0,v=void 0,u=void 0,A=void 0,x=void 0, -B=void 0,J=void 0,y=void 0,I=void 0,v=m[s[q]].x,u=m[s[q]].y,A=m[s[p]].x,x=m[s[p]].y,B=m[s[o]].x,J=m[s[o]].y;if(1E-10>(A-v)*(J-u)-(x-u)*(B-v))m=false;else{for(t=0;t=0&&G>=0&&D>=0){m=false;break a}}m=true}}if(m){e.push([a[g[i]], -a[g[j]],a[g[l]]]);h.push([g[i],g[j],g[l]]);i=j;for(l=j+1;l0)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,t=f,r=g,u=void 0,v=void 0,s=void 0,B=void 0,y=void 0, +A=void 0,G=void 0,x=void 0,I=void 0,v=m[r[p]].x,s=m[r[p]].y,B=m[r[q]].x,y=m[r[q]].y,A=m[r[n]].x,G=m[r[n]].y;if(1E-10>(B-v)*(G-s)-(y-s)*(A-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)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)}; @@ -541,7 +543,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]; -q=g.x;p=g.y}else{g=this.actions[d-1].args;q=g[g.length-2];p=g[g.length-1]}for(e=1;e<=a;e++){o=e/a;g=THREE.Shape.Utils.b2(o,q,n,h);o=THREE.Shape.Utils.b2(o,p,m,i);c.push(new THREE.Vector2(g,o))}break;case THREE.PathActions.BEZIER_CURVE_TO:h=e[4];i=e[5];n=e[0];m=e[1];j=e[2];l=e[3];if(c.length>0){g=c[c.length-1];q=g.x;p=g.y}else{g=this.actions[d-1].args;q=g[g.length-2];p=g[g.length-1]}for(e=1;e<=a;e++){o=e/a;g=THREE.Shape.Utils.b3(o,q,n,j,h);o=THREE.Shape.Utils.b3(o,p,m,l,i);c.push(new THREE.Vector2(g, -o))}break;case THREE.PathActions.CSPLINE_THRU:g=this.actions[d-1].args;o=[new THREE.Vector2(g[g.length-2],g[g.length-1])];g=a*e[0].length;o=o.concat(e[0]);o=new THREE.SplineCurve(o);for(e=1;e<=g;e++)c.push(o.getPointAt(e/g));break;case THREE.PathActions.ARC:h=e[0];i=e[1];m=e[2];j=e[3];g=e[4];n=!!e[5];q=g-j;p=a*2;for(e=1;e<=p;e++){o=e/p;n||(o=1-o);o=j+o*q;g=h+m*Math.cos(o);o=i+m*Math.sin(o);c.push(new THREE.Vector2(g,o))}break;case THREE.PathActions.ELLIPSE:h=e[0];i=e[1];m=e[2];l=e[3];j=e[4];g=e[5]; -n=!!e[6];q=g-j;p=a*2;for(e=1;e<=p;e++){o=e/p;n||(o=1-o);o=j+o*q;g=h+m*Math.cos(o);o=i+l*Math.sin(o);c.push(new THREE.Vector2(g,o))}}}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,o,m,p,q,n;d=0;for(f=this.actions.length;d0){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.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:j.length-1;var o=[j[g],c[h],c[f]];n=THREE.FontUtils.Triangulate.area(o);var r=[j[g],j[e],c[h]];m=THREE.FontUtils.Triangulate.area(r);q=h;l=g;h=h+1;g=g+ --1;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;f=h-1>=0?h-1:c.length-1;e=g-1>=0?g-1:j.length-1;o=[j[g],c[h],c[f]];o=THREE.FontUtils.Triangulate.area(o);r=[j[g],j[e],c[h]];r=THREE.FontUtils.Triangulate.area(r);if(n+m>o+r){h=q;g=l;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;f=h-1>=0?h-1:c.length-1;e=g-1>=0?g-1:j.length-1}n=c.slice(0,h);m=c.slice(h);q=j.slice(g);l=j.slice(0,g);e=[j[g],j[e],c[h]];p.push([j[g],c[h],c[f]]);p.push(e);c=n.concat(q).concat(l).concat(m)}return{shape:c, -isolatedPts:p,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,j={};e=0;for(g=d.length;e=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 t=[l[g],l[e],c[h]];m=THREE.FontUtils.Triangulate.area(t);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);t=[l[g],l[e],c[h]];t=THREE.FontUtils.Triangulate.area(t);if(o+m>n+t){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;e1){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= +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 o=0,m=this.hierarchy.length;o1){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= 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,j;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]];j=a[c[3]];c=f*f;g=f*c;d[0]=this.interpolate(e[0],h[0],i[0],j[0],f,c,g);d[1]=this.interpolate(e[1],h[1],i[1],j[1],f,c,g);d[2]=this.interpolate(e[2],h[2],i[2],j[2],f,c,g);return 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?c0?c:0:c>=0?c:c+d.length;c>=0;c--)if(d[c][a]!==void 0)return d[c];return this.data.hierarchy[b].keys[d.length-1]}; THREE.KeyFrameAnimation=function(a,b,c){this.root=a;this.data=THREE.AnimationHandler.get(b);this.hierarchy=THREE.AnimationHandler.parse(a);this.currentTime=0;this.timeScale=0.001;this.isPlaying=false;this.loop=this.isPaused=true;this.JITCompile=c!==void 0?c:true;a=0;for(b=this.hierarchy.length;a=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); +THREE.KeyFrameAnimation.prototype.update=function(a){if(this.isPlaying){var b,c,d,f,e=this.data.JIT.hierarchy,g,h,i;h=this.currentTime=this.currentTime+a*this.timeScale;g=this.currentTime=this.currentTime%this.data.length;if(g=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, @@ -610,14 +612,14 @@ this.object.translateZ(-(b+this.autoSpeedFactor));this.moveBackward&&this.object this.target,c=this.object.position;b.x=c.x+100*Math.sin(this.phi)*Math.cos(this.theta);b.y=c.y+100*Math.cos(this.phi);b.z=c.z+100*Math.sin(this.phi)*Math.sin(this.theta);b=1;this.constrainVertical&&(b=Math.PI/(this.verticalMax-this.verticalMin));this.lon=this.lon+this.mouseX*a;if(this.lookVertical)this.lat=this.lat-this.mouseY*a*b;this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;if(this.constrainVertical)this.phi=THREE.Math.mapLinear(this.phi, 0,Math.PI,this.verticalMin,this.verticalMax);b=this.target;c=this.object.position;b.x=c.x+100*Math.sin(this.phi)*Math.cos(this.theta);b.y=c.y+100*Math.cos(this.phi);b.z=c.z+100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(b)}};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},false);this.domElement.addEventListener("mousemove",c(this,this.onMouseMove),false);this.domElement.addEventListener("mousedown",c(this,this.onMouseDown),false);this.domElement.addEventListener("mouseup", c(this,this.onMouseUp),false);this.domElement.addEventListener("keydown",c(this,this.onKeyDown),false);this.domElement.addEventListener("keyup",c(this,this.onKeyUp),false);this.handleResize()}; -THREE.PathControls=function(a,b){function c(a){return(a=a*2)<1?0.5*a*a:-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function f(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),r=g.length,s=0;f=r-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:g[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[f]={time:d,pos:g[f],rot:[0,0,0,1],scl:[1,1,1]};for(f=1;f=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}),q=0;q0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*j);this.object.translateY(b*l);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+(l.y-j.y)*c.zoomSpeed;if(a!==1&&a>0){g.multiplyScalar(a);c.staticMoving?j=l:j.y=j.y+(l.y-j.y)* -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);j=l=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?l=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?j=l=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? +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? 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(t===s.ROTATE){i.set(a.clientX,a.clientY);j.sub(i,h);e.rotateLeft(2*Math.PI*j.x/g*e.userRotateSpeed);e.rotateUp(2*Math.PI*j.y/g*e.userRotateSpeed);h.copy(i)}else if(t===s.ZOOM){n.set(a.clientX,a.clientY);m.sub(n,l);m.y>0?e.zoomIn():e.zoomOut();l.copy(n)}}function f(){if(e.userRotate){document.removeEventListener("mousemove",d,false);document.removeEventListener("mouseup",f,false); -t=s.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,j=new THREE.Vector2,l=new THREE.Vector2,n=new THREE.Vector2,m=new THREE.Vector2,q=0,p=0,o=1,r=new THREE.Vector3,s={NONE:-1,ROTATE:0,ZOOM:1},t=s.NONE,v={type:"change"};this.rotateLeft=function(a){a=== -void 0&&(a=c());p=p-a};this.rotateRight=function(a){a===void 0&&(a=c());p=p+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));o=o/a};this.zoomOut=function(a){a===void 0&&(a=Math.pow(0.95,e.userZoomSpeed));o=o*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+p,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(o);a.copy(this.center).addSelf(b);this.object.lookAt(this.center);q=p=0;o=1;if(r.distanceTo(this.object.position)>0){this.dispatchEvent(v);r.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){t=s.ROTATE;h.set(a.clientX,a.clientY)}else if(a.button===1){t=s.ZOOM;l.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.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,t=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(t.distanceTo(this.object.position)>0){this.dispatchEvent(v);t.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,l,m){var n,o=d||1,p=f||1,q=h/2,r=i/2,s=j.vertices.length;if(a==="x"&&b==="y"||a==="y"&&b==="x")n="z";else if(a==="x"&&b==="z"||a==="z"&&b==="x"){n="y";p=e||1}else if(a==="z"&&b==="y"||a==="y"&&b==="z"){n="x";o=e||1}var t=o+1,v=p+1,X=h/o,O=i/p,C=new THREE.Vector3;C[n]=l>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(C=c.length;--C>=0;){e=C;f=C-1;f<0&&(f= -c.length-1);for(var g=0,h=m+l*2,g=0;g=0;D--){B=D/l;P=i*(1-B);K=j*Math.sin(B*Math.PI/2);C=0;for(aa=G.length;Ca&&(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--){A=C/j;P=i*(1-A);E=l*Math.sin(A*Math.PI/2);K=0;for(ea=H.length;K1E-4){h.normalize();d=Math.acos(f[j-1].dot(f[j]));i.makeRotationAxis(h,d).multiplyVector3(e[j])}g[j].cross(f[j],e[j])}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(j=1;j1E-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=l){for(j=0;j<3;j++){l=[i[j],i[(j+1)%3]];n=true;for(m=0;m=j){for(l=0;l<3;l++){j=[i[l],i[(l+1)%3]];o=true;for(m=0;m0;)this.smooth(a)}; -THREE.SubdivisionModifier.prototype.smooth=function(a){function b(){l.debug&&console.log.apply(console,arguments)}function c(){console&&console.log.apply(console,arguments)}function d(a,c,d,f,g,h,n){var m=new THREE.Face4(a,c,d,f,null,g.color,g.materialIndex);if(l.useOldVertexColors){m.vertexColors=[];for(var o,p,q,r=0;r<4;r++){q=h[r];o=new THREE.Color;o.setRGB(0,0,0);for(var s=0;s=s&&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,j,l,n,m,q;this.init=function(p){b=p.context;c=p;d=new Float32Array(16);f=new Uint16Array(6);p=0;d[p++]=-1;d[p++]=-1;d[p++]=0;d[p++]=0;d[p++]=1;d[p++]=-1;d[p++]=1;d[p++]= -0;d[p++]=1;d[p++]=1;d[p++]=1;d[p++]=1;d[p++]=-1;d[p++]=1;d[p++]=0;d[p++]=1;p=0;f[p++]=0;f[p++]=1;f[p++]=2;f[p++]=0;f[p++]=2;f[p++]=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,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, 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){j=false;l=a(THREE.ShaderFlares.lensFlare)}else{j=true;l=a(THREE.ShaderFlares.lensFlareVertexTexture)}n={};m={};n.vertex=b.getAttribLocation(l,"position");n.uv=b.getAttribLocation(l,"uv");m.renderType=b.getUniformLocation(l,"renderType");m.map=b.getUniformLocation(l,"map");m.occlusionMap=b.getUniformLocation(l,"occlusionMap");m.opacity=b.getUniformLocation(l,"opacity");m.color=b.getUniformLocation(l, -"color");m.scale=b.getUniformLocation(l,"scale");m.rotation=b.getUniformLocation(l,"rotation");m.screenPosition=b.getUniformLocation(l,"screenPosition");q=false};this.render=function(a,d,f,s){var a=a.__webglFlares,t=a.length;if(t){var v=new THREE.Vector3,u=s/f,A=f*0.5,x=s*0.5,B=16/s,J=new THREE.Vector2(B*u,B),y=new THREE.Vector3(1,1,0),I=new THREE.Vector2(1,1),F=m,B=n;b.useProgram(l);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 H,G,M,D,K;for(H=0;H0&&I.x0&& -I.y0.001&&K.scale>0.001){y.x=K.x;y.y=K.y;y.z=K.z;B=K.size*K.scale/s;J.x=B*u;J.y=B;b.uniform3f(F.screenPosition,y.x,y.y,y.z);b.uniform2f(F.scale,J.x,J.y);b.uniform1f(F.rotation,K.rotation);b.uniform1f(F.opacity,K.opacity); -b.uniform3f(F.color,K.color.r,K.color.g,K.color.b);c.setBlending(K.blending,K.blendEquation,K.blendSrc,K.blendDst);c.setTexture(K.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,j=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(l,n){var m,q,p,o,r,s,t,v,u,A=[];o=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(q=l.__lights.length;mj.x)j.x=v.x;if(v.yj.y)j.y=v.y;if(v.z -j.z)j.z=v.z}o.left=i.x;o.right=j.x;o.top=j.y;o.bottom=i.y;o.updateProjectionMatrix()}o=p.shadowMap;s=p.shadowMatrix;r=p.shadowCamera;r.position.copy(p.matrixWorld.getPosition());r.lookAt(p.target.matrixWorld.getPosition());r.updateMatrixWorld();r.matrixWorldInverse.getInverse(r.matrixWorld);if(p.cameraHelper)p.cameraHelper.visible=p.shadowCameraVisible;p.shadowCameraVisible&&p.cameraHelper.update();s.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);s.multiplySelf(r.projectionMatrix);s.multiplySelf(r.matrixWorldInverse); -if(!r._viewMatrixArray)r._viewMatrixArray=new Float32Array(16);if(!r._projectionMatrixArray)r._projectionMatrixArray=new Float32Array(16);r.matrixWorldInverse.flattenToArray(r._viewMatrixArray);r.projectionMatrix.flattenToArray(r._projectionMatrixArray);h.multiply(r.projectionMatrix,r.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(o);b.clear();u=l.__webglObjects;p=0;for(o=u.length;p0&&I.x0&& +I.y0.001&&E.scale>0.001){x.x=E.x;x.y=E.y;x.z=E.z;A=E.size*E.scale/r;G.x=A*s;G.y=A;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)}}}; +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,t,r,u,v,s,B=[];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;t=q.shadowCamera;t.position.copy(q.matrixWorld.getPosition());t.lookAt(q.target.matrixWorld.getPosition());t.updateMatrixWorld();t.matrixWorldInverse.getInverse(t.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(t.projectionMatrix);r.multiplySelf(t.matrixWorldInverse); +if(!t._viewMatrixArray)t._viewMatrixArray=new Float32Array(16);if(!t._projectionMatrixArray)t._projectionMatrixArray=new Float32Array(16);t.matrixWorldInverse.flattenToArray(t._viewMatrixArray);t.projectionMatrix.flattenToArray(t._projectionMatrixArray);h.multiply(t.projectionMatrix,t.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(n);b.clear();s=j.__webglObjects;q=0;for(n=s.length;q + + + three.js webgl - buffergeometry [particles] + + + + + + +
+
three.js webgl - buffergeometry - particles
+ + + + + + + + + + diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index bf62aa3aaa3f895f2a3febff51a83a4790fd7868..9038df5919875704d0c766a4e06881ccdac00259 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -3216,6 +3216,42 @@ THREE.WebGLRenderer = function ( parameters ) { } + // render particles + + } else if ( object instanceof THREE.ParticleSystem ) { + + if ( updateBuffers ) { + + // vertices + + var position = geometry.attributes[ "position" ]; + var positionSize = position.itemSize; + + _gl.bindBuffer( _gl.ARRAY_BUFFER, position.buffer ); + _gl.vertexAttribPointer( attributes.position, positionSize, _gl.FLOAT, false, 0, 0 ); + + // colors + + var color = geometry.attributes[ "color" ]; + + if ( attributes.color >= 0 && color ) { + + var colorSize = color.itemSize; + + _gl.bindBuffer( _gl.ARRAY_BUFFER, color.buffer ); + _gl.vertexAttribPointer( attributes.color, colorSize, _gl.FLOAT, false, 0, 0 ); + + } + + // render particles + + _gl.drawArrays( _gl.POINTS, 0, position.numItems / 3 ); + + _this.info.render.calls ++; + _this.info.render.points += position.numItems / 3; + + } + } }; @@ -4197,11 +4233,20 @@ THREE.WebGLRenderer = function ( parameters ) { if ( ! geometry.__webglVertexBuffer ) { - createParticleBuffers( geometry ); - initParticleBuffers( geometry, object ); + if ( geometry instanceof THREE.Geometry ) { + + createParticleBuffers( geometry ); + initParticleBuffers( geometry, object ); + + geometry.verticesNeedUpdate = true; + geometry.colorsNeedUpdate = true; + + } else if ( geometry instanceof THREE.BufferGeometry ) { + + initDirectBuffers( geometry ); + + } - geometry.verticesNeedUpdate = true; - geometry.colorsNeedUpdate = true; } @@ -4373,20 +4418,35 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( object instanceof THREE.ParticleSystem ) { - material = getBufferMaterial( object, geometryGroup ); + if ( geometry instanceof THREE.BufferGeometry ) { - customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); + if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate ) { - if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || object.sortParticles || customAttributesDirty ) { + setDirectBuffers( geometry, _gl.DYNAMIC_DRAW, !geometry.dynamic ); - setParticleBuffers( geometry, _gl.DYNAMIC_DRAW, object ); + } - } + geometry.verticesNeedUpdate = false; + geometry.colorsNeedUpdate = false; - geometry.verticesNeedUpdate = false; - geometry.colorsNeedUpdate = false; + } else { - material.attributes && clearCustomAttributes( material ); + material = getBufferMaterial( object, geometryGroup ); + + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); + + if ( geometry.verticesNeedUpdate || geometry.colorsNeedUpdate || object.sortParticles || customAttributesDirty ) { + + setParticleBuffers( geometry, _gl.DYNAMIC_DRAW, object ); + + } + + geometry.verticesNeedUpdate = false; + geometry.colorsNeedUpdate = false; + + material.attributes && clearCustomAttributes( material ); + + } }