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