From 4210428787d65b1c54f9d611c079a7c500522a3f Mon Sep 17 00:00:00 2001 From: alteredq Date: Fri, 9 Nov 2012 03:49:11 +0100 Subject: [PATCH] Garbage collection friendlier normalMatrix in Projector. Small fix to #2610 --- build/three.js | 13 +- build/three.min.js | 386 +++++++++++++++++++++--------------------- src/core/Projector.js | 13 +- 3 files changed, 205 insertions(+), 207 deletions(-) diff --git a/build/three.js b/build/three.js index 96cbf9baaf..740418f063 100644 --- a/build/three.js +++ b/build/three.js @@ -3773,6 +3773,7 @@ THREE.Projector = function() { _viewProjectionMatrix = new THREE.Matrix4(), _modelViewProjectionMatrix = new THREE.Matrix4(), + _normalMatrix = new THREE.Matrix3(), _frustum = new THREE.Frustum(), @@ -3924,13 +3925,11 @@ THREE.Projector = function() { var near = camera.near, far = camera.far, visible = false, o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object, - modelMatrix, rotationMatrix, + modelMatrix, geometry, geometryMaterials, vertices, vertex, vertexPositionScreen, faces, face, faceVertexNormals, normal, faceVertexUvs, uvs, v1, v2, v3, v4, isFaceMaterial, material, side; - rotationMatrix = new THREE.Matrix3(); - _face3Count = 0; _face4Count = 0; _lineCount = 0; @@ -3966,8 +3965,8 @@ THREE.Projector = function() { faces = geometry.faces; faceVertexUvs = geometry.faceVertexUvs; - rotationMatrix.getInverse( modelMatrix ); - rotationMatrix.transpose(); + _normalMatrix.getInverse( modelMatrix ); + _normalMatrix.transpose(); isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial; side = object.material.side; @@ -4071,7 +4070,7 @@ THREE.Projector = function() { _face.normalWorld.copy( face.normal ); if ( visible === false && ( side === THREE.BackSide || side === THREE.DoubleSide ) ) _face.normalWorld.negate(); - rotationMatrix.multiplyVector3( _face.normalWorld ).normalize(); + _normalMatrix.multiplyVector3( _face.normalWorld ).normalize(); _face.centroidWorld.copy( face.centroid ); modelMatrix.multiplyVector3( _face.centroidWorld ); @@ -4088,7 +4087,7 @@ THREE.Projector = function() { if ( visible === false && ( side === THREE.BackSide || side === THREE.DoubleSide ) ) normal.negate(); - rotationMatrix.multiplyVector3( normal ).normalize(); + _normalMatrix.multiplyVector3( normal ).normalize(); } diff --git a/build/three.min.js b/build/three.min.js index 7cca1d2e73..98e862068d 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -35,7 +35,7 @@ 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; THREE.Matrix4=function(a,b,c,d,e,f,g,h,i,j,m,n,l,o,p,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,o||0,p||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,o,p,q){var t=this.elements;t[0]=a;t[4]=b;t[8]=c;t[12]=d;t[1]=e;t[5]=f;t[9]=g;t[13]=h;t[2]=i;t[6]=j;t[10]=m;t[14]=n;t[3]=l;t[7]=o;t[11]=p;t[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],o=c[2],p=c[6],q=c[10],t=c[14],r=c[3],A=c[7],u=c[11],c=c[15],s=d[0],D=d[4],z=d[8], -w=d[12],v=d[1],C=d[5],E=d[9],H=d[13],P=d[2],B=d[6],K=d[10],I=d[14],G=d[3],L=d[7],O=d[11],d=d[15];e[0]=f*s+g*v+h*P+i*G;e[4]=f*D+g*C+h*B+i*L;e[8]=f*z+g*E+h*K+i*O;e[12]=f*w+g*H+h*I+i*d;e[1]=j*s+m*v+n*P+l*G;e[5]=j*D+m*C+n*B+l*L;e[9]=j*z+m*E+n*K+l*O;e[13]=j*w+m*H+n*I+l*d;e[2]=o*s+p*v+q*P+t*G;e[6]=o*D+p*C+q*B+t*L;e[10]=o*z+p*E+q*K+t*O;e[14]=o*w+p*H+q*I+t*d;e[3]=r*s+A*v+u*P+c*G;e[7]=r*D+A*C+u*B+c*L;e[11]=r*z+A*E+u*K+c*O;e[15]=r*w+A*H+u*I+c*d;return this},multiplySelf:function(a){return this.multiply(this, +w=d[12],v=d[1],C=d[5],E=d[9],G=d[13],L=d[2],B=d[6],J=d[10],H=d[14],I=d[3],O=d[7],N=d[11],d=d[15];e[0]=f*s+g*v+h*L+i*I;e[4]=f*D+g*C+h*B+i*O;e[8]=f*z+g*E+h*J+i*N;e[12]=f*w+g*G+h*H+i*d;e[1]=j*s+m*v+n*L+l*I;e[5]=j*D+m*C+n*B+l*O;e[9]=j*z+m*E+n*J+l*N;e[13]=j*w+m*G+n*H+l*d;e[2]=o*s+p*v+q*L+t*I;e[6]=o*D+p*C+q*B+t*O;e[10]=o*z+p*E+q*J+t*N;e[14]=o*w+p*G+q*H+t*d;e[3]=r*s+A*v+u*L+c*I;e[7]=r*D+A*C+u*B+c*O;e[11]=r*z+A*E+u*J+c*N;e[15]=r*w+A*G+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;ce;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;new a.Vector3;var f=new a.Vector3,g=new a.Matrix4,h=function(a,b){return a.distance-b.distance},i=new a.Vector3,j=new a.Vector3,m=new a.Vector3,n=function(a,b,c){i.sub(c,a);var d=i.dot(b),a=j.add(a,m.copy(b).multiplyScalar(d));return c.distanceTo(a)},l=function(a,b,c,d){i.sub(d,b);j.sub(c,b);m.sub(a, b);var a=i.dot(i),b=i.dot(j),c=i.dot(m),e=j.dot(j),d=j.dot(m),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(h,i,j){if(h instanceof a.Particle){var m=n(i.origin,i.direction,h.matrixWorld.getPosition());if(m>h.scale.x)return j;j.push({distance:m,point:h.position,face:null,object:h})}else if(h instanceof a.Mesh){var o=h.geometry.boundingSphere.radius*h.matrixWorld.getMaxScaleOnAxis(),m=n(i.origin,i.direction,h.matrixWorld.getPosition());if(m>o)return j;var o=h.geometry, -p=o.vertices,D=h.geometry.materials,z=h.material instanceof a.MeshFaceMaterial,m=h.material.side,w,v,C,E=i.precision;h.matrixRotationWorld.extractRotation(h.matrixWorld);b.copy(i.origin);g.getInverse(h.matrixWorld);c.copy(b);g.multiplyVector3(c);d.copy(i.direction);g.rotateAxis(d).normalize();for(var H=0,P=o.faces.length;Hv)&&(m===a.DoubleSide|| -(m===a.FrontSide?0>w:0i.far||j.push({distance:m,point:w,face:B,faceIndex:H,object:h}));else if(B instanceof a.Face4&&(m=p[B.a],w=p[B.b],v=p[B.c],C=p[B.d],l(f,m,w,C)||l(f,w,v,C)))w=h.matrixWorld.multiplyVector3(f.clone()),m=b.distanceTo(w),mi.far||j.push({distance:m,point:w,face:B,faceIndex:H,object:h})}}},p=function(a, +p=o.vertices,D=h.geometry.materials,z=h.material instanceof a.MeshFaceMaterial,m=h.material.side,w,v,C,E=i.precision;h.matrixRotationWorld.extractRotation(h.matrixWorld);b.copy(i.origin);g.getInverse(h.matrixWorld);c.copy(b);g.multiplyVector3(c);d.copy(i.direction);g.rotateAxis(d).normalize();for(var G=0,L=o.faces.length;Gv)&&(m===a.DoubleSide|| +(m===a.FrontSide?0>w:0i.far||j.push({distance:m,point:w,face:B,faceIndex:G,object:h}));else if(B instanceof a.Face4&&(m=p[B.a],w=p[B.b],v=p[B.c],C=p[B.d],l(f,m,w,C)||l(f,w,v,C)))w=h.matrixWorld.multiplyVector3(f.clone()),m=b.distanceTo(w),mi.far||j.push({distance:m,point:w,face:B,faceIndex:G,object:h})}}},p=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,o){!0===h?(h=!1,b=fm?f>l?f:l:m>l?m:l,e=g>n?g>o?g:o:n>o?n:o):(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>o?g>e?g:e:o>e?o:e:n>o?n>e?n:e:o>e?o: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,o,p=[],q=0,t,r=[],A=0,u,s,D=[],z=0,w,v,C=[],E=0,H={objects:[],sprites:[],lights:[],elements:[]},P=new THREE.Vector3,B=new THREE.Vector4,K=new THREE.Matrix4,I=new THREE.Matrix4,G=new THREE.Frustum,L=new THREE.Vector4,O=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,N){var Q=h.near,$=h.far,J=!1,ia,T,ja,Y,ea,ba,aa,ha,Ma,Na,Ga,Oa,xa,ya,xb,Va;Na=new THREE.Matrix3;v=s=t=o=0;H.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;H.objects.length=0;H.sprites.length=0;H.lights.length=0;var fb=function(b){for(var c=0,d=b.children.length;cQ&&i.positionScreen.z<$;ja=0;for(ia=xa.length;ja(aa.positionScreen.x-Y.positionScreen.x)*(ea.positionScreen.y-Y.positionScreen.y)-(aa.positionScreen.y-Y.positionScreen.y)*(ea.positionScreen.x-Y.positionScreen.x),ba===THREE.DoubleSide||J===(ba===THREE.FrontSide))o===q? -(ya=new THREE.RenderableFace3,p.push(ya),q++,o++,l=ya):l=p[o++],l.v1.copy(Y),l.v2.copy(ea),l.v3.copy(aa);else continue;else continue;else if(T instanceof THREE.Face4)if(Y=m[T.a],ea=m[T.b],aa=m[T.c],ya=m[T.d],!0===Y.visible&&!0===ea.visible&&!0===aa.visible&&!0===ya.visible)if(J=0>(ya.positionScreen.x-Y.positionScreen.x)*(ea.positionScreen.y-Y.positionScreen.y)-(ya.positionScreen.y-Y.positionScreen.y)*(ea.positionScreen.x-Y.positionScreen.x)||0>(ea.positionScreen.x-aa.positionScreen.x)*(ya.positionScreen.y- -aa.positionScreen.y)-(ea.positionScreen.y-aa.positionScreen.y)*(ya.positionScreen.x-aa.positionScreen.x),ba===THREE.DoubleSide||J===(ba===THREE.FrontSide)){if(t===A){var kb=new THREE.RenderableFace4;r.push(kb);A++;t++;l=kb}else l=r[t++];l.v1.copy(Y);l.v2.copy(ea);l.v3.copy(aa);l.v4.copy(ya)}else continue;else continue;l.normalWorld.copy(T.normal);!1===J&&(ba===THREE.BackSide||ba===THREE.DoubleSide)&&l.normalWorld.negate();Na.multiplyVector3(l.normalWorld).normalize();l.centroidWorld.copy(T.centroid); -Ma.multiplyVector3(l.centroidWorld);l.centroidScreen.copy(l.centroidWorld);K.multiplyVector3(l.centroidScreen);aa=T.vertexNormals;Y=0;for(ea=aa.length;YB.z&&(v===E?(Q=new THREE.RenderableParticle,C.push(Q),E++,v++,w=Q):w=C[v++],w.object=ha,w.x=B.x/B.w,w.y=B.y/B.w,w.z=B.z,w.rotation=ha.rotation.z,w.scale.x=ha.scale.x*Math.abs(w.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])), -w.scale.y=ha.scale.y*Math.abs(w.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),w.material=ha.material,H.elements.push(w)));!0===N&&H.elements.sort(c);return H}};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,o,p=[],q=0,t,r=[],A=0,u,s,D=[],z=0,w,v,C=[],E=0,G={objects:[],sprites:[],lights:[],elements:[]},L=new THREE.Vector3,B=new THREE.Vector4,J=new THREE.Matrix4,H=new THREE.Matrix4,I=new THREE.Matrix3,O=new THREE.Frustum,N=new THREE.Vector4,M=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,S){var $=h.near,K=h.far,ja=!1,Q,ha,da,Y,aa,ba,ia,ya,Na,za,Oa,Aa,pa,xb,Va;v=s=t=o=0;G.elements.length=0;g.updateMatrixWorld(); +void 0===h.parent&&h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);J.multiply(h.projectionMatrix,h.matrixWorldInverse);O.setFromMatrix(J);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var fb=function(b){for(var c=0,d=b.children.length;c$&&i.positionScreen.z(ia.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(ia.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.positionScreen.x),ba===THREE.DoubleSide||ja===(ba===THREE.FrontSide))o===q?(pa= +new THREE.RenderableFace3,p.push(pa),q++,o++,l=pa):l=p[o++],l.v1.copy(Y),l.v2.copy(aa),l.v3.copy(ia);else continue;else continue;else if(ha instanceof THREE.Face4)if(Y=m[ha.a],aa=m[ha.b],ia=m[ha.c],pa=m[ha.d],!0===Y.visible&&!0===aa.visible&&!0===ia.visible&&!0===pa.visible)if(ja=0>(pa.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(pa.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.positionScreen.x)||0>(aa.positionScreen.x-ia.positionScreen.x)*(pa.positionScreen.y- +ia.positionScreen.y)-(aa.positionScreen.y-ia.positionScreen.y)*(pa.positionScreen.x-ia.positionScreen.x),ba===THREE.DoubleSide||ja===(ba===THREE.FrontSide)){if(t===A){var kb=new THREE.RenderableFace4;r.push(kb);A++;t++;l=kb}else l=r[t++];l.v1.copy(Y);l.v2.copy(aa);l.v3.copy(ia);l.v4.copy(pa)}else continue;else continue;l.normalWorld.copy(ha.normal);!1===ja&&(ba===THREE.BackSide||ba===THREE.DoubleSide)&&l.normalWorld.negate();I.multiplyVector3(l.normalWorld).normalize();l.centroidWorld.copy(ha.centroid); +Na.multiplyVector3(l.centroidWorld);l.centroidScreen.copy(l.centroidWorld);J.multiplyVector3(l.centroidScreen);ia=ha.vertexNormals;Y=0;for(aa=ia.length;YB.z&&(v===E?($=new THREE.RenderableParticle,C.push($),E++,v++,w=$):w=C[v++],w.object=ya,w.x=B.x/B.w,w.y=B.y/B.w,w.z=B.z,w.rotation=ya.rotation.z,w.scale.x=ya.scale.x*Math.abs(w.x- +(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),w.scale.y=ya.scale.y*Math.abs(w.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),w.material=ya.material,G.elements.push(w)));!0===S&&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=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},inverse:function(){this.conjugate().normalize(); @@ -113,9 +113,9 @@ new THREE.Vector3]:c instanceof THREE.Face4&&(c.vertexNormals=[new THREE.Vector3 e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone();e.__originalVertexNormals||(e.__originalVertexNormals=[]);a=0;for(b=e.vertexNormals.length;ae?-1:1,f.vertexTangents[d]=new THREE.Vector4(B.x,B.y,B.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;ce?-1:1,f.vertexTangents[d]=new THREE.Vector4(B.x,B.y,B.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;cc.x&&(c.x=a.x),a.yc.y&&(c.y=a.y),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;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;a$?-1:1;h[4*a]=O.x;h[4*a+1]=O.y;h[4*a+2]=O.z;h[4*a+3]=N}if(void 0===this.attributes.index||void 0=== +2]+=r.z,h[3*j]+=r.x,h[3*j+1]+=r.y,h[3*j+2]+=r.z,h[3*m]+=r.x,h[3*m+1]+=r.y,h[3*m+2]+=r.z}a=0;for(b=h.length;a$?-1:1;h[4*a]=N.x;h[4*a+1]=N.y;h[4*a+2]=N.z;h[4*a+3]=P}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;A++)q+=String.fromCharCode(b[R+A]);c=z(s,R+12);z(s,R+13);z(s,R+14);z(s,R+15);e=z(s,R+16);i=z(s,R+17);j=z(s,R+18);m=z(s,R+19);n=w(s,R+20);l=w(s,R+20+4);o=w(s,R+20+8);p=w(s,R+20+12);q=w(s,R+20+16);t=w(s,R+20+20);r= -w(s,R+20+24);A=w(s,R+20+28);b=w(s,R+20+32);u=w(s,R+20+36);s=w(s,R+20+40);I+=c;R=3*e+m;S=4*e+m;O=p*R;c=q*(R+3*i);e=t*(R+3*j);m=r*(R+3*i+3*j);R=A*S;i=b*(S+4*i);j=u*(S+4*j);S=I;var I=new Float32Array(a,I,3*n),M,N,Q,$;for(M=0;MA;A++)q+=String.fromCharCode(b[M+A]);c=z(s,M+12);z(s,M+13);z(s,M+14);z(s,M+15);e=z(s,M+16);i=z(s,M+17);j=z(s,M+18);m=z(s,M+19);n=w(s,M+20);l=w(s,M+20+4);o=w(s,M+20+8);p=w(s,M+20+12);q=w(s,M+20+16);t=w(s,M+20+20);r= +w(s,M+20+24);A=w(s,M+20+28);b=w(s,M+20+32);u=w(s,M+20+36);s=w(s,M+20+40);H+=c;M=3*e+m;T=4*e+m;N=p*M;c=q*(M+3*i);e=t*(M+3*j);m=r*(M+3*i+3*j);M=A*T;i=b*(T+4*i);j=u*(T+4*j);T=H;var H=new Float32Array(a,H,3*n),R,P,S,$;for(R=0;Rr.parameters.opacity&& -(r.parameters.transparent=!0);r.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,$=THREE.UniformsUtils.clone(q.uniforms),l=r.parameters.color,B=r.parameters.specular,J=r.parameters.ambient,p=r.parameters.shininess,$.tNormal.value=M.textures[r.parameters.normalMap],r.parameters.normalScale&&$.uNormalScale.value.set(r.parameters.normalScale[0],r.parameters.normalScale[1]),r.parameters.map&&($.tDiffuse.value=r.parameters.map,$.enableDiffuse.value=!0),r.parameters.envMap&&($.tCube.value=r.parameters.envMap, -$.enableReflection.value=!0,$.uReflectivity.value=r.parameters.reflectivity),r.parameters.lightMap&&($.tAO.value=r.parameters.lightMap,$.enableAO.value=!0),r.parameters.specularMap&&($.tSpecular.value=M.textures[r.parameters.specularMap],$.enableSpecular.value=!0),r.parameters.displacementMap&&($.tDisplacement.value=M.textures[r.parameters.displacementMap],$.enableDisplacement.value=!0,$.uDisplacementBias.value=r.parameters.displacementBias,$.uDisplacementScale.value=r.parameters.displacementScale), -$.uDiffuseColor.value.setHex(l),$.uSpecularColor.value.setHex(B),$.uAmbientColor.value.setHex(J),$.uShininess.value=p,r.parameters.opacity&&($.uOpacity.value=r.parameters.opacity),E=new THREE.ShaderMaterial({fragmentShader:q.fragmentShader,vertexShader:q.vertexShader,uniforms:$,lights:!0,fog:!0})):E=new THREE[r.type](r.parameters);M.materials[o]=E}e();M.cameras&&Q.defaults.camera&&(M.currentCamera=M.cameras[Q.defaults.camera]);M.fogs&&Q.defaults.fog&&(M.scene.fog=M.fogs[Q.defaults.fog]);w=Q.defaults.bgcolor; -M.bgColor=new THREE.Color;M.bgColor.setRGB(w[0],w[1],w[2]);M.bgColorAlpha=Q.defaults.bgalpha;m.callbackSync(M);j()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null}; +(r.parameters.transparent=!0);r.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,$=THREE.UniformsUtils.clone(q.uniforms),l=r.parameters.color,B=r.parameters.specular,K=r.parameters.ambient,p=r.parameters.shininess,$.tNormal.value=R.textures[r.parameters.normalMap],r.parameters.normalScale&&$.uNormalScale.value.set(r.parameters.normalScale[0],r.parameters.normalScale[1]),r.parameters.map&&($.tDiffuse.value=r.parameters.map,$.enableDiffuse.value=!0),r.parameters.envMap&&($.tCube.value=r.parameters.envMap, +$.enableReflection.value=!0,$.uReflectivity.value=r.parameters.reflectivity),r.parameters.lightMap&&($.tAO.value=r.parameters.lightMap,$.enableAO.value=!0),r.parameters.specularMap&&($.tSpecular.value=R.textures[r.parameters.specularMap],$.enableSpecular.value=!0),r.parameters.displacementMap&&($.tDisplacement.value=R.textures[r.parameters.displacementMap],$.enableDisplacement.value=!0,$.uDisplacementBias.value=r.parameters.displacementBias,$.uDisplacementScale.value=r.parameters.displacementScale), +$.uDiffuseColor.value.setHex(l),$.uSpecularColor.value.setHex(B),$.uAmbientColor.value.setHex(K),$.uShininess.value=p,r.parameters.opacity&&($.uOpacity.value=r.parameters.opacity),E=new THREE.ShaderMaterial({fragmentShader:q.fragmentShader,vertexShader:q.vertexShader,uniforms:$,lights:!0,fog:!0})):E=new THREE[r.type](r.parameters);R.materials[o]=E}e();R.cameras&&S.defaults.camera&&(R.currentCamera=R.cameras[S.defaults.camera]);R.fogs&&S.defaults.fog&&(R.scene.fog=R.fogs[S.defaults.fog]);w=S.defaults.bgcolor; +R.bgColor=new THREE.Color;R.bgColor.setRGB(w[0],w[1],w[2]);R.bgColorAlpha=S.defaults.bgalpha;m.callbackSync(R);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}}}; @@ -277,34 +277,34 @@ THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===t THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){var b=this.__lights.indexOf(a);-1!==b&&this.__lights.splice(b,1)}else a instanceof THREE.Camera||(b=this.__objects.indexOf(a),-1!==b&&(this.__objects.splice(b,1),this.__objectsRemoved.push(a),b=this.__objectsAdded.indexOf(a),-1!==b&&this.__objectsAdded.splice(b,1)));for(b=0;br&&q.clearRect(Math.floor(Ra.getX()),Math.floor(Ra.getY()),Math.floor(Ra.getWidth()), Math.floor(Ra.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(ka.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);I=a.positionScreen.x;G=a.positionScreen.y;L=d.positionScreen.x;O=d.positionScreen.y;R=e.positionScreen.x;S=e.positionScreen.y;r(I,G,L,O,R,S);(j instanceof -THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(aa.copy(j.color),ha.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(aa.r*=i.color.r,aa.g*=i.color.g,aa.b*=i.color.b),!0===lb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ja.r=Y.r=ea.r=Ka.r,ja.g=Y.g=ea.g=Ka.g,ja.b=Y.b=ea.b=Ka.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],ja),m(i.v2.positionWorld,i.vertexNormalsWorld[1],Y),m(i.v3.positionWorld,i.vertexNormalsWorld[2],ea), -ja.r=ja.r*aa.r+ha.r,ja.g=ja.g*aa.g+ha.g,ja.b=ja.b*aa.b+ha.b,Y.r=Y.r*aa.r+ha.r,Y.g=Y.g*aa.g+ha.g,Y.b=Y.b*aa.b+ha.b,ea.r=ea.r*aa.r+ha.r,ea.g=ea.g*aa.g+ha.g,ea.b=ea.b*aa.b+ha.b,ba.r=0.5*(Y.r+ea.r),ba.g=0.5*(Y.g+ea.g),ba.b=0.5*(Y.b+ea.b),xa=wc(ja,Y,ea,ba),ma(I,G,L,O,R,S,0,0,1,0,0,1,xa)):(T.r=Ka.r,T.g=Ka.g,T.b=Ka.b,m(i.centroidWorld,i.normalWorld,T),T.r=T.r*aa.r+ha.r,T.g=T.g*aa.g+ha.g,T.b=T.b*aa.b+ha.b,!0===j.wireframe?s(T,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(T)):!0===j.wireframe? -s(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&&(ya=i.uvs[0],A(I,G,L,O,R,S,ya[g].u,ya[g].v,ya[h].u,ya[h].v,ya[k].u,ya[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,ka.copy(i.vertexNormalsWorld[g]),xb=0.5*(ka.x*a.elements[0]+ka.y* -a.elements[4]+ka.z*a.elements[8])+0.5,Va=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[h]),fb=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,kb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[k]),Bb=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,Cb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,A(I,G,L,O,R,S,xb,Va,fb,kb,Bb,Cb,j.envMap)):(T.copy(j.color), -j.vertexColors===THREE.FaceColors&&(T.r*=i.color.r,T.g*=i.color.g,T.b*=i.color.b),!0===j.wireframe?s(T,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(T)):j instanceof THREE.MeshDepthMaterial?(Ga=l.near,Oa=l.far,ja.r=ja.g=ja.b=1-nb(a.positionScreen.z,Ga,Oa),Y.r=Y.g=Y.b=1-nb(d.positionScreen.z,Ga,Oa),ea.r=ea.g=ea.b=1-nb(e.positionScreen.z,Ga,Oa),ba.r=0.5*(Y.r+ea.r),ba.g=0.5*(Y.g+ea.g),ba.b=0.5*(Y.b+ea.b),xa=wc(ja,Y,ea,ba),ma(I,G,L,O,R,S,0,0,1,0,0,1,xa)):j instanceof THREE.MeshNormalMaterial&& -(T.r=gc(i.normalWorld.x),T.g=gc(i.normalWorld.y),T.b=gc(i.normalWorld.z),!0===j.wireframe?s(T,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(T))}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 t(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 s(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,ma){if(!(ma instanceof THREE.DataTexture||void 0===ma.image||0==ma.image.width)){if(!0===ma.needsUpdate){var n=ma.wrapS==THREE.RepeatWrapping,nb=ma.wrapT==THREE.RepeatWrapping;Ma[ma.id]=q.createPattern(ma.image,!0===n&&!0===nb?"repeat":!0===n&&!1===nb?"repeat-x":!1===n&&!0===nb?"repeat-y":"no-repeat");ma.needsUpdate=!1}void 0===Ma[ma.id]?e("rgba(0,0,0,1)"):e(Ma[ma.id]);var n=ma.offset.x/ma.repeat.x,nb=ma.offset.y/ -ma.repeat.y,o=ma.image.width*ma.repeat.x,p=ma.image.height*ma.repeat.y,h=(h+n)*o,k=(1-k+nb)*p,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+n)*o-h,j=(1-j+nb)*p-k,l=(l+n)*o-h,m=(1-m+nb)*p-k,n=i*m-l*j;0===n?(void 0===Na[ma.id]&&(b=document.createElement("canvas"),b.width=ma.image.width,b.height=ma.image.height,b=b.getContext("2d"),b.drawImage(ma.image,0,0),Na[ma.id]=b.getImageData(0,0,ma.image.width,ma.image.height).data),b=Na[ma.id],h=4*(Math.floor(h)+Math.floor(k)*ma.image.width),T.setRGB(b[h]/255,b[h+1]/255,b[h+ -2]/255),u(T)):(n=1/n,ma=(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-ma*h-c*k,h=b-j*h-d*k,q.save(),q.transform(ma,j,c,d,a,h),q.fill(),q.restore())}}function ma(a,b,c,d,e,f,g,h,k,i,j,l,m){var ma,n;ma=m.width-1;n=m.height-1;g*=ma;h*=n;c-=a;d-=b;e-=a;f-=b;k=k*ma-g;i=i*n-h;j=j*ma-g;l=l*n-h;n=1/(k*l-j*i);ma=(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-ma*g-c*h;b=b-i*g-d*h;q.save();q.transform(ma,i,c,d,a,b);q.clip();q.drawImage(m,0,0);q.restore()}function wc(a,b,c,d){na[0]=255* -a.r|0;na[1]=255*a.g|0;na[2]=255*a.b|0;na[4]=255*b.r|0;na[5]=255*b.g|0;na[6]=255*b.b|0;na[8]=255*c.r|0;na[9]=255*c.g|0;na[10]=255*c.b|0;na[12]=255*d.r|0;na[13]=255*d.g|0;na[14]=255*d.b|0;bb.putImageData(mb,0,0);qb.drawImage(ab,0,0);return gb}function nb(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,Pc=oa.height>>1,rb=D.scale.x*o,sb=D.scale.y*p,zb=rb*hc,Ab=sb*Pc,Ha.set(pa.x-zb,pa.y-Ab,pa.x+zb,pa.y+Ab),!1!==eb.intersects(Ha)&&(q.save(),q.translate(pa.x,pa.y),q.rotate(-D.rotation),q.scale(rb,-sb),q.translate(-hc,-Pc),q.drawImage(oa,0,0),q.restore())):da instanceof THREE.ParticleCanvasMaterial&&(zb=D.scale.x*o,Ab=D.scale.y*p,Ha.set(pa.x- -zb,pa.y-Ab,pa.x+zb,pa.y+Ab),!1!==eb.intersects(Ha)&&(d(da.color.getContextStyle()),e(da.color.getContextStyle()),q.save(),q.translate(pa.x,pa.y),q.rotate(-D.rotation),q.scale(zb,Ab),da.program(q),q.restore()))}else if(oa instanceof THREE.RenderableLine){if(C=oa.v1,E=oa.v2,C.positionScreen.x*=o,C.positionScreen.y*=p,E.positionScreen.x*=o,E.positionScreen.y*=p,Ha.addPoint(C.positionScreen.x,C.positionScreen.y),Ha.addPoint(E.positionScreen.x,E.positionScreen.y),!0===eb.intersects(Ha)&&(pa=C,D=E,b(da.opacity), -c(da.blending),q.beginPath(),q.moveTo(pa.positionScreen.x,pa.positionScreen.y),q.lineTo(D.positionScreen.x,D.positionScreen.y),da instanceof THREE.LineBasicMaterial))pa=da.linewidth,z!==pa&&(z=q.lineWidth=pa),pa=da.linecap,w!==pa&&(w=q.lineCap=pa),pa=da.linejoin,v!==pa&&(v=q.lineJoin=pa),d(da.color.getContextStyle()),q.stroke(),Ha.inflate(2*da.linewidth)}else if(oa instanceof THREE.RenderableFace3)C=oa.v1,E=oa.v2,H=oa.v3,C.positionScreen.x*=o,C.positionScreen.y*=p,E.positionScreen.x*=o,E.positionScreen.y*= -p,H.positionScreen.x*=o,H.positionScreen.y*=p,!0===da.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,H.positionScreen),Xb(H.positionScreen,C.positionScreen)),Ha.add3Points(C.positionScreen.x,C.positionScreen.y,E.positionScreen.x,E.positionScreen.y,H.positionScreen.x,H.positionScreen.y),!0===eb.intersects(Ha)&&n(C,E,H,0,1,2,oa,da,a);else if(oa instanceof THREE.RenderableFace4&&(C=oa.v1,E=oa.v2,H=oa.v3,P=oa.v4,C.positionScreen.x*=o,C.positionScreen.y*=p,E.positionScreen.x*=o,E.positionScreen.y*= -p,H.positionScreen.x*=o,H.positionScreen.y*=p,P.positionScreen.x*=o,P.positionScreen.y*=p,B.positionScreen.copy(E.positionScreen),K.positionScreen.copy(P.positionScreen),!0===da.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,P.positionScreen),Xb(P.positionScreen,C.positionScreen),Xb(H.positionScreen,B.positionScreen),Xb(H.positionScreen,K.positionScreen)),Ha.addPoint(C.positionScreen.x,C.positionScreen.y),Ha.addPoint(E.positionScreen.x,E.positionScreen.y),Ha.addPoint(H.positionScreen.x, -H.positionScreen.y),Ha.addPoint(P.positionScreen.x,P.positionScreen.y),!0===eb.intersects(Ha)))(pa=C,D=E,zb=H,Ab=P,rb=B,sb=K,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(da.opacity),c(da.blending),void 0!==da.map&&null!==da.map||void 0!==da.envMap&&null!==da.envMap)?(n(pa,D,Ab,0,1,3,oa,da,hc),n(rb,zb,sb,1,2,3,oa,da,hc)):(I=pa.positionScreen.x,G=pa.positionScreen.y,L=D.positionScreen.x,O=D.positionScreen.y,R=zb.positionScreen.x,S=zb.positionScreen.y,M=Ab.positionScreen.x,N=Ab.positionScreen.y, -Q=rb.positionScreen.x,$=rb.positionScreen.y,J=sb.positionScreen.x,ia=sb.positionScreen.y,da instanceof THREE.MeshLambertMaterial||da instanceof THREE.MeshPhongMaterial)?(aa.copy(da.color),ha.copy(da.emissive),da.vertexColors===THREE.FaceColors&&(aa.r*=oa.color.r,aa.g*=oa.color.g,aa.b*=oa.color.b),!0===lb)?!1===da.wireframe&&da.shading==THREE.SmoothShading&&4==oa.vertexNormalsLength?(ja.r=Y.r=ea.r=ba.r=Ka.r,ja.g=Y.g=ea.g=ba.g=Ka.g,ja.b=Y.b=ea.b=ba.b=Ka.b,m(oa.v1.positionWorld,oa.vertexNormalsWorld[0], -ja),m(oa.v2.positionWorld,oa.vertexNormalsWorld[1],Y),m(oa.v4.positionWorld,oa.vertexNormalsWorld[3],ea),m(oa.v3.positionWorld,oa.vertexNormalsWorld[2],ba),ja.r=ja.r*aa.r+ha.r,ja.g=ja.g*aa.g+ha.g,ja.b=ja.b*aa.b+ha.b,Y.r=Y.r*aa.r+ha.r,Y.g=Y.g*aa.g+ha.g,Y.b=Y.b*aa.b+ha.b,ea.r=ea.r*aa.r+ha.r,ea.g=ea.g*aa.g+ha.g,ea.b=ea.b*aa.b+ha.b,ba.r=ba.r*aa.r+ha.r,ba.g=ba.g*aa.g+ha.g,ba.b=ba.b*aa.b+ha.b,xa=wc(ja,Y,ea,ba),r(I,G,L,O,M,N),ma(I,G,L,O,M,N,0,0,1,0,0,1,xa),r(Q,$,R,S,J,ia),ma(Q,$,R,S,J,ia,1,0,1,1,0,1,xa)): -(T.r=Ka.r,T.g=Ka.g,T.b=Ka.b,m(oa.centroidWorld,oa.normalWorld,T),T.r=T.r*aa.r+ha.r,T.g=T.g*aa.g+ha.g,T.b=T.b*aa.b+ha.b,t(I,G,L,O,R,S,M,N),!0===da.wireframe?s(T,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(T)):(T.r=aa.r+ha.r,T.g=aa.g+ha.g,T.b=aa.b+ha.b,t(I,G,L,O,R,S,M,N),!0===da.wireframe?s(T,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(T)):da instanceof THREE.MeshBasicMaterial?(T.copy(da.color),da.vertexColors===THREE.FaceColors&&(T.r*=oa.color.r,T.g*=oa.color.g, -T.b*=oa.color.b),t(I,G,L,O,R,S,M,N),!0===da.wireframe?s(T,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(T)):da instanceof THREE.MeshNormalMaterial?(T.r=gc(oa.normalWorld.x),T.g=gc(oa.normalWorld.y),T.b=gc(oa.normalWorld.z),t(I,G,L,O,R,S,M,N),!0===da.wireframe?s(T,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(T)):da instanceof THREE.MeshDepthMaterial&&(Ga=l.near,Oa=l.far,ja.r=ja.g=ja.b=1-nb(pa.positionScreen.z,Ga,Oa),Y.r=Y.g=Y.b=1-nb(D.positionScreen.z,Ga,Oa), -ea.r=ea.g=ea.b=1-nb(Ab.positionScreen.z,Ga,Oa),ba.r=ba.g=ba.b=1-nb(zb.positionScreen.z,Ga,Oa),xa=wc(ja,Y,ea,ba),r(I,G,L,O,M,N),ma(I,G,L,O,M,N,0,0,1,0,0,1,xa),r(Q,$,R,S,J,ia),ma(Q,$,R,S,J,ia,1,0,1,1,0,1,xa));Ra.addRectangle(Ha)}q.setTransform(1,0,0,1,0,0)}}}; +c.g+=g.g*k,c.b+=g.b*k)}else f instanceof THREE.PointLight&&(h=f.matrixWorld.getPosition(),k=b.dot(ka.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;I=a.positionScreen.y;O=d.positionScreen.x;N=d.positionScreen.y;M=e.positionScreen.x;T=e.positionScreen.y;r(H,I,O,N,M,T);(j instanceof +THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(ba.copy(j.color),ia.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(ba.r*=i.color.r,ba.g*=i.color.g,ba.b*=i.color.b),!0===lb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ha.r=da.r=Y.r=La.r,ha.g=da.g=Y.g=La.g,ha.b=da.b=Y.b=La.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],ha),m(i.v2.positionWorld,i.vertexNormalsWorld[1],da),m(i.v3.positionWorld,i.vertexNormalsWorld[2], +Y),ha.r=ha.r*ba.r+ia.r,ha.g=ha.g*ba.g+ia.g,ha.b=ha.b*ba.b+ia.b,da.r=da.r*ba.r+ia.r,da.g=da.g*ba.g+ia.g,da.b=da.b*ba.b+ia.b,Y.r=Y.r*ba.r+ia.r,Y.g=Y.g*ba.g+ia.g,Y.b=Y.b*ba.b+ia.b,aa.r=0.5*(da.r+Y.r),aa.g=0.5*(da.g+Y.g),aa.b=0.5*(da.b+Y.b),Aa=wc(ha,da,Y,aa),ma(H,I,O,N,M,T,0,0,1,0,0,1,Aa)):(Q.r=La.r,Q.g=La.g,Q.b=La.b,m(i.centroidWorld,i.normalWorld,Q),Q.r=Q.r*ba.r+ia.r,Q.g=Q.g*ba.g+ia.g,Q.b=Q.b*ba.b+ia.b,!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q)):!0===j.wireframe? +s(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&&(pa=i.uvs[0],A(H,I,O,N,M,T,pa[g].u,pa[g].v,pa[h].u,pa[h].v,pa[k].u,pa[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,ka.copy(i.vertexNormalsWorld[g]),xb=0.5*(ka.x*a.elements[0]+ka.y* +a.elements[4]+ka.z*a.elements[8])+0.5,Va=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[h]),fb=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,kb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[k]),Bb=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,Cb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,A(H,I,O,N,M,T,xb,Va,fb,kb,Bb,Cb,j.envMap)):(Q.copy(j.color), +j.vertexColors===THREE.FaceColors&&(Q.r*=i.color.r,Q.g*=i.color.g,Q.b*=i.color.b),!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q)):j instanceof THREE.MeshDepthMaterial?(za=l.near,Oa=l.far,ha.r=ha.g=ha.b=1-nb(a.positionScreen.z,za,Oa),da.r=da.g=da.b=1-nb(d.positionScreen.z,za,Oa),Y.r=Y.g=Y.b=1-nb(e.positionScreen.z,za,Oa),aa.r=0.5*(da.r+Y.r),aa.g=0.5*(da.g+Y.g),aa.b=0.5*(da.b+Y.b),Aa=wc(ha,da,Y,aa),ma(H,I,O,N,M,T,0,0,1,0,0,1,Aa)):j instanceof THREE.MeshNormalMaterial&& +(Q.r=gc(i.normalWorld.x),Q.g=gc(i.normalWorld.y),Q.b=gc(i.normalWorld.z),!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q))}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 t(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 s(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();Ia.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,ma){if(!(ma instanceof THREE.DataTexture||void 0===ma.image||0==ma.image.width)){if(!0===ma.needsUpdate){var n=ma.wrapS==THREE.RepeatWrapping,nb=ma.wrapT==THREE.RepeatWrapping;ya[ma.id]=q.createPattern(ma.image,!0===n&&!0===nb?"repeat":!0===n&&!1===nb?"repeat-x":!1===n&&!0===nb?"repeat-y":"no-repeat");ma.needsUpdate=!1}void 0===ya[ma.id]?e("rgba(0,0,0,1)"):e(ya[ma.id]);var n=ma.offset.x/ma.repeat.x,nb=ma.offset.y/ +ma.repeat.y,o=ma.image.width*ma.repeat.x,p=ma.image.height*ma.repeat.y,h=(h+n)*o,k=(1-k+nb)*p,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+n)*o-h,j=(1-j+nb)*p-k,l=(l+n)*o-h,m=(1-m+nb)*p-k,n=i*m-l*j;0===n?(void 0===Na[ma.id]&&(b=document.createElement("canvas"),b.width=ma.image.width,b.height=ma.image.height,b=b.getContext("2d"),b.drawImage(ma.image,0,0),Na[ma.id]=b.getImageData(0,0,ma.image.width,ma.image.height).data),b=Na[ma.id],h=4*(Math.floor(h)+Math.floor(k)*ma.image.width),Q.setRGB(b[h]/255,b[h+1]/255,b[h+ +2]/255),u(Q)):(n=1/n,ma=(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-ma*h-c*k,h=b-j*h-d*k,q.save(),q.transform(ma,j,c,d,a,h),q.fill(),q.restore())}}function ma(a,b,c,d,e,f,g,h,k,i,j,l,m){var ma,n;ma=m.width-1;n=m.height-1;g*=ma;h*=n;c-=a;d-=b;e-=a;f-=b;k=k*ma-g;i=i*n-h;j=j*ma-g;l=l*n-h;n=1/(k*l-j*i);ma=(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-ma*g-c*h;b=b-i*g-d*h;q.save();q.transform(ma,i,c,d,a,b);q.clip();q.drawImage(m,0,0);q.restore()}function wc(a,b,c,d){ua[0]=255* +a.r|0;ua[1]=255*a.g|0;ua[2]=255*a.b|0;ua[4]=255*b.r|0;ua[5]=255*b.g|0;ua[6]=255*b.b|0;ua[8]=255*c.r|0;ua[9]=255*c.g|0;ua[10]=255*c.b|0;ua[12]=255*d.r|0;ua[13]=255*d.g|0;ua[14]=255*d.b|0;bb.putImageData(mb,0,0);qb.drawImage(ab,0,0);return gb}function nb(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,Pc=na.height>>1,rb=D.scale.x*o,sb=D.scale.y*p,zb=rb*hc,Ab=sb*Pc,Ia.set(oa.x-zb,oa.y-Ab,oa.x+zb,oa.y+Ab),!1!==eb.intersects(Ia)&&(q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(rb,-sb),q.translate(-hc,-Pc),q.drawImage(na,0,0),q.restore())):ea instanceof THREE.ParticleCanvasMaterial&&(zb=D.scale.x*o,Ab=D.scale.y*p,Ia.set(oa.x- +zb,oa.y-Ab,oa.x+zb,oa.y+Ab),!1!==eb.intersects(Ia)&&(d(ea.color.getContextStyle()),e(ea.color.getContextStyle()),q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(zb,Ab),ea.program(q),q.restore()))}else if(na instanceof THREE.RenderableLine){if(C=na.v1,E=na.v2,C.positionScreen.x*=o,C.positionScreen.y*=p,E.positionScreen.x*=o,E.positionScreen.y*=p,Ia.addPoint(C.positionScreen.x,C.positionScreen.y),Ia.addPoint(E.positionScreen.x,E.positionScreen.y),!0===eb.intersects(Ia)&&(oa=C,D=E,b(ea.opacity), +c(ea.blending),q.beginPath(),q.moveTo(oa.positionScreen.x,oa.positionScreen.y),q.lineTo(D.positionScreen.x,D.positionScreen.y),ea instanceof THREE.LineBasicMaterial))oa=ea.linewidth,z!==oa&&(z=q.lineWidth=oa),oa=ea.linecap,w!==oa&&(w=q.lineCap=oa),oa=ea.linejoin,v!==oa&&(v=q.lineJoin=oa),d(ea.color.getContextStyle()),q.stroke(),Ia.inflate(2*ea.linewidth)}else if(na instanceof THREE.RenderableFace3)C=na.v1,E=na.v2,G=na.v3,C.positionScreen.x*=o,C.positionScreen.y*=p,E.positionScreen.x*=o,E.positionScreen.y*= +p,G.positionScreen.x*=o,G.positionScreen.y*=p,!0===ea.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,G.positionScreen),Xb(G.positionScreen,C.positionScreen)),Ia.add3Points(C.positionScreen.x,C.positionScreen.y,E.positionScreen.x,E.positionScreen.y,G.positionScreen.x,G.positionScreen.y),!0===eb.intersects(Ia)&&n(C,E,G,0,1,2,na,ea,a);else if(na instanceof THREE.RenderableFace4&&(C=na.v1,E=na.v2,G=na.v3,L=na.v4,C.positionScreen.x*=o,C.positionScreen.y*=p,E.positionScreen.x*=o,E.positionScreen.y*= +p,G.positionScreen.x*=o,G.positionScreen.y*=p,L.positionScreen.x*=o,L.positionScreen.y*=p,B.positionScreen.copy(E.positionScreen),J.positionScreen.copy(L.positionScreen),!0===ea.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,L.positionScreen),Xb(L.positionScreen,C.positionScreen),Xb(G.positionScreen,B.positionScreen),Xb(G.positionScreen,J.positionScreen)),Ia.addPoint(C.positionScreen.x,C.positionScreen.y),Ia.addPoint(E.positionScreen.x,E.positionScreen.y),Ia.addPoint(G.positionScreen.x, +G.positionScreen.y),Ia.addPoint(L.positionScreen.x,L.positionScreen.y),!0===eb.intersects(Ia)))(oa=C,D=E,zb=G,Ab=L,rb=B,sb=J,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(ea.opacity),c(ea.blending),void 0!==ea.map&&null!==ea.map||void 0!==ea.envMap&&null!==ea.envMap)?(n(oa,D,Ab,0,1,3,na,ea,hc),n(rb,zb,sb,1,2,3,na,ea,hc)):(H=oa.positionScreen.x,I=oa.positionScreen.y,O=D.positionScreen.x,N=D.positionScreen.y,M=zb.positionScreen.x,T=zb.positionScreen.y,R=Ab.positionScreen.x,P=Ab.positionScreen.y, +S=rb.positionScreen.x,$=rb.positionScreen.y,K=sb.positionScreen.x,ja=sb.positionScreen.y,ea instanceof THREE.MeshLambertMaterial||ea instanceof THREE.MeshPhongMaterial)?(ba.copy(ea.color),ia.copy(ea.emissive),ea.vertexColors===THREE.FaceColors&&(ba.r*=na.color.r,ba.g*=na.color.g,ba.b*=na.color.b),!0===lb)?!1===ea.wireframe&&ea.shading==THREE.SmoothShading&&4==na.vertexNormalsLength?(ha.r=da.r=Y.r=aa.r=La.r,ha.g=da.g=Y.g=aa.g=La.g,ha.b=da.b=Y.b=aa.b=La.b,m(na.v1.positionWorld,na.vertexNormalsWorld[0], +ha),m(na.v2.positionWorld,na.vertexNormalsWorld[1],da),m(na.v4.positionWorld,na.vertexNormalsWorld[3],Y),m(na.v3.positionWorld,na.vertexNormalsWorld[2],aa),ha.r=ha.r*ba.r+ia.r,ha.g=ha.g*ba.g+ia.g,ha.b=ha.b*ba.b+ia.b,da.r=da.r*ba.r+ia.r,da.g=da.g*ba.g+ia.g,da.b=da.b*ba.b+ia.b,Y.r=Y.r*ba.r+ia.r,Y.g=Y.g*ba.g+ia.g,Y.b=Y.b*ba.b+ia.b,aa.r=aa.r*ba.r+ia.r,aa.g=aa.g*ba.g+ia.g,aa.b=aa.b*ba.b+ia.b,Aa=wc(ha,da,Y,aa),r(H,I,O,N,R,P),ma(H,I,O,N,R,P,0,0,1,0,0,1,Aa),r(S,$,M,T,K,ja),ma(S,$,M,T,K,ja,1,0,1,1,0,1,Aa)): +(Q.r=La.r,Q.g=La.g,Q.b=La.b,m(na.centroidWorld,na.normalWorld,Q),Q.r=Q.r*ba.r+ia.r,Q.g=Q.g*ba.g+ia.g,Q.b=Q.b*ba.b+ia.b,t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):(Q.r=ba.r+ia.r,Q.g=ba.g+ia.g,Q.b=ba.b+ia.b,t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshBasicMaterial?(Q.copy(ea.color),ea.vertexColors===THREE.FaceColors&&(Q.r*=na.color.r,Q.g*=na.color.g, +Q.b*=na.color.b),t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshNormalMaterial?(Q.r=gc(na.normalWorld.x),Q.g=gc(na.normalWorld.y),Q.b=gc(na.normalWorld.z),t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshDepthMaterial&&(za=l.near,Oa=l.far,ha.r=ha.g=ha.b=1-nb(oa.positionScreen.z,za,Oa),da.r=da.g=da.b=1-nb(D.positionScreen.z,za, +Oa),Y.r=Y.g=Y.b=1-nb(Ab.positionScreen.z,za,Oa),aa.r=aa.g=aa.b=1-nb(zb.positionScreen.z,za,Oa),Aa=wc(ha,da,Y,aa),r(H,I,O,N,R,P),ma(H,I,O,N,R,P,0,0,1,0,0,1,Aa),r(S,$,M,T,K,ja),ma(S,$,M,T,K,ja,1,0,1,1,0,1,Aa));Ra.addRectangle(Ia)}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", @@ -362,142 +362,142 @@ h.array[f+2]=g.z,h.array[f+3]=g.w,f+=4}}else{if(o)for(d=0;dl;l++)J.autoScaleCubemaps&&!f?(m=j,n=l,r=c.image[l], -s=Oc,r.width<=s&&r.height<=s||(u=Math.max(r.width,r.height),t=Math.floor(r.width*s/u),s=Math.floor(r.height*s/u),u=document.createElement("canvas"),u.width=t,u.height=s,u.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,t,s),r=u),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=I(c.format);r=I(c.type);P(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){s=j[l].mipmaps;u=0;for(z=s.length;u=vc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+vc);Ma+=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){kb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),kb=a);if(a&&(Bb!==b||Cb!==c))k.polygonOffset(b,c),Bb=b,Cb=c}function E(a){for(var a=a.split("\n"),b=0,c=a.length;bl;l++)K.autoScaleCubemaps&&!f?(m=j,n=l,r=c.image[l], +s=Oc,r.width<=s&&r.height<=s||(u=Math.max(r.width,r.height),t=Math.floor(r.width*s/u),s=Math.floor(r.height*s/u),u=document.createElement("canvas"),u.width=t,u.height=s,u.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,t,s),r=u),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);L(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){s=j[l].mipmaps;u=0;for(z=s.length;u=vc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+vc);ya+=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){kb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),kb=a);if(a&&(Bb!==b||Cb!==c))k.polygonOffset(b,c),Bb=b,Cb=c}function E(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=ia.length;ab;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=ja.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;iua;ua++)Zb=db[ua],ub[Ya]=Zb.x,ub[Ya+1]=Zb.y,ub[Ya+2]=Zb.z,Ya+=3;else for(ua=0;3>ua;ua++)ub[Ya]=ab.x,ub[Ya+1]=ab.y,ub[Ya+2]=ab.z,Ya+=3;F=0;for(Z=ta.length;Fua;ua++)Zb=db[ua],ub[Ya]=Zb.x,ub[Ya+1]=Zb.y,ub[Ya+2]=Zb.z,Ya+=3;else for(ua=0;4>ua;ua++)ub[Ya]=ab.x,ub[Ya+1]=ab.y,ub[Ya+ -2]=ab.z,Ya+=3;k.bindBuffer(k.ARRAY_BUFFER,ra.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,ub,xa)}if(mc&&Tc&&xb){F=0;for(Z=sa.length;Fua;ua++)ic=kb[ua],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;F=0;for(Z=ta.length;Fua;ua++)ic=kb[ua],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;0ua;ua++)jc=lb[ua],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;F=0;for(Z=ta.length;Fua;ua++)jc=lb[ua],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;0va;va++)Zb=db[va],ub[Ya]=Zb.x,ub[Ya+1]=Zb.y,ub[Ya+2]=Zb.z,Ya+=3;else for(va=0;3>va;va++)ub[Ya]=ab.x,ub[Ya+1]=ab.y,ub[Ya+2]=ab.z,Ya+=3;F=0;for(Z=ta.length;Fva;va++)Zb=db[va],ub[Ya]=Zb.x,ub[Ya+1]=Zb.y,ub[Ya+2]=Zb.z,Ya+=3;else for(va=0;4>va;va++)ub[Ya]=ab.x,ub[Ya+1]=ab.y,ub[Ya+ +2]=ab.z,Ya+=3;k.bindBuffer(k.ARRAY_BUFFER,ra.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,ub,Aa)}if(mc&&Tc&&xb){F=0;for(Z=sa.length;Fva;va++)ic=kb[va],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;F=0;for(Z=ta.length;Fva;va++)ic=kb[va],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;0va;va++)jc=lb[va],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;F=0;for(Z=ta.length;Fva;va++)jc=lb[va],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=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),P(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=lb,a=Ka,d=Ra,e=Ha);b!==Y&&(k.bindFramebuffer(k.FRAMEBUFFER, -b),k.viewport(d,e,c,a),Y=b);$a=c;db=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; +a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!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=lb,a=La,d=Ra,e=Ia);b!==da&&(k.bindFramebuffer(k.FRAMEBUFFER, +b),k.viewport(d,e,c,a),da=b);$a=c;db=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}; THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.anisotropy=this.anisotropy;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;return a}; @@ -550,7 +550,7 @@ THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size: c+d;m=b[a++]*c;o=b[a++]*c+d;p=b[a++]*c;e.quadraticCurveTo(o,p,i,m);if(g=f[f.length-1]){n=g.x;l=g.y;g=1;for(h=this.divisions;g<=h;g++){var A=g/h;THREE.Shape.Utils.b2(A,n,o,i);THREE.Shape.Utils.b2(A,l,p,m)}}break;case "b":i=b[a++]*c+d;m=b[a++]*c;o=b[a++]*c+d;p=b[a++]*-c;q=b[a++]*c+d;t=b[a++]*-c;e.bezierCurveTo(i,m,o,p,q,t);if(g=f[f.length-1]){n=g.x;l=g.y;g=1;for(h=this.divisions;g<=h;g++){A=g/h;THREE.Shape.Utils.b3(A,n,o,q,i);THREE.Shape.Utils.b3(A,l,p,t,m)}}}}}return{offset:r.ha*c,path:e}}}}; THREE.FontUtils.generateShapes=function(a,b){var b=b||{},c=b.curveSegments!==void 0?b.curveSegments:4,d=b.font!==void 0?b.font:"helvetiker",e=b.weight!==void 0?b.weight:"normal",f=b.style!==void 0?b.style:"normal";THREE.FontUtils.size=b.size!==void 0?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f;c=THREE.FontUtils.drawText(a).paths;d=[];e=0;for(f=c.length;e0)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 o=i,p=j,q=m,t=e,r=g,A=void 0,u=void 0,s=void 0,D=void 0,z=void 0, -w=void 0,v=void 0,C=void 0,E=void 0,u=l[r[o]].x,s=l[r[o]].y,D=l[r[p]].x,z=l[r[p]].y,w=l[r[q]].x,v=l[r[q]].y;if(1E-10>(D-u)*(v-s)-(z-s)*(w-u))l=false;else{for(A=0;A=0&&B>=0&&I>=0){l=false;break a}}l=true}}if(l){f.push([a[g[i]], +w=void 0,v=void 0,C=void 0,E=void 0,u=l[r[o]].x,s=l[r[o]].y,D=l[r[p]].x,z=l[r[p]].y,w=l[r[q]].x,v=l[r[q]].y;if(1E-10>(D-u)*(v-s)-(z-s)*(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;m0?1:-1;for(e=0;e0?1:-1;for(e=0;ea&&(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(N=c.length;--N>=0;){e=N;f=N-1;f<0&&(f= -c.length-1);for(var g=0,h=l+m*2,g=0;ga&&(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(P=c.length;--P>=0;){e=P;f=P-1;f<0&&(f= +c.length-1);for(var g=0,h=l+m*2,g=0;g=0;I--){w=I/m;L=i*(1-w);G=j*Math.sin(w*Math.PI/2);N=0;for(Q=B.length;N=0;H--){w=H/m;O=i*(1-w);I=j*Math.sin(w*Math.PI/2);P=0;for(S=B.length;P=q&&a0,"an edge without faces?!");if(E.length==1){w.addSelf(o[K]);w.addSelf(o[B]);w.multiplyScalar(0.5)}else{w.addSelf(t[v]);w.addSelf(t[P]);w.addSelf(o[K]);w.addSelf(o[B]);w.multiplyScalar(0.25)}r[s]= -q+p.length+D;h.push(w);D++;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[s],v,w);if(E.length>=2){b(E.length==2,"did we plan for more than 2 edges?");w=new THREE.UV;w.u=f(K,P).u+f(B,P).u;w.v=f(K,P).v+f(B,P).v;w.u=w.u/2;w.v=w.v/2;g(r[s],P,w)}}}c("-- Step 2 done");var L,O;w=["123","12","2","23"];P=["123","23","3","31"];var I=["123","31","1","12"],G=["1234","12","2","23"],R=["1234","23","3","34"],S=["1234","34","4","41"],M=["1234","41","1","12"];s= -0;for(D=t.length;s0,"an edge without faces?!");if(E.length==1){w.addSelf(o[J]);w.addSelf(o[B]);w.multiplyScalar(0.5)}else{w.addSelf(t[v]);w.addSelf(t[L]);w.addSelf(o[J]);w.addSelf(o[B]);w.multiplyScalar(0.25)}r[s]= +q+p.length+D;h.push(w);D++;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(r[s],v,w);if(E.length>=2){b(E.length==2,"did we plan for more than 2 edges?");w=new THREE.UV;w.u=f(J,L).u+f(B,L).u;w.v=f(J,L).v+f(B,L).v;w.u=w.u/2;w.v=w.v/2;g(r[s],L,w)}}}c("-- Step 2 done");var O,N;w=["123","12","2","23"];L=["123","23","3","31"];var H=["123","31","1","12"],I=["1234","12","2","23"],M=["1234","23","3","34"],T=["1234","34","4","41"],R=["1234","41","1","12"];s= +0;for(D=t.length;s0&&E.x0&& -E.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*s;v.y=w;b.uniform3f(H.screenPosition,C.x,C.y,C.z);b.uniform2f(H.scale,v.x,v.y);b.uniform1f(H.rotation,G.rotation);b.uniform1f(H.opacity,G.opacity); -b.uniform3f(H.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)}}}; +"color");l.scale=b.getUniformLocation(m,"scale");l.rotation=b.getUniformLocation(m,"rotation");l.screenPosition=b.getUniformLocation(m,"screenPosition");o=false};this.render=function(a,d,e,r){var a=a.__webglFlares,A=a.length;if(A){var u=new THREE.Vector3,s=r/e,D=e*0.5,z=r*0.5,w=16/r,v=new THREE.Vector2(w*s,w),C=new THREE.Vector3(1,1,0),E=new THREE.Vector2(1,1),G=l,w=n;b.useProgram(m);if(!o){b.enableVertexAttribArray(n.vertex);b.enableVertexAttribArray(n.uv);o=true}b.uniform1i(G.occlusionMap,0);b.uniform1i(G.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,J,H,I;for(L=0;L0&&E.x0&& +E.y0.001&&I.scale>0.001){C.x=I.x;C.y=I.y;C.z=I.z;w=I.size*I.scale/r;v.x=w*s;v.y=w;b.uniform3f(G.screenPosition,C.x,C.y,C.z);b.uniform2f(G.scale,v.x,v.y);b.uniform1f(G.rotation,I.rotation);b.uniform1f(G.opacity,I.opacity); +b.uniform3f(G.color,I.color.r,I.color.g,I.color.b);c.setBlending(I.blending,I.blendEquation,I.blendSrc,I.blendDst);c.setTexture(I.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,o,p,q,t,r,A,u,s,D=[];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(o=m.__lights.length;l