diff --git a/build/three.js b/build/three.js index 1d814aea48127b96c0ca0b7fad36ea34d1c6ed12..3b49c51970553bffb243484f4d77ba4adf8487bd 100644 --- a/build/three.js +++ b/build/three.js @@ -19809,10 +19809,10 @@ THREE.WebGLRenderer = function ( parameters ) { var object = event.target; - object.removeEventListener( 'remove', onObjectRemoved ); - object.traverse( function ( child ) { + child.removeEventListener( 'remove', onObjectRemoved ); + removeObject( child ); } ); @@ -22870,12 +22870,6 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( object instanceof THREE.Mesh ) { - if ( object.__webglActive !== undefined ) { - - removeObject( object, scene ); - - } - initGeometryGroups(scene, object, geometry); } else if ( object instanceof THREE.Line ) { diff --git a/build/three.min.js b/build/three.min.js index da469f119350700ecfd80cc02d33aa6ead2b55dc..309fb92d65742c183adb4ac34d31a90d2ec53f33 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -95,15 +95,15 @@ console.error("THREE.Matrix: .makeRotationFromEuler() now expects a Euler rotati b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,m=d*h,n=d*e,b[0]=a-n*c,b[4]=-f*e,b[8]=m+k*c,b[1]=k+m*c,b[5]=f*h,b[9]=n-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,k=f*e,m=c*h,n=c*e,b[0]=g*h,b[4]=m*d-k,b[8]=a*d+n,b[1]=g*e,b[5]=n*d+a,b[9]=k*d-m,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,m=c*g,n=c*d,b[0]=g*h,b[4]=n-a*e,b[8]=m*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+m,b[10]=a-n*e):"XZY"===a.order&&(a=f*g,k=f*d,m=c*g,n=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+n,b[5]=f*h,b[9]=k* e-m,b[2]=m*e-k,b[6]=c*h,b[10]=n*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(a)},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var m=c*h,c=c*k,n=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(n+e);b[4]=m-f;b[8]=c+h;b[1]=m+f;b[5]=1- (a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+n);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3;return function(d,e,f){var g=this.elements;c.subVectors(d,e).normalize();0===c.length()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.length()&&(c.x+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(), -multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],m=c[1],n=c[5],q=c[9],s=c[13],t=c[2],r=c[6],p=c[10],v=c[14],x=c[3],u=c[7],E=c[11],c=c[15],y=d[0],z=d[4],B=d[8],D=d[12],w=d[1],A=d[5],N=d[9],P=d[13],K=d[2],R=d[6],M=d[10],H=d[14],C=d[3], -T=d[7],L=d[11],d=d[15];e[0]=f*y+g*w+h*K+k*C;e[4]=f*z+g*A+h*R+k*T;e[8]=f*B+g*N+h*M+k*L;e[12]=f*D+g*P+h*H+k*d;e[1]=m*y+n*w+q*K+s*C;e[5]=m*z+n*A+q*R+s*T;e[9]=m*B+n*N+q*M+s*L;e[13]=m*D+n*P+q*H+s*d;e[2]=t*y+r*w+p*K+v*C;e[6]=t*z+r*A+p*R+v*T;e[10]=t*B+r*N+p*M+v*L;e[14]=t*D+r*P+p*H+v*d;e[3]=x*y+u*w+E*K+c*C;e[7]=x*z+u*A+E*R+c*T;e[11]=x*B+u*N+E*M+c*L;e[15]=x*D+u*P+E*H+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]= +multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],m=c[1],n=c[5],q=c[9],s=c[13],t=c[2],r=c[6],p=c[10],v=c[14],y=c[3],u=c[7],F=c[11],c=c[15],x=d[0],A=d[4],E=d[8],C=d[12],w=d[1],z=d[5],B=d[9],P=d[13],R=d[2],Q=d[6],N=d[10],K=d[14],D=d[3], +S=d[7],J=d[11],d=d[15];e[0]=f*x+g*w+h*R+k*D;e[4]=f*A+g*z+h*Q+k*S;e[8]=f*E+g*B+h*N+k*J;e[12]=f*C+g*P+h*K+k*d;e[1]=m*x+n*w+q*R+s*D;e[5]=m*A+n*z+q*Q+s*S;e[9]=m*E+n*B+q*N+s*J;e[13]=m*C+n*P+q*K+s*d;e[2]=t*x+r*w+p*R+v*D;e[6]=t*A+r*z+p*Q+v*S;e[10]=t*E+r*B+p*N+v*J;e[14]=t*C+r*P+p*K+v*d;e[3]=y*x+u*w+F*R+c*D;e[7]=y*A+u*z+F*Q+c*S;e[11]=y*E+u*B+F*N+c*J;e[15]=y*C+u*P+F*K+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(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){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."); return a.applyProjection(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToVector3Array:function(){var a=new THREE.Vector3;return function(b,c,d){void 0===c&&(c=0);void 0===d&&(d= b.length);for(var e=0;ee&&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.x&&-1<=c.y&&1>=c.y&&-1<=c.z&&1>=c.z},m=function(a, -b,c){if(!0===a.visible||!0===b.visible||!0===c.visible)return!0;L[0]=a.positionScreen;L[1]=b.positionScreen;L[2]=c.positionScreen;return C.isIntersectionBox(T.setFromPoints(L))},q=function(a,b,c){return 0>(c.positionScreen.x-a.positionScreen.x)*(b.positionScreen.y-a.positionScreen.y)-(c.positionScreen.y-a.positionScreen.y)*(b.positionScreen.x-a.positionScreen.x)};return{setObject:function(a){f=a;g=f.material;h.getNormalMatrix(f.matrixWorld);d.length=0;e.length=0},projectVertex:k,checkTriangleVisibility:m, -checkBackfaceCulling:q,pushVertex:function(b,c,d){n=a();n.position.set(b,c,d);k(n)},pushNormal:function(a,b,c){d.push(a,b,c)},pushUv:function(a,b){e.push(a,b)},pushLine:function(a,b){var d=s[a],e=s[b];u=c();u.id=f.id;u.v1.copy(d);u.v2.copy(e);u.z=(d.positionScreen.z+e.positionScreen.z)/2;u.material=f.material;N.elements.push(u)},pushTriangle:function(a,c,k){var n=s[a],p=s[c],t=s[k];if(!1!==m(n,p,t)&&(g.side===THREE.DoubleSide||!0===q(n,p,t))){r=b();r.id=f.id;r.v1.copy(n);r.v2.copy(p);r.v3.copy(t); -r.z=(n.positionScreen.z+p.positionScreen.z+t.positionScreen.z)/3;for(n=0;3>n;n++)p=3*arguments[n],t=r.vertexNormalsModel[n],t.set(d[p],d[p+1],d[p+2]),t.applyMatrix3(h).normalize(),p=2*arguments[n],r.uvs[n].set(e[p],e[p+1]);r.vertexNormalsLength=3;r.material=f.material;N.elements.push(r)}}}};this.projectScene=function(n,t,v,x){D=E=p=0;N.elements.length=0;!0===n.autoUpdate&&n.updateMatrixWorld();void 0===t.parent&&t.updateMatrixWorld();V.copy(t.matrixWorldInverse.getInverse(t.matrixWorld));J.multiplyMatrices(t.projectionMatrix, -V);I.setFromMatrix(J);h=0;N.objects.length=0;N.lights.length=0;n.traverseVisible(function(a){if(a instanceof THREE.Light)N.lights.push(a);else if((a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Sprite)&&!1!==a.material.visible&&(!1===a.frustumCulled||!0===I.intersectsObject(a))){if(h===m){var b=new THREE.RenderableObject;k.push(b);m++;h++;g=b}else g=k[h++];g.id=a.id;g.object=a;null!==a.renderDepth?g.z=a.renderDepth:(M.setFromMatrixPosition(a.matrixWorld),M.applyProjection(J), -g.z=M.z);N.objects.push(g)}});!0===v&&N.objects.sort(e);n=0;for(v=N.objects.length;nva;va++)r.uvs[va].copy(Ha[va]); -r.color=qa.color;r.material=cb;r.z=(pa.positionScreen.z+Ea.positionScreen.z+La.positionScreen.z)/3;N.elements.push(r)}}}}}else if(y instanceof THREE.Line)if(w instanceof THREE.BufferGeometry){if(z=w.attributes,void 0!==z.position){A=z.position.array;w=0;for(G=A.length;w=H.z&&(B=d(),B.id=y.id,B.x=H.x*w,B.y=H.y*w,B.z=H.z,B.object=y,B.rotation=y.rotation,B.scale.x=y.scale.x*Math.abs(B.x-(H.x+t.projectionMatrix.elements[0])/(H.w+t.projectionMatrix.elements[12])),B.scale.y=y.scale.y* -Math.abs(B.y-(H.y+t.projectionMatrix.elements[5])/(H.w+t.projectionMatrix.elements[13])),B.material=y.material,N.elements.push(B)))}!0===x&&N.elements.sort(e);return N}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0}; +THREE.Projector=function(){function a(){if(q===t){var a=new THREE.RenderableVertex;s.push(a);t++;q++;return a}return s[q++]}function b(){if(p===y){var a=new THREE.RenderableFace;v.push(a);y++;p++;return a}return v[p++]}function c(){if(F===A){var a=new THREE.RenderableLine;x.push(a);A++;F++;return a}return x[F++]}function d(){if(C===z){var a=new THREE.RenderableSprite;w.push(a);z++;C++;return a}return w[C++]}function e(a,b){return a.z!==b.z?b.z-a.z:a.id!==b.id?a.id-b.id:0}function f(a,b){var c=0,d= +1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&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.x&&-1<=c.y&&1>=c.y&&-1<=c.z&&1>=c.z},m=function(a, +b,c){if(!0===a.visible||!0===b.visible||!0===c.visible)return!0;J[0]=a.positionScreen;J[1]=b.positionScreen;J[2]=c.positionScreen;return D.isIntersectionBox(S.setFromPoints(J))},q=function(a,b,c){return 0>(c.positionScreen.x-a.positionScreen.x)*(b.positionScreen.y-a.positionScreen.y)-(c.positionScreen.y-a.positionScreen.y)*(b.positionScreen.x-a.positionScreen.x)};return{setObject:function(a){f=a;g=f.material;h.getNormalMatrix(f.matrixWorld);d.length=0;e.length=0},projectVertex:k,checkTriangleVisibility:m, +checkBackfaceCulling:q,pushVertex:function(b,c,d){n=a();n.position.set(b,c,d);k(n)},pushNormal:function(a,b,c){d.push(a,b,c)},pushUv:function(a,b){e.push(a,b)},pushLine:function(a,b){var d=s[a],e=s[b];u=c();u.id=f.id;u.v1.copy(d);u.v2.copy(e);u.z=(d.positionScreen.z+e.positionScreen.z)/2;u.material=f.material;B.elements.push(u)},pushTriangle:function(a,c,k){var n=s[a],p=s[c],t=s[k];if(!1!==m(n,p,t)&&(g.side===THREE.DoubleSide||!0===q(n,p,t))){r=b();r.id=f.id;r.v1.copy(n);r.v2.copy(p);r.v3.copy(t); +r.z=(n.positionScreen.z+p.positionScreen.z+t.positionScreen.z)/3;for(n=0;3>n;n++)p=3*arguments[n],t=r.vertexNormalsModel[n],t.set(d[p],d[p+1],d[p+2]),t.applyMatrix3(h).normalize(),p=2*arguments[n],r.uvs[n].set(e[p],e[p+1]);r.vertexNormalsLength=3;r.material=f.material;B.elements.push(r)}}}};this.projectScene=function(n,t,v,y){C=F=p=0;B.elements.length=0;!0===n.autoUpdate&&n.updateMatrixWorld();void 0===t.parent&&t.updateMatrixWorld();V.copy(t.matrixWorldInverse.getInverse(t.matrixWorld));L.multiplyMatrices(t.projectionMatrix, +V);I.setFromMatrix(L);h=0;B.objects.length=0;B.lights.length=0;n.traverseVisible(function(a){if(a instanceof THREE.Light)B.lights.push(a);else if((a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Sprite)&&!1!==a.material.visible&&(!1===a.frustumCulled||!0===I.intersectsObject(a))){if(h===m){var b=new THREE.RenderableObject;k.push(b);m++;h++;g=b}else g=k[h++];g.id=a.id;g.object=a;null!==a.renderDepth?g.z=a.renderDepth:(N.setFromMatrixPosition(a.matrixWorld),N.applyProjection(L), +g.z=N.z);B.objects.push(g)}});!0===v&&B.objects.sort(e);n=0;for(v=B.objects.length;nya;ya++)r.uvs[ya].copy(za[ya]); +r.color=ea.color;r.material=bb;r.z=(xa.positionScreen.z+Fa.positionScreen.z+Ha.positionScreen.z)/3;B.elements.push(r)}}}}}else if(x instanceof THREE.Line)if(w instanceof THREE.BufferGeometry){if(A=w.attributes,void 0!==A.position){G=A.position.array;w=0;for(z=G.length;w=K.z&&(E=d(),E.id=x.id,E.x=K.x*w,E.y=K.y*w,E.z=K.z,E.object=x,E.rotation=x.rotation,E.scale.x=x.scale.x*Math.abs(E.x-(K.x+t.projectionMatrix.elements[0])/(K.w+t.projectionMatrix.elements[12])),E.scale.y=x.scale.y* +Math.abs(E.y-(K.y+t.projectionMatrix.elements[5])/(K.w+t.projectionMatrix.elements[13])),E.material=x.material,B.elements.push(E)))}!0===y&&B.elements.sort(e);return B}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0}; THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.materialIndex=this.materialIndex;for(var b=0,c=this.vertexNormals.length;bG?-1:1;h[4*a]=Na.x;h[4*a+1]=Na.y;h[4*a+2]=Na.z;h[4*a+3]=ab}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 c=this.attributes.index.array,d=this.attributes.position.array,e=this.attributes.normal.array,f=this.attributes.uv.array,g=d.length/3;void 0===this.attributes.tangent&&this.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*g),4));for(var h=this.attributes.tangent.array,k=[],m=[],n=0;nSa?-1:1;h[4*a]=La.x;h[4*a+1]=La.y;h[4*a+2]=La.z;h[4*a+3]=oa}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 c=this.attributes.index.array,d=this.attributes.position.array,e=this.attributes.normal.array,f=this.attributes.uv.array,g=d.length/3;void 0===this.attributes.tangent&&this.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*g),4));for(var h=this.attributes.tangent.array,k=[],m=[],n=0;np;p++)r=a[3*c+p],-1==s[r]?(q[2*p]=r,q[2*p+1]=-1,n++):s[r]k.index+b)for(k={start:f,count:0,index:g},h.push(k), n=0;6>n;n+=2)p=q[n+1],-1n;n+=2)r=q[n],p=q[n+1],-1===p&&(p=g++),s[r]=p,t[p]=r,e[f++]=p-k.index,k.count++}this.reorderBuffers(e,t,g);return this.offsets=h},merge:function(){console.log("BufferGeometry.merge(): TODO")},normalizeNormals:function(){for(var a=this.attributes.normal.array,b,c,d,e=0,f=a.length;ed?-1:1,e.vertexTangents[c]=new THREE.Vector4(y.x, -y.y,y.z,d);this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;cd?-1:1,e.vertexTangents[c]=new THREE.Vector4(x.x, +x.y,x.z,d);this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;cd;d++)if(e[d]==e[(d+1)%3]){a.push(f);break}for(f=a.length-1;0<=f;f--)for(e=a[f],this.faces.splice(e,1),c=0,g=this.faceVertexUvs.length;cc&&(h[f].counter+=1,g=h[f].hash+"_"+h[f].counter,g in this.geometryGroups||(k={id:a++,faces3:[],materialIndex:f,vertices:0,numMorphTargets:m,numMorphNormals:n},this.geometryGroups[g]=k,this.geometryGroupsList.push(k))),this.geometryGroups[g].faces3.push(d),this.geometryGroups[g].vertices+=3}}(),toJSON:function(){function a(a,b,c){return c?a|1<a.opacity)h.transparent=a.transparent;void 0!==a.depthTest&&(h.depthTest=a.depthTest);void 0!==a.depthWrite&&(h.depthWrite=a.depthWrite);void 0!==a.visible&&(h.visible=a.visible);void 0!==a.flipSided&&(h.side=THREE.BackSide);void 0!==a.doubleSided&&(h.side=THREE.DoubleSide);void 0!==a.wireframe&&(h.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"=== a.vertexColors?h.vertexColors=THREE.FaceColors:a.vertexColors&&(h.vertexColors=THREE.VertexColors));a.colorDiffuse?h.color=e(a.colorDiffuse):a.DbgColor&&(h.color=a.DbgColor);a.colorSpecular&&(h.specular=e(a.colorSpecular));a.colorAmbient&&(h.ambient=e(a.colorAmbient));a.colorEmissive&&(h.emissive=e(a.colorEmissive));a.transparency&&(h.opacity=a.transparency);a.specularCoef&&(h.shininess=a.specularCoef);a.mapDiffuse&&b&&d(h,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap, a.mapDiffuseAnisotropy);a.mapLight&&b&&d(h,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&d(h,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&d(h,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&d(h,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap,a.mapSpecularAnisotropy);a.mapAlpha&& @@ -272,10 +272,10 @@ THREE.ImageLoader.prototype={constructor:THREE.ImageLoader,load:function(a,b,c,d a}};THREE.JSONLoader=function(a){THREE.Loader.call(this,a);this.withCredentials=!1};THREE.JSONLoader.prototype=Object.create(THREE.Loader.prototype);THREE.JSONLoader.prototype.load=function(a,b,c){c=c&&"string"===typeof c?c:this.extractUrlBase(a);this.onLoadStart();this.loadAjaxJSON(this,a,b,c)}; THREE.JSONLoader.prototype.loadAjaxJSON=function(a,b,c,d,e){var f=new XMLHttpRequest,g=0;f.onreadystatechange=function(){if(f.readyState===f.DONE)if(200===f.status||0===f.status){if(f.responseText){var h=JSON.parse(f.responseText);if(void 0!==h.metadata&&"scene"===h.metadata.type){console.error('THREE.JSONLoader: "'+b+'" seems to be a Scene. Use THREE.SceneLoader instead.');return}h=a.parse(h,d);c(h.geometry,h.materials)}else console.error('THREE.JSONLoader: "'+b+'" seems to be unreachable or the file is empty.'); a.onLoadComplete()}else console.error("THREE.JSONLoader: Couldn't load \""+b+'" ('+f.status+")");else f.readyState===f.LOADING?e&&(0===g&&(g=f.getResponseHeader("Content-Length")),e({total:g,loaded:f.responseText.length})):f.readyState===f.HEADERS_RECEIVED&&void 0!==e&&(g=f.getResponseHeader("Content-Length"))};f.open("GET",b,!0);f.withCredentials=this.withCredentials;f.send(null)}; -THREE.JSONLoader.prototype.parse=function(a,b){var c=new THREE.Geometry,d=void 0!==a.scale?1/a.scale:1;(function(b){var d,g,h,k,m,n,q,s,t,r,p,v,x,u=a.faces;n=a.vertices;var E=a.normals,y=a.colors,z=0;if(void 0!==a.uvs){for(d=0;dg;g++)s=u[k++],x=v[2*s],s=v[2*s+1],x=new THREE.Vector2(x,s),2!==g&&c.faceVertexUvs[d][h].push(x),0!==g&&c.faceVertexUvs[d][h+1].push(x);q&&(q=3*u[k++],t.normal.set(E[q++],E[q++],E[q]),p.normal.copy(t.normal));if(r)for(d=0;4>d;d++)q=3*u[k++],r=new THREE.Vector3(E[q++], -E[q++],E[q]),2!==d&&t.vertexNormals.push(r),0!==d&&p.vertexNormals.push(r);n&&(n=u[k++],n=y[n],t.color.setHex(n),p.color.setHex(n));if(b)for(d=0;4>d;d++)n=u[k++],n=y[n],2!==d&&t.vertexColors.push(new THREE.Color(n)),0!==d&&p.vertexColors.push(new THREE.Color(n));c.faces.push(t);c.faces.push(p)}else{t=new THREE.Face3;t.a=u[k++];t.b=u[k++];t.c=u[k++];h&&(h=u[k++],t.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)s=u[k++],x=v[2*s],s=v[2*s+1], -x=new THREE.Vector2(x,s),c.faceVertexUvs[d][h].push(x);q&&(q=3*u[k++],t.normal.set(E[q++],E[q++],E[q]));if(r)for(d=0;3>d;d++)q=3*u[k++],r=new THREE.Vector3(E[q++],E[q++],E[q]),t.vertexNormals.push(r);n&&(n=u[k++],t.color.setHex(y[n]));if(b)for(d=0;3>d;d++)n=u[k++],t.vertexColors.push(new THREE.Color(y[n]));c.faces.push(t)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dg;g++)s=u[k++],y=v[2*s],s=v[2*s+1],y=new THREE.Vector2(y,s),2!==g&&c.faceVertexUvs[d][h].push(y),0!==g&&c.faceVertexUvs[d][h+1].push(y);q&&(q=3*u[k++],t.normal.set(F[q++],F[q++],F[q]),p.normal.copy(t.normal));if(r)for(d=0;4>d;d++)q=3*u[k++],r=new THREE.Vector3(F[q++], +F[q++],F[q]),2!==d&&t.vertexNormals.push(r),0!==d&&p.vertexNormals.push(r);n&&(n=u[k++],n=x[n],t.color.setHex(n),p.color.setHex(n));if(b)for(d=0;4>d;d++)n=u[k++],n=x[n],2!==d&&t.vertexColors.push(new THREE.Color(n)),0!==d&&p.vertexColors.push(new THREE.Color(n));c.faces.push(t);c.faces.push(p)}else{t=new THREE.Face3;t.a=u[k++];t.b=u[k++];t.c=u[k++];h&&(h=u[k++],t.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)s=u[k++],y=v[2*s],s=v[2*s+1], +y=new THREE.Vector2(y,s),c.faceVertexUvs[d][h].push(y);q&&(q=3*u[k++],t.normal.set(F[q++],F[q++],F[q]));if(r)for(d=0;3>d;d++)q=3*u[k++],r=new THREE.Vector3(F[q++],F[q++],F[q]),t.vertexNormals.push(r);n&&(n=u[k++],t.color.setHex(x[n]));if(b)for(d=0;3>d;d++)n=u[k++],t.vertexColors.push(new THREE.Color(x[n]));c.faces.push(t)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dg.far||h.push({distance:B,point:z,face:new THREE.Face3(n,q,s,THREE.Triangle.normal(d,e,f)),faceIndex:null,object:this})}}}else for(p=n.position.array,r=k=0,y=p.length;kg.far||h.push({distance:B,point:z,face:new THREE.Face3(n,q,s,THREE.Triangle.normal(d,e,f)),faceIndex:null,object:this}))}}else if(k instanceof THREE.Geometry)for(r=this.material instanceof THREE.MeshFaceMaterial,p=!0===r?this.material.materials:null,t=g.precision,v=k.vertices,x=0,u=k.faces.length;xg.far||h.push({distance:B,point:z,face:E,faceIndex:x,object:this}))}}}();THREE.Mesh.prototype.clone=function(a,b){void 0===a&&(a=new THREE.Mesh(this.geometry,this.material));THREE.Object3D.prototype.clone.call(this,a,b);return a};THREE.Bone=function(a){THREE.Object3D.call(this);this.skin=a};THREE.Bone.prototype=Object.create(THREE.Object3D.prototype); +this.material;if(void 0!==m){var n=k.attributes,q,s,t=g.precision;if(void 0!==n.index){var r=n.index.array,p=n.position.array,v=k.offsets;0===v.length&&(v=[{start:0,count:r.length,index:0}]);for(var y=0,u=v.length;yg.far||h.push({distance:E,point:A,face:new THREE.Face3(n,q,s,THREE.Triangle.normal(d,e,f)),faceIndex:null,object:this})}}}else for(p=n.position.array,r=k=0,x=p.length;kg.far||h.push({distance:E,point:A,face:new THREE.Face3(n,q,s,THREE.Triangle.normal(d,e,f)),faceIndex:null,object:this}))}}else if(k instanceof THREE.Geometry)for(r=this.material instanceof THREE.MeshFaceMaterial,p=!0===r?this.material.materials:null,t=g.precision,v=k.vertices,y=0,u=k.faces.length;yg.far||h.push({distance:E,point:A,face:F,faceIndex:y,object:this}))}}}();THREE.Mesh.prototype.clone=function(a,b){void 0===a&&(a=new THREE.Mesh(this.geometry,this.material));THREE.Object3D.prototype.clone.call(this,a,b);return a};THREE.Bone=function(a){THREE.Object3D.call(this);this.skin=a};THREE.Bone.prototype=Object.create(THREE.Object3D.prototype); THREE.Skeleton=function(a,b,c){this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new THREE.Matrix4;a=a||[];this.bones=a.slice(0);this.useVertexTexture?(this.boneTextureHeight=this.boneTextureWidth=a=256C&&M.clearRect(da.min.x|0,da.min.y|0,da.max.x-da.min.x|0,da.max.y-da.min.y|0),0Q.positionScreen.z||1ca.positionScreen.z||1Ga.positionScreen.z||1=fa||(fa*=aa.intensity,V.add(nb.multiplyScalar(fa)))):aa instanceof THREE.PointLight&&(oa=ta.setFromMatrixPosition(aa.matrixWorld),fa=Y.dot(ta.subVectors(oa,I).normalize()),0>=fa||(fa*=0==aa.distance?1:1-Math.min(I.distanceTo(oa)/aa.distance,1),0!=fa&&(fa*=aa.intensity,V.add(nb.multiplyScalar(fa)))));sa.multiply(G).add(bb);!0===C.wireframe?b(sa,C.wireframeLinewidth,C.wireframeLinecap,C.wireframeLinejoin):c(sa)}else C instanceof -THREE.MeshBasicMaterial||C instanceof THREE.MeshLambertMaterial||C instanceof THREE.MeshPhongMaterial?null!==C.map?C.map.mapping instanceof THREE.UVMapping&&(qa=H.uvs,f(Da,Na,Oa,Ka,la,ab,qa[0].x,qa[0].y,qa[1].x,qa[1].y,qa[2].x,qa[2].y,C.map)):null!==C.envMap?C.envMap.mapping instanceof THREE.SphericalReflectionMapping?(ha.copy(H.vertexNormalsModel[0]).applyMatrix3(Pa),pa=0.5*ha.x+0.5,cb=0.5*ha.y+0.5,ha.copy(H.vertexNormalsModel[1]).applyMatrix3(Pa),Ha=0.5*ha.x+0.5,Ea=0.5*ha.y+0.5,ha.copy(H.vertexNormalsModel[2]).applyMatrix3(Pa), -La=0.5*ha.x+0.5,va=0.5*ha.y+0.5,f(Da,Na,Oa,Ka,la,ab,pa,cb,Ha,Ea,La,va,C.envMap)):C.envMap.mapping instanceof THREE.SphericalRefractionMapping&&(ha.copy(H.vertexNormalsModel[0]).applyMatrix3(Pa),pa=-0.5*ha.x+0.5,cb=-0.5*ha.y+0.5,ha.copy(H.vertexNormalsModel[1]).applyMatrix3(Pa),Ha=-0.5*ha.x+0.5,Ea=-0.5*ha.y+0.5,ha.copy(H.vertexNormalsModel[2]).applyMatrix3(Pa),La=-0.5*ha.x+0.5,va=-0.5*ha.y+0.5,f(Da,Na,Oa,Ka,la,ab,pa,cb,Ha,Ea,La,va,C.envMap)):(sa.copy(C.color),C.vertexColors===THREE.FaceColors&&sa.multiply(H.color), -!0===C.wireframe?b(sa,C.wireframeLinewidth,C.wireframeLinecap,C.wireframeLinejoin):c(sa)):(C instanceof THREE.MeshDepthMaterial?sa.r=sa.g=sa.b=1-p(I.positionScreen.z*I.positionScreen.w,ba.near,ba.far):C instanceof THREE.MeshNormalMaterial?(ha.copy(H.normalModel).applyMatrix3(Pa),sa.setRGB(ha.x,ha.y,ha.z).multiplyScalar(0.5).addScalar(0.5)):sa.setRGB(1,1,1),!0===C.wireframe?b(sa,C.wireframeLinewidth,C.wireframeLinecap,C.wireframeLinejoin):c(sa))}}da.union(xa)}}M.setTransform(1,0,0,1,0,0)}}}; +THREE.CanvasRenderer=function(a){function b(a,b,c,d){m(b);n(c);q(d);s(a.getStyle());N.stroke();ma.expandByScalar(2*b)}function c(a){t(a.getStyle());N.fill()}function d(a){e(a.target)}function e(a){if(!(a instanceof THREE.CompressedTexture)){var b=a.wrapS===THREE.RepeatWrapping,c=a.wrapT===THREE.RepeatWrapping,d=a.image,e=document.createElement("canvas");e.width=d.width;e.height=d.height;var g=e.getContext("2d");g.setTransform(1,0,0,-1,0,d.height);g.drawImage(d,0,0);ib[a.id]=N.createPattern(e,!0=== +b&&!0===c?"repeat":!0===b&&!1===c?"repeat-x":!1===b&&!0===c?"repeat-y":"no-repeat")}}function f(a,b,c,g,f,h,k,m,n,r,s,p,q){if(!(q instanceof THREE.DataTexture)){!1===q.hasEventListener("update",d)&&(void 0!==q.image&&0D&&N.clearRect(ca.min.x|0,ca.min.y|0,ca.max.x-ca.min.x|0,ca.max.y-ca.min.y|0),0$.positionScreen.z||1<$.positionScreen.z)continue;if(-1>aa.positionScreen.z||1sa.positionScreen.z||1=O||(O*=ba.intensity,V.add(ob.multiplyScalar(O)))):ba instanceof THREE.PointLight&&(fa=Oa.setFromMatrixPosition(ba.matrixWorld),O=ra.dot(Oa.subVectors(fa,I).normalize()),0>=O||(O*=0==ba.distance?1:1-Math.min(I.distanceTo(fa)/ba.distance,1),0!=O&&(O*=ba.intensity,V.add(ob.multiplyScalar(O)))));G.multiply(Sa).add(Cb);!0===D.wireframe?b(G,D.wireframeLinewidth,D.wireframeLinecap,D.wireframeLinejoin):c(G)}else D instanceof THREE.MeshBasicMaterial|| +D instanceof THREE.MeshLambertMaterial||D instanceof THREE.MeshPhongMaterial?null!==D.map?D.map.mapping instanceof THREE.UVMapping&&(ea=K.uvs,f(Ia,La,Pa,Ma,na,oa,ea[0].x,ea[0].y,ea[1].x,ea[1].y,ea[2].x,ea[2].y,D.map)):null!==D.envMap?D.envMap.mapping instanceof THREE.SphericalReflectionMapping?(pa.copy(K.vertexNormalsModel[0]).applyMatrix3(Qa),xa=0.5*pa.x+0.5,bb=0.5*pa.y+0.5,pa.copy(K.vertexNormalsModel[1]).applyMatrix3(Qa),za=0.5*pa.x+0.5,Fa=0.5*pa.y+0.5,pa.copy(K.vertexNormalsModel[2]).applyMatrix3(Qa), +Ha=0.5*pa.x+0.5,ya=0.5*pa.y+0.5,f(Ia,La,Pa,Ma,na,oa,xa,bb,za,Fa,Ha,ya,D.envMap)):D.envMap.mapping instanceof THREE.SphericalRefractionMapping&&(pa.copy(K.vertexNormalsModel[0]).applyMatrix3(Qa),xa=-0.5*pa.x+0.5,bb=-0.5*pa.y+0.5,pa.copy(K.vertexNormalsModel[1]).applyMatrix3(Qa),za=-0.5*pa.x+0.5,Fa=-0.5*pa.y+0.5,pa.copy(K.vertexNormalsModel[2]).applyMatrix3(Qa),Ha=-0.5*pa.x+0.5,ya=-0.5*pa.y+0.5,f(Ia,La,Pa,Ma,na,oa,xa,bb,za,Fa,Ha,ya,D.envMap)):(G.copy(D.color),D.vertexColors===THREE.FaceColors&&G.multiply(K.color), +!0===D.wireframe?b(G,D.wireframeLinewidth,D.wireframeLinecap,D.wireframeLinejoin):c(G)):(D instanceof THREE.MeshDepthMaterial?G.r=G.g=G.b=1-p(I.positionScreen.z*I.positionScreen.w,va.near,va.far):D instanceof THREE.MeshNormalMaterial?(pa.copy(K.normalModel).applyMatrix3(Qa),G.setRGB(pa.x,pa.y,pa.z).multiplyScalar(0.5).addScalar(0.5)):G.setRGB(1,1,1),!0===D.wireframe?b(G,D.wireframeLinewidth,D.wireframeLinecap,D.wireframeLinejoin):c(G))}}ca.union(ma)}}N.setTransform(1,0,0,1,0,0)}}}; THREE.ShaderChunk={};THREE.ShaderChunk.alphatest_fragment="#ifdef ALPHATEST\n\n\tif ( gl_FragColor.a < ALPHATEST ) discard;\n\n#endif\n";THREE.ShaderChunk.lights_lambert_vertex="vLightFront = vec3( 0.0 );\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack = vec3( 0.0 );\n\n#endif\n\ntransformedNormal = normalize( transformedNormal );\n\n#if MAX_DIR_LIGHTS > 0\n\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\n\n\tvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\n\tvec3 dirVector = normalize( lDirection.xyz );\n\n\tfloat dotProduct = dot( transformedNormal, dirVector );\n\tvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t#endif\n\n\t#endif\n\n\t#ifdef WRAP_AROUND\n\n\t\tvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\tdirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tdirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n\n\t\t#endif\n\n\t#endif\n\n\tvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n\n\t#endif\n\n}\n\n#endif\n\n#if MAX_POINT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat lDistance = 1.0;\n\t\tif ( pointLightDistance[ i ] > 0.0 )\n\t\t\tlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\n\n\t\tlVector = normalize( lVector );\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\t#ifdef WRAP_AROUND\n\n\t\t\tvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\tpointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tpointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n\n\t\t\t#endif\n\n\t\t#endif\n\n\t\tvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\n\n\t\t#endif\n\n\t}\n\n#endif\n\n#if MAX_SPOT_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n\n\t\tvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\n\t\tvec3 lVector = lPosition.xyz - mvPosition.xyz;\n\n\t\tfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\n\n\t\tif ( spotEffect > spotLightAngleCos[ i ] ) {\n\n\t\t\tspotEffect = max( pow( max( spotEffect, 0.0 ), spotLightExponent[ i ] ), 0.0 );\n\n\t\t\tfloat lDistance = 1.0;\n\t\t\tif ( spotLightDistance[ i ] > 0.0 )\n\t\t\t\tlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\n\n\t\t\tlVector = normalize( lVector );\n\n\t\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\t\t\tvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n\n\t\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\t\tvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\t#ifdef WRAP_AROUND\n\n\t\t\t\tvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\n\t\t\t\tspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n\n\t\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\t\tspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\n\n\t\t\t#ifdef DOUBLE_SIDED\n\n\t\t\t\tvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\n\n\t\t\t#endif\n\n\t\t}\n\n\t}\n\n#endif\n\n#if MAX_HEMI_LIGHTS > 0\n\n\tfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\n\n\t\tvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\n\t\tvec3 lVector = normalize( lDirection.xyz );\n\n\t\tfloat dotProduct = dot( transformedNormal, lVector );\n\n\t\tfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\n\t\tfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\n\n\t\tvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n\n\t\t#endif\n\n\t}\n\n#endif\n\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\n\n#ifdef DOUBLE_SIDED\n\n\tvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\n\n#endif"; THREE.ShaderChunk.map_particle_pars_fragment="#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif";THREE.ShaderChunk.default_vertex="vec4 mvPosition;\n\n#ifdef USE_SKINNING\n\n\tmvPosition = modelViewMatrix * skinned;\n\n#endif\n\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\n\n\tmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n\n#endif\n\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\n\n\tmvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n#endif\n\ngl_Position = projectionMatrix * mvPosition;"; THREE.ShaderChunk.map_pars_fragment="#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP )\n\n\tvarying vec2 vUv;\n\n#endif\n\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif";THREE.ShaderChunk.skinnormal_vertex="#ifdef USE_SKINNING\n\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\n\t#ifdef USE_MORPHNORMALS\n\n\tvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n\n\t#else\n\n\tvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n\n\t#endif\n\n#endif\n"; @@ -463,134 +463,134 @@ THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform sa THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")}}; THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var g=d.attributes[e];if(!g.__webglInitialized||g.createUniqueBuffers){g.__webglInitialized=!0;var f=1;"v2"===g.type?f=2:"v3"===g.type?f=3:"v4"===g.type?f=4:"c"===g.type&&(f=3);g.size=f;g.array=new Float32Array(c*f);g.buffer=l.createBuffer();g.buffer.belongsToAttribute=e;g.needsUpdate=!0}a.__webglCustomAttributesList.push(g)}}} function c(a,b){var c=b.geometry,e=a.faces3,g=3*e.length,f=1*e.length,h=3*e.length,e=d(b,a);a.__vertexArray=new Float32Array(3*g);a.__normalArray=new Float32Array(3*g);a.__colorArray=new Float32Array(3*g);a.__uvArray=new Float32Array(2*g);1Ra;Ra++)Ia=ca[Ra],db[qb]=Ia.x,db[qb+1]=Ia.y,db[qb+2]=Ia.z,qb+=3;else for(Ra=0;3>Ra;Ra++)db[qb]=Da.x,db[qb+1]=Da.y,db[qb+2]=Da.z,qb+=3;l.bindBuffer(l.ARRAY_BUFFER,K.__webglNormalBuffer);l.bufferData(l.ARRAY_BUFFER,db,M)}if(mb&&fb){U=0;for(J=W.length;URa;Ra++)La=fa[Ra],Hb[nb]=La.x,Hb[nb+1]=La.y,nb+=2;0Ra;Ra++)ta=qa[Ra],Ib[Fb]=ta.x,Ib[Fb+1]=ta.y,Fb+=2;0gb;gb++)Qb[gb]=G.autoScaleCubemaps&&!$b?M(Ua.image[gb],Mc):Ua.image[gb];var Ba=Qb[0],ac=THREE.Math.isPowerOfTwo(Ba.width)&&THREE.Math.isPowerOfTwo(Ba.height),Db=L(Ua.format),Vb=L(Ua.type);R(l.TEXTURE_CUBE_MAP, -Ua,ac);for(gb=0;6>gb;gb++)if($b)for(var vb,bc=Qb[gb].mipmaps,ua=0,fc=bc.length;ua=xc&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+xc);Ha+=1;return a}function w(a,b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse, -a.matrixWorld);a._normalMatrix.getNormalMatrix(a._modelViewMatrix)}function A(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function N(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function P(a){a!==ha&&(l.lineWidth(a),ha=a)}function K(a,b,c){pb!==a&&(a?l.enable(l.POLYGON_OFFSET_FILL):l.disable(l.POLYGON_OFFSET_FILL),pb=a);!a||ta===b&&ka===c||(l.polygonOffset(b,c),ta=b,ka=c)}function R(a,b,c){c?(l.texParameteri(a,l.TEXTURE_WRAP_S,L(b.wrapS)),l.texParameteri(a,l.TEXTURE_WRAP_T,L(b.wrapT)), -l.texParameteri(a,l.TEXTURE_MAG_FILTER,L(b.magFilter)),l.texParameteri(a,l.TEXTURE_MIN_FILTER,L(b.minFilter))):(l.texParameteri(a,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(a,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(a,l.TEXTURE_MAG_FILTER,T(b.magFilter)),l.texParameteri(a,l.TEXTURE_MIN_FILTER,T(b.minFilter)));zb&&b.type!==THREE.FloatType&&(1b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.log("THREE.WebGLRenderer:",a,"is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height+".");return d}return a}function H(a,b){l.bindRenderbuffer(l.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(l.renderbufferStorage(l.RENDERBUFFER, -l.DEPTH_COMPONENT16,b.width,b.height),l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_ATTACHMENT,l.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(l.renderbufferStorage(l.RENDERBUFFER,l.DEPTH_STENCIL,b.width,b.height),l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_STENCIL_ATTACHMENT,l.RENDERBUFFER,a)):l.renderbufferStorage(l.RENDERBUFFER,l.RGBA4,b.width,b.height)}function C(a){a instanceof THREE.WebGLRenderTargetCube?(l.bindTexture(l.TEXTURE_CUBE_MAP,a.__webglTexture),l.generateMipmap(l.TEXTURE_CUBE_MAP), -l.bindTexture(l.TEXTURE_CUBE_MAP,null)):(l.bindTexture(l.TEXTURE_2D,a.__webglTexture),l.generateMipmap(l.TEXTURE_2D),l.bindTexture(l.TEXTURE_2D,null))}function T(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?l.NEAREST:l.LINEAR}function L(a){if(a===THREE.RepeatWrapping)return l.REPEAT;if(a===THREE.ClampToEdgeWrapping)return l.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return l.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return l.NEAREST; -if(a===THREE.NearestMipMapNearestFilter)return l.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return l.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return l.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return l.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return l.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return l.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return l.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return l.UNSIGNED_SHORT_5_5_5_1; -if(a===THREE.UnsignedShort565Type)return l.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return l.BYTE;if(a===THREE.ShortType)return l.SHORT;if(a===THREE.UnsignedShortType)return l.UNSIGNED_SHORT;if(a===THREE.IntType)return l.INT;if(a===THREE.UnsignedIntType)return l.UNSIGNED_INT;if(a===THREE.FloatType)return l.FLOAT;if(a===THREE.AlphaFormat)return l.ALPHA;if(a===THREE.RGBFormat)return l.RGB;if(a===THREE.RGBAFormat)return l.RGBA;if(a===THREE.LuminanceFormat)return l.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return l.LUMINANCE_ALPHA; -if(a===THREE.AddEquation)return l.FUNC_ADD;if(a===THREE.SubtractEquation)return l.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return l.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return l.ZERO;if(a===THREE.OneFactor)return l.ONE;if(a===THREE.SrcColorFactor)return l.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return l.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return l.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return l.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return l.DST_ALPHA; -if(a===THREE.OneMinusDstAlphaFactor)return l.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return l.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return l.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return l.SRC_ALPHA_SATURATE;if(void 0!==sb){if(a===THREE.RGB_S3TC_DXT1_Format)return sb.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return sb.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return sb.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return sb.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0} -console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var V=void 0!==a.canvas?a.canvas:document.createElement("canvas"),J=void 0!==a.context?a.context:null,Y=void 0!==a.precision?a.precision:"highp",aa=void 0!==a.alpha?a.alpha:!1,na=void 0!==a.depth?a.depth:!0,I=void 0!==a.stencil?a.stencil:!0,ba=void 0!==a.antialias?a.antialias:!1,Q=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,ca=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,Ga=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer: -!1,Da=new THREE.Color(0),Na=0,Oa=[],Ka={},la=[],ab=[],sa=[];this.domElement=V;this.context=null;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.gammaOutput=this.gammaInput=!1;this.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade= -this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var G=this,bb=[],nb=null,ob=null,qa=-1,pa=null,cb=null,Ha=0,Ea=-1,La=-1,va=-1,ya=-1,da=-1,xa=-1,Qa=-1,Va=-1,pb=null,ta=null,ka=null,ha=null,Pa=0,Tb=0,Mb=V.width,Nb=V.height,Zb=0,jc=0,tb=new Uint8Array(16),wb=new Uint8Array(16),zc=new THREE.Frustum,tc=new THREE.Matrix4, -Ac=new THREE.Matrix4,oa=new THREE.Vector3,fa=new THREE.Vector3,Ub=!0,kc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},l,Eb,Ab,zb,sb,Bb;(function(){try{var a={alpha:aa,depth:na,stencil:I,antialias:ba,premultipliedAlpha:Q,preserveDrawingBuffer:ca};l=J||V.getContext("webgl",a)||V.getContext("experimental-webgl", -a);if(null===l)throw"Error creating WebGL context.";}catch(b){console.error(b)}Eb=l.getExtension("OES_texture_float");l.getExtension("OES_texture_float_linear");Ab=l.getExtension("OES_standard_derivatives");zb=l.getExtension("EXT_texture_filter_anisotropic")||l.getExtension("MOZ_EXT_texture_filter_anisotropic")||l.getExtension("WEBKIT_EXT_texture_filter_anisotropic");sb=l.getExtension("WEBGL_compressed_texture_s3tc")||l.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||l.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"); -Bb=l.getExtension("OES_element_index_uint");null===Eb&&console.log("THREE.WebGLRenderer: Float textures not supported.");null===Ab&&console.log("THREE.WebGLRenderer: Standard derivatives not supported.");null===zb&&console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");null===sb&&console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");null===Bb&&console.log("THREE.WebGLRenderer: elementindex as unsigned integer not supported.");void 0===l.getShaderPrecisionFormat&& -(l.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});Ga&&l.getExtension("EXT_frag_depth")})();l.clearColor(0,0,0,1);l.clearDepth(1);l.clearStencil(0);l.enable(l.DEPTH_TEST);l.depthFunc(l.LEQUAL);l.frontFace(l.CCW);l.cullFace(l.BACK);l.enable(l.CULL_FACE);l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA);l.viewport(Pa,Tb,Mb,Nb);l.clearColor(Da.r,Da.g,Da.b,Na);this.context=l;var xc=l.getParameter(l.MAX_TEXTURE_IMAGE_UNITS),Nc= -l.getParameter(l.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Oc=l.getParameter(l.MAX_TEXTURE_SIZE),Mc=l.getParameter(l.MAX_CUBE_MAP_TEXTURE_SIZE),yc=zb?l.getParameter(zb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,rc=0b;b++)l.deleteFramebuffer(a.__webglFramebuffer[b]),l.deleteRenderbuffer(a.__webglRenderbuffer[b]);else l.deleteFramebuffer(a.__webglFramebuffer),l.deleteRenderbuffer(a.__webglRenderbuffer);G.info.memory.textures--},qc=function(a){a=a.target;a.removeEventListener("dispose",qc);pc(a)},Kc=function(a){void 0!==a.__webglVertexBuffer&&l.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&l.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&&l.deleteBuffer(a.__webglTangentBuffer); -void 0!==a.__webglColorBuffer&&l.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&l.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&l.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&l.deleteBuffer(a.__webglSkinIndicesBuffer);void 0!==a.__webglSkinWeightsBuffer&&l.deleteBuffer(a.__webglSkinWeightsBuffer);void 0!==a.__webglFaceBuffer&&l.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&l.deleteBuffer(a.__webglLineBuffer);void 0!==a.__webglLineDistanceBuffer&& -l.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)l.deleteBuffer(a.__webglCustomAttributesList[b].buffer);G.info.memory.geometries--},pc=function(a){var b=a.program.program;if(void 0!==b){a.program=void 0;var c,d,e=!1;a=0;for(c=bb.length;ad.numSupportedMorphTargets?(p.sort(n),p.length=d.numSupportedMorphTargets):p.length>d.numSupportedMorphNormals?p.sort(n):0===p.length&&p.push([0,0]);for(r=0;rf;f++){a.__webglFramebuffer[f]=l.createFramebuffer();a.__webglRenderbuffer[f]=l.createRenderbuffer(); -l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=l.TEXTURE_CUBE_MAP_POSITIVE_X+f;l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer[f]);l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,h,g.__webglTexture,0);H(a.__webglRenderbuffer[f],a)}c&&l.generateMipmap(l.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=l.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:l.createRenderbuffer(),l.bindTexture(l.TEXTURE_2D,a.__webglTexture), -R(l.TEXTURE_2D,a,c),l.texImage2D(l.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=l.TEXTURE_2D,l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_ATTACHMENT,l.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_STENCIL_ATTACHMENT,l.RENDERBUFFER,a.__webglRenderbuffer): -H(a.__webglRenderbuffer,a),c&&l.generateMipmap(l.TEXTURE_2D);b?l.bindTexture(l.TEXTURE_CUBE_MAP,null):l.bindTexture(l.TEXTURE_2D,null);l.bindRenderbuffer(l.RENDERBUFFER,null);l.bindFramebuffer(l.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=Nb,d=Pa,e=Tb);b!==ob&&(l.bindFramebuffer(l.FRAMEBUFFER,b),l.viewport(d,e,c,a),ob=b);Zb=c;jc=a};this.resetGLState=function(){cb=nb=null;qa=pa=La=Ea=Va=Qa=va=-1;Ub=!0};this.shadowMapPlugin= -new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; +0,b=xb.length;aRa;Ra++)Ja=aa[Ra],cb[pb]=Ja.x,cb[pb+1]=Ja.y,cb[pb+2]=Ja.z,pb+=3;else for(Ra=0;3>Ra;Ra++)cb[pb]=$.x,cb[pb+1]=$.y,cb[pb+2]=$.z,pb+=3;l.bindBuffer(l.ARRAY_BUFFER,B.__webglNormalBuffer);l.bufferData(l.ARRAY_BUFFER,cb,R)}if(nb&&eb){U=0;for(L=W.length;URa;Ra++)bb=ca[Ra],Gb[Ya]=bb.x,Gb[Ya+1]=bb.y,Ya+=2;0Ra;Ra++)ta=ea[Ra],Hb[Eb]=ta.x,Hb[Eb+1]=ta.y,Eb+=2;0fb;fb++)Pb[fb]=G.autoScaleCubemaps&& +!Zb?Q(Va.image[fb],Lc):Va.image[fb];var Da=Pb[0],$b=THREE.Math.isPowerOfTwo(Da.width)&&THREE.Math.isPowerOfTwo(Da.height),Bb=S(Va.format),Ub=S(Va.type);R(l.TEXTURE_CUBE_MAP,Va,$b);for(fb=0;6>fb;fb++)if(Zb)for(var ub,ac=Pb[fb].mipmaps,ua=0,fc=ac.length;ua=xc&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+xc);bb+=1;return a}function C(a,b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getNormalMatrix(a._modelViewMatrix)}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 z(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function B(a){a!==ja&&(l.lineWidth(a),ja=a)}function P(a,b,c){Ya!==a&&(a?l.enable(l.POLYGON_OFFSET_FILL): +l.disable(l.POLYGON_OFFSET_FILL),Ya=a);!a||sb===b&&Oa===c||(l.polygonOffset(b,c),sb=b,Oa=c)}function R(a,b,c){c?(l.texParameteri(a,l.TEXTURE_WRAP_S,S(b.wrapS)),l.texParameteri(a,l.TEXTURE_WRAP_T,S(b.wrapT)),l.texParameteri(a,l.TEXTURE_MAG_FILTER,S(b.magFilter)),l.texParameteri(a,l.TEXTURE_MIN_FILTER,S(b.minFilter))):(l.texParameteri(a,l.TEXTURE_WRAP_S,l.CLAMP_TO_EDGE),l.texParameteri(a,l.TEXTURE_WRAP_T,l.CLAMP_TO_EDGE),l.texParameteri(a,l.TEXTURE_MAG_FILTER,D(b.magFilter)),l.texParameteri(a,l.TEXTURE_MIN_FILTER, +D(b.minFilter)));jb&&b.type!==THREE.FloatType&&(1b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.log("THREE.WebGLRenderer:",a,"is too big ("+a.width+"x"+ +a.height+"). Resized to "+d.width+"x"+d.height+".");return d}return a}function N(a,b){l.bindRenderbuffer(l.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(l.renderbufferStorage(l.RENDERBUFFER,l.DEPTH_COMPONENT16,b.width,b.height),l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_ATTACHMENT,l.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(l.renderbufferStorage(l.RENDERBUFFER,l.DEPTH_STENCIL,b.width,b.height),l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_STENCIL_ATTACHMENT,l.RENDERBUFFER,a)):l.renderbufferStorage(l.RENDERBUFFER, +l.RGBA4,b.width,b.height)}function K(a){a instanceof THREE.WebGLRenderTargetCube?(l.bindTexture(l.TEXTURE_CUBE_MAP,a.__webglTexture),l.generateMipmap(l.TEXTURE_CUBE_MAP),l.bindTexture(l.TEXTURE_CUBE_MAP,null)):(l.bindTexture(l.TEXTURE_2D,a.__webglTexture),l.generateMipmap(l.TEXTURE_2D),l.bindTexture(l.TEXTURE_2D,null))}function D(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?l.NEAREST:l.LINEAR}function S(a){if(a===THREE.RepeatWrapping)return l.REPEAT; +if(a===THREE.ClampToEdgeWrapping)return l.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return l.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return l.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return l.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return l.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return l.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return l.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return l.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return l.UNSIGNED_BYTE; +if(a===THREE.UnsignedShort4444Type)return l.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return l.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return l.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return l.BYTE;if(a===THREE.ShortType)return l.SHORT;if(a===THREE.UnsignedShortType)return l.UNSIGNED_SHORT;if(a===THREE.IntType)return l.INT;if(a===THREE.UnsignedIntType)return l.UNSIGNED_INT;if(a===THREE.FloatType)return l.FLOAT;if(a===THREE.AlphaFormat)return l.ALPHA;if(a===THREE.RGBFormat)return l.RGB; +if(a===THREE.RGBAFormat)return l.RGBA;if(a===THREE.LuminanceFormat)return l.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return l.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return l.FUNC_ADD;if(a===THREE.SubtractEquation)return l.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return l.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return l.ZERO;if(a===THREE.OneFactor)return l.ONE;if(a===THREE.SrcColorFactor)return l.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return l.ONE_MINUS_SRC_COLOR;if(a=== +THREE.SrcAlphaFactor)return l.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return l.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return l.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return l.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return l.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return l.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return l.SRC_ALPHA_SATURATE;if(void 0!==rb){if(a===THREE.RGB_S3TC_DXT1_Format)return rb.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return rb.COMPRESSED_RGBA_S3TC_DXT1_EXT; +if(a===THREE.RGBA_S3TC_DXT3_Format)return rb.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return rb.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var J=void 0!==a.canvas?a.canvas:document.createElement("canvas"),V=void 0!==a.context?a.context:null,L=void 0!==a.precision?a.precision:"highp",ba=void 0!==a.alpha?a.alpha:!1,O=void 0!==a.depth?a.depth:!0,la=void 0!==a.stencil?a.stencil:!0,I=void 0!==a.antialias?a.antialias:!1,va=void 0!== +a.premultipliedAlpha?a.premultipliedAlpha:!0,$=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,aa=void 0!==a.logarithmicDepthBuffer?a.logarithmicDepthBuffer:!1,sa=new THREE.Color(0),Ia=0,La=[],Pa={},Ma=[],na=[],oa=[];this.domElement=J;this.context=null;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled= +this.gammaOutput=this.gammaInput=!1;this.shadowMapAutoUpdate=!0;this.shadowMapType=THREE.PCFShadowMap;this.shadowMapCullFace=THREE.CullFaceFront;this.shadowMapCascade=this.shadowMapDebug=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var G=this,Sa=[],Cb=null,ob=null,ib=-1,ea=null,xa=null,bb=0,za=-1,Fa=-1,Ha=-1,ya=-1,Aa= +-1,ca=-1,ma=-1,ta=-1,Ya=null,sb=null,Oa=null,ja=null,pa=0,Qa=0,Lb=J.width,Db=J.height,Yb=0,jc=0,xb=new Uint8Array(16),yb=new Uint8Array(16),zc=new THREE.Frustum,sc=new THREE.Matrix4,Ac=new THREE.Matrix4,ra=new THREE.Vector3,fa=new THREE.Vector3,Sb=!0,kc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[], +positions:[]}},l,Tb,Mb,jb,rb,zb;(function(){try{var a={alpha:ba,depth:O,stencil:la,antialias:I,premultipliedAlpha:va,preserveDrawingBuffer:$};l=V||J.getContext("webgl",a)||J.getContext("experimental-webgl",a);if(null===l)throw"Error creating WebGL context.";}catch(b){console.error(b)}Tb=l.getExtension("OES_texture_float");l.getExtension("OES_texture_float_linear");Mb=l.getExtension("OES_standard_derivatives");jb=l.getExtension("EXT_texture_filter_anisotropic")||l.getExtension("MOZ_EXT_texture_filter_anisotropic")|| +l.getExtension("WEBKIT_EXT_texture_filter_anisotropic");rb=l.getExtension("WEBGL_compressed_texture_s3tc")||l.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||l.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");zb=l.getExtension("OES_element_index_uint");null===Tb&&console.log("THREE.WebGLRenderer: Float textures not supported.");null===Mb&&console.log("THREE.WebGLRenderer: Standard derivatives not supported.");null===jb&&console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported."); +null===rb&&console.log("THREE.WebGLRenderer: S3TC compressed textures not supported.");null===zb&&console.log("THREE.WebGLRenderer: elementindex as unsigned integer not supported.");void 0===l.getShaderPrecisionFormat&&(l.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});aa&&l.getExtension("EXT_frag_depth")})();l.clearColor(0,0,0,1);l.clearDepth(1);l.clearStencil(0);l.enable(l.DEPTH_TEST);l.depthFunc(l.LEQUAL);l.frontFace(l.CCW);l.cullFace(l.BACK);l.enable(l.CULL_FACE); +l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA);l.viewport(pa,Qa,Lb,Db);l.clearColor(sa.r,sa.g,sa.b,Ia);this.context=l;var xc=l.getParameter(l.MAX_TEXTURE_IMAGE_UNITS),Mc=l.getParameter(l.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Nc=l.getParameter(l.MAX_TEXTURE_SIZE),Lc=l.getParameter(l.MAX_CUBE_MAP_TEXTURE_SIZE),yc=jb?l.getParameter(jb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,qc=0b;b++)l.deleteFramebuffer(a.__webglFramebuffer[b]),l.deleteRenderbuffer(a.__webglRenderbuffer[b]);else l.deleteFramebuffer(a.__webglFramebuffer),l.deleteRenderbuffer(a.__webglRenderbuffer);G.info.memory.textures--},pc=function(a){a=a.target;a.removeEventListener("dispose",pc);oc(a)},Jc=function(a){void 0!==a.__webglVertexBuffer&&l.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&l.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&& +l.deleteBuffer(a.__webglTangentBuffer);void 0!==a.__webglColorBuffer&&l.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&&l.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&l.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&l.deleteBuffer(a.__webglSkinIndicesBuffer);void 0!==a.__webglSkinWeightsBuffer&&l.deleteBuffer(a.__webglSkinWeightsBuffer);void 0!==a.__webglFaceBuffer&&l.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&l.deleteBuffer(a.__webglLineBuffer); +void 0!==a.__webglLineDistanceBuffer&&l.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)l.deleteBuffer(a.__webglCustomAttributesList[b].buffer);G.info.memory.geometries--},oc=function(a){var b=a.program.program;if(void 0!==b){a.program=void 0;var c,d,e=!1;a=0;for(c=Sa.length;ad.numSupportedMorphTargets?(p.sort(n),p.length=d.numSupportedMorphTargets):p.length>d.numSupportedMorphNormals?p.sort(n):0===p.length&&p.push([0,0]);for(r=0;rf;f++){a.__webglFramebuffer[f]=l.createFramebuffer();a.__webglRenderbuffer[f]=l.createRenderbuffer();l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=l.TEXTURE_CUBE_MAP_POSITIVE_X+f;l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer[f]);l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,h,g.__webglTexture,0);N(a.__webglRenderbuffer[f],a)}c&&l.generateMipmap(l.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=l.createFramebuffer(), +a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:l.createRenderbuffer(),l.bindTexture(l.TEXTURE_2D,a.__webglTexture),R(l.TEXTURE_2D,a,c),l.texImage2D(l.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=l.TEXTURE_2D,l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_ATTACHMENT,l.RENDERBUFFER,a.__webglRenderbuffer): +a.depthBuffer&&a.stencilBuffer&&l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_STENCIL_ATTACHMENT,l.RENDERBUFFER,a.__webglRenderbuffer):N(a.__webglRenderbuffer,a),c&&l.generateMipmap(l.TEXTURE_2D);b?l.bindTexture(l.TEXTURE_CUBE_MAP,null):l.bindTexture(l.TEXTURE_2D,null);l.bindRenderbuffer(l.RENDERBUFFER,null);l.bindFramebuffer(l.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=Db,d=pa,e=Qa);b!==ob&&(l.bindFramebuffer(l.FRAMEBUFFER, +b),l.viewport(d,e,c,a),ob=b);Yb=c;jc=a};this.resetGLState=function(){xa=Cb=null;ib=ea=Fa=za=ta=ma=Ha=-1;Sb=!0};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;this.shareDepthFrom=null}; THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){this.width=a;this.height=b},clone:function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;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; @@ -603,7 +603,7 @@ b=["precision "+e.precision+" float;","precision "+e.precision+" int;",e.bumpMap "",e.useFog&&e.fogExp?"#define FOG_EXP2":"",e.map?"#define USE_MAP":"",e.envMap?"#define USE_ENVMAP":"",e.lightMap?"#define USE_LIGHTMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.vertexColors?"#define USE_COLOR":"",e.metal?"#define METAL":"",e.wrapAround?"#define WRAP_AROUND":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP": "",e.shadowMapEnabled?"#define "+s:"",e.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",e.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n"));m=new THREE.WebGLShader(f,f.VERTEX_SHADER,d+m);n=new THREE.WebGLShader(f,f.FRAGMENT_SHADER,b+n);f.attachShader(g,m);f.attachShader(g,n);void 0!==q&&f.bindAttribLocation(g,0,q);f.linkProgram(g);!1===f.getProgramParameter(g,f.LINK_STATUS)&&(console.error("THREE.WebGLProgram: Could not initialise shader."), console.error("gl.VALIDATE_STATUS",f.getProgramParameter(g,f.VALIDATE_STATUS)),console.error("gl.getError()",f.getError()));""!==f.getProgramInfoLog(g)&&console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",f.getProgramInfoLog(g));f.deleteShader(m);f.deleteShader(n);q="viewMatrix modelViewMatrix projectionMatrix normalMatrix modelMatrix cameraPosition morphTargetInfluences bindMatrix bindMatrixInverse".split(" ");e.useVertexTexture?(q.push("boneTexture"),q.push("boneTextureWidth"),q.push("boneTextureHeight")): -q.push("boneGlobalMatrices");e.logarithmicDepthBuffer&&q.push("logDepthBufFC");for(var v in h)q.push(v);h=q;v={};q=0;for(b=h.length;qq-1?0:q-1,t=q+1>e-1?e-1:q+1,r=0>n-1?0:n-1,p=n+1>d-1?d-1:n+1,v=[],x=[0,0,h[4*(q*d+n)]/255*b];v.push([-1,0,h[4*(q*d+r)]/255*b]);v.push([-1,-1,h[4*(s*d+r)]/255*b]);v.push([0,-1,h[4*(s*d+n)]/255*b]);v.push([1,-1,h[4*(s*d+p)]/255*b]);v.push([1,0,h[4*(q*d+p)]/255*b]);v.push([1,1,h[4*(t*d+p)]/255*b]);v.push([0,1,h[4*(t*d+n)]/255* -b]);v.push([-1,1,h[4*(t*d+r)]/255*b]);s=[];r=v.length;for(t=0;tq-1?0:q-1,t=q+1>e-1?e-1:q+1,r=0>n-1?0:n-1,p=n+1>d-1?d-1:n+1,v=[],y=[0,0,h[4*(q*d+n)]/255*b];v.push([-1,0,h[4*(q*d+r)]/255*b]);v.push([-1,-1,h[4*(s*d+r)]/255*b]);v.push([0,-1,h[4*(s*d+n)]/255*b]);v.push([1,-1,h[4*(s*d+p)]/255*b]);v.push([1,0,h[4*(q*d+p)]/255*b]);v.push([1,1,h[4*(t*d+p)]/255*b]);v.push([0,1,h[4*(t*d+n)]/255* +b]);v.push([-1,1,h[4*(t*d+r)]/255*b]);s=[];r=v.length;for(t=0;te)return null;var f=[],g=[],h=[],k,m,n;if(0=q--){console.log("Warning, unable to triangulate polygon!");break}k=m;e<=k&&(k=0);m=k+1;e<=m&&(m=0);n=m+1;e<=n&&(n=0);var s;a:{var t=s=void 0,r=void 0,p=void 0,v=void 0,x=void 0,u=void 0,E=void 0,y= -void 0,t=a[g[k]].x,r=a[g[k]].y,p=a[g[m]].x,v=a[g[m]].y,x=a[g[n]].x,u=a[g[n]].y;if(1E-10>(p-t)*(u-r)-(v-r)*(x-t))s=!1;else{var z=void 0,B=void 0,D=void 0,w=void 0,A=void 0,N=void 0,P=void 0,K=void 0,R=void 0,M=void 0,R=K=P=y=E=void 0,z=x-p,B=u-v,D=t-x,w=r-u,A=p-t,N=v-r;for(s=0;se)return null;var f=[],g=[],h=[],k,m,n;if(0=q--){console.log("Warning, unable to triangulate polygon!");break}k=m;e<=k&&(k=0);m=k+1;e<=m&&(m=0);n=m+1;e<=n&&(n=0);var s;a:{var t=s=void 0,r=void 0,p=void 0,v=void 0,y=void 0,u=void 0,F=void 0,x= +void 0,t=a[g[k]].x,r=a[g[k]].y,p=a[g[m]].x,v=a[g[m]].y,y=a[g[n]].x,u=a[g[n]].y;if(1E-10>(p-t)*(u-r)-(v-r)*(y-t))s=!1;else{var A=void 0,E=void 0,C=void 0,w=void 0,z=void 0,B=void 0,P=void 0,R=void 0,Q=void 0,N=void 0,Q=R=P=x=F=void 0,A=y-p,E=u-v,C=t-y,w=r-u,z=p-t,B=v-r;for(s=0;sw||w>D)return[];k=m*n-k*q;if(0>k||k>D)return[]}else{if(0d?[]:k==d?f?[]:[g]:a<=d?[g,h]: +THREE.Shape.Utils={triangulateShape:function(a,b){function c(a,b,c){return a.x!=b.x?a.xw||w>C)return[];k=m*n-k*q;if(0>k||k>C)return[]}else{if(0d?[]:k==d?f?[]:[g]:a<=d?[g,h]: [g,m]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return 1E-10f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1; -d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cM){console.log("Infinite Loop! Holes left:"+ -m.length+", Probably Hole outside Shape!");break}for(q=N;qh;h++)m=k[h].x+":"+k[h].y, +d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;cN){console.log("Infinite Loop! Holes left:"+ +m.length+", Probably Hole outside Shape!");break}for(q=B;qh;h++)m=k[h].x+":"+k[h].y, m=n[m],void 0!==m&&(k[h]=m);return q.concat()},isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a, b)+this.b3p1(a,c)+this.b3p2(a,d)+this.b3p3(a,e)}};THREE.LineCurve=function(a,b){this.v1=a;this.v2=b};THREE.LineCurve.prototype=Object.create(THREE.Curve.prototype);THREE.LineCurve.prototype.getPoint=function(a){var b=this.v2.clone().sub(this.v1);b.multiplyScalar(a).add(this.v1);return b};THREE.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)};THREE.LineCurve.prototype.getTangent=function(a){return this.v2.clone().sub(this.v1).normalize()}; THREE.QuadraticBezierCurve=function(a,b,c){this.v0=a;this.v1=b;this.v2=c};THREE.QuadraticBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.QuadraticBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(b,a)}; @@ -688,10 +688,10 @@ c.animationCache.animations[this.data.name].originalMatrix=c.matrix);for(var c=c THREE.Animation.prototype.resetBlendWeights=function(){for(var a=0,b=this.hierarchy.length;aa.length-2?q:q+1;c[3]=q>a.length-3?q:q+2;q=a[c[0]];t=a[c[1]];r=a[c[2]];p=a[c[3]];c=e*e;s=e*c;d[0]=f(q[0],t[0],r[0],p[0],e,c,s);d[1]=f(q[1],t[1],r[1],p[1],e,c,s);d[2]=f(q[2],t[2],r[2],p[2],e,c,s);return d},f=function(a,b,c,d,e,f,s){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)* s+(-3*(b-c)-2*a-d)*f+a*e+b};return function(f){if(!1!==this.isPlaying&&(this.currentTime+=f*this.timeScale,0!==this.weight)){f=this.data.length;if(this.currentTime>f||0>this.currentTime)if(this.loop)this.currentTime%=f,0>this.currentTime&&(this.currentTime+=f),this.reset();else{this.stop();return}f=0;for(var h=this.hierarchy.length;fq;q++){var s=this.keyTypes[q],t=m.prevKey[s],r=m.nextKey[s]; -if(0this.timeScale&&t.time>=this.currentTime){t=this.data.hierarchy[f].keys[0];for(r=this.getNextKeyWith(s,f,1);r.timet.index;)t=r,r=this.getNextKeyWith(s,f,r.index+1);m.prevKey[s]=t;m.nextKey[s]=r}k.matrixAutoUpdate=!0;k.matrixWorldNeedsUpdate=!0;var p=(this.currentTime-t.time)/(r.time-t.time),v=t[s],x=r[s];0>p&&(p=0);1this.timeScale&&t.time>=this.currentTime){t=this.data.hierarchy[f].keys[0];for(r=this.getNextKeyWith(s,f,1);r.timet.index;)t=r,r=this.getNextKeyWith(s,f,r.index+1);m.prevKey[s]=t;m.nextKey[s]=r}k.matrixAutoUpdate=!0;k.matrixWorldNeedsUpdate=!0;var p=(this.currentTime-t.time)/(r.time-t.time),v=t[s],y=r[s];0>p&&(p=0);1=this.currentTime?f.interpolate(g,this.currentTime):f.inter THREE.KeyFrameAnimation.prototype.getPrevKeyWith=function(a,b,c){b=this.data.hierarchy[b].keys;for(c=0<=c?c:c+b.length;0<=c;c--)if(b[c].hasTarget(a))return b[c];return b[b.length-1]};THREE.MorphAnimation=function(a){this.mesh=a;this.frames=a.morphTargetInfluences.length;this.currentTime=0;this.duration=1E3;this.loop=!0;this.isPlaying=!1}; THREE.MorphAnimation.prototype={play:function(){this.isPlaying=!0},pause:function(){this.isPlaying=!1},update:function(){var a=0,b=0;return function(c){if(!1!==this.isPlaying){this.currentTime+=c;!0===this.loop&&this.currentTime>this.duration&&(this.currentTime%=this.duration);this.currentTime=Math.min(this.currentTime,this.duration);c=this.duration/this.frames;var d=Math.floor(this.currentTime/c);d!=b&&(this.mesh.morphTargetInfluences[a]=0,this.mesh.morphTargetInfluences[b]=1,this.mesh.morphTargetInfluences[d]= 0,a=b,b=d);this.mesh.morphTargetInfluences[d]=this.currentTime%c/c;this.mesh.morphTargetInfluences[a]=1-this.mesh.morphTargetInfluences[d]}}}()}; -THREE.BoxGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,p){var v,x=h.widthSegments,u=h.heightSegments,E=e/2,y=f/2,z=h.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)v="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)v="y",u=h.depthSegments;else if("z"===a&&"y"===b||"y"===a&&"z"===b)v="x",x=h.depthSegments;var B=x+1,D=u+1,w=e/x,A=f/u,N=new THREE.Vector3;N[v]=0=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,1E-10d?-1E-10>f&&(a=!0):Math.sign(e)== -Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(c,d){var e,f;for(I=c.length;0<=--I;){e=I;f=I-1;0>f&&(f=c.length-1);for(var g=0,h=t+2*n,g=0;gf&&(f=c.length-1);for(var g=0,h=t+2*n,g=0;gMath.abs(c-k)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(m,1-g),new THREE.Vector2(q,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(k,1-f),new THREE.Vector2(n,1-g),new THREE.Vector2(s,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2; THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===a instanceof Array&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cp;p++){d[0]=r[g[p]];d[1]=r[g[(p+1)%3]];d.sort(f);var v=d.toString();void 0===e[v]&&(q[2*n]=d[0],q[2*n+1]=d[1],e[v]=!0,n++)}d=new Float32Array(6*n);s=0;for(t=n;sp;p++)n= -k[q[2*s+p]],g=6*s+3*p,d[g+0]=n.x,d[g+1]=n.y,d[g+2]=n.z;h.addAttribute("position",new THREE.BufferAttribute(d,3))}else if(a.geometry instanceof THREE.BufferGeometry){if(void 0!==a.geometry.attributes.index){for(var k=a.geometry.attributes.position.array,t=a.geometry.attributes.index.array,m=a.geometry.offsets,n=0,q=new Uint32Array(2*t.length),r=0,x=m.length;rp;p++)d[0]=g+t[s+p],d[1]=g+t[s+(p+1)%3],d.sort(f),v=d.toString(), +k[q[2*s+p]],g=6*s+3*p,d[g+0]=n.x,d[g+1]=n.y,d[g+2]=n.z;h.addAttribute("position",new THREE.BufferAttribute(d,3))}else if(a.geometry instanceof THREE.BufferGeometry){if(void 0!==a.geometry.attributes.index){for(var k=a.geometry.attributes.position.array,t=a.geometry.attributes.index.array,m=a.geometry.offsets,n=0,q=new Uint32Array(2*t.length),r=0,y=m.length;rp;p++)d[0]=g+t[s+p],d[1]=g+t[s+(p+1)%3],d.sort(f),v=d.toString(), void 0===e[v]&&(q[2*n]=d[0],q[2*n+1]=d[1],e[v]=!0,n++);d=new Float32Array(6*n);s=0;for(t=n;sp;p++)g=6*s+3*p,n=3*q[2*s+p],d[g+0]=k[n],d[g+1]=k[n+1],d[g+2]=k[n+2]}else for(k=a.geometry.attributes.position.array,n=k.length/3,q=n/3,d=new Float32Array(6*n),s=0,t=q;sp;p++)g=18*s+6*p,q=9*s+3*p,d[g+0]=k[q],d[g+1]=k[q+1],d[g+2]=k[q+2],n=9*s+(p+1)%3*3,d[g+3]=k[n],d[g+4]=k[n+1],d[g+5]=k[n+2];h.addAttribute("position",new THREE.BufferAttribute(d,3))}THREE.Line.call(this,h,new THREE.LineBasicMaterial({color:c}), THREE.LinePieces);this.matrixAutoUpdate=!1;this.matrixWorld=a.matrixWorld};THREE.WireframeHelper.prototype=Object.create(THREE.Line.prototype);THREE.ImmediateRenderObject=function(){THREE.Object3D.call(this);this.render=function(a){}};THREE.ImmediateRenderObject.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)}; THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:f,color:e,blending:d})}; @@ -815,37 +815,37 @@ THREE.LensFlarePlugin=function(){function a(a,b){var d=c.createProgram(),e=c.cre -1;f[b++]=0;f[b++]=0;f[b++]=1;f[b++]=-1;f[b++]=1;f[b++]=0;f[b++]=1;f[b++]=1;f[b++]=1;f[b++]=1;f[b++]=-1;f[b++]=1;f[b++]=0;f[b++]=1;b=0;g[b++]=0;g[b++]=1;g[b++]=2;g[b++]=0;g[b++]=2;g[b++]=3;h=c.createBuffer();k=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,h);c.bufferData(c.ARRAY_BUFFER,f,c.STATIC_DRAW);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,k);c.bufferData(c.ELEMENT_ARRAY_BUFFER,g,c.STATIC_DRAW);m=c.createTexture();n=c.createTexture();c.bindTexture(c.TEXTURE_2D,m);c.texImage2D(c.TEXTURE_2D,0,c.RGB,16, 16,0,c.RGB,c.UNSIGNED_BYTE,null);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST);c.bindTexture(c.TEXTURE_2D,n);c.texImage2D(c.TEXTURE_2D,0,c.RGBA,16,16,0,c.RGBA,c.UNSIGNED_BYTE,null);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,c.CLAMP_TO_EDGE); c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,c.NEAREST);c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,c.NEAREST);0>=c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(q=!1,s=a(THREE.ShaderFlares.lensFlare,e)):(q=!0,s=a(THREE.ShaderFlares.lensFlareVertexTexture,e));t={};r={};t.vertex=c.getAttribLocation(s,"position");t.uv=c.getAttribLocation(s,"uv");r.renderType=c.getUniformLocation(s,"renderType");r.map=c.getUniformLocation(s,"map");r.occlusionMap=c.getUniformLocation(s,"occlusionMap");r.opacity= -c.getUniformLocation(s,"opacity");r.color=c.getUniformLocation(s,"color");r.scale=c.getUniformLocation(s,"scale");r.rotation=c.getUniformLocation(s,"rotation");r.screenPosition=c.getUniformLocation(s,"screenPosition")};this.render=function(a,e,f,g){b.length=0;a.traverseVisible(function(a){a instanceof THREE.LensFlare&&b.push(a)});if(0!==b.length){a=new THREE.Vector3;var E=g/f,y=0.5*f,z=0.5*g,B=16/g,D=new THREE.Vector2(B*E,B),w=new THREE.Vector3(1,1,0),A=new THREE.Vector2(1,1),N=r,B=t;c.useProgram(s); -c.enableVertexAttribArray(t.vertex);c.enableVertexAttribArray(t.uv);c.uniform1i(N.occlusionMap,0);c.uniform1i(N.map,1);c.bindBuffer(c.ARRAY_BUFFER,h);c.vertexAttribPointer(B.vertex,2,c.FLOAT,!1,16,0);c.vertexAttribPointer(B.uv,2,c.FLOAT,!1,16,8);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,k);c.disable(c.CULL_FACE);c.depthMask(!1);for(var P=0,K=b.length;PR;R++)A[R]=new THREE.Vector3,D[R]=new THREE.Vector3;A=w.shadowCascadeNearZ[K];w=w.shadowCascadeFarZ[K];D[0].set(-1,-1,A);D[1].set(1,-1,A);D[2].set(-1,1,A);D[3].set(1,1,A);D[4].set(-1,-1,w);D[5].set(1,-1,w);D[6].set(-1,1,w);D[7].set(1,1,w);P.originalCamera=x;D=new THREE.Gyroscope; -D.position.copy(y.shadowCascadeOffset);D.add(P);D.add(P.target);x.add(D);y.shadowCascadeArray[B]=P;console.log("Created virtualLight",P)}K=y;A=B;w=K.shadowCascadeArray[A];w.position.copy(K.position);w.target.position.copy(K.target.position);w.lookAt(w.target);w.shadowCameraVisible=K.shadowCameraVisible;w.shadowDarkness=K.shadowDarkness;w.shadowBias=K.shadowCascadeBias[A];D=K.shadowCascadeNearZ[A];K=K.shadowCascadeFarZ[A];w=w.pointsFrustum;w[0].z=D;w[1].z=D;w[2].z=D;w[3].z=D;w[4].z=K;w[5].z=K;w[6].z= -K;w[7].z=K;N[z]=P;z++}else N[z]=y,z++;u=0;for(E=N.length;uK;K++)A=w[K],A.copy(D[K]),THREE.ShadowMapPlugin.__projector.unprojectVector(A,B),A.applyMatrix4(z.matrixWorldInverse),A.xt.x&&(t.x=A.x),A.yt.y&&(t.y=A.y),A.zt.z&&(t.z=A.z);z.left=s.x;z.right=t.x;z.top=t.y;z.bottom=s.y;z.updateProjectionMatrix()}z=y.shadowMap;D=y.shadowMatrix; -B=y.shadowCamera;B.position.setFromMatrixPosition(y.matrixWorld);r.setFromMatrixPosition(y.target.matrixWorld);B.lookAt(r);B.updateMatrixWorld();B.matrixWorldInverse.getInverse(B.matrixWorld);y.cameraHelper&&(y.cameraHelper.visible=y.shadowCameraVisible);y.shadowCameraVisible&&y.cameraHelper.update();D.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);D.multiply(B.projectionMatrix);D.multiply(B.matrixWorldInverse);q.multiplyMatrices(B.projectionMatrix,B.matrixWorldInverse);n.setFromMatrix(q);c.setRenderTarget(z); -c.clear();p.length=0;a(e,e,B);y=0;for(z=p.length;y 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); -u.compileShader(z);u.compileShader(R);u.attachShader(x,z);u.attachShader(x,R);u.linkProgram(x);N=x;p=u.getAttribLocation(N,"position");v=u.getAttribLocation(N,"uv");a=u.getUniformLocation(N,"uvOffset");b=u.getUniformLocation(N,"uvScale");c=u.getUniformLocation(N,"rotation");d=u.getUniformLocation(N,"scale");e=u.getUniformLocation(N,"color");f=u.getUniformLocation(N,"map");g=u.getUniformLocation(N,"opacity");h=u.getUniformLocation(N,"modelViewMatrix");k=u.getUniformLocation(N,"projectionMatrix");m= -u.getUniformLocation(N,"fogType");n=u.getUniformLocation(N,"fogDensity");q=u.getUniformLocation(N,"fogNear");s=u.getUniformLocation(N,"fogFar");t=u.getUniformLocation(N,"fogColor");r=u.getUniformLocation(N,"alphaTest");x=document.createElement("canvas");x.width=8;x.height=8;z=x.getContext("2d");z.fillStyle="white";z.fillRect(0,0,8,8);y=new THREE.Texture(x);y.needsUpdate=!0};this.render=function(D,B,R,M){z.length=0;D.traverseVisible(function(a){a instanceof THREE.Sprite&&z.push(a)});if(0!==z.length){u.useProgram(N); -u.enableVertexAttribArray(p);u.enableVertexAttribArray(v);u.disable(u.CULL_FACE);u.enable(u.BLEND);u.bindBuffer(u.ARRAY_BUFFER,w);u.vertexAttribPointer(p,2,u.FLOAT,!1,16,0);u.vertexAttribPointer(v,2,u.FLOAT,!1,16,8);u.bindBuffer(u.ELEMENT_ARRAY_BUFFER,A);u.uniformMatrix4fv(k,!1,B.projectionMatrix.elements);u.activeTexture(u.TEXTURE0);u.uniform1i(f,0);M=R=0;var H=D.fog;H?(u.uniform3f(t,H.color.r,H.color.g,H.color.b),H instanceof THREE.Fog?(u.uniform1f(q,H.near),u.uniform1f(s,H.far),u.uniform1i(m,1), -M=R=1):H instanceof THREE.FogExp2&&(u.uniform1f(n,H.density),u.uniform1i(m,2),M=R=2)):(u.uniform1i(m,0),M=R=0);for(var H=0,C=z.length;HQ;Q++)z[Q]=new THREE.Vector3,C[Q]=new THREE.Vector3;z=w.shadowCascadeNearZ[R];w=w.shadowCascadeFarZ[R];C[0].set(-1,-1,z);C[1].set(1,-1,z);C[2].set(-1,1,z);C[3].set(1,1,z);C[4].set(-1,-1,w);C[5].set(1,-1,w);C[6].set(-1,1,w);C[7].set(1,1,w);P.originalCamera=y;C=new THREE.Gyroscope; +C.position.copy(x.shadowCascadeOffset);C.add(P);C.add(P.target);y.add(C);x.shadowCascadeArray[E]=P;console.log("Created virtualLight",P)}R=x;z=E;w=R.shadowCascadeArray[z];w.position.copy(R.position);w.target.position.copy(R.target.position);w.lookAt(w.target);w.shadowCameraVisible=R.shadowCameraVisible;w.shadowDarkness=R.shadowDarkness;w.shadowBias=R.shadowCascadeBias[z];C=R.shadowCascadeNearZ[z];R=R.shadowCascadeFarZ[z];w=w.pointsFrustum;w[0].z=C;w[1].z=C;w[2].z=C;w[3].z=C;w[4].z=R;w[5].z=R;w[6].z= +R;w[7].z=R;B[A]=P;A++}else B[A]=x,A++;u=0;for(F=B.length;uR;R++)z=w[R],z.copy(C[R]),THREE.ShadowMapPlugin.__projector.unprojectVector(z,E),z.applyMatrix4(A.matrixWorldInverse),z.xt.x&&(t.x=z.x),z.yt.y&&(t.y=z.y),z.zt.z&&(t.z=z.z);A.left=s.x;A.right=t.x;A.top=t.y;A.bottom=s.y;A.updateProjectionMatrix()}A=x.shadowMap;C=x.shadowMatrix; +E=x.shadowCamera;E.position.setFromMatrixPosition(x.matrixWorld);r.setFromMatrixPosition(x.target.matrixWorld);E.lookAt(r);E.updateMatrixWorld();E.matrixWorldInverse.getInverse(E.matrixWorld);x.cameraHelper&&(x.cameraHelper.visible=x.shadowCameraVisible);x.shadowCameraVisible&&x.cameraHelper.update();C.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);C.multiply(E.projectionMatrix);C.multiply(E.matrixWorldInverse);q.multiplyMatrices(E.projectionMatrix,E.matrixWorldInverse);n.setFromMatrix(q);c.setRenderTarget(A); +c.clear();p.length=0;a(e,e,E);x=0;for(A=p.length;x 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); +u.compileShader(A);u.compileShader(Q);u.attachShader(y,A);u.attachShader(y,Q);u.linkProgram(y);B=y;p=u.getAttribLocation(B,"position");v=u.getAttribLocation(B,"uv");a=u.getUniformLocation(B,"uvOffset");b=u.getUniformLocation(B,"uvScale");c=u.getUniformLocation(B,"rotation");d=u.getUniformLocation(B,"scale");e=u.getUniformLocation(B,"color");f=u.getUniformLocation(B,"map");g=u.getUniformLocation(B,"opacity");h=u.getUniformLocation(B,"modelViewMatrix");k=u.getUniformLocation(B,"projectionMatrix");m= +u.getUniformLocation(B,"fogType");n=u.getUniformLocation(B,"fogDensity");q=u.getUniformLocation(B,"fogNear");s=u.getUniformLocation(B,"fogFar");t=u.getUniformLocation(B,"fogColor");r=u.getUniformLocation(B,"alphaTest");y=document.createElement("canvas");y.width=8;y.height=8;A=y.getContext("2d");A.fillStyle="white";A.fillRect(0,0,8,8);x=new THREE.Texture(y);x.needsUpdate=!0};this.render=function(C,E,Q,N){A.length=0;C.traverseVisible(function(a){a instanceof THREE.Sprite&&A.push(a)});if(0!==A.length){u.useProgram(B); +u.enableVertexAttribArray(p);u.enableVertexAttribArray(v);u.disable(u.CULL_FACE);u.enable(u.BLEND);u.bindBuffer(u.ARRAY_BUFFER,w);u.vertexAttribPointer(p,2,u.FLOAT,!1,16,0);u.vertexAttribPointer(v,2,u.FLOAT,!1,16,8);u.bindBuffer(u.ELEMENT_ARRAY_BUFFER,z);u.uniformMatrix4fv(k,!1,E.projectionMatrix.elements);u.activeTexture(u.TEXTURE0);u.uniform1i(f,0);N=Q=0;var K=C.fog;K?(u.uniform3f(t,K.color.r,K.color.g,K.color.b),K instanceof THREE.Fog?(u.uniform1f(q,K.near),u.uniform1f(s,K.far),u.uniform1i(m,1), +N=Q=1):K instanceof THREE.FogExp2&&(u.uniform1f(n,K.density),u.uniform1i(m,2),N=Q=2)):(u.uniform1i(m,0),N=Q=0);for(var K=0,D=A.length;K