diff --git a/build/three.js b/build/three.js index 29b3c9df1b331cc22659b32506473eba8aec0421..f38a8a6ffb68e865081cc6a0e00f560113ba6320 100644 --- a/build/three.js +++ b/build/three.js @@ -15820,9 +15820,7 @@ THREE.WebGLRenderer = function ( parameters ) { _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, _clearColor = parameters.clearColor !== undefined ? new THREE.Color( parameters.clearColor ) : new THREE.Color( 0x000000 ), - _clearAlpha = parameters.clearAlpha !== undefined ? parameters.clearAlpha : 0, - - _maxLights = parameters.maxLights !== undefined ? parameters.maxLights : 4; + _clearAlpha = parameters.clearAlpha !== undefined ? parameters.clearAlpha : 0; // public properties @@ -22697,9 +22695,9 @@ THREE.WebGLRenderer = function ( parameters ) { function allocateLights ( lights ) { - var l, ll, light, dirLights, pointLights, spotLights, hemiLights, maxDirLights, maxPointLights, maxSpotLights, maxHemiLights; + var l, ll, light, dirLights, pointLights, spotLights, hemiLights; - dirLights = pointLights = spotLights = hemiLights = maxDirLights = maxPointLights = maxSpotLights = maxHemiLights = 0; + dirLights = pointLights = spotLights = hemiLights = 0; for ( l = 0, ll = lights.length; l < ll; l ++ ) { @@ -22714,26 +22712,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - if ( ( pointLights + spotLights + dirLights + hemiLights) <= _maxLights ) { - - maxDirLights = dirLights; - maxPointLights = pointLights; - maxSpotLights = spotLights; - maxHemiLights = hemiLights; - - } else { - - maxDirLights = Math.ceil( _maxLights * dirLights / ( pointLights + dirLights ) ); - maxPointLights = _maxLights - maxDirLights; - - // these are not really correct - - maxSpotLights = maxPointLights; - maxHemiLights = maxDirLights; - - } - - return { 'directional' : maxDirLights, 'point' : maxPointLights, 'spot': maxSpotLights, 'hemi': maxHemiLights }; + return { 'directional' : dirLights, 'point' : pointLights, 'spot': spotLights, 'hemi': hemiLights }; }; diff --git a/build/three.min.js b/build/three.min.js index 772eb3db8c10200853bcc958c673aee27630be7c..91e80e18b438ce52dd1371c6344984729d64ad40 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -32,17 +32,17 @@ Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return b):h>j?0.01>h?(b=0.707106781,c=0,d=0.707106781):(c=Math.sqrt(h),b=d/c,d=i/c):0.01>j?(c=b=0.707106781,d=0):(d=Math.sqrt(j),b=f/d,c=i/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-i)*(b-i)+(f-c)*(f-c)+(g-d)*(g-d));0.001>Math.abs(a)&&(a=1);this.x=(b-i)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+j-1)/2);return this}};THREE.Matrix3=function(){this.elements=new Float32Array(9)}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,getInverse:function(a){var b=a.elements,a=b[10]*b[5]-b[6]*b[9],c=-b[10]*b[1]+b[2]*b[9],d=b[6]*b[1]-b[2]*b[5],e=-b[10]*b[4]+b[6]*b[8],f=b[10]*b[0]-b[2]*b[8],g=-b[6]*b[0]+b[2]*b[4],h=b[9]*b[4]-b[5]*b[8],i=-b[9]*b[0]+b[1]*b[8],j=b[5]*b[0]-b[1]*b[4],b=b[0]*a+b[1]*e+b[2]*h;0===b&&console.warn("Matrix3.getInverse(): determinant == 0");var b=1/b,m=this.elements;m[0]=b*a;m[1]=b*c;m[2]=b*d;m[3]=b*e;m[4]=b*f;m[5]=b*g;m[6]=b*h;m[7]=b*i;m[8]=b*j;return this}, transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}};THREE.Matrix4=function(a,b,c,d,e,f,g,h,i,j,m,n,l,p,o,q){this.elements=new Float32Array(16);this.set(void 0!==a?a:1,b||0,c||0,d||0,e||0,void 0!==f?f:1,g||0,h||0,i||0,j||0,void 0!==m?m:1,n||0,l||0,p||0,o||0,void 0!==q?q:1)}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,i,j,m,n,l,p,o,q){var r=this.elements;r[0]=a;r[4]=b;r[8]=c;r[12]=d;r[1]=e;r[5]=f;r[9]=g;r[13]=h;r[2]=i;r[6]=j;r[10]=m;r[14]=n;r[3]=l;r[7]=p;r[11]=o;r[15]=q;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){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, -e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();0===g.length()&&(g.z=1);e.cross(c,g).normalize();0===e.length()&&(g.x+=1E-4,e.cross(c,g).normalize());f.cross(g,e);d[0]=e.x;d[4]=f.x;d[8]=g.x;d[1]=e.y;d[5]=f.y;d[9]=g.y;d[2]=e.z;d[6]=f.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],i=c[12],j=c[1],m=c[5],n=c[9],l=c[13],p=c[2],o=c[6],q=c[10],r=c[14],s=c[3],z=c[7],u=c[11],c=c[15],t=d[0],F=d[4],A=d[8], -w=d[12],v=d[1],C=d[5],D=d[9],I=d[13],K=d[2],B=d[6],J=d[10],H=d[14],G=d[3],N=d[7],L=d[11],d=d[15];e[0]=f*t+g*v+h*K+i*G;e[4]=f*F+g*C+h*B+i*N;e[8]=f*A+g*D+h*J+i*L;e[12]=f*w+g*I+h*H+i*d;e[1]=j*t+m*v+n*K+l*G;e[5]=j*F+m*C+n*B+l*N;e[9]=j*A+m*D+n*J+l*L;e[13]=j*w+m*I+n*H+l*d;e[2]=p*t+o*v+q*K+r*G;e[6]=p*F+o*C+q*B+r*N;e[10]=p*A+o*D+q*J+r*L;e[14]=p*w+o*I+q*H+r*d;e[3]=s*t+z*v+u*K+c*G;e[7]=s*F+z*C+u*B+c*N;e[11]=s*A+z*D+u*J+c*L;e[15]=s*w+z*I+u*H+c*d;return this},multiplySelf:function(a){return this.multiply(this, +THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,i,j,m,n,l,p,o,q){var s=this.elements;s[0]=a;s[4]=b;s[8]=c;s[12]=d;s[1]=e;s[5]=f;s[9]=g;s[13]=h;s[2]=i;s[6]=j;s[10]=m;s[14]=n;s[3]=l;s[7]=p;s[11]=o;s[15]=q;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){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, +e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();0===g.length()&&(g.z=1);e.cross(c,g).normalize();0===e.length()&&(g.x+=1E-4,e.cross(c,g).normalize());f.cross(g,e);d[0]=e.x;d[4]=f.x;d[8]=g.x;d[1]=e.y;d[5]=f.y;d[9]=g.y;d[2]=e.z;d[6]=f.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],i=c[12],j=c[1],m=c[5],n=c[9],l=c[13],p=c[2],o=c[6],q=c[10],s=c[14],r=c[3],A=c[7],u=c[11],c=c[15],t=d[0],F=d[4],z=d[8], +w=d[12],v=d[1],C=d[5],D=d[9],I=d[13],L=d[2],B=d[6],K=d[10],H=d[14],G=d[3],N=d[7],M=d[11],d=d[15];e[0]=f*t+g*v+h*L+i*G;e[4]=f*F+g*C+h*B+i*N;e[8]=f*z+g*D+h*K+i*M;e[12]=f*w+g*I+h*H+i*d;e[1]=j*t+m*v+n*L+l*G;e[5]=j*F+m*C+n*B+l*N;e[9]=j*z+m*D+n*K+l*M;e[13]=j*w+m*I+n*H+l*d;e[2]=p*t+o*v+q*L+s*G;e[6]=p*F+o*C+q*B+s*N;e[10]=p*z+o*D+q*K+s*M;e[14]=p*w+o*I+q*H+s*d;e[3]=r*t+A*v+u*L+c*G;e[7]=r*F+A*C+u*B+c*N;e[11]=r*z+A*D+u*K+c*M;e[15]=r*w+A*I+u*H+c*d;return this},multiplySelf:function(a){return this.multiply(this, a)},multiplyToArray:function(a,b,c){var d=this.elements;this.multiply(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},multiplyVector3:function(a){var b=this.elements, c=a.x,d=a.y,e=a.z,f=1/(b[3]*c+b[7]*d+b[11]*e+b[15]);a.x=(b[0]*c+b[4]*d+b[8]*e+b[12])*f;a.y=(b[1]*c+b[5]*d+b[9]*e+b[13])*f;a.z=(b[2]*c+b[6]*d+b[10]*e+b[14])*f;return a},multiplyVector4:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w;a.x=b[0]*c+b[4]*d+b[8]*e+b[12]*f;a.y=b[1]*c+b[5]*d+b[9]*e+b[13]*f;a.z=b[2]*c+b[6]*d+b[10]*e+b[14]*f;a.w=b[3]*c+b[7]*d+b[11]*e+b[15]*f;return a},multiplyVector3Array:function(a){for(var b=THREE.Matrix4.__v1,c=0,d=a.length;cd;d++)a=b[d],a.divideScalar(Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z))}; +THREE.Frustum.prototype.setFromMatrix=function(a){var b=this.planes,c=a.elements,a=c[0],d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],i=c[6],j=c[7],m=c[8],n=c[9],l=c[10],p=c[11],o=c[12],q=c[13],s=c[14],c=c[15];b[0].set(f-a,j-g,p-m,c-o);b[1].set(f+a,j+g,p+m,c+o);b[2].set(f+d,j+h,p+n,c+q);b[3].set(f-d,j-h,p-n,c-q);b[4].set(f-e,j-i,p-l,c-s);b[5].set(f+e,j+i,p+l,c+s);for(d=0;6>d;d++)a=b[d],a.divideScalar(Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z))}; THREE.Frustum.prototype.contains=function(a){for(var b=0,c=this.planes,b=a.matrixWorld,d=b.elements,a=-a.geometry.boundingSphere.radius*b.getMaxScaleOnAxis(),e=0;6>e;e++)if(b=c[e].x*d[12]+c[e].y*d[13]+c[e].z*d[14]+c[e].w,b<=a)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3; (function(a){a.Ray=function(b,c,d,e){this.origin=b||new a.Vector3;this.direction=c||new a.Vector3;this.near=d||0;this.far=e||Infinity};var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3,e=new a.Vector3,f=new a.Vector3,g=new a.Vector3,h=new a.Matrix4,i=function(a,b){return a.distance-b.distance},j=new a.Vector3,m=new a.Vector3,n=new a.Vector3,l=function(a,b,c){j.sub(c,a);var d=j.dot(b),a=m.add(a,n.copy(b).multiplyScalar(d));return c.distanceTo(a)},p=function(a,b,c,d){j.sub(d,b);m.sub(c,b);n.sub(a, -b);var a=j.dot(j),b=j.dot(m),c=j.dot(n),e=m.dot(m),d=m.dot(n),f=1/(a*e-b*b),e=(e*c-b*d)*f,a=(a*d-b*c)*f;return 0<=e&&0<=a&&1>e+a},o=function(i,j,m){var n,o;if(i instanceof a.Particle){n=l(j.origin,j.direction,i.matrixWorld.getPosition());if(n>i.scale.x)return m;o={distance:n,point:i.position,face:null,object:i};m.push(o)}else if(i instanceof a.Mesh){var q=i.geometry.boundingSphere.radius*i.matrixWorld.getMaxScaleOnAxis();n=l(j.origin,j.direction,i.matrixWorld.getPosition());if(n>q)return m;var A, -w,v=i.geometry,C=v.vertices,D,I,K;D=i.geometry.materials;I=i.material instanceof a.MeshFaceMaterial;var B,J=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(A=v.faces.length;qw)&&(K===a.DoubleSide|| -(K===a.FrontSide?0>n:0j.far||(o={distance:n,point:w,face:o,faceIndex:q,object:i},m.push(o)));else if(o instanceof a.Face4&&(n=C[o.a],w=C[o.b],K=C[o.c],B=C[o.d],p(g,n,w,B)||p(g,w,K,B)))w=i.matrixWorld.multiplyVector3(g.clone()),n=b.distanceTo(w),nj.far||(o={distance:n,point:w,face:o,faceIndex:q,object:i},m.push(o))}}, +b);var a=j.dot(j),b=j.dot(m),c=j.dot(n),e=m.dot(m),d=m.dot(n),f=1/(a*e-b*b),e=(e*c-b*d)*f,a=(a*d-b*c)*f;return 0<=e&&0<=a&&1>e+a},o=function(i,j,m){var n,o;if(i instanceof a.Particle){n=l(j.origin,j.direction,i.matrixWorld.getPosition());if(n>i.scale.x)return m;o={distance:n,point:i.position,face:null,object:i};m.push(o)}else if(i instanceof a.Mesh){var q=i.geometry.boundingSphere.radius*i.matrixWorld.getMaxScaleOnAxis();n=l(j.origin,j.direction,i.matrixWorld.getPosition());if(n>q)return m;var z, +w,v=i.geometry,C=v.vertices,D,I,L;D=i.geometry.materials;I=i.material instanceof a.MeshFaceMaterial;var B,K=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(z=v.faces.length;qw)&&(L===a.DoubleSide|| +(L===a.FrontSide?0>n:0j.far||(o={distance:n,point:w,face:o,faceIndex:q,object:i},m.push(o)));else if(o instanceof a.Face4&&(n=C[o.a],w=C[o.b],L=C[o.c],B=C[o.d],p(g,n,w,B)||p(g,w,L,B)))w=i.matrixWorld.multiplyVector3(g.clone()),n=b.distanceTo(w),nj.far||(o={distance:n,point:w,face:o,faceIndex:q,object:i},m.push(o))}}, q=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;df?d:f,e=e> g?e:g);a()};this.add3Points=function(f,g,m,n,l,p){!0===h?(h=!1,b=fm?f>l?f:l:m>l?m:l,e=g>n?g>p?g:p:n>p?n:p):(b=fm?f>l?f>d?f:d:l>d?l:d:m>l?m>d?m:d:l>d?l:d,e=g>n?g>p?g>e?g:e:p>e?p:e:n>p?n>e?n:e:p>e?p:e);a()};this.addRectangle=function(f){!0===h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=be&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d< -c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var e,f,g=[],h=0,i,j,m=[],n=0,l,p,o=[],q=0,r,s=[],z=0,u,t,F=[],A=0,w,v,C=[],D=0,I={objects:[],sprites:[],lights:[],elements:[]},K=new THREE.Vector3,B=new THREE.Vector4,J=new THREE.Matrix4,H=new THREE.Matrix4,G=new THREE.Frustum,N=new THREE.Vector4,L=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);J.multiply(b.projectionMatrix,b.matrixWorldInverse);J.multiplyVector3(a);return a};this.unprojectVector= -function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);J.multiply(b.matrixWorld,b.projectionMatrixInverse);J.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(g,h,n,M){var R=h.near,ba=h.far,ja=!1,S,O,$,Y,aa,ia,X,fa,eb,Aa,Ja,Ta,ra,Ma,qb,nb;v=t=r=p=0;I.elements.length=0;g.updateMatrixWorld();void 0===h.parent&& -h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);J.multiply(h.projectionMatrix,h.matrixWorldInverse);G.setFromMatrix(J);f=0;I.objects.length=0;I.sprites.length=0;I.lights.length=0;var fb=function(b){for(var c=0,d=b.children.length;cR&&i.positionScreen.z(X.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(X.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.positionScreen.x),ia===THREE.DoubleSide||ja===(ia===THREE.FrontSide))p===q?(ra=new THREE.RenderableFace3, -o.push(ra),q++,p++,l=ra):l=o[p++],l.v1.copy(Y),l.v2.copy(aa),l.v3.copy(X);else continue;else continue;else if(O instanceof THREE.Face4)if(Y=m[O.a],aa=m[O.b],X=m[O.c],ra=m[O.d],!0===Y.visible&&!0===aa.visible&&!0===X.visible&&!0===ra.visible)if(ja=0>(ra.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(ra.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.positionScreen.x)||0>(aa.positionScreen.x-X.positionScreen.x)*(ra.positionScreen.y-X.positionScreen.y)-(aa.positionScreen.y- -X.positionScreen.y)*(ra.positionScreen.x-X.positionScreen.x),ia===THREE.DoubleSide||ja===(ia===THREE.FrontSide)){if(r===z){var Wa=new THREE.RenderableFace4;s.push(Wa);z++;r++;l=Wa}else l=s[r++];l.v1.copy(Y);l.v2.copy(aa);l.v3.copy(X);l.v4.copy(ra)}else continue;else continue;l.normalWorld.copy(O.normal);!1===ja&&(ia===THREE.BackSide||ia===THREE.DoubleSide)&&l.normalWorld.negate();Aa.multiplyVector3(l.normalWorld);l.centroidWorld.copy(O.centroid);eb.multiplyVector3(l.centroidWorld);l.centroidScreen.copy(l.centroidWorld); -J.multiplyVector3(l.centroidScreen);X=O.vertexNormals;Y=0;for(aa=X.length;YB.z&&(v===D?(R=new THREE.RenderableParticle,C.push(R),D++,v++,w=R):w=C[v++],w.object=fa,w.x=B.x/B.w,w.y=B.y/B.w,w.z=B.z,w.rotation=fa.rotation.z,w.scale.x=fa.scale.x*Math.abs(w.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),w.scale.y=fa.scale.y*Math.abs(w.y- -(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),w.material=fa.material,I.elements.push(w)));!0===M&&I.elements.sort(c);return I}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; +c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var e,f,g=[],h=0,i,j,m=[],n=0,l,p,o=[],q=0,s,r=[],A=0,u,t,F=[],z=0,w,v,C=[],D=0,I={objects:[],sprites:[],lights:[],elements:[]},L=new THREE.Vector3,B=new THREE.Vector4,K=new THREE.Matrix4,H=new THREE.Matrix4,G=new THREE.Frustum,N=new THREE.Vector4,M=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);K.multiply(b.projectionMatrix,b.matrixWorldInverse);K.multiplyVector3(a);return a};this.unprojectVector= +function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);K.multiply(b.matrixWorld,b.projectionMatrixInverse);K.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(g,h,n,O){var Q=h.near,U=h.far,J=!1,qa,S,ha,Y,ba,ia,Z,da,Na,Aa,Ja,Ta,ta,db,wb,Ua;v=t=s=p=0;I.elements.length=0;g.updateMatrixWorld();void 0===h.parent&& +h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);K.multiply(h.projectionMatrix,h.matrixWorldInverse);G.setFromMatrix(K);f=0;I.objects.length=0;I.sprites.length=0;I.lights.length=0;var gb=function(b){for(var c=0,d=b.children.length;cQ&&i.positionScreen.z(Z.positionScreen.x-Y.positionScreen.x)*(ba.positionScreen.y-Y.positionScreen.y)-(Z.positionScreen.y-Y.positionScreen.y)*(ba.positionScreen.x-Y.positionScreen.x),ia===THREE.DoubleSide||J===(ia===THREE.FrontSide))p===q?(ta= +new THREE.RenderableFace3,o.push(ta),q++,p++,l=ta):l=o[p++],l.v1.copy(Y),l.v2.copy(ba),l.v3.copy(Z);else continue;else continue;else if(S instanceof THREE.Face4)if(Y=m[S.a],ba=m[S.b],Z=m[S.c],ta=m[S.d],!0===Y.visible&&!0===ba.visible&&!0===Z.visible&&!0===ta.visible)if(J=0>(ta.positionScreen.x-Y.positionScreen.x)*(ba.positionScreen.y-Y.positionScreen.y)-(ta.positionScreen.y-Y.positionScreen.y)*(ba.positionScreen.x-Y.positionScreen.x)||0>(ba.positionScreen.x-Z.positionScreen.x)*(ta.positionScreen.y- +Z.positionScreen.y)-(ba.positionScreen.y-Z.positionScreen.y)*(ta.positionScreen.x-Z.positionScreen.x),ia===THREE.DoubleSide||J===(ia===THREE.FrontSide)){if(s===A){var lb=new THREE.RenderableFace4;r.push(lb);A++;s++;l=lb}else l=r[s++];l.v1.copy(Y);l.v2.copy(ba);l.v3.copy(Z);l.v4.copy(ta)}else continue;else continue;l.normalWorld.copy(S.normal);!1===J&&(ia===THREE.BackSide||ia===THREE.DoubleSide)&&l.normalWorld.negate();Aa.multiplyVector3(l.normalWorld);l.centroidWorld.copy(S.centroid);Na.multiplyVector3(l.centroidWorld); +l.centroidScreen.copy(l.centroidWorld);K.multiplyVector3(l.centroidScreen);Z=S.vertexNormals;Y=0;for(ba=Z.length;YB.z&&(v===D?(Q=new THREE.RenderableParticle,C.push(Q),D++,v++,w=Q):w=C[v++],w.object=da,w.x=B.x/B.w,w.y=B.y/B.w,w.z=B.z,w.rotation=da.rotation.z,w.scale.x=da.scale.x*Math.abs(w.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])), +w.scale.y=da.scale.y*Math.abs(w.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),w.material=da.material,I.elements.push(w)));!0===O&&I.elements.sort(c);return I}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?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),e=Math.cos(a.z/2),f=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);void 0===b||"XYZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"YXZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d* h-f*g*e,this.w=c*d*e+f*g*h):"ZXY"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"ZYX"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e+f*g*h):"YZX"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e-f*g*h):"XZY"===b&&(this.x=f*d*e-c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e+f*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],e=b[1],f=b[5],g=b[9],h=b[2],i=b[6],b=b[10],j=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this.w=(i-g)/c,this.x=0.25*c,this.y=(a+e)/c,this.z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this.w=(d-h)/c,this.x=(a+e)/c,this.y=0.25*c,this.z=(g+i)/c):(c=2*Math.sqrt(1+b-c-f),this.w=(e-a)/c,this.x=(d+h)/c,this.y=(g+i)/c,this.z=0.25*c);return this},calculateW:function(){this.w= @@ -113,8 +113,8 @@ b;a++)d[a].normalize();a=0;for(b=this.faces.length;ae? +h.x;o=j.x-h.x;q=i.y-h.y;s=j.y-h.y;r=i.z-h.z;A=j.z-h.z;u=n.u-m.u;t=l.u-m.u;F=n.v-m.v;z=l.v-m.v;w=1/(u*z-t*F);I.set((z*p-F*o)*w,(z*q-F*s)*w,(z*r-F*A)*w);L.set((u*o-t*p)*w,(u*s-t*q)*w,(u*A-t*r)*w);C[b].addSelf(I);C[c].addSelf(I);C[d].addSelf(I);D[b].addSelf(L);D[c].addSelf(L);D[d].addSelf(L)}var b,c,d,e,f,g,h,i,j,m,n,l,p,o,q,s,r,A,u,t,F,z,w,v,C=[],D=[],I=new THREE.Vector3,L=new THREE.Vector3,B=new THREE.Vector3,K=new THREE.Vector3,H=new THREE.Vector3;b=0;for(c=this.vertices.length;be? -1:1,f.vertexTangents[d]=new THREE.Vector4(B.x,B.y,B.z,e)}this.hasTangents=!0},computeBoundingBox:function(){this.boundingBox||(this.boundingBox={min:new THREE.Vector3,max:new THREE.Vector3});if(0c.x&&(c.x=a.x),a.yc.y&&(c.y=a.y),a.z c.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;null===this.boundingSphere&&(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,e=Math.pow(10,4),f,g,h,i;f=0;for(g=this.vertices.length;fb.max.x&&(b.max.x=c),db.max.y&&(b.max.y=d),eb.max.z&&(b.max.z=e);if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){this.boundingSphere||(this.boundingSphere={radius:0});var a=this.attributes.position.array; if(a){for(var b,c=0,d,e,f=0,g=a.length;fc&&(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(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;aba?-1:1;h[4*a]=L.x;h[4*a+1]=L.y;h[4*a+2]=L.z;h[4*a+3]=M}if(void 0===this.attributes.index|| +g=this.attributes.position.array,h=this.attributes.normal.array,i,j,m,n,l,p,o=new THREE.Vector3,q=new THREE.Vector3,s=new THREE.Vector3,r=new THREE.Vector3,A=new THREE.Vector3;c=0;for(d=e.length;cU?-1:1;h[4*a]=M.x;h[4*a+1]=M.y;h[4*a+2]=M.z;h[4*a+3]=O}if(void 0===this.attributes.index|| void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var b=this.attributes.index.array,c=this.attributes.position.array,d=this.attributes.normal.array,e=this.attributes.uv.array,f=c.length/3;if(void 0===this.attributes.tangent){var g=4*f;this.attributes.tangent={itemSize:4,array:new Float32Array(g),numItems:g}}for(var h=this.attributes.tangent.array, -i=[],j=[],g=0;gthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1: f+2;j=this.points[c[0]];m=this.points[c[1]];n=this.points[c[2]];l=this.points[c[3]];h=g*g;i=g*h;d.x=b(j.x,m.x,n.x,l.x,g,h,i);d.y=b(j.y,m.y,n.y,l.y,g,h,i);d.z=b(j.z,m.z,n.z,l.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;aa.length?".":a.join("/"))+"/"},initMaterials:function(a,b,c){a.materials=[];for(var d=0;da.opacity)i.transparent=a.transparent;void 0!==a.depthTest&&(i.depthTest=a.depthTest);void 0!==a.depthWrite&&(i.depthWrite=a.depthWrite);void 0!==a.visible&&(i.visible=a.visible);void 0!== a.flipSided&&(i.side=THREE.BackSide);void 0!==a.doubleSided&&(i.side=THREE.DoubleSide);void 0!==a.wireframe&&(i.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"===a.vertexColors?i.vertexColors=THREE.FaceColors:a.vertexColors&&(i.vertexColors=THREE.VertexColors));a.colorDiffuse?i.color=f(a.colorDiffuse):a.DbgColor&&(i.color=a.DbgColor);a.colorSpecular&&(i.specular=f(a.colorSpecular));a.colorAmbient&&(i.ambient=f(a.colorAmbient));a.transparency&&(i.opacity=a.transparency);a.specularCoef&&(i.shininess= a.specularCoef);a.mapDiffuse&&b&&e(i,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap,a.mapDiffuseAnisotropy);a.mapLight&&b&&e(i,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&e(i,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&e(i,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&e(i,"specularMap", @@ -155,24 +155,24 @@ THREE.BinaryLoader.prototype.load=function(a,b,c,d){var c=c?c:this.extractUrlBas THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,e,f){var g=new XMLHttpRequest;g.onreadystatechange=function(){if(4==g.readyState)if(200==g.status||0==g.status){var h=JSON.parse(g.responseText);a.loadAjaxBuffers(h,c,e,d,f)}else console.error("THREE.BinaryLoader: Couldn't load ["+b+"] ["+g.status+"]")};g.open("GET",b,!0);g.send(null)}; THREE.BinaryLoader.prototype.loadAjaxBuffers=function(a,b,c,d,e){var f=new XMLHttpRequest,g=c+"/"+a.buffers,h=0;f.onreadystatechange=function(){if(4==f.readyState)if(200==f.status||0==f.status){var c=f.response;void 0===c&&(c=(new Uint8Array(f.responseBody)).buffer);THREE.BinaryLoader.prototype.createBinModel(c,b,d,a.materials)}else console.error("THREE.BinaryLoader: Couldn't load ["+g+"] ["+f.status+"]");else 3==f.readyState?e&&(0==h&&(h=f.getResponseHeader("Content-Length")),e({total:h,loaded:f.responseText.length})): 2==f.readyState&&(h=f.getResponseHeader("Content-Length"))};f.open("GET",g,!0);f.responseType="arraybuffer";f.send(null)}; -THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var e=function(b){var c,e,i,j,m,n,l,p,o,q,r,s,z,u,t;function F(a){return a%4?4-a%4:0}function A(a,b){return(new Uint8Array(a,b,1))[0]}function w(a,b){return(new Uint32Array(a,b,1))[0]}function v(b,c){var d,e,f,g,h,i,j,l,m=new Uint32Array(a,c,3*b);for(d=0;dz;z++)q+=String.fromCharCode(b[Q+z]);c=A(t,Q+12);A(t,Q+13);A(t,Q+14);A(t,Q+15);e=A(t,Q+16);i=A(t,Q+17);j=A(t,Q+18);m=A(t,Q+19);n=w(t,Q+20);l=w(t,Q+20+4);p=w(t,Q+20+8);o=w(t,Q+20+12);q=w(t,Q+20+16);r=w(t,Q+20+20);s= -w(t,Q+20+24);z=w(t,Q+20+28);b=w(t,Q+20+32);u=w(t,Q+20+36);t=w(t,Q+20+40);H+=c;Q=3*e+m;ea=4*e+m;L=o*Q;c=q*(Q+3*i);e=r*(Q+3*j);m=s*(Q+3*i+3*j);Q=z*ea;i=b*(ea+4*i);j=u*(ea+4*j);ea=H;var H=new Float32Array(a,H,3*n),P,M,R,ba;for(P=0;PA;A++)q+=String.fromCharCode(b[R+A]);c=z(t,R+12);z(t,R+13);z(t,R+14);z(t,R+15);e=z(t,R+16);i=z(t,R+17);j=z(t,R+18);m=z(t,R+19);n=w(t,R+20);l=w(t,R+20+4);p=w(t,R+20+8);o=w(t,R+20+12);q=w(t,R+20+16);s=w(t,R+20+20);r= +w(t,R+20+24);A=w(t,R+20+28);b=w(t,R+20+32);u=w(t,R+20+36);t=w(t,R+20+40);H+=c;R=3*e+m;aa=4*e+m;M=o*R;c=q*(R+3*i);e=s*(R+3*j);m=r*(R+3*i+3*j);R=A*aa;i=b*(aa+4*i);j=u*(aa+4*j);aa=H;var H=new Float32Array(a,H,3*n),P,O,Q,U;for(P=0;Pd.length?".":d.join("/")}d=new XMLHttpRequest;d.addEventListener("load",function(d){d.target.responseText?c=b.parse(JSON.parse(d.target.responseText),e):b.dispatchEvent({type:"error",message:"Invalid file ["+a+"]"})},!1);d.addEventListener("error",function(){b.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);d.open("GET",a, !0);d.send(null);var e=new THREE.LoadingMonitor;e.addEventListener("load",function(){b.dispatchEvent({type:"load",content:c})});e.add(d)},parse:function(a,b){var c=this,d=new THREE.Geometry,e=void 0!==a.scale?1/a.scale:1;if(a.materials){d.materials=[];for(var f=0;fs.parameters.opacity&&(s.parameters.transparent=!0);s.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,ba=THREE.UniformsUtils.clone(q.uniforms),l=s.parameters.color,B=s.parameters.specular,ja=s.parameters.ambient,o=s.parameters.shininess,ba.tNormal.value=P.textures[s.parameters.normalMap],s.parameters.normalScale&&ba.uNormalScale.value.set(s.parameters.normalScale[0],s.parameters.normalScale[1]),s.parameters.map&&(ba.tDiffuse.value=s.parameters.map, -ba.enableDiffuse.value=!0),s.parameters.envMap&&(ba.tCube.value=s.parameters.envMap,ba.enableReflection.value=!0,ba.uReflectivity.value=s.parameters.reflectivity),s.parameters.lightMap&&(ba.tAO.value=s.parameters.lightMap,ba.enableAO.value=!0),s.parameters.specularMap&&(ba.tSpecular.value=P.textures[s.parameters.specularMap],ba.enableSpecular.value=!0),s.parameters.displacementMap&&(ba.tDisplacement.value=P.textures[s.parameters.displacementMap],ba.enableDisplacement.value=!0,ba.uDisplacementBias.value= -s.parameters.displacementBias,ba.uDisplacementScale.value=s.parameters.displacementScale),ba.uDiffuseColor.value.setHex(l),ba.uSpecularColor.value.setHex(B),ba.uAmbientColor.value.setHex(ja),ba.uShininess.value=o,s.parameters.opacity&&(ba.uOpacity.value=s.parameters.opacity),D=new THREE.ShaderMaterial({fragmentShader:q.fragmentShader,vertexShader:q.vertexShader,uniforms:ba,lights:!0,fog:!0})):D=new THREE[s.type](s.parameters);P.materials[p]=D}e();P.cameras&&R.defaults.camera&&(P.currentCamera=P.cameras[R.defaults.camera]); -P.fogs&&R.defaults.fog&&(P.scene.fog=P.fogs[R.defaults.fog]);w=R.defaults.bgcolor;P.bgColor=new THREE.Color;P.bgColor.setRGB(w[0],w[1],w[2]);P.bgColorAlpha=R.defaults.bgalpha;m.callbackSync(P);j()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null}; +THREE.SceneLoader.prototype.parse=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:n+"/"+a}function e(){f(P.scene,Q.objects)}function f(a,b){for(var c in b)if(void 0===P.objects[c]){var e=b[c],g=null;if(e.type&&e.type in m.hierarchyHandlerMap&&void 0===e.loading){var i={},j;for(j in s)"type"!==j&&"url"!==j&&(i[j]=s[j]);D=P.materials[e.materials[0]];e.loading=!0;var l=m.hierarchyHandlerMap[e.type].loaderObject;l.addEventListener?(l.addEventListener("load",h(c,a,D,e)),l.load(d(e.url,Q.urlBaseType))): +l.options?l.load(d(e.url,Q.urlBaseType),h(c,a,D,e)):l.load(d(e.url,Q.urlBaseType),h(c,a,D,e),i)}else if(void 0!==e.geometry){if(C=P.geometries[e.geometry])g=!1,D=P.materials[e.materials[0]],(g=D instanceof THREE.ShaderMaterial)&&C.computeTangents(),u=e.position,t=e.rotation,F=e.quaternion,z=e.scale,r=e.matrix,F=0,0===e.materials.length&&(D=new THREE.MeshFaceMaterial),1r.parameters.opacity&&(r.parameters.transparent=!0);r.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,U=THREE.UniformsUtils.clone(q.uniforms),l=r.parameters.color,B=r.parameters.specular,J=r.parameters.ambient,o=r.parameters.shininess,U.tNormal.value=P.textures[r.parameters.normalMap],r.parameters.normalScale&&U.uNormalScale.value.set(r.parameters.normalScale[0],r.parameters.normalScale[1]),r.parameters.map&&(U.tDiffuse.value=r.parameters.map,U.enableDiffuse.value= +!0),r.parameters.envMap&&(U.tCube.value=r.parameters.envMap,U.enableReflection.value=!0,U.uReflectivity.value=r.parameters.reflectivity),r.parameters.lightMap&&(U.tAO.value=r.parameters.lightMap,U.enableAO.value=!0),r.parameters.specularMap&&(U.tSpecular.value=P.textures[r.parameters.specularMap],U.enableSpecular.value=!0),r.parameters.displacementMap&&(U.tDisplacement.value=P.textures[r.parameters.displacementMap],U.enableDisplacement.value=!0,U.uDisplacementBias.value=r.parameters.displacementBias, +U.uDisplacementScale.value=r.parameters.displacementScale),U.uDiffuseColor.value.setHex(l),U.uSpecularColor.value.setHex(B),U.uAmbientColor.value.setHex(J),U.uShininess.value=o,r.parameters.opacity&&(U.uOpacity.value=r.parameters.opacity),D=new THREE.ShaderMaterial({fragmentShader:q.fragmentShader,vertexShader:q.vertexShader,uniforms:U,lights:!0,fog:!0})):D=new THREE[r.type](r.parameters);P.materials[p]=D}e();P.cameras&&Q.defaults.camera&&(P.currentCamera=P.cameras[Q.defaults.camera]);P.fogs&&Q.defaults.fog&& +(P.scene.fog=P.fogs[Q.defaults.fog]);w=Q.defaults.bgcolor;P.bgColor=new THREE.Color;P.bgColor.setRGB(w[0],w[1],w[2]);P.bgColorAlpha=Q.defaults.bgalpha;m.callbackSync(P);j()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null}; THREE.TextureLoader.prototype={constructor:THREE.TextureLoader,load:function(a){var b=this,c=new Image;c.addEventListener("load",function(){var a=new THREE.Texture(c);a.needsUpdate=!0;b.dispatchEvent({type:"load",content:a})},!1);c.addEventListener("error",function(){b.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);b.crossOrigin&&(c.crossOrigin=b.crossOrigin);c.src=a}}; THREE.Material=function(){THREE.MaterialLibrary.push(this);this.id=THREE.MaterialIdCount++;this.name="";this.side=THREE.FrontSide;this.opacity=1;this.transparent=!1;this.blending=THREE.NormalBlending;this.blendSrc=THREE.SrcAlphaFactor;this.blendDst=THREE.OneMinusSrcAlphaFactor;this.blendEquation=THREE.AddEquation;this.depthWrite=this.depthTest=!0;this.polygonOffset=!1;this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.overdraw=!1;this.needsUpdate=this.visible=!0}; THREE.Material.prototype.setValues=function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else if(b in this){var d=this[b];d instanceof THREE.Color&&c instanceof THREE.Color?d.copy(c):d instanceof THREE.Color&&"number"===typeof c?d.setHex(c):d instanceof THREE.Vector3&&c instanceof THREE.Vector3?d.copy(c):this[b]=c}}}; @@ -274,35 +274,35 @@ THREE.SpriteAlignment.bottomRight=new THREE.Vector2(-1,1);THREE.Scene=function() THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===this.__lights.indexOf(a)&&this.__lights.push(a),a.target&&void 0===a.target.parent&&this.add(a.target);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&-1===this.__objects.indexOf(a)){this.__objects.push(a);this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);-1!==b&&this.__objectsRemoved.splice(b,1)}for(b=0;bs&&q.clearRect(Math.floor(Na.getX()),Math.floor(Na.getY()),Math.floor(Na.getWidth()), -Math.floor(Na.getHeight())),0=k||(k*=f.intensity,c.r+=g.r*k, -c.g+=g.g*k,c.b+=g.b*k)}else f instanceof THREE.PointLight&&(h=f.matrixWorld.getPosition(),k=b.dot(ua.sub(h,a).normalize()),0>=k||(k*=0==f.distance?1:1-Math.min(a.distanceTo(h)/f.distance,1),0!=k&&(k*=f.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)))}}function m(a,d,e,g,h,i,j,o){f.info.render.vertices+=3;f.info.render.faces++;b(o.opacity);c(o.blending);H=a.positionScreen.x;G=a.positionScreen.y;N=d.positionScreen.x;L=d.positionScreen.y;Q=e.positionScreen.x;ea=e.positionScreen.y;n(H,G,N,L,Q,ea);(o instanceof -THREE.MeshLambertMaterial||o instanceof THREE.MeshPhongMaterial)&&null===o.map&&null===o.map?(X.copy(o.color),fa.copy(o.emissive),o.vertexColors===THREE.FaceColors&&(X.r*=j.color.r,X.g*=j.color.g,X.b*=j.color.b),!0===kb)?!1===o.wireframe&&o.shading==THREE.SmoothShading&&3==j.vertexNormalsLength?($.r=Y.r=aa.r=Ha.r,$.g=Y.g=aa.g=Ha.g,$.b=Y.b=aa.b=Ha.b,l(j.v1.positionWorld,j.vertexNormalsWorld[0],$),l(j.v2.positionWorld,j.vertexNormalsWorld[1],Y),l(j.v3.positionWorld,j.vertexNormalsWorld[2],aa),$.r=$.r* -X.r+fa.r,$.g=$.g*X.g+fa.g,$.b=$.b*X.b+fa.b,Y.r=Y.r*X.r+fa.r,Y.g=Y.g*X.g+fa.g,Y.b=Y.b*X.b+fa.b,aa.r=aa.r*X.r+fa.r,aa.g=aa.g*X.g+fa.g,aa.b=aa.b*X.b+fa.b,ia.r=0.5*(Y.r+aa.r),ia.g=0.5*(Y.g+aa.g),ia.b=0.5*(Y.b+aa.b),ra=oa($,Y,aa,ia),z(H,G,N,L,Q,ea,0,0,1,0,0,1,ra)):(O.r=Ha.r,O.g=Ha.g,O.b=Ha.b,l(j.centroidWorld,j.normalWorld,O),O.r=O.r*X.r+fa.r,O.g=O.g*X.g+fa.g,O.b=O.b*X.b+fa.b,!0===o.wireframe?r(O,o.wireframeLinewidth,o.wireframeLinecap,o.wireframeLinejoin):t(O)):!0===o.wireframe?r(o.color,o.wireframeLinewidth, -o.wireframeLinecap,o.wireframeLinejoin):t(o.color):o instanceof THREE.MeshBasicMaterial||o instanceof THREE.MeshLambertMaterial||o instanceof THREE.MeshPhongMaterial?null!==o.map?o.map.mapping instanceof THREE.UVMapping&&(Ma=j.uvs[0],u(H,G,N,L,Q,ea,Ma[g].u,Ma[g].v,Ma[h].u,Ma[h].v,Ma[i].u,Ma[i].v,o.map)):null!==o.envMap?o.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=k.matrixWorldInverse,ua.copy(j.vertexNormalsWorld[g]),qb=0.5*(ua.x*a.elements[0]+ua.y*a.elements[4]+ua.z*a.elements[8])+ -0.5,nb=0.5*(ua.x*a.elements[1]+ua.y*a.elements[5]+ua.z*a.elements[9])+0.5,ua.copy(j.vertexNormalsWorld[h]),fb=0.5*(ua.x*a.elements[0]+ua.y*a.elements[4]+ua.z*a.elements[8])+0.5,Wa=0.5*(ua.x*a.elements[1]+ua.y*a.elements[5]+ua.z*a.elements[9])+0.5,ua.copy(j.vertexNormalsWorld[i]),zb=0.5*(ua.x*a.elements[0]+ua.y*a.elements[4]+ua.z*a.elements[8])+0.5,Ab=0.5*(ua.x*a.elements[1]+ua.y*a.elements[5]+ua.z*a.elements[9])+0.5,u(H,G,N,L,Q,ea,qb,nb,fb,Wa,zb,Ab,o.envMap)):(O.copy(o.color),o.vertexColors===THREE.FaceColors&& -(O.r*=j.color.r,O.g*=j.color.g,O.b*=j.color.b),!0===o.wireframe?r(O,o.wireframeLinewidth,o.wireframeLinecap,o.wireframeLinejoin):t(O)):o instanceof THREE.MeshDepthMaterial?(Ja=k.near,Ta=k.far,$.r=$.g=$.b=1-cc(a.positionScreen.z,Ja,Ta),Y.r=Y.g=Y.b=1-cc(d.positionScreen.z,Ja,Ta),aa.r=aa.g=aa.b=1-cc(e.positionScreen.z,Ja,Ta),ia.r=0.5*(Y.r+aa.r),ia.g=0.5*(Y.g+aa.g),ia.b=0.5*(Y.b+aa.b),ra=oa($,Y,aa,ia),z(H,G,N,L,Q,ea,0,0,1,0,0,1,ra)):o instanceof THREE.MeshNormalMaterial&&(O.r=Cb(j.normalWorld.x),O.g= -Cb(j.normalWorld.y),O.b=Cb(j.normalWorld.z),!0===o.wireframe?r(O,o.wireframeLinewidth,o.wireframeLinecap,o.wireframeLinejoin):t(O))}function n(a,b,c,d,e,f){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.closePath()}function s(a,b,c,d,e,f,g,h){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.lineTo(g,h);q.closePath()}function r(a,b,c,e){A!==b&&(A=q.lineWidth=b);w!==c&&(w=q.lineCap=c);v!==e&&(v=q.lineJoin=e);d(a.getContextStyle());q.stroke();la.inflate(2*b)}function t(a){e(a.getContextStyle()); -q.fill()}function u(a,b,c,d,f,g,h,k,i,j,l,m,oa){if(!(oa instanceof THREE.DataTexture||void 0===oa.image||0==oa.image.width)){if(!0===oa.needsUpdate){var n=oa.wrapS==THREE.RepeatWrapping,o=oa.wrapT==THREE.RepeatWrapping;eb[oa.id]=q.createPattern(oa.image,!0===n&&!0===o?"repeat":!0===n&&!1===o?"repeat-x":!1===n&&!0===o?"repeat-y":"no-repeat");oa.needsUpdate=!1}void 0===eb[oa.id]?e("rgba(0,0,0,1)"):e(eb[oa.id]);var n=oa.offset.x/oa.repeat.x,o=oa.offset.y/oa.repeat.y,p=oa.image.width*oa.repeat.x,Cb=oa.image.height* -oa.repeat.y,h=(h+n)*p,k=(1-k+o)*Cb,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+n)*p-h,j=(1-j+o)*Cb-k,l=(l+n)*p-h,m=(1-m+o)*Cb-k,n=i*m-l*j;0===n?(void 0===Aa[oa.id]&&(b=document.createElement("canvas"),b.width=oa.image.width,b.height=oa.image.height,b=b.getContext("2d"),b.drawImage(oa.image,0,0),Aa[oa.id]=b.getImageData(0,0,oa.image.width,oa.image.height).data),b=Aa[oa.id],h=4*(Math.floor(h)+Math.floor(k)*oa.image.width),O.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255),t(O)):(n=1/n,oa=(m*c-j*f)*n,j=(m*d-j*g)*n,c=(i*f-l* -c)*n,d=(i*g-l*d)*n,a=a-oa*h-c*k,h=b-j*h-d*k,q.save(),q.transform(oa,j,c,d,a,h),q.fill(),q.restore())}}function z(a,b,c,d,e,f,g,h,k,i,j,l,m){var oa,n;oa=m.width-1;n=m.height-1;g*=oa;h*=n;c-=a;d-=b;e-=a;f-=b;k=k*oa-g;i=i*n-h;j=j*oa-g;l=l*n-h;n=1/(k*l-j*i);oa=(l*c-i*e)*n;i=(l*d-i*f)*n;c=(k*e-j*c)*n;d=(k*f-j*d)*n;a=a-oa*g-c*h;b=b-i*g-d*h;q.save();q.transform(oa,i,c,d,a,b);q.clip();q.drawImage(m,0,0);q.restore()}function oa(a,b,c,d){va[0]=255*a.r|0;va[1]=255*a.g|0;va[2]=255*a.b|0;va[4]=255*b.r|0;va[5]= -255*b.g|0;va[6]=255*b.b|0;va[8]=255*c.r|0;va[9]=255*c.g|0;va[10]=255*c.b|0;va[12]=255*d.r|0;va[13]=255*d.g|0;va[14]=255*d.b|0;Xa.putImageData(rb,0,0);Za.drawImage(gb,0,0);return Ya}function cc(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Cb(a){a=0.5*(a+1);return 0>a?0:1>1,Nc=ma.height>>1,sb=bb.scale.x*p,tb=bb.scale.y*o,F=sb*hc,yb=tb*Nc,la.set(na.x-F,na.y-yb,na.x+F,na.y+yb),!1!==ob.intersects(la)&&(q.save(),q.translate(na.x,na.y),q.rotate(-bb.rotation),q.scale(sb,-tb),q.translate(-hc,-Nc),q.drawImage(ma,0,0),q.restore())):ca instanceof THREE.ParticleCanvasMaterial&&(F=bb.scale.x*p,yb=bb.scale.y*o,la.set(na.x- -F,na.y-yb,na.x+F,na.y+yb),!1!==ob.intersects(la)&&(d(ca.color.getContextStyle()),e(ca.color.getContextStyle()),q.save(),q.translate(na.x,na.y),q.rotate(-bb.rotation),q.scale(F,yb),ca.program(q),q.restore()))}else if(ma instanceof THREE.RenderableLine){if(C=ma.v1,D=ma.v2,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*=o,la.addPoint(C.positionScreen.x,C.positionScreen.y),la.addPoint(D.positionScreen.x,D.positionScreen.y),!0===ob.intersects(la)&&(na=C,bb=D,b(ca.opacity), -c(ca.blending),q.beginPath(),q.moveTo(na.positionScreen.x,na.positionScreen.y),q.lineTo(bb.positionScreen.x,bb.positionScreen.y),ca instanceof THREE.LineBasicMaterial))na=ca.linewidth,A!==na&&(A=q.lineWidth=na),na=ca.linecap,w!==na&&(w=q.lineCap=na),na=ca.linejoin,v!==na&&(v=q.lineJoin=na),d(ca.color.getContextStyle()),q.stroke(),la.inflate(2*ca.linewidth)}else if(ma instanceof THREE.RenderableFace3)C=ma.v1,D=ma.v2,I=ma.v3,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*= -o,I.positionScreen.x*=p,I.positionScreen.y*=o,!0===ca.overdraw&&(Xb(C.positionScreen,D.positionScreen),Xb(D.positionScreen,I.positionScreen),Xb(I.positionScreen,C.positionScreen)),la.add3Points(C.positionScreen.x,C.positionScreen.y,D.positionScreen.x,D.positionScreen.y,I.positionScreen.x,I.positionScreen.y),!0===ob.intersects(la)&&m(C,D,I,0,1,2,ma,ca,a);else if(ma instanceof THREE.RenderableFace4&&(C=ma.v1,D=ma.v2,I=ma.v3,K=ma.v4,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*= -o,I.positionScreen.x*=p,I.positionScreen.y*=o,K.positionScreen.x*=p,K.positionScreen.y*=o,B.positionScreen.copy(D.positionScreen),J.positionScreen.copy(K.positionScreen),!0===ca.overdraw&&(Xb(C.positionScreen,D.positionScreen),Xb(D.positionScreen,K.positionScreen),Xb(K.positionScreen,C.positionScreen),Xb(I.positionScreen,B.positionScreen),Xb(I.positionScreen,J.positionScreen)),la.addPoint(C.positionScreen.x,C.positionScreen.y),la.addPoint(D.positionScreen.x,D.positionScreen.y),la.addPoint(I.positionScreen.x, -I.positionScreen.y),la.addPoint(K.positionScreen.x,K.positionScreen.y),!0===ob.intersects(la)))(na=C,bb=D,F=I,yb=K,sb=B,tb=J,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(ca.opacity),c(ca.blending),void 0!==ca.map&&null!==ca.map||void 0!==ca.envMap&&null!==ca.envMap)?(m(na,bb,yb,0,1,3,ma,ca,hc),m(sb,F,tb,1,2,3,ma,ca,hc)):(H=na.positionScreen.x,G=na.positionScreen.y,N=bb.positionScreen.x,L=bb.positionScreen.y,Q=F.positionScreen.x,ea=F.positionScreen.y,P=yb.positionScreen.x,M=yb.positionScreen.y, -R=sb.positionScreen.x,ba=sb.positionScreen.y,ja=tb.positionScreen.x,S=tb.positionScreen.y,ca instanceof THREE.MeshLambertMaterial||ca instanceof THREE.MeshPhongMaterial)?(X.copy(ca.color),fa.copy(ca.emissive),ca.vertexColors===THREE.FaceColors&&(X.r*=ma.color.r,X.g*=ma.color.g,X.b*=ma.color.b),!0===kb)?!1===ca.wireframe&&ca.shading==THREE.SmoothShading&&4==ma.vertexNormalsLength?($.r=Y.r=aa.r=ia.r=Ha.r,$.g=Y.g=aa.g=ia.g=Ha.g,$.b=Y.b=aa.b=ia.b=Ha.b,l(ma.v1.positionWorld,ma.vertexNormalsWorld[0],$), -l(ma.v2.positionWorld,ma.vertexNormalsWorld[1],Y),l(ma.v4.positionWorld,ma.vertexNormalsWorld[3],aa),l(ma.v3.positionWorld,ma.vertexNormalsWorld[2],ia),$.r=$.r*X.r+fa.r,$.g=$.g*X.g+fa.g,$.b=$.b*X.b+fa.b,Y.r=Y.r*X.r+fa.r,Y.g=Y.g*X.g+fa.g,Y.b=Y.b*X.b+fa.b,aa.r=aa.r*X.r+fa.r,aa.g=aa.g*X.g+fa.g,aa.b=aa.b*X.b+fa.b,ia.r=ia.r*X.r+fa.r,ia.g=ia.g*X.g+fa.g,ia.b=ia.b*X.b+fa.b,ra=oa($,Y,aa,ia),n(H,G,N,L,P,M),z(H,G,N,L,P,M,0,0,1,0,0,1,ra),n(R,ba,Q,ea,ja,S),z(R,ba,Q,ea,ja,S,1,0,1,1,0,1,ra)):(O.r=Ha.r,O.g=Ha.g, -O.b=Ha.b,l(ma.centroidWorld,ma.normalWorld,O),O.r=O.r*X.r+fa.r,O.g=O.g*X.g+fa.g,O.b=O.b*X.b+fa.b,s(H,G,N,L,Q,ea,P,M),!0===ca.wireframe?r(O,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):t(O)):(O.r=X.r+fa.r,O.g=X.g+fa.g,O.b=X.b+fa.b,s(H,G,N,L,Q,ea,P,M),!0===ca.wireframe?r(O,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):t(O)):ca instanceof THREE.MeshBasicMaterial?(O.copy(ca.color),ca.vertexColors===THREE.FaceColors&&(O.r*=ma.color.r,O.g*=ma.color.g,O.b*=ma.color.b), -s(H,G,N,L,Q,ea,P,M),!0===ca.wireframe?r(O,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):t(O)):ca instanceof THREE.MeshNormalMaterial?(O.r=Cb(ma.normalWorld.x),O.g=Cb(ma.normalWorld.y),O.b=Cb(ma.normalWorld.z),s(H,G,N,L,Q,ea,P,M),!0===ca.wireframe?r(O,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):t(O)):ca instanceof THREE.MeshDepthMaterial&&(Ja=k.near,Ta=k.far,$.r=$.g=$.b=1-cc(na.positionScreen.z,Ja,Ta),Y.r=Y.g=Y.b=1-cc(bb.positionScreen.z,Ja,Ta),aa.r=aa.g=aa.b= -1-cc(yb.positionScreen.z,Ja,Ta),ia.r=ia.g=ia.b=1-cc(F.positionScreen.z,Ja,Ta),ra=oa($,Y,aa,ia),n(H,G,N,L,P,M),z(H,G,N,L,P,M,0,0,1,0,0,1,ra),n(R,ba,Q,ea,ja,S),z(R,ba,Q,ea,ja,S,1,0,1,1,0,1,ra));Na.addRectangle(la)}q.setTransform(1,0,0,1,0,0)}}}; +THREE.CanvasRenderer=function(a){function b(a){A!==a&&(A=q.globalAlpha=a)}function c(a){u!==a&&(a===THREE.NormalBlending?q.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?q.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(q.globalCompositeOperation="darker"),u=a)}function d(a){t!==a&&(t=q.strokeStyle=a)}function e(a){F!==a&&(F=q.fillStyle=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},f=this,g,h,i,j=new THREE.Projector,m=void 0!==a.canvas?a.canvas: +document.createElement("canvas"),n,l,p,o,q=m.getContext("2d"),s=new THREE.Color(0),r=0,A=1,u=0,t=null,F=null,z=null,w=null,v=null,C,D,I,L,B=new THREE.RenderableVertex,K=new THREE.RenderableVertex,H,G,N,M,R,aa,P,O,Q,U,J,qa,S=new THREE.Color,ha=new THREE.Color,Y=new THREE.Color,ba=new THREE.Color,ia=new THREE.Color,Z=new THREE.Color,da=new THREE.Color,Na={},Aa={},Ja,Ta,ta,db,wb,Ua,gb,lb,zb,Ab,fb=new THREE.Rectangle,va=new THREE.Rectangle,Ha=new THREE.Rectangle,mb=!1,La=new THREE.Color,Za=new THREE.Color, +eb=new THREE.Color,ua=new THREE.Vector3,$a,ab,nb,ja,hb,qb,a=16;$a=document.createElement("canvas");$a.width=$a.height=2;ab=$a.getContext("2d");ab.fillStyle="rgba(0,0,0,1)";ab.fillRect(0,0,2,2);nb=ab.getImageData(0,0,2,2);ja=nb.data;hb=document.createElement("canvas");hb.width=hb.height=a;qb=hb.getContext("2d");qb.translate(-a/2,-a/2);qb.scale(a,a);a--;this.domElement=m;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;l=b;p= +Math.floor(n/2);o=Math.floor(l/2);m.width=n;m.height=l;fb.set(-p,-o,p,o);va.set(-p,-o,p,o);A=1;u=0;v=w=z=F=t=null};this.setClearColor=function(a,b){s.copy(a);r=void 0!==b?b:1;va.set(-p,-o,p,o)};this.setClearColorHex=function(a,b){s.setHex(a);r=void 0!==b?b:1;va.set(-p,-o,p,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){q.setTransform(1,0,0,-1,p,o);!1===va.isEmpty()&&(va.minSelf(fb),va.inflate(2),1>r&&q.clearRect(Math.floor(va.getX()),Math.floor(va.getY()),Math.floor(va.getWidth()), +Math.floor(va.getHeight())),0=k||(k*=f.intensity,c.r+=g.r*k, +c.g+=g.g*k,c.b+=g.b*k)}else f instanceof THREE.PointLight&&(h=f.matrixWorld.getPosition(),k=b.dot(ua.sub(h,a).normalize()),0>=k||(k*=0==f.distance?1:1-Math.min(a.distanceTo(h)/f.distance,1),0!=k&&(k*=f.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)))}}function n(a,d,e,g,h,k,i,j){f.info.render.vertices+=3;f.info.render.faces++;b(j.opacity);c(j.blending);H=a.positionScreen.x;G=a.positionScreen.y;N=d.positionScreen.x;M=d.positionScreen.y;R=e.positionScreen.x;aa=e.positionScreen.y;r(H,G,N,M,R,aa);(j instanceof +THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(Z.copy(j.color),da.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(Z.r*=i.color.r,Z.g*=i.color.g,Z.b*=i.color.b),!0===mb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ha.r=Y.r=ba.r=La.r,ha.g=Y.g=ba.g=La.g,ha.b=Y.b=ba.b=La.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],ha),m(i.v2.positionWorld,i.vertexNormalsWorld[1],Y),m(i.v3.positionWorld,i.vertexNormalsWorld[2],ba),ha.r= +ha.r*Z.r+da.r,ha.g=ha.g*Z.g+da.g,ha.b=ha.b*Z.b+da.b,Y.r=Y.r*Z.r+da.r,Y.g=Y.g*Z.g+da.g,Y.b=Y.b*Z.b+da.b,ba.r=ba.r*Z.r+da.r,ba.g=ba.g*Z.g+da.g,ba.b=ba.b*Z.b+da.b,ia.r=0.5*(Y.r+ba.r),ia.g=0.5*(Y.g+ba.g),ia.b=0.5*(Y.b+ba.b),ta=vc(ha,Y,ba,ia),la(H,G,N,M,R,aa,0,0,1,0,0,1,ta)):(S.r=La.r,S.g=La.g,S.b=La.b,m(i.centroidWorld,i.normalWorld,S),S.r=S.r*Z.r+da.r,S.g=S.g*Z.g+da.g,S.b=S.b*Z.b+da.b,!0===j.wireframe?t(S,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(S)):!0===j.wireframe?t(j.color,j.wireframeLinewidth, +j.wireframeLinecap,j.wireframeLinejoin):u(j.color):j instanceof THREE.MeshBasicMaterial||j instanceof THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial?null!==j.map?j.map.mapping instanceof THREE.UVMapping&&(db=i.uvs[0],A(H,G,N,M,R,aa,db[g].u,db[g].v,db[h].u,db[h].v,db[k].u,db[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,ua.copy(i.vertexNormalsWorld[g]),wb=0.5*(ua.x*a.elements[0]+ua.y*a.elements[4]+ua.z*a.elements[8])+ +0.5,Ua=0.5*(ua.x*a.elements[1]+ua.y*a.elements[5]+ua.z*a.elements[9])+0.5,ua.copy(i.vertexNormalsWorld[h]),gb=0.5*(ua.x*a.elements[0]+ua.y*a.elements[4]+ua.z*a.elements[8])+0.5,lb=0.5*(ua.x*a.elements[1]+ua.y*a.elements[5]+ua.z*a.elements[9])+0.5,ua.copy(i.vertexNormalsWorld[k]),zb=0.5*(ua.x*a.elements[0]+ua.y*a.elements[4]+ua.z*a.elements[8])+0.5,Ab=0.5*(ua.x*a.elements[1]+ua.y*a.elements[5]+ua.z*a.elements[9])+0.5,A(H,G,N,M,R,aa,wb,Ua,gb,lb,zb,Ab,j.envMap)):(S.copy(j.color),j.vertexColors===THREE.FaceColors&& +(S.r*=i.color.r,S.g*=i.color.g,S.b*=i.color.b),!0===j.wireframe?t(S,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(S)):j instanceof THREE.MeshDepthMaterial?(Ja=l.near,Ta=l.far,ha.r=ha.g=ha.b=1-Bb(a.positionScreen.z,Ja,Ta),Y.r=Y.g=Y.b=1-Bb(d.positionScreen.z,Ja,Ta),ba.r=ba.g=ba.b=1-Bb(e.positionScreen.z,Ja,Ta),ia.r=0.5*(Y.r+ba.r),ia.g=0.5*(Y.g+ba.g),ia.b=0.5*(Y.b+ba.b),ta=vc(ha,Y,ba,ia),la(H,G,N,M,R,aa,0,0,1,0,0,1,ta)):j instanceof THREE.MeshNormalMaterial&&(S.r=gc(i.normalWorld.x), +S.g=gc(i.normalWorld.y),S.b=gc(i.normalWorld.z),!0===j.wireframe?t(S,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(S))}function r(a,b,c,d,e,f){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.closePath()}function s(a,b,c,d,e,f,g,h){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.lineTo(g,h);q.closePath()}function t(a,b,c,e){z!==b&&(z=q.lineWidth=b);w!==c&&(w=q.lineCap=c);v!==e&&(v=q.lineJoin=e);d(a.getContextStyle());q.stroke();Ha.inflate(2*b)}function u(a){e(a.getContextStyle()); +q.fill()}function A(a,b,c,d,f,g,h,k,i,j,l,m,la){if(!(la instanceof THREE.DataTexture||void 0===la.image||0==la.image.width)){if(!0===la.needsUpdate){var n=la.wrapS==THREE.RepeatWrapping,o=la.wrapT==THREE.RepeatWrapping;Na[la.id]=q.createPattern(la.image,!0===n&&!0===o?"repeat":!0===n&&!1===o?"repeat-x":!1===n&&!0===o?"repeat-y":"no-repeat");la.needsUpdate=!1}void 0===Na[la.id]?e("rgba(0,0,0,1)"):e(Na[la.id]);var n=la.offset.x/la.repeat.x,o=la.offset.y/la.repeat.y,p=la.image.width*la.repeat.x,Bb=la.image.height* +la.repeat.y,h=(h+n)*p,k=(1-k+o)*Bb,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+n)*p-h,j=(1-j+o)*Bb-k,l=(l+n)*p-h,m=(1-m+o)*Bb-k,n=i*m-l*j;0===n?(void 0===Aa[la.id]&&(b=document.createElement("canvas"),b.width=la.image.width,b.height=la.image.height,b=b.getContext("2d"),b.drawImage(la.image,0,0),Aa[la.id]=b.getImageData(0,0,la.image.width,la.image.height).data),b=Aa[la.id],h=4*(Math.floor(h)+Math.floor(k)*la.image.width),S.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255),u(S)):(n=1/n,la=(m*c-j*f)*n,j=(m*d-j*g)*n,c=(i*f-l* +c)*n,d=(i*g-l*d)*n,a=a-la*h-c*k,h=b-j*h-d*k,q.save(),q.transform(la,j,c,d,a,h),q.fill(),q.restore())}}function la(a,b,c,d,e,f,g,h,k,i,j,l,m){var la,n;la=m.width-1;n=m.height-1;g*=la;h*=n;c-=a;d-=b;e-=a;f-=b;k=k*la-g;i=i*n-h;j=j*la-g;l=l*n-h;n=1/(k*l-j*i);la=(l*c-i*e)*n;i=(l*d-i*f)*n;c=(k*e-j*c)*n;d=(k*f-j*d)*n;a=a-la*g-c*h;b=b-i*g-d*h;q.save();q.transform(la,i,c,d,a,b);q.clip();q.drawImage(m,0,0);q.restore()}function vc(a,b,c,d){ja[0]=255*a.r|0;ja[1]=255*a.g|0;ja[2]=255*a.b|0;ja[4]=255*b.r|0;ja[5]= +255*b.g|0;ja[6]=255*b.b|0;ja[8]=255*c.r|0;ja[9]=255*c.g|0;ja[10]=255*c.b|0;ja[12]=255*d.r|0;ja[13]=255*d.g|0;ja[14]=255*d.b|0;ab.putImageData(nb,0,0);qb.drawImage($a,0,0);return hb}function Bb(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function gc(a){a=0.5*(a+1);return 0>a?0:1>1,Nc=ma.height>>1,rb=bb.scale.x*p,sb=bb.scale.y*o,F=rb*hc,yb=sb*Nc,Ha.set(na.x-F,na.y-yb,na.x+F,na.y+yb),!1!==fb.intersects(Ha)&&(q.save(),q.translate(na.x,na.y),q.rotate(-bb.rotation),q.scale(rb,-sb),q.translate(-hc,-Nc),q.drawImage(ma,0,0),q.restore())):ca instanceof THREE.ParticleCanvasMaterial&&(F=bb.scale.x*p,yb=bb.scale.y*o,Ha.set(na.x- +F,na.y-yb,na.x+F,na.y+yb),!1!==fb.intersects(Ha)&&(d(ca.color.getContextStyle()),e(ca.color.getContextStyle()),q.save(),q.translate(na.x,na.y),q.rotate(-bb.rotation),q.scale(F,yb),ca.program(q),q.restore()))}else if(ma instanceof THREE.RenderableLine){if(C=ma.v1,D=ma.v2,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*=o,Ha.addPoint(C.positionScreen.x,C.positionScreen.y),Ha.addPoint(D.positionScreen.x,D.positionScreen.y),!0===fb.intersects(Ha)&&(na=C,bb=D,b(ca.opacity), +c(ca.blending),q.beginPath(),q.moveTo(na.positionScreen.x,na.positionScreen.y),q.lineTo(bb.positionScreen.x,bb.positionScreen.y),ca instanceof THREE.LineBasicMaterial))na=ca.linewidth,z!==na&&(z=q.lineWidth=na),na=ca.linecap,w!==na&&(w=q.lineCap=na),na=ca.linejoin,v!==na&&(v=q.lineJoin=na),d(ca.color.getContextStyle()),q.stroke(),Ha.inflate(2*ca.linewidth)}else if(ma instanceof THREE.RenderableFace3)C=ma.v1,D=ma.v2,I=ma.v3,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*= +o,I.positionScreen.x*=p,I.positionScreen.y*=o,!0===ca.overdraw&&(Xb(C.positionScreen,D.positionScreen),Xb(D.positionScreen,I.positionScreen),Xb(I.positionScreen,C.positionScreen)),Ha.add3Points(C.positionScreen.x,C.positionScreen.y,D.positionScreen.x,D.positionScreen.y,I.positionScreen.x,I.positionScreen.y),!0===fb.intersects(Ha)&&n(C,D,I,0,1,2,ma,ca,a);else if(ma instanceof THREE.RenderableFace4&&(C=ma.v1,D=ma.v2,I=ma.v3,L=ma.v4,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*= +o,I.positionScreen.x*=p,I.positionScreen.y*=o,L.positionScreen.x*=p,L.positionScreen.y*=o,B.positionScreen.copy(D.positionScreen),K.positionScreen.copy(L.positionScreen),!0===ca.overdraw&&(Xb(C.positionScreen,D.positionScreen),Xb(D.positionScreen,L.positionScreen),Xb(L.positionScreen,C.positionScreen),Xb(I.positionScreen,B.positionScreen),Xb(I.positionScreen,K.positionScreen)),Ha.addPoint(C.positionScreen.x,C.positionScreen.y),Ha.addPoint(D.positionScreen.x,D.positionScreen.y),Ha.addPoint(I.positionScreen.x, +I.positionScreen.y),Ha.addPoint(L.positionScreen.x,L.positionScreen.y),!0===fb.intersects(Ha)))(na=C,bb=D,F=I,yb=L,rb=B,sb=K,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(ca.opacity),c(ca.blending),void 0!==ca.map&&null!==ca.map||void 0!==ca.envMap&&null!==ca.envMap)?(n(na,bb,yb,0,1,3,ma,ca,hc),n(rb,F,sb,1,2,3,ma,ca,hc)):(H=na.positionScreen.x,G=na.positionScreen.y,N=bb.positionScreen.x,M=bb.positionScreen.y,R=F.positionScreen.x,aa=F.positionScreen.y,P=yb.positionScreen.x,O=yb.positionScreen.y, +Q=rb.positionScreen.x,U=rb.positionScreen.y,J=sb.positionScreen.x,qa=sb.positionScreen.y,ca instanceof THREE.MeshLambertMaterial||ca instanceof THREE.MeshPhongMaterial)?(Z.copy(ca.color),da.copy(ca.emissive),ca.vertexColors===THREE.FaceColors&&(Z.r*=ma.color.r,Z.g*=ma.color.g,Z.b*=ma.color.b),!0===mb)?!1===ca.wireframe&&ca.shading==THREE.SmoothShading&&4==ma.vertexNormalsLength?(ha.r=Y.r=ba.r=ia.r=La.r,ha.g=Y.g=ba.g=ia.g=La.g,ha.b=Y.b=ba.b=ia.b=La.b,m(ma.v1.positionWorld,ma.vertexNormalsWorld[0], +ha),m(ma.v2.positionWorld,ma.vertexNormalsWorld[1],Y),m(ma.v4.positionWorld,ma.vertexNormalsWorld[3],ba),m(ma.v3.positionWorld,ma.vertexNormalsWorld[2],ia),ha.r=ha.r*Z.r+da.r,ha.g=ha.g*Z.g+da.g,ha.b=ha.b*Z.b+da.b,Y.r=Y.r*Z.r+da.r,Y.g=Y.g*Z.g+da.g,Y.b=Y.b*Z.b+da.b,ba.r=ba.r*Z.r+da.r,ba.g=ba.g*Z.g+da.g,ba.b=ba.b*Z.b+da.b,ia.r=ia.r*Z.r+da.r,ia.g=ia.g*Z.g+da.g,ia.b=ia.b*Z.b+da.b,ta=vc(ha,Y,ba,ia),r(H,G,N,M,P,O),la(H,G,N,M,P,O,0,0,1,0,0,1,ta),r(Q,U,R,aa,J,qa),la(Q,U,R,aa,J,qa,1,0,1,1,0,1,ta)):(S.r=La.r, +S.g=La.g,S.b=La.b,m(ma.centroidWorld,ma.normalWorld,S),S.r=S.r*Z.r+da.r,S.g=S.g*Z.g+da.g,S.b=S.b*Z.b+da.b,s(H,G,N,M,R,aa,P,O),!0===ca.wireframe?t(S,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):u(S)):(S.r=Z.r+da.r,S.g=Z.g+da.g,S.b=Z.b+da.b,s(H,G,N,M,R,aa,P,O),!0===ca.wireframe?t(S,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):u(S)):ca instanceof THREE.MeshBasicMaterial?(S.copy(ca.color),ca.vertexColors===THREE.FaceColors&&(S.r*=ma.color.r,S.g*=ma.color.g,S.b*=ma.color.b), +s(H,G,N,M,R,aa,P,O),!0===ca.wireframe?t(S,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):u(S)):ca instanceof THREE.MeshNormalMaterial?(S.r=gc(ma.normalWorld.x),S.g=gc(ma.normalWorld.y),S.b=gc(ma.normalWorld.z),s(H,G,N,M,R,aa,P,O),!0===ca.wireframe?t(S,ca.wireframeLinewidth,ca.wireframeLinecap,ca.wireframeLinejoin):u(S)):ca instanceof THREE.MeshDepthMaterial&&(Ja=l.near,Ta=l.far,ha.r=ha.g=ha.b=1-Bb(na.positionScreen.z,Ja,Ta),Y.r=Y.g=Y.b=1-Bb(bb.positionScreen.z,Ja,Ta),ba.r=ba.g=ba.b= +1-Bb(yb.positionScreen.z,Ja,Ta),ia.r=ia.g=ia.b=1-Bb(F.positionScreen.z,Ja,Ta),ta=vc(ha,Y,ba,ia),r(H,G,N,M,P,O),la(H,G,N,M,P,O,0,0,1,0,0,1,ta),r(Q,U,R,aa,J,qa),la(Q,U,R,aa,J,qa,1,0,1,1,0,1,ta));va.addRectangle(Ha)}q.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 if ( combine == 2 ) {\ngl_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", @@ -352,144 +352,144 @@ g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=k.create l;c++)a.__morphTargetsArrays.push(new Float32Array(3*i))}if(a.numMorphNormals){a.__morphNormalsArrays=[];c=0;for(l=a.numMorphNormals;cl;l++)S.autoScaleCubemaps&&!f?(m=j,n=l,r=c.image[l],u=Mc,r.width<=u&&r.height<=u||(z=Math.max(r.width,r.height),t=Math.floor(r.width*u/z),u=Math.floor(r.height*u/z),z=document.createElement("canvas"),z.width=t,z.height=u,z.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,t,u),r=z),m[n]=r):j[l]=c.image[l];l=j[0];m=0===(l.width&l.width- -1)&&0===(l.height&l.height-1);n=H(c.format);r=H(c.type);K(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){u=j[l].mipmaps;z=0;for(A=u.length;z=vc&&console.warn("Trying to use "+ -a+" texture units while this GPU supports only "+vc);Aa+=1;return a}function A(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function w(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 v(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function C(a,b,c){zb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),zb=a);if(a&&(Ab!==b||ob!==c))k.polygonOffset(b,c),Ab=b,ob= -c}function D(a){for(var a=a.split("\n"),b=0,c=a.length;bl;l++)J.autoScaleCubemaps&&!f?(m=j,n=l,s=c.image[l],u=Mc,s.width<=u&&s.height<=u||(z=Math.max(s.width,s.height),t=Math.floor(s.width*u/z),u=Math.floor(s.height*u/z),z=document.createElement("canvas"),z.width=t,z.height=u,z.getContext("2d").drawImage(s,0,0,s.width,s.height,0,0,t,u),s=z),m[n]=s):j[l]=c.image[l];l=j[0];m=0===(l.width&l.width- +1)&&0===(l.height&l.height-1);n=H(c.format);s=H(c.type);L(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){u=j[l].mipmaps;z=0;for(A=u.length;z=uc&&console.warn("Trying to use "+ +a+" texture units while this GPU supports only "+uc);Na+=1;return a}function z(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function w(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 v(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function C(a,b,c){lb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),lb=a);if(a&&(zb!==b||Ab!==c))k.polygonOffset(b,c),zb=b,Ab= +c}function D(a){for(var a=a.split("\n"),b=0,c=a.length;bb;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer)};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c, -d,e=!1,a=0;for(c=O.length;ad.numSupportedMorphTargets?(h.sort(n),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(n):0===h.length&&h.push([0,0]);for(i=0;ib;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer)};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=!1,a=0;for(c=qa.length;ad.numSupportedMorphTargets?(h.sort(n),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(n):0===h.length&&h.push([0,0]);for(i=0;iwa;wa++)Zb=cb[wa],vb[$a]=Zb.x,vb[$a+1]=Zb.y,vb[$a+2]=Zb.z,$a+=3;else for(wa=0;3>wa;wa++)vb[$a]=Za.x,vb[$a+1]=Za.y,vb[$a+2]=Za.z,$a+=3;E=0;for(Z=ta.length;Ewa;wa++)Zb=cb[wa],vb[$a]=Zb.x,vb[$a+1]=Zb.y,vb[$a+2]=Zb.z,$a+=3;else for(wa=0;4>wa;wa++)vb[$a]=Za.x,vb[$a+1]=Za.y,vb[$a+2]=Za.z,$a+=3;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,vb,va)}if(mc&&Rc&&ob){E=0;for(Z=sa.length;E< -Z;E++)if(Wa=sa[E],gb=Rc[Wa],void 0!==gb)for(wa=0;3>wa;wa++)ic=gb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;E=0;for(Z=ta.length;Ewa;wa++)ic=gb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;0wa;wa++)jc=kb[wa],oc[Vb]=jc.u,oc[Vb+1]=jc.v,Vb+=2;E=0;for(Z=ta.length;Ewa;wa++)jc=kb[wa],oc[Vb]=jc.u,oc[Vb+1]=jc.v,Vb+=2;0wa;wa++)Zb=eb[wa],ub[Xa]=Zb.x,ub[Xa+1]=Zb.y,ub[Xa+2]=Zb.z,Xa+=3;else for(wa=0;3>wa;wa++)ub[Xa]=$a.x,ub[Xa+1]=$a.y,ub[Xa+2]=$a.z,Xa+=3;E=0;for($=sa.length;E<$;E++)if(T=Ya[sa[E]],eb=T.vertexNormals,$a=T.normal,4===eb.length&&gb)for(wa=0;4>wa;wa++)Zb=eb[wa],ub[Xa]=Zb.x,ub[Xa+1]=Zb.y,ub[Xa+2]=Zb.z,Xa+=3;else for(wa=0;4>wa;wa++)ub[Xa]=$a.x,ub[Xa+1]=$a.y,ub[Xa+2]=$a.z,Xa+=3;k.bindBuffer(k.ARRAY_BUFFER,pa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,ub,va)}if(mc&&Rc&&wb){E=0;for($=ra.length;E< +$;E++)if(Za=ra[E],lb=Rc[Za],void 0!==lb)for(wa=0;3>wa;wa++)ic=lb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;E=0;for($=sa.length;E<$;E++)if(Za=sa[E],lb=Rc[Za],void 0!==lb)for(wa=0;4>wa;wa++)ic=lb[wa],nc[Ub]=ic.u,nc[Ub+1]=ic.v,Ub+=2;0wa;wa++)jc=mb[wa],oc[Vb]=jc.u,oc[Vb+1]=jc.v,Vb+=2;E=0;for($=sa.length;E<$;E++)if(Za=sa[E],mb=Sc[Za], +void 0!==mb)for(wa=0;4>wa;wa++)jc=mb[wa],oc[Vb]=jc.u,oc[Vb+1]=jc.v,Vb+=2;0f;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER, -a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);B(a.__webglRenderbuffer[f],a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=k.createFramebuffer(),a.__webglRenderbuffer=k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),K(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0, -d,a.__webglTexture,0),B(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Ha,a=cb,d=la,e=kb);b!==aa&&(k.bindFramebuffer(k.FRAMEBUFFER,b),k.viewport(d,e,c,a),aa=b);lb=c;ua=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin); +!0);a.__webglTexture=k.createTexture();var c=0===(a.width&a.width-1)&&0===(a.height&a.height-1),d=H(a.format),e=H(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];k.bindTexture(k.TEXTURE_CUBE_MAP,a.__webglTexture);L(k.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER, +a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);B(a.__webglRenderbuffer[f],a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=k.createFramebuffer(),a.__webglRenderbuffer=k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),L(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0, +d,a.__webglTexture,0),B(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=mb,a=La,d=va,e=Ha);b!==Y&&(k.bindFramebuffer(k.FRAMEBUFFER,b),k.viewport(d,e,c,a),Y=b);Za=c;eb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin); this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format: THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0}; @@ -501,8 +501,8 @@ THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableParti THREE.ColorUtils={adjustHSV:function(a,b,c,d){var e=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,e);e.h=THREE.Math.clamp(e.h+b,0,1);e.s=THREE.Math.clamp(e.s+c,0,1);e.v=THREE.Math.clamp(e.v+d,0,1);a.setHSV(e.h,e.s,e.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,e=a.b,f=Math.max(Math.max(c,d),e),g=Math.min(Math.min(c,d),e);if(g===f)g=c=0;else{var h=f-g,g=h/f,c=(c===f?(d-e)/h:d===f?2+(e-c)/h:4+(c-d)/h)/6;0>c&&(c+=1);1a?b(c,e-1):j[e]b||o>b||l>b){i=a.vertices.length;u=e.clone();t=e.clone();p>=o&& +b.push(g.clone()),b.push(h.clone()),b.push(i.clone()),f.a=e,f.b=e+1,f.c=e+2}a.vertices=b;delete a.__tmpVertices},tessellate:function(a,b){var c,d,e,f,g,h,i,j,m,n,l,p,o,q,s,r,A,u,t,F=[],z=[];c=0;for(d=a.faceVertexUvs.length;cb||o>b||l>b){i=a.vertices.length;u=e.clone();t=e.clone();p>=o&& p>=l?(j=j.clone(),j.lerpSelf(m,0.5),u.a=f,u.b=i,u.c=h,t.a=i,t.b=g,t.c=h,3===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),u.vertexNormals[1].copy(f),t.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),u.vertexColors[1].copy(f),t.vertexColors[0].copy(f)),e=0):o>=p&&o>=l?(j=m.clone(),j.lerpSelf(n,0.5),u.a=f,u.b=g,u.c=i,t.a=i,t.b=h,t.c=f,3===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(), f.lerpSelf(e.vertexNormals[2],0.5),u.vertexNormals[2].copy(f),t.vertexNormals[0].copy(f),t.vertexNormals[1].copy(e.vertexNormals[2]),t.vertexNormals[2].copy(e.vertexNormals[0])),3===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),u.vertexColors[2].copy(f),t.vertexColors[0].copy(f),t.vertexColors[1].copy(e.vertexColors[2]),t.vertexColors[2].copy(e.vertexColors[0])),e=1):(j=j.clone(),j.lerpSelf(n,0.5),u.a=f,u.b=g,u.c=i,t.a=i,t.b=g,t.c=h,3===e.vertexNormals.length&& (f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[2],0.5),u.vertexNormals[2].copy(f),t.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[2],0.5),u.vertexColors[2].copy(f),t.vertexColors[0].copy(f)),e=2);F.push(u,t);a.vertices.push(j);f=0;for(g=a.faceVertexUvs.length;fb||o>b|| -q>b||r>b){s=a.vertices.length;z=a.vertices.length+1;u=e.clone();t=e.clone();p>=o&&p>=q&&p>=r||q>=o&&q>=p&&q>=r?(p=j.clone(),p.lerpSelf(m,0.5),m=n.clone(),m.lerpSelf(l,0.5),u.a=f,u.b=s,u.c=z,u.d=i,t.a=s,t.b=g,t.c=h,t.d=z,4===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),g=e.vertexNormals[2].clone(),g.lerpSelf(e.vertexNormals[3],0.5),u.vertexNormals[1].copy(f),u.vertexNormals[2].copy(g),t.vertexNormals[0].copy(f),t.vertexNormals[3].copy(g)),4===e.vertexColors.length&& -(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),g=e.vertexColors[2].clone(),g.lerpSelf(e.vertexColors[3],0.5),u.vertexColors[1].copy(f),u.vertexColors[2].copy(g),t.vertexColors[0].copy(f),t.vertexColors[3].copy(g)),e=0):(p=m.clone(),p.lerpSelf(n,0.5),m=l.clone(),m.lerpSelf(j,0.5),u.a=f,u.b=g,u.c=s,u.d=z,t.a=z,t.b=s,t.c=h,t.d=i,4===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(),f.lerpSelf(e.vertexNormals[2],0.5),g=e.vertexNormals[3].clone(),g.lerpSelf(e.vertexNormals[0],0.5), +u.clone()]):1===e?(m=h.clone(),m.lerpSelf(u,0.5),j=[t.clone(),h.clone(),m.clone()],h=[m.clone(),u.clone(),t.clone()]):(m=t.clone(),m.lerpSelf(u,0.5),j=[t.clone(),h.clone(),m.clone()],h=[m.clone(),h.clone(),u.clone()]),z[f].push(j,h))}else{F.push(e);f=0;for(g=a.faceVertexUvs.length;fb||o>b|| +q>b||s>b){r=a.vertices.length;A=a.vertices.length+1;u=e.clone();t=e.clone();p>=o&&p>=q&&p>=s||q>=o&&q>=p&&q>=s?(p=j.clone(),p.lerpSelf(m,0.5),m=n.clone(),m.lerpSelf(l,0.5),u.a=f,u.b=r,u.c=A,u.d=i,t.a=r,t.b=g,t.c=h,t.d=A,4===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),g=e.vertexNormals[2].clone(),g.lerpSelf(e.vertexNormals[3],0.5),u.vertexNormals[1].copy(f),u.vertexNormals[2].copy(g),t.vertexNormals[0].copy(f),t.vertexNormals[3].copy(g)),4===e.vertexColors.length&& +(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),g=e.vertexColors[2].clone(),g.lerpSelf(e.vertexColors[3],0.5),u.vertexColors[1].copy(f),u.vertexColors[2].copy(g),t.vertexColors[0].copy(f),t.vertexColors[3].copy(g)),e=0):(p=m.clone(),p.lerpSelf(n,0.5),m=l.clone(),m.lerpSelf(j,0.5),u.a=f,u.b=g,u.c=r,u.d=A,t.a=A,t.b=r,t.c=h,t.d=i,4===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(),f.lerpSelf(e.vertexNormals[2],0.5),g=e.vertexNormals[3].clone(),g.lerpSelf(e.vertexNormals[0],0.5), u.vertexNormals[2].copy(f),u.vertexNormals[3].copy(g),t.vertexNormals[0].copy(g),t.vertexNormals[1].copy(f)),4===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),g=e.vertexColors[3].clone(),g.lerpSelf(e.vertexColors[0],0.5),u.vertexColors[2].copy(f),u.vertexColors[3].copy(g),t.vertexColors[0].copy(g),t.vertexColors[1].copy(f)),e=1);F.push(u,t);a.vertices.push(p,m);f=0;for(g=a.faceVertexUvs.length;f>8&255,i>>16&255,i>>24&255)),d}d.mipmapCount=1;h[2]&131072&&!1!==b&&(d.mipmapCount=Math.max(1,h[7]));d.width=h[4];d.height=h[3];h=h[1]+4;f=d.width;g=d.height;for(i=0;in-1?0:n-1,p=n+1>e-1?e-1:n+1,o=0>m-1?0:m-1,q=m+1>d-1?d-1:m+1,r=[],s=[0,0,h[4*(n*d+m)]/255*b];r.push([-1,0,h[4*(n*d+o)]/255*b]);r.push([-1,-1,h[4*(l*d+o)]/255*b]);r.push([0,-1,h[4*(l*d+m)]/255*b]);r.push([1,-1,h[4*(l*d+q)]/255*b]);r.push([1,0,h[4*(n*d+q)]/255*b]);r.push([1,1,h[4*(p*d+q)]/255*b]);r.push([0,1,h[4*(p*d+m)]/255*b]);r.push([-1,1,h[4*(p*d+o)]/255*b]);l=[];o=r.length;for(p=0;pn-1?0:n-1,p=n+1>e-1?e-1:n+1,o=0>m-1?0:m-1,q=m+1>d-1?d-1:m+1,s=[],r=[0,0,h[4*(n*d+m)]/255*b];s.push([-1,0,h[4*(n*d+o)]/255*b]);s.push([-1,-1,h[4*(l*d+o)]/255*b]);s.push([0,-1,h[4*(l*d+m)]/255*b]);s.push([1,-1,h[4*(l*d+q)]/255*b]);s.push([1,0,h[4*(n*d+q)]/255*b]);s.push([1,1,h[4*(p*d+q)]/255*b]);s.push([0,1,h[4*(p*d+m)]/255*b]);s.push([-1,1,h[4*(p*d+o)]/255*b]);l=[];o=s.length;for(p=0;p0)for(j=0;j2;){if(n--<=0){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);m=j+1;e<=m&&(m=0);var l;a:{l=a;var p=i,o=j,q=m,r=e,s=g,z=void 0,u=void 0,t=void 0,F=void 0,A=void 0, -w=void 0,v=void 0,C=void 0,D=void 0,u=l[s[p]].x,t=l[s[p]].y,F=l[s[o]].x,A=l[s[o]].y,w=l[s[q]].x,v=l[s[q]].y;if(1E-10>(F-u)*(v-t)-(A-t)*(w-u))l=false;else{for(z=0;z=0&&B>=0&&H>=0){l=false;break a}}l=true}}if(l){f.push([a[g[i]], +(function(a){var b=function(a){for(var b=a.length,e=0,f=b-1,g=0;g0)for(j=0;j2;){if(n--<=0){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);m=j+1;e<=m&&(m=0);var l;a:{l=a;var p=i,o=j,q=m,s=e,r=g,A=void 0,u=void 0,t=void 0,F=void 0,z=void 0, +w=void 0,v=void 0,C=void 0,D=void 0,u=l[r[p]].x,t=l[r[p]].y,F=l[r[o]].x,z=l[r[o]].y,w=l[r[q]].x,v=l[r[q]].y;if(1E-10>(F-u)*(v-t)-(z-t)*(w-u))l=false;else{for(A=0;A=0&&B>=0&&H>=0){l=false;break a}}l=true}}if(l){f.push([a[g[i]], a[g[j]],a[g[m]]]);h.push([g[i],g[j],g[m]]);i=j;for(m=j+1;m=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;var q=[j[g],c[h],c[e]];n=THREE.FontUtils.Triangulate.area(q);var r=[j[g],j[f],c[h]];l=THREE.FontUtils.Triangulate.area(r);p=h;m=g;h=h+1;g=g+ --1;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;q=[j[g],c[h],c[e]];q=THREE.FontUtils.Triangulate.area(q);r=[j[g],j[f],c[h]];r=THREE.FontUtils.Triangulate.area(r);if(n+l>q+r){h=p;g=m;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1}n=c.slice(0,h);l=c.slice(h);p=j.slice(g);m=j.slice(0,g);f=[j[g],j[f],c[h]];o.push([j[g],c[h],c[e]]);o.push(f);c=n.concat(p).concat(m).concat(l)}return{shape:c, +THREE.Shape.Utils={removeHoles:function(a,b){var c=a.concat(),d=c.concat(),e,f,g,h,i,j,m,n,l,p,o=[];for(i=0;i=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;var q=[j[g],c[h],c[e]];n=THREE.FontUtils.Triangulate.area(q);var s=[j[g],j[f],c[h]];l=THREE.FontUtils.Triangulate.area(s);p=h;m=g;h=h+1;g=g+ +-1;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;q=[j[g],c[h],c[e]];q=THREE.FontUtils.Triangulate.area(q);s=[j[g],j[f],c[h]];s=THREE.FontUtils.Triangulate.area(s);if(n+l>q+s){h=p;g=m;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1}n=c.slice(0,h);l=c.slice(h);p=j.slice(g);m=j.slice(0,g);f=[j[g],j[f],c[h]];o.push([j[g],c[h],c[e]]);o.push(f);c=n.concat(p).concat(m).concat(l)}return{shape:c, isolatedPts:o,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,false),f,g,h,i,j={};f=0;for(g=d.length;f0?1:-1;for(e=0;e0?1:-1;for(e=0;e -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;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 e(c,d){var e,f;for(M=c.length;--M>=0;){e=M;f=M-1;f<0&&(f= -c.length-1);for(var g=0,h=l+m*2,g=0;g=0;H--){w=H/m;N=i*(1-w);G=j*Math.sin(w*Math.PI/2);M=0;for(R=B.length;Ma&&(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 e(c,d){var e,f;for(O=c.length;--O>=0;){e=O;f=O-1;f<0&&(f= +c.length-1);for(var g=0,h=l+m*2,g=0;g=0;H--){w=H/m;N=i*(1-w);G=j*Math.sin(w*Math.PI/2);O=0;for(Q=B.length;O0;)this.smooth(a)};THREE.GeometryUtils.orderedKey=function(a,b){return Math.min(a,b)+"_"+Math.max(a,b)}; THREE.GeometryUtils.computeEdgeFaces=function(a){function b(a,b){g[a]===void 0&&(g[a]=[]);g[a].push(b)}var c,d,e,f,g={},h=THREE.GeometryUtils.orderedKey;c=0;for(d=a.faces.length;c=q&&a0,"an edge without faces?!");if(D.length==1){w.addSelf(p[J]);w.addSelf(p[B]);w.multiplyScalar(0.5)}else{w.addSelf(r[v]);w.addSelf(r[K]);w.addSelf(p[J]);w.addSelf(p[B]);w.multiplyScalar(0.25)}s[t]= -q+o.length+F;h.push(w);F++;if(m.supportUVs){w=new THREE.UV;w.u=f(J,v).u+f(B,v).u;w.v=f(J,v).v+f(B,v).v;w.u=w.u/2;w.v=w.v/2;g(s[t],v,w);if(D.length>=2){b(D.length==2,"did we plan for more than 2 edges?");w=new THREE.UV;w.u=f(J,K).u+f(B,K).u;w.v=f(J,K).v+f(B,K).v;w.u=w.u/2;w.v=w.v/2;g(s[t],K,w)}}}c("-- Step 2 done");var N,L;w=["123","12","2","23"];K=["123","23","3","31"];var H=["123","31","1","12"],G=["1234","12","2","23"],Q=["1234","23","3","34"],ea=["1234","34","4","41"],P=["1234","41","1","12"]; -t=0;for(F=r.length;t=q&&a0,"an edge without faces?!");if(D.length==1){w.addSelf(p[K]);w.addSelf(p[B]);w.multiplyScalar(0.5)}else{w.addSelf(s[v]);w.addSelf(s[L]);w.addSelf(p[K]);w.addSelf(p[B]);w.multiplyScalar(0.25)}r[t]= +q+o.length+F;h.push(w);F++;if(m.supportUVs){w=new THREE.UV;w.u=f(K,v).u+f(B,v).u;w.v=f(K,v).v+f(B,v).v;w.u=w.u/2;w.v=w.v/2;g(r[t],v,w);if(D.length>=2){b(D.length==2,"did we plan for more than 2 edges?");w=new THREE.UV;w.u=f(K,L).u+f(B,L).u;w.v=f(K,L).v+f(B,L).v;w.u=w.u/2;w.v=w.v/2;g(r[t],L,w)}}}c("-- Step 2 done");var N,M;w=["123","12","2","23"];L=["123","23","3","31"];var H=["123","31","1","12"],G=["1234","12","2","23"],R=["1234","23","3","34"],aa=["1234","34","4","41"],P=["1234","41","1","12"]; +t=0;for(F=s.length;t0&&D.x0&& -D.y0.001&&G.scale>0.001){C.x=G.x;C.y=G.y;C.z=G.z;w=G.size*G.scale/s;v.x=w*t;v.y=w;b.uniform3f(I.screenPosition,C.x,C.y,C.z);b.uniform2f(I.scale,v.x,v.y);b.uniform1f(I.rotation,G.rotation);b.uniform1f(I.opacity,G.opacity); +"color");l.scale=b.getUniformLocation(m,"scale");l.rotation=b.getUniformLocation(m,"rotation");l.screenPosition=b.getUniformLocation(m,"screenPosition");p=false};this.render=function(a,d,e,r){var a=a.__webglFlares,A=a.length;if(A){var u=new THREE.Vector3,t=r/e,F=e*0.5,z=r*0.5,w=16/r,v=new THREE.Vector2(w*t,w),C=new THREE.Vector3(1,1,0),D=new THREE.Vector2(1,1),I=l,w=n;b.useProgram(m);if(!p){b.enableVertexAttribArray(n.vertex);b.enableVertexAttribArray(n.uv);p=true}b.uniform1i(I.occlusionMap,0);b.uniform1i(I.map, +1);b.bindBuffer(b.ARRAY_BUFFER,f);b.vertexAttribPointer(w.vertex,2,b.FLOAT,false,16,0);b.vertexAttribPointer(w.uv,2,b.FLOAT,false,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(false);var L,B,K,H,G;for(L=0;L0&&D.x0&& +D.y0.001&&G.scale>0.001){C.x=G.x;C.y=G.y;C.z=G.z;w=G.size*G.scale/r;v.x=w*t;v.y=w;b.uniform3f(I.screenPosition,C.x,C.y,C.z);b.uniform2f(I.scale,v.x,v.y);b.uniform1f(I.rotation,G.rotation);b.uniform1f(I.opacity,G.opacity); b.uniform3f(I.color,G.color.r,G.color.g,G.color.b);c.setBlending(G.blending,G.blendEquation,G.blendSrc,G.blendDst);c.setTexture(G.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,e,f,g=new THREE.Frustum,h=new THREE.Matrix4,i=new THREE.Vector3,j=new THREE.Vector3;this.init=function(g){a=g.context;b=g;var g=THREE.ShaderLib.depthRGBA,h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader, -vertexShader:g.vertexShader,uniforms:h,skinning:true});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true,skinning:true});c._shadowPass=true;d._shadowPass=true;e._shadowPass=true;f._shadowPass=true};this.render=function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(m,n){var l,p,o,q,r,s,z,u,t,F=[];q=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);l=0;for(p=m.__lights.length;lj.x)j.x=u.x;if(u.yj.y)j.y=u.y;if(u.z -j.z)j.z=u.z}q.left=i.x;q.right=j.x;q.top=j.y;q.bottom=i.y;q.updateProjectionMatrix()}q=o.shadowMap;s=o.shadowMatrix;r=o.shadowCamera;r.position.copy(o.matrixWorld.getPosition());r.lookAt(o.target.matrixWorld.getPosition());r.updateMatrixWorld();r.matrixWorldInverse.getInverse(r.matrixWorld);if(o.cameraHelper)o.cameraHelper.visible=o.shadowCameraVisible;o.shadowCameraVisible&&o.cameraHelper.update();s.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);s.multiplySelf(r.projectionMatrix);s.multiplySelf(r.matrixWorldInverse); -if(!r._viewMatrixArray)r._viewMatrixArray=new Float32Array(16);if(!r._projectionMatrixArray)r._projectionMatrixArray=new Float32Array(16);r.matrixWorldInverse.flattenToArray(r._viewMatrixArray);r.projectionMatrix.flattenToArray(r._projectionMatrixArray);h.multiply(r.projectionMatrix,r.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();t=m.__webglObjects;o=0;for(q=t.length;o0&&w.morphTargets;w=s instanceof THREE.SkinnedMesh&&w.skinning;u=s.customDepthMaterial?s.customDepthMaterial:w?u?f:e:u?d:c;z instanceof THREE.BufferGeometry?b.renderBufferDirect(r,m.__lights,null,u,z,s):b.renderBuffer(r,m.__lights, -null,u,z,s)}}t=m.__webglObjectsImmediate;o=0;for(q=t.length;oj.x)j.x=u.x;if(u.yj.y)j.y=u.y;if(u.z +j.z)j.z=u.z}q.left=i.x;q.right=j.x;q.top=j.y;q.bottom=i.y;q.updateProjectionMatrix()}q=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(q);b.clear();t=m.__webglObjects;o=0;for(q=t.length;o0&&w.morphTargets;w=r instanceof THREE.SkinnedMesh&&w.skinning;u=r.customDepthMaterial?r.customDepthMaterial:w?u?f:e:u?d:c;A instanceof THREE.BufferGeometry?b.renderBufferDirect(s,m.__lights,null,u,A,r):b.renderBuffer(s,m.__lights, +null,u,A,r)}}t=m.__webglObjectsImmediate;o=0;for(q=t.length;o