From d3fe8399bf1d9432dd110297d628d4ed68d3e86a Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Wed, 12 Mar 2014 17:25:23 -0400 Subject: [PATCH] Updated builds. --- build/three.js | 24 ++-- build/three.min.js | 338 ++++++++++++++++++++++----------------------- 2 files changed, 180 insertions(+), 182 deletions(-) diff --git a/build/three.js b/build/three.js index c714c12227..ba0499c397 100644 --- a/build/three.js +++ b/build/three.js @@ -7183,9 +7183,15 @@ THREE.EventDispatcher.prototype = { if ( attributes.index !== undefined ) { - var offsets = geometry.offsets; var indices = attributes.index.array; var positions = attributes.position.array; + var offsets = geometry.offsets; + + if ( offsets.length === 0 ) { + + offsets = [ { start: 0, count: positions.length, index: 0 } ]; + + } for ( var oi = 0, ol = offsets.length; oi < ol; ++oi ) { @@ -32541,10 +32547,6 @@ THREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) { for ( var i = 0; i <= segments; i ++ ) { - indices[ offset ] = i + 1; - indices[ offset + 1 ] = i + 2; - indices[ offset + 2 ] = 0; - var segment = thetaStart + i / segments * thetaLength; var x = radius * Math.cos( segment ); @@ -32558,19 +32560,15 @@ THREE.CircleGeometry = function ( radius, segments, thetaStart, thetaLength ) { uvs[ offset2 ] = ( x / radius + 1 ) / 2; uvs[ offset2 + 1 ] = ( y / radius + 1 ) / 2; + indices[ offset ] = i + 1; + indices[ offset + 1 ] = i + 2; + indices[ offset + 2 ] = 0; + offset += 3; offset2 += 2; } - for ( var i = 1; i <= segments; i ++ ) { - - indices[ offset ] = i; - indices[ offset + 1 ] = i + 1; - indices[ offset + 2 ] = 0; - - } - this.attributes[ 'index' ] = { array: indices, itemSize: 1 }; this.attributes[ 'position' ] = { array: vertices, itemSize: 3 }; this.attributes[ 'normal' ] = { array: normals, itemSize: 3 }; diff --git a/build/three.min.js b/build/three.min.js index 0eb53ab492..3f8232de4a 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -95,8 +95,8 @@ a instanceof THREE.Euler&&console.error("ERROR: Matrix's .makeRotationFromEuler( f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=k*c-l,b[6]=n+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,k=g*e,l=d*h,n=d*e,b[0]=a-n*c,b[4]=-f*e,b[8]=l+k*c,b[1]=k+l*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,l=c*h,n=c*e,b[0]=g*h,b[4]=l*d-k,b[8]=a*d+n,b[1]=g*e,b[5]=n*d+a,b[9]=k*d-l,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,k=f*d,l=c*g,n=c*d,b[0]=g*h,b[4]=n-a*e,b[8]=l*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+l,b[10]=a-n*e):"XZY"===a.order&&(a=f*g,k=f*d,l=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-l,b[2]=l*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("DEPRECATED: Matrix4's .setRotationFromQuaternion() has been deprecated in favor of makeRotationFromQuaternion. Please update your code.");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 l=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]=l-f;b[8]=c+h;b[1]=l+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("DEPRECATED: Matrix4's .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],l=c[1],n=c[5],r=c[9],p=c[13],s=c[2],u=c[6],q=c[10],w=c[14],v=c[3],t=c[7],x=c[11], -c=c[15],F=d[0],z=d[4],N=d[8],H=d[12],E=d[1],L=d[5],B=d[9],C=d[13],O=d[2],D=d[6],A=d[10],y=d[14],K=d[3],G=d[7],Q=d[11],d=d[15];e[0]=f*F+g*E+h*O+k*K;e[4]=f*z+g*L+h*D+k*G;e[8]=f*N+g*B+h*A+k*Q;e[12]=f*H+g*C+h*y+k*d;e[1]=l*F+n*E+r*O+p*K;e[5]=l*z+n*L+r*D+p*G;e[9]=l*N+n*B+r*A+p*Q;e[13]=l*H+n*C+r*y+p*d;e[2]=s*F+u*E+q*O+w*K;e[6]=s*z+u*L+q*D+w*G;e[10]=s*N+u*B+q*A+w*Q;e[14]=s*H+u*C+q*y+w*d;e[3]=v*F+t*E+x*O+c*K;e[7]=v*z+t*L+x*D+c*G;e[11]=v*N+t*B+x*A+c*Q;e[15]=v*H+t*C+x*y+c*d;return this},multiplyToArray:function(a, +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("DEPRECATED: Matrix4's .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],l=c[1],n=c[5],r=c[9],p=c[13],s=c[2],u=c[6],q=c[10],w=c[14],v=c[3],t=c[7],y=c[11], +c=c[15],E=d[0],x=d[4],L=d[8],A=d[12],D=d[1],M=d[5],z=d[9],G=d[13],P=d[2],C=d[6],B=d[10],F=d[14],K=d[3],H=d[7],Q=d[11],d=d[15];e[0]=f*E+g*D+h*P+k*K;e[4]=f*x+g*M+h*C+k*H;e[8]=f*L+g*z+h*B+k*Q;e[12]=f*A+g*G+h*F+k*d;e[1]=l*E+n*D+r*P+p*K;e[5]=l*x+n*M+r*C+p*H;e[9]=l*L+n*z+r*B+p*Q;e[13]=l*A+n*G+r*F+p*d;e[2]=s*E+u*D+q*P+w*K;e[6]=s*x+u*M+q*C+w*H;e[10]=s*L+u*z+q*B+w*Q;e[14]=s*A+u*G+q*F+w*d;e[3]=v*E+t*D+y*P+c*K;e[7]=v*x+t*M+y*C+c*H;e[11]=v*L+t*z+y*B+c*Q;e[15]=v*A+t*G+y*F+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("DEPRECATED: Matrix4's .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead."); return a.applyProjection(this)},multiplyVector4:function(a){console.warn("DEPRECATED: Matrix4's .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("DEPRECATED: Matrix4's .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");return this.applyToVector3Array(a)},applyToVector3Array:function(){var a=new THREE.Vector3;return function(b){for(var c=0,d=b.length;c< d;c+=3)a.x=b[c],a.y=b[c+1],a.z=b[c+2],a.applyMatrix4(this),b[c]=a.x,b[c+1]=a.y,b[c+2]=a.z;return b}}(),rotateAxis:function(a){console.warn("DEPRECATED: Matrix4's .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("DEPRECATED: Matrix4's .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8], @@ -146,13 +146,13 @@ a=0.001*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a}};THREE.Eve THREE.EventDispatcher.prototype={constructor:THREE.EventDispatcher,apply:function(a){a.addEventListener=THREE.EventDispatcher.prototype.addEventListener;a.hasEventListener=THREE.EventDispatcher.prototype.hasEventListener;a.removeEventListener=THREE.EventDispatcher.prototype.removeEventListener;a.dispatchEvent=THREE.EventDispatcher.prototype.dispatchEvent},addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&& c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)?!0:!1},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners[a];if(void 0!==c){var d=c.indexOf(b);-1!==d&&c.splice(d,1)}}},dispatchEvent:function(a){if(void 0!==this._listeners){var b=this._listeners[a.type];if(void 0!==b){a.target=this;for(var c=[],d=b.length,e=0;ef.scale.x)return s;s.push({distance:u,point:f.position,face:null,object:f})}else if(f instanceof a.LOD)d.setFromMatrixPosition(f.matrixWorld),u=n.ray.origin.distanceTo(d),l(f.getObjectForDistance(u),n,s);else if(f instanceof a.Mesh){var q=f.geometry;null===q.boundingSphere&&q.computeBoundingSphere();b.copy(q.boundingSphere);b.applyMatrix4(f.matrixWorld);if(!1===n.ray.isIntersectionSphere(b))return s;e.getInverse(f.matrixWorld);c.copy(n.ray).applyMatrix4(e);if(null!==q.boundingBox&&!1===c.isIntersectionBox(q.boundingBox))return s;if(q instanceof a.BufferGeometry){var w=f.material;if(void 0=== -w)return s;var v=q.attributes,t,x,F=n.precision;if(void 0!==v.index)for(var z=q.offsets,N=v.index.array,H=v.position.array,E=0,L=z.length;En.far||s.push({distance:u,point:O,indices:[v,t,x],face:null,faceIndex:null,object:f}))}else for(H=v.position.array,q=0,C=v.position.array.length;qn.far||s.push({distance:u,point:O, -indices:[v,t,x],face:null,faceIndex:null,object:f}))}else if(q instanceof a.Geometry)for(N=f.material instanceof a.MeshFaceMaterial,H=!0===N?f.material.materials:null,F=n.precision,z=q.vertices,E=0,L=q.faces.length;En.far||s.push({distance:u,point:O,face:B,faceIndex:E,object:f}))}}else if(f instanceof -a.Line){F=n.linePrecision;w=F*F;q=f.geometry;null===q.boundingSphere&&q.computeBoundingSphere();b.copy(q.boundingSphere);b.applyMatrix4(f.matrixWorld);if(!1===n.ray.isIntersectionSphere(b))return s;e.getInverse(f.matrixWorld);c.copy(n.ray).applyMatrix4(e);if(q instanceof a.Geometry)for(z=q.vertices,F=z.length,v=new a.Vector3,t=new a.Vector3,x=f.type===a.LineStrip?1:2,q=0;qw||(u=c.origin.distanceTo(t),un.far||s.push({distance:u,point:v.clone().applyMatrix4(f.matrixWorld), -face:null,faceIndex:null,object:f}))}},n=function(a,b,c){a=a.getDescendants();for(var d=0,e=a.length;dn.far||s.push({distance:u,point:P,indices:[v,t,y],face:null,faceIndex:null,object:f}))}}else for(L=v.position.array,q=0,G=v.position.array.length;qn.far||s.push({distance:u,point:P,indices:[v,t,y],face:null,faceIndex:null,object:f}))}else if(q instanceof a.Geometry)for(L=f.material instanceof a.MeshFaceMaterial,A=!0===L?f.material.materials:null,E=n.precision,x=q.vertices,D=0,M=q.faces.length;Dn.far||s.push({distance:u,point:P,face:z, +faceIndex:D,object:f}))}}else if(f instanceof a.Line){E=n.linePrecision;w=E*E;q=f.geometry;null===q.boundingSphere&&q.computeBoundingSphere();b.copy(q.boundingSphere);b.applyMatrix4(f.matrixWorld);if(!1===n.ray.isIntersectionSphere(b))return s;e.getInverse(f.matrixWorld);c.copy(n.ray).applyMatrix4(e);if(q instanceof a.Geometry)for(x=q.vertices,E=x.length,v=new a.Vector3,t=new a.Vector3,y=f.type===a.LineStrip?1:2,q=0;qw||(u=c.origin.distanceTo(t),u< +n.near||u>n.far||s.push({distance:u,point:v.clone().applyMatrix4(f.matrixWorld),face:null,faceIndex:null,object:f}))}},n=function(a,b,c){a=a.getDescendants();for(var d=0,e=a.length;de&&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(de&&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},n=function(a,b,c){if(!0===a.visible||!0===b.visible||!0===c.visible)return!0;G[0]= -a.positionScreen;G[1]=b.positionScreen;G[2]=c.positionScreen;return y.isIntersectionBox(K.setFromPoints(G))},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:n,checkBackfaceCulling:q,pushVertex:function(b,c,d){l=a();l.position.set(b, -c,d);k(l)},pushNormal:function(a,b,c){d.push(a,b,c)},pushUv:function(a,b){e.push(a,b)},pushLine:function(a,b){var d=r[a],e=r[b];v=c();v.id=f.id;v.v1.copy(d);v.v2.copy(e);v.z=(d.positionScreen.z+e.positionScreen.z)/2;v.material=f.material;L.elements.push(v)},pushTriangle:function(a,c,k){var l=r[a],p=r[c],u=r[k];if(!1!==n(l,p,u)&&(g.side===THREE.DoubleSide||!0===q(l,p,u))){s=b();s.id=f.id;s.v1.copy(l);s.v2.copy(p);s.v3.copy(u);s.z=(l.positionScreen.z+p.positionScreen.z+u.positionScreen.z)/3;for(l=0;3> -l;l++)p=3*arguments[l],u=s.vertexNormalsModel[l],u.set(d[p],d[p+1],d[p+2]),u.applyMatrix3(h).normalize(),p=2*arguments[l],s.uvs[l].set(e[p],e[p+1]);s.vertexNormalsLength=3;s.material=f.material;L.elements.push(s)}}}};this.projectScene=function(f,h,k,l){var q,p,w,x,F,D,y,G;N=t=u=0;L.elements.length=0;!0===f.autoUpdate&&f.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();Q.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));Y.multiplyMatrices(h.projectionMatrix,Q);X.setFromMatrix(Y);g=0; -L.objects.length=0;L.lights.length=0;fa(f);!0===k&&L.objects.sort(d);f=0;for(k=L.objects.length;fF;F++)s.uvs[F].copy(ca[F]);s.color= -w.color;s.material=ua;s.z=(ga.positionScreen.z+V.positionScreen.z+qa.positionScreen.z)/3;L.elements.push(s)}}}}}else if(q instanceof THREE.Line)if(p instanceof THREE.BufferGeometry){if(D=p.attributes,void 0!==D.position){y=D.position.array;p=0;for(x=y.length;p=c.x&&-1<=c.y&&1>=c.y&&-1<=c.z&&1>=c.z},n=function(a,b,c){if(!0===a.visible||!0===b.visible||!0===c.visible)return!0;H[0]= +a.positionScreen;H[1]=b.positionScreen;H[2]=c.positionScreen;return F.isIntersectionBox(K.setFromPoints(H))},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:n,checkBackfaceCulling:q,pushVertex:function(b,c,d){l=a();l.position.set(b, +c,d);k(l)},pushNormal:function(a,b,c){d.push(a,b,c)},pushUv:function(a,b){e.push(a,b)},pushLine:function(a,b){var d=r[a],e=r[b];v=c();v.id=f.id;v.v1.copy(d);v.v2.copy(e);v.z=(d.positionScreen.z+e.positionScreen.z)/2;v.material=f.material;M.elements.push(v)},pushTriangle:function(a,c,k){var l=r[a],p=r[c],u=r[k];if(!1!==n(l,p,u)&&(g.side===THREE.DoubleSide||!0===q(l,p,u))){s=b();s.id=f.id;s.v1.copy(l);s.v2.copy(p);s.v3.copy(u);s.z=(l.positionScreen.z+p.positionScreen.z+u.positionScreen.z)/3;for(l=0;3> +l;l++)p=3*arguments[l],u=s.vertexNormalsModel[l],u.set(d[p],d[p+1],d[p+2]),u.applyMatrix3(h).normalize(),p=2*arguments[l],s.uvs[l].set(e[p],e[p+1]);s.vertexNormalsLength=3;s.material=f.material;M.elements.push(s)}}}};this.projectScene=function(f,h,k,l){var q,p,w,y,E,C,F,H;L=t=u=0;M.elements.length=0;!0===f.autoUpdate&&f.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();Q.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));Y.multiplyMatrices(h.projectionMatrix,Q);X.setFromMatrix(Y);g=0; +M.objects.length=0;M.lights.length=0;fa(f);!0===k&&M.objects.sort(d);f=0;for(k=M.objects.length;fE;E++)s.uvs[E].copy(ca[E]);s.color= +w.color;s.material=ua;s.z=(ga.positionScreen.z+V.positionScreen.z+qa.positionScreen.z)/3;M.elements.push(s)}}}}}else if(q instanceof THREE.Line)if(p instanceof THREE.BufferGeometry){if(C=p.attributes,void 0!==C.position){F=C.position.array;p=0;for(y=F.length;p=A.z&&(N===E?(x=new THREE.RenderableSprite,H.push(x),E++,N++,z=x):z=H[N++],z.id=q.id,z.x=A.x*p,z.y=A.y*p,z.z=A.z,z.object=q,z.rotation=q.rotation,z.scale.x=q.scale.x*Math.abs(z.x-(A.x+h.projectionMatrix.elements[0])/(A.w+h.projectionMatrix.elements[12])), -z.scale.y=q.scale.y*Math.abs(z.y-(A.y+h.projectionMatrix.elements[5])/(A.w+h.projectionMatrix.elements[13])),z.material=q.material,L.elements.push(z)));!0===l&&L.elements.sort(d);return L}};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}; +(v.vertexColors[0].copy(q.geometry.colors[K]),v.vertexColors[1].copy(q.geometry.colors[K-1])),M.elements.push(v)))}else q instanceof THREE.Sprite&&(B.set(R.elements[12],R.elements[13],R.elements[14],1),B.applyMatrix4(Y),p=1/B.w,B.z*=p,-1<=B.z&&1>=B.z&&(L===D?(y=new THREE.RenderableSprite,A.push(y),D++,L++,x=y):x=A[L++],x.id=q.id,x.x=B.x*p,x.y=B.y*p,x.z=B.z,x.object=q,x.rotation=q.rotation,x.scale.x=q.scale.x*Math.abs(x.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])), +x.scale.y=q.scale.y*Math.abs(x.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),x.material=q.material,M.elements.push(x)));!0===l&&M.elements.sort(d);return M}};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;var b,c;b=0;for(c=this.vertexNormals.length;bb.max.x&&(b.max.x=e);fb.max.y&&(b.max.y=f);gb.max.z&&(b.max.z=g)}}if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){var a=new THREE.Box3,b=new THREE.Vector3;return function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);var c=this.attributes.position.array;if(c){a.makeEmpty();for(var d=this.boundingSphere.center,e=0,f=c.length;eHa?-1:1;h[4*a]=T.x;h[4*a+1]=T.y;h[4*a+2]=T.z;h[4*a+3]=Ia}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.attributes.tangent={itemSize:4,array:new Float32Array(4*g)});for(var h=this.attributes.tangent.array,k=[],l=[],n=0;nq;q++)u=a[3*c+q],-1==p[u]?(r[2*q]=u,r[2*q+1]=-1,n++):p[u]k.index+b)for(k={start:f,count:0,index:g},h.push(k),n=0;6>n;n+=2)q=r[n+1],-1n;n+=2)u=r[n],q=r[n+1],-1===q&&(q=g++), p[u]=q,s[q]=u,e[f++]=q-k.index,k.count++}this.reorderBuffers(e,s,g);return this.offsets=h},reorderBuffers:function(a,b,c){var d={},e=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],f;for(f in this.attributes)if("index"!=f)for(var g=this.attributes[f].array,h=0,k=e.length;hd?-1:1,e.vertexTangents[c]=new THREE.Vector4(F.x,F.y,F.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(E.x,E.y,E.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||(this.geometryGroups[g]={faces3:[],materialIndex:f,vertices:0,numMorphTargets:k,numMorphNormals:l})),this.geometryGroups[g].faces3.push(d), @@ -242,10 +242,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,l,n,r,p,s,u,q,w,v,t=a.faces;n=a.vertices;var x=a.normals,F=a.colors,z=0;if(void 0!==a.uvs){for(d=0;dg;g++)p=t[k++],v=w[2*p],p=w[2*p+1],v=new THREE.Vector2(v,p),2!==g&&c.faceVertexUvs[d][h].push(v),0!==g&&c.faceVertexUvs[d][h+1].push(v);r&&(r=3*t[k++],s.normal.set(x[r++],x[r++],x[r]),q.normal.copy(s.normal));if(u)for(d=0;4>d;d++)r=3*t[k++],u=new THREE.Vector3(x[r++], -x[r++],x[r]),2!==d&&s.vertexNormals.push(u),0!==d&&q.vertexNormals.push(u);n&&(n=t[k++],n=F[n],s.color.setHex(n),q.color.setHex(n));if(b)for(d=0;4>d;d++)n=t[k++],n=F[n],2!==d&&s.vertexColors.push(new THREE.Color(n)),0!==d&&q.vertexColors.push(new THREE.Color(n));c.faces.push(s);c.faces.push(q)}else{s=new THREE.Face3;s.a=t[k++];s.b=t[k++];s.c=t[k++];h&&(h=t[k++],s.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)p=t[k++],v=w[2*p],p=w[2*p+1], -v=new THREE.Vector2(v,p),c.faceVertexUvs[d][h].push(v);r&&(r=3*t[k++],s.normal.set(x[r++],x[r++],x[r]));if(u)for(d=0;3>d;d++)r=3*t[k++],u=new THREE.Vector3(x[r++],x[r++],x[r]),s.vertexNormals.push(u);n&&(n=t[k++],s.color.setHex(F[n]));if(b)for(d=0;3>d;d++)n=t[k++],s.vertexColors.push(new THREE.Color(F[n]));c.faces.push(s)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dg;g++)p=t[k++],v=w[2*p],p=w[2*p+1],v=new THREE.Vector2(v,p),2!==g&&c.faceVertexUvs[d][h].push(v),0!==g&&c.faceVertexUvs[d][h+1].push(v);r&&(r=3*t[k++],s.normal.set(y[r++],y[r++],y[r]),q.normal.copy(s.normal));if(u)for(d=0;4>d;d++)r=3*t[k++],u=new THREE.Vector3(y[r++], +y[r++],y[r]),2!==d&&s.vertexNormals.push(u),0!==d&&q.vertexNormals.push(u);n&&(n=t[k++],n=E[n],s.color.setHex(n),q.color.setHex(n));if(b)for(d=0;4>d;d++)n=t[k++],n=E[n],2!==d&&s.vertexColors.push(new THREE.Color(n)),0!==d&&q.vertexColors.push(new THREE.Color(n));c.faces.push(s);c.faces.push(q)}else{s=new THREE.Face3;s.a=t[k++];s.b=t[k++];s.c=t[k++];h&&(h=t[k++],s.materialIndex=h);h=c.faces.length;if(d)for(d=0;dg;g++)p=t[k++],v=w[2*p],p=w[2*p+1], +v=new THREE.Vector2(v,p),c.faceVertexUvs[d][h].push(v);r&&(r=3*t[k++],s.normal.set(y[r++],y[r++],y[r]));if(u)for(d=0;3>d;d++)r=3*t[k++],u=new THREE.Vector3(y[r++],y[r++],y[r]),s.vertexNormals.push(u);n&&(n=t[k++],s.color.setHex(E[n]));if(b)for(d=0;3>d;d++)n=t[k++],s.vertexColors.push(new THREE.Color(E[n]));c.faces.push(s)}})(d);(function(){var b=void 0!==a.influencesPerVertex?a.influencesPerVertex:2;if(a.skinWeights)for(var d=0,g=a.skinWeights.length;dy.parameters.opacity&&(y.parameters.transparent=!0);y.parameters.normalMap?(C=THREE.ShaderLib.normalmap,D=THREE.UniformsUtils.clone(C.uniforms), -t=y.parameters.color,A=y.parameters.specular,v=y.parameters.ambient,O=y.parameters.shininess,D.tNormal.value=E.textures[y.parameters.normalMap],y.parameters.normalScale&&D.uNormalScale.value.set(y.parameters.normalScale[0],y.parameters.normalScale[1]),y.parameters.map&&(D.tDiffuse.value=y.parameters.map,D.enableDiffuse.value=!0),y.parameters.envMap&&(D.tCube.value=y.parameters.envMap,D.enableReflection.value=!0,D.reflectivity.value=y.parameters.reflectivity),y.parameters.lightMap&&(D.tAO.value=y.parameters.lightMap, -D.enableAO.value=!0),y.parameters.specularMap&&(D.tSpecular.value=E.textures[y.parameters.specularMap],D.enableSpecular.value=!0),y.parameters.displacementMap&&(D.tDisplacement.value=E.textures[y.parameters.displacementMap],D.enableDisplacement.value=!0,D.uDisplacementBias.value=y.parameters.displacementBias,D.uDisplacementScale.value=y.parameters.displacementScale),D.diffuse.value.setHex(t),D.specular.value.setHex(A),D.ambient.value.setHex(v),D.shininess.value=O,y.parameters.opacity&&(D.opacity.value= -y.parameters.opacity),q=new THREE.ShaderMaterial({fragmentShader:C.fragmentShader,vertexShader:C.vertexShader,uniforms:D,lights:!0,fog:!0})):q=new THREE[y.type](y.parameters);q.name=K;E.materials[K]=q}for(K in B.materials)if(y=B.materials[K],y.parameters.materials){G=[];for(t=0;tF.parameters.opacity&&(F.parameters.transparent=!0);F.parameters.normalMap?(G=THREE.ShaderLib.normalmap,C=THREE.UniformsUtils.clone(G.uniforms), +t=F.parameters.color,B=F.parameters.specular,v=F.parameters.ambient,P=F.parameters.shininess,C.tNormal.value=D.textures[F.parameters.normalMap],F.parameters.normalScale&&C.uNormalScale.value.set(F.parameters.normalScale[0],F.parameters.normalScale[1]),F.parameters.map&&(C.tDiffuse.value=F.parameters.map,C.enableDiffuse.value=!0),F.parameters.envMap&&(C.tCube.value=F.parameters.envMap,C.enableReflection.value=!0,C.reflectivity.value=F.parameters.reflectivity),F.parameters.lightMap&&(C.tAO.value=F.parameters.lightMap, +C.enableAO.value=!0),F.parameters.specularMap&&(C.tSpecular.value=D.textures[F.parameters.specularMap],C.enableSpecular.value=!0),F.parameters.displacementMap&&(C.tDisplacement.value=D.textures[F.parameters.displacementMap],C.enableDisplacement.value=!0,C.uDisplacementBias.value=F.parameters.displacementBias,C.uDisplacementScale.value=F.parameters.displacementScale),C.diffuse.value.setHex(t),C.specular.value.setHex(B),C.ambient.value.setHex(v),C.shininess.value=P,F.parameters.opacity&&(C.opacity.value= +F.parameters.opacity),q=new THREE.ShaderMaterial({fragmentShader:G.fragmentShader,vertexShader:G.vertexShader,uniforms:C,lights:!0,fog:!0})):q=new THREE[F.type](F.parameters);q.name=K;D.materials[K]=q}for(K in z.materials)if(F=z.materials[K],F.parameters.materials){H=[];for(t=0;tO&&B.clearRect(V.min.x|0,V.min.y|0,V.max.x-V.min.x|0,V.max.y-V.min.y|0),0X.positionScreen.z||1J.positionScreen.z||1S.positionScreen.z||1=A||(A*=Q.intensity,m.add(Aa.multiplyScalar(A)))):Q instanceof THREE.PointLight&&(O=Ba.setFromMatrixPosition(Q.matrixWorld),A=N.dot(Ba.subVectors(O,C).normalize()), -0>=A||(A*=0==Q.distance?1:1-Math.min(C.distanceTo(O)/Q.distance,1),0!=A&&(A*=Q.intensity,m.add(Aa.multiplyScalar(A)))));aa.multiply(Ga).add(Ia);!0===y.wireframe?b(aa,y.wireframeLinewidth,y.wireframeLinecap,y.wireframeLinejoin):c(aa)}else y instanceof THREE.MeshBasicMaterial||y instanceof THREE.MeshLambertMaterial||y instanceof THREE.MeshPhongMaterial?null!==y.map?y.map.mapping instanceof THREE.UVMapping&&(Ca=G.uvs,f(fa,I,ia,ta,T,wa,Ca[0].x,Ca[0].y,Ca[1].x,Ca[1].y,Ca[2].x,Ca[2].y,y.map)):null!==y.envMap? -y.envMap.mapping instanceof THREE.SphericalReflectionMapping?(ha.copy(G.vertexNormalsModel[0]).applyMatrix3(la),Da=0.5*ha.x+0.5,Ra=0.5*ha.y+0.5,ha.copy(G.vertexNormalsModel[1]).applyMatrix3(la),Sa=0.5*ha.x+0.5,Ea=0.5*ha.y+0.5,ha.copy(G.vertexNormalsModel[2]).applyMatrix3(la),ga=0.5*ha.x+0.5,ua=0.5*ha.y+0.5,f(fa,I,ia,ta,T,wa,Da,Ra,Sa,Ea,ga,ua,y.envMap)):y.envMap.mapping instanceof THREE.SphericalRefractionMapping&&(ha.copy(G.vertexNormalsModel[0]).applyMatrix3(la),Da=-0.5*ha.x+0.5,Ra=-0.5*ha.y+0.5, -ha.copy(G.vertexNormalsModel[1]).applyMatrix3(la),Sa=-0.5*ha.x+0.5,Ea=-0.5*ha.y+0.5,ha.copy(G.vertexNormalsModel[2]).applyMatrix3(la),ga=-0.5*ha.x+0.5,ua=-0.5*ha.y+0.5,f(fa,I,ia,ta,T,wa,Da,Ra,Sa,Ea,ga,ua,y.envMap)):(aa.copy(y.color),y.vertexColors===THREE.FaceColors&&aa.multiply(G.color),!0===y.wireframe?b(aa,y.wireframeLinewidth,y.wireframeLinecap,y.wireframeLinejoin):c(aa)):(y instanceof THREE.MeshDepthMaterial?aa.r=aa.g=aa.b=1-q(C.positionScreen.z*C.positionScreen.w,da.near,da.far):y instanceof -THREE.MeshNormalMaterial?(ha.copy(G.normalModel).applyMatrix3(la),aa.setRGB(ha.x,ha.y,ha.z).multiplyScalar(0.5).addScalar(0.5)):aa.setRGB(1,1,1),!0===y.wireframe?b(aa,y.wireframeLinewidth,y.wireframeLinecap,y.wireframeLinejoin):c(aa))}}V.union(qa)}}}}};THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",fog_fragment:"#ifdef USE_FOG\n\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#ifdef FOG_EXP2\n\t\tconst float LOG2 = 1.442695;\n\t\tfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\n\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif", +h)*u,c=(m*g-p*c)*u,f=(m*h-p*f)*u,a=a-q*k-c*l,b=b-n*k-f*l,z.save(),z.transform(q,n,c,f,a,b),z.fill(),z.restore())}else s("rgba(0,0,0,1)"),z.fill()}}function g(a,b,c){var d=b.x-a.x,e=b.y-a.y,f=d*d+e*e;0!==f&&(c/=Math.sqrt(f),d*=c,e*=c,b.x+=d,b.y+=e,a.x-=d,a.y-=e)}function h(a){C!==a&&(C=z.globalAlpha=a)}function k(a){B!==a&&(a===THREE.NormalBlending?z.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?z.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(z.globalCompositeOperation= +"darker"),B=a)}function l(a){H!==a&&(H=z.lineWidth=a)}function n(a){Q!==a&&(Q=z.lineCap=a)}function r(a){Y!==a&&(Y=z.lineJoin=a)}function p(a){F!==a&&(F=z.strokeStyle=a)}function s(a){K!==a&&(K=z.fillStyle=a)}function u(a,b){if(R!==a||ka!==b)z.setLineDash([a,b]),R=a,ka=b}console.log("THREE.CanvasRenderer",THREE.REVISION);var q=THREE.Math.smoothstep;a=a||{};var w=this,v,t,y,E=new THREE.Projector,x=void 0!==a.canvas?a.canvas:document.createElement("canvas"),L=x.width,A=x.height,D=Math.floor(L/2),M= +Math.floor(A/2),z=x.getContext("2d",{alpha:!0===a.alpha}),G=new THREE.Color(0),P=0,C=1,B=0,F=null,K=null,H=null,Q=null,Y=null,R=null,ka=0,da,X,J,S;new THREE.RenderableVertex;new THREE.RenderableVertex;var fa,I,ia,ta,T,wa,aa=new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;new THREE.Color;var Ga=new THREE.Color,Ia=new THREE.Color,Aa=new THREE.Color,Ha={},Ca,Da,Ra,Sa,Ea,ga,ua,ca=new THREE.Box2,V=new THREE.Box2,qa=new THREE.Box2,Fa=new THREE.Color,xa=new THREE.Color,Ja=new THREE.Color, +Ba=new THREE.Vector3,Ka=new THREE.Vector3,ha=new THREE.Vector3,la=new THREE.Matrix3;void 0===z.setLineDash&&(z.setLineDash=void 0!==z.mozDash?function(a){z.mozDash=null!==a[0]?a:null}:function(){});this.domElement=x;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.supportsVertexTextures=function(){};this.setFaceCulling=function(){}; +this.setSize=function(a,b,c){L=a*this.devicePixelRatio;A=b*this.devicePixelRatio;x.width=L;x.height=A;D=Math.floor(L/2);M=Math.floor(A/2);1!==this.devicePixelRatio&&!1!==c&&(x.style.width=a+"px",x.style.height=b+"px");ca.min.set(-D,-M);ca.max.set(D,M);V.min.set(-D,-M);V.max.set(D,M);C=1;B=0;Y=Q=H=K=F=null;this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){z.setTransform(c/L,0,0,-d/A,a,A-b);z.translate(D,M)};this.setScissor=function(){};this.enableScissorTest=function(){};this.setClearColor= +function(a,b){G.set(a);P=void 0!==b?b:1;V.min.set(-D,-M);V.max.set(D,M)};this.setClearColorHex=function(a,b){console.warn("DEPRECATED: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a,b)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){!1===V.empty()&&(V.intersect(ca),V.expandByScalar(2),1>P&&z.clearRect(V.min.x|0,V.min.y|0,V.max.x-V.min.x|0,V.max.y-V.min.y|0),0X.positionScreen.z||1J.positionScreen.z||1S.positionScreen.z||1=B||(B*=Q.intensity,m.add(Aa.multiplyScalar(B)))):Q instanceof THREE.PointLight&&(P=Ba.setFromMatrixPosition(Q.matrixWorld),B=L.dot(Ba.subVectors(P,G).normalize()), +0>=B||(B*=0==Q.distance?1:1-Math.min(G.distanceTo(P)/Q.distance,1),0!=B&&(B*=Q.intensity,m.add(Aa.multiplyScalar(B)))));aa.multiply(Ga).add(Ia);!0===A.wireframe?b(aa,A.wireframeLinewidth,A.wireframeLinecap,A.wireframeLinejoin):c(aa)}else A instanceof THREE.MeshBasicMaterial||A instanceof THREE.MeshLambertMaterial||A instanceof THREE.MeshPhongMaterial?null!==A.map?A.map.mapping instanceof THREE.UVMapping&&(Ca=H.uvs,f(fa,I,ia,ta,T,wa,Ca[0].x,Ca[0].y,Ca[1].x,Ca[1].y,Ca[2].x,Ca[2].y,A.map)):null!==A.envMap? +A.envMap.mapping instanceof THREE.SphericalReflectionMapping?(ha.copy(H.vertexNormalsModel[0]).applyMatrix3(la),Da=0.5*ha.x+0.5,Ra=0.5*ha.y+0.5,ha.copy(H.vertexNormalsModel[1]).applyMatrix3(la),Sa=0.5*ha.x+0.5,Ea=0.5*ha.y+0.5,ha.copy(H.vertexNormalsModel[2]).applyMatrix3(la),ga=0.5*ha.x+0.5,ua=0.5*ha.y+0.5,f(fa,I,ia,ta,T,wa,Da,Ra,Sa,Ea,ga,ua,A.envMap)):A.envMap.mapping instanceof THREE.SphericalRefractionMapping&&(ha.copy(H.vertexNormalsModel[0]).applyMatrix3(la),Da=-0.5*ha.x+0.5,Ra=-0.5*ha.y+0.5, +ha.copy(H.vertexNormalsModel[1]).applyMatrix3(la),Sa=-0.5*ha.x+0.5,Ea=-0.5*ha.y+0.5,ha.copy(H.vertexNormalsModel[2]).applyMatrix3(la),ga=-0.5*ha.x+0.5,ua=-0.5*ha.y+0.5,f(fa,I,ia,ta,T,wa,Da,Ra,Sa,Ea,ga,ua,A.envMap)):(aa.copy(A.color),A.vertexColors===THREE.FaceColors&&aa.multiply(H.color),!0===A.wireframe?b(aa,A.wireframeLinewidth,A.wireframeLinecap,A.wireframeLinejoin):c(aa)):(A instanceof THREE.MeshDepthMaterial?aa.r=aa.g=aa.b=1-q(G.positionScreen.z*G.positionScreen.w,da.near,da.far):A instanceof +THREE.MeshNormalMaterial?(ha.copy(H.normalModel).applyMatrix3(la),aa.setRGB(ha.x,ha.y,ha.z).multiplyScalar(0.5).addScalar(0.5)):aa.setRGB(1,1,1),!0===A.wireframe?b(aa,A.wireframeLinewidth,A.wireframeLinecap,A.wireframeLinejoin):c(aa))}}V.union(qa)}}}}};THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",fog_fragment:"#ifdef USE_FOG\n\tfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n\t#ifdef FOG_EXP2\n\t\tconst float LOG2 = 1.442695;\n\t\tfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\n\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n\t#endif\n\tgl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif", envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\tuniform samplerCube envMap;\n\tuniform float flipEnvMap;\n\tuniform int combine;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\t\tuniform bool useRefract;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\n\tvec3 reflectVec;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = normalize( vec3( vec4( normal, 0.0 ) * viewMatrix ) );\n\t\tif ( useRefract ) {\n\t\t\treflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t} else { \n\t\t\treflectVec = reflect( cameraToVertex, worldNormal );\n\t\t}\n\t#else\n\t\treflectVec = vReflect;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n\t\tvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#endif\n\t#ifdef GAMMA_INPUT\n\t\tcubeColor.xyz *= cubeColor.xyz;\n\t#endif\n\tif ( combine == 1 ) {\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n\t} else if ( combine == 2 ) {\n\t\tgl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\n\t} else {\n\t\tgl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n\t}\n#endif", envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\n\tvarying vec3 vReflect;\n\tuniform float refractionRatio;\n\tuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n\t#ifdef USE_SKINNING\n\t\tvec4 worldPosition = modelMatrix * skinned;\n\t#endif\n\t#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\t\tvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n\t#endif\n\t#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\n\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t#endif\n#endif", envmap_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\n\tvec3 worldNormal = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * objectNormal;\n\tworldNormal = normalize( worldNormal );\n\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\tif ( useRefract ) {\n\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t} else {\n\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t}\n#endif", @@ -396,21 +396,21 @@ function c(a,b){var c=b.geometry,g=a.faces3,h=3*g.length,k=1*g.length,l=3*g.leng !0}function d(a,b){return a.material instanceof THREE.MeshFaceMaterial?a.material.materials[b.materialIndex]:a.material}function e(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?!1:a&&void 0!==a.shading&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function f(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?!0:!1}function g(a,b,c,d){for(var e in b){var f=b[e],g=c[e];if(0<= f)if(g){var h=g.itemSize;m.bindBuffer(m.ARRAY_BUFFER,g.buffer);k(f);m.vertexAttribPointer(f,h,m.FLOAT,!1,0,d*h*4)}else a.defaultAttributeValues&&(2===a.defaultAttributeValues[e].length?m.vertexAttrib2fv(f,a.defaultAttributeValues[e]):3===a.defaultAttributeValues[e].length&&m.vertexAttrib3fv(f,a.defaultAttributeValues[e]))}l()}function h(){for(var a=0,b=la.length;ap;p++)I.autoScaleCubemaps&&!f?(q=l,t=p,v=c.image[p],x=Ab,v.width<=x&&v.height<=x||(F=Math.max(v.width,v.height),w=Math.floor(v.width*x/F),x=Math.floor(v.height*x/F),F=document.createElement("canvas"),F.width= -w,F.height=x,F.getContext("2d").drawImage(v,0,0,v.width,v.height,0,0,w,x),v=F),q[t]=v):l[p]=c.image[p];p=l[0];q=THREE.Math.isPowerOfTwo(p.width)&&THREE.Math.isPowerOfTwo(p.height);t=y(c.format);v=y(c.type);O(m.TEXTURE_CUBE_MAP,c,q);for(p=0;6>p;p++)if(f)for(x=l[p].mipmaps,F=0,B=x.length;Fp;p++)I.autoScaleCubemaps&&!f?(q=l,t=p,v=c.image[p],y=Ab,v.width<=y&&v.height<=y||(E=Math.max(v.width,v.height),w=Math.floor(v.width*y/E),y=Math.floor(v.height*y/E),E=document.createElement("canvas"),E.width= +w,E.height=y,E.getContext("2d").drawImage(v,0,0,v.width,v.height,0,0,w,y),v=E),q[t]=v):l[p]=c.image[p];p=l[0];q=THREE.Math.isPowerOfTwo(p.width)&&THREE.Math.isPowerOfTwo(p.height);t=F(c.format);v=F(c.type);P(m.TEXTURE_CUBE_MAP,c,q);for(p=0;6>p;p++)if(f)for(y=l[p].mipmaps,E=0,z=y.length;E=Pb&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+Pb);Ia+=1;return a}function E(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 L(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!==qa&&(m.lineWidth(a),qa=a)}function C(a,b,c){ua!==a&&(a?m.enable(m.POLYGON_OFFSET_FILL):m.disable(m.POLYGON_OFFSET_FILL),ua=a);!a||ca===b&&V===c||(m.polygonOffset(b,c),ca=b,V=c)}function O(a,b,c){c?(m.texParameteri(a,m.TEXTURE_WRAP_S,y(b.wrapS)),m.texParameteri(a,m.TEXTURE_WRAP_T,y(b.wrapT)),m.texParameteri(a,m.TEXTURE_MAG_FILTER,y(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,y(b.minFilter))):(m.texParameteri(a,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE), -m.texParameteri(a,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_MAG_FILTER,A(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,A(b.minFilter)));cb&&b.type!==THREE.FloatType&&(1=Pb&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+Pb);Ia+=1;return a}function D(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 M(a,b,c, +d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function z(a){a!==qa&&(m.lineWidth(a),qa=a)}function G(a,b,c){ua!==a&&(a?m.enable(m.POLYGON_OFFSET_FILL):m.disable(m.POLYGON_OFFSET_FILL),ua=a);!a||ca===b&&V===c||(m.polygonOffset(b,c),ca=b,V=c)}function P(a,b,c){c?(m.texParameteri(a,m.TEXTURE_WRAP_S,F(b.wrapS)),m.texParameteri(a,m.TEXTURE_WRAP_T,F(b.wrapT)),m.texParameteri(a,m.TEXTURE_MAG_FILTER,F(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,F(b.minFilter))):(m.texParameteri(a,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE), +m.texParameteri(a,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(a,m.TEXTURE_MAG_FILTER,B(b.magFilter)),m.texParameteri(a,m.TEXTURE_MIN_FILTER,B(b.minFilter)));cb&&b.type!==THREE.FloatType&&(1d.numSupportedMorphTargets? (p.sort(r),p.length=d.numSupportedMorphTargets):p.length>d.numSupportedMorphNormals?p.sort(r):0===p.length&&p.push([0,0]);for(n=0;nca;ca++)xa=ia[ca],sb[db]=xa.x, -sb[db+1]=xa.y,sb[db+2]=xa.z,db+=3;else for(ca=0;3>ca;ca++)sb[db]=aa.x,sb[db+1]=aa.y,sb[db+2]=aa.z,db+=3;m.bindBuffer(m.ARRAY_BUFFER,z.__webglNormalBuffer);m.bufferData(m.ARRAY_BUFFER,sb,C)}if(xb&&Bb&&N){A=0;for(I=ea.length;Aca;ca++)Ba=V[ca],cb[Ka]=Ba.x,cb[Ka+1]=Ba.y,Ka+=2;0ca;ca++)Fa= -X[ca],nb[Oa]=Fa.x,nb[Oa+1]=Fa.y,Oa+=2;0ca;ca++)xa=ia[ca],sb[db]=xa.x, +sb[db+1]=xa.y,sb[db+2]=xa.z,db+=3;else for(ca=0;3>ca;ca++)sb[db]=aa.x,sb[db+1]=aa.y,sb[db+2]=aa.z,db+=3;m.bindBuffer(m.ARRAY_BUFFER,x.__webglNormalBuffer);m.bufferData(m.ARRAY_BUFFER,sb,G)}if(xb&&Bb&&M){B=0;for(I=ea.length;Bca;ca++)Ba=V[ca],cb[Ka]=Ba.x,cb[Ka+1]=Ba.y,Ka+=2;0ca;ca++)Fa= +X[ca],nb[Oa]=Fa.x,nb[Oa+1]=Fa.y,Oa+=2;0f;f++){a.__webglFramebuffer[f]=m.createFramebuffer();a.__webglRenderbuffer[f]=m.createRenderbuffer(); -m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=m.TEXTURE_CUBE_MAP_POSITIVE_X+f;m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer[f]);m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,h,g.__webglTexture,0);D(a.__webglRenderbuffer[f],a)}c&&m.generateMipmap(m.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=m.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:m.createRenderbuffer(),m.bindTexture(m.TEXTURE_2D,a.__webglTexture), -O(m.TEXTURE_2D,a,c),m.texImage2D(m.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=m.TEXTURE_2D,m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer): -D(a.__webglRenderbuffer,a),c&&m.generateMipmap(m.TEXTURE_2D);b?m.bindTexture(m.TEXTURE_CUBE_MAP,null):m.bindTexture(m.TEXTURE_2D,null);m.bindRenderbuffer(m.RENDERBUFFER,null);m.bindFramebuffer(m.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Ja,a=Ba,d=Fa,e=xa);b!==T&&(m.bindFramebuffer(m.FRAMEBUFFER,b),m.viewport(d,e,c,a),T=b);Ka=c;ha=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin); +(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",Ib);a.__webglTexture=m.createTexture();I.info.memory.textures++;var c=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height),d=F(a.format),e=F(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];m.bindTexture(m.TEXTURE_CUBE_MAP,a.__webglTexture);P(m.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=m.createFramebuffer();a.__webglRenderbuffer[f]=m.createRenderbuffer(); +m.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=m.TEXTURE_CUBE_MAP_POSITIVE_X+f;m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer[f]);m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,h,g.__webglTexture,0);C(a.__webglRenderbuffer[f],a)}c&&m.generateMipmap(m.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=m.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:m.createRenderbuffer(),m.bindTexture(m.TEXTURE_2D,a.__webglTexture), +P(m.TEXTURE_2D,a,c),m.texImage2D(m.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=m.TEXTURE_2D,m.bindFramebuffer(m.FRAMEBUFFER,a.__webglFramebuffer),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,a.__webglRenderbuffer): +C(a.__webglRenderbuffer,a),c&&m.generateMipmap(m.TEXTURE_2D);b?m.bindTexture(m.TEXTURE_CUBE_MAP,null):m.bindTexture(m.TEXTURE_2D,null);m.bindRenderbuffer(m.RENDERBUFFER,null);m.bindFramebuffer(m.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Ja,a=Ba,d=Fa,e=xa);b!==T&&(m.bindFramebuffer(m.FRAMEBUFFER,b),m.viewport(d,e,c,a),T=b);Ka=c;ha=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;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; @@ -545,8 +545,8 @@ h]=f,e[3*h+1]=g,e[3*h+2]=c;a=new THREE.DataTexture(e,a,b,THREE.RGBFormat);a.need String(a).split(""),f=e.length,g=[];for(a=0;ae)return null;var f=[],g=[],h=[],k,l,n;if(0=r--){console.log("Warning, unable to triangulate polygon!");break}k=l;e<=k&&(k=0);l=k+1;e<=l&&(l=0);n=l+1;e<=n&&(n=0);var p;a:{var s=p=void 0,u=void 0,q=void 0,w=void 0,v=void 0,t=void 0,x=void 0,F= -void 0,s=a[g[k]].x,u=a[g[k]].y,q=a[g[l]].x,w=a[g[l]].y,v=a[g[n]].x,t=a[g[n]].y;if(1E-10>(q-s)*(t-u)-(w-u)*(v-s))p=!1;else{var z=void 0,N=void 0,H=void 0,E=void 0,L=void 0,B=void 0,C=void 0,O=void 0,D=void 0,A=void 0,D=O=C=F=x=void 0,z=v-q,N=t-w,H=s-v,E=u-t,L=q-s,B=w-u;for(p=0;pe)return null;var f=[],g=[],h=[],k,l,n;if(0=r--){console.log("Warning, unable to triangulate polygon!");break}k=l;e<=k&&(k=0);l=k+1;e<=l&&(l=0);n=l+1;e<=n&&(n=0);var p;a:{var s=p=void 0,u=void 0,q=void 0,w=void 0,v=void 0,t=void 0,y=void 0,E= +void 0,s=a[g[k]].x,u=a[g[k]].y,q=a[g[l]].x,w=a[g[l]].y,v=a[g[n]].x,t=a[g[n]].y;if(1E-10>(q-s)*(t-u)-(w-u)*(v-s))p=!1;else{var x=void 0,L=void 0,A=void 0,D=void 0,M=void 0,z=void 0,G=void 0,P=void 0,C=void 0,B=void 0,C=P=G=E=y=void 0,x=v-q,L=t-w,A=s-v,D=u-t,M=q-s,z=w-u;for(p=0;pk)g=d+1;else if(0b&&(b=0);1E||E>H)return[];k=l*n-k*r;if(0>k||k>H)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.xD||D>A)return[];k=l*n-k*r;if(0>k||k>A)return[]}else{if(0d?[]:k==d?f?[]:[g]:a<=d?[g,h]: [g,l]}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;cA){console.log("Infinite Loop! Holes left:"+ -l.length+", Probably Hole outside Shape!");break}for(r=0;rh;h++)l=k[h].x+":"+k[h].y,l= +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;cB){console.log("Infinite Loop! Holes left:"+ +l.length+", Probably Hole outside Shape!");break}for(r=0;rh;h++)l=k[h].x+":"+k[h].y,l= n[l],void 0!==l&&(k[h]=l);return r.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)}; THREE.QuadraticBezierCurve.prototype.getTangent=function(a){var b;b=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.y,this.v1.y,this.v2.y);b=new THREE.Vector2(b,a);b.normalize();return b};THREE.CubicBezierCurve=function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d};THREE.CubicBezierCurve.prototype=Object.create(THREE.Curve.prototype);THREE.CubicBezierCurve.prototype.getPoint=function(a){var b;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);return new THREE.Vector2(b,a)}; @@ -615,21 +615,21 @@ THREE.CombinedCamera.prototype.toOrthographic=function(){var a=this.cameraP.aspe THREE.CombinedCamera.prototype.setSize=function(a,b){this.cameraP.aspect=a/b;this.left=-a/2;this.right=a/2;this.top=b/2;this.bottom=-b/2};THREE.CombinedCamera.prototype.setFov=function(a){this.fov=a;this.inPerspectiveMode?this.toPerspective():this.toOrthographic()};THREE.CombinedCamera.prototype.updateProjectionMatrix=function(){this.inPerspectiveMode?this.toPerspective():(this.toPerspective(),this.toOrthographic())}; THREE.CombinedCamera.prototype.setLens=function(a,b){void 0===b&&(b=24);var c=2*THREE.Math.radToDeg(Math.atan(b/(2*a)));this.setFov(c);return c};THREE.CombinedCamera.prototype.setZoom=function(a){this.zoom=a;this.inPerspectiveMode?this.toPerspective():this.toOrthographic()};THREE.CombinedCamera.prototype.toFrontView=function(){this.rotation.x=0;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1}; THREE.CombinedCamera.prototype.toBackView=function(){this.rotation.x=0;this.rotation.y=Math.PI;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toLeftView=function(){this.rotation.x=0;this.rotation.y=-Math.PI/2;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toRightView=function(){this.rotation.x=0;this.rotation.y=Math.PI/2;this.rotation.z=0;this.rotationAutoUpdate=!1}; -THREE.CombinedCamera.prototype.toTopView=function(){this.rotation.x=-Math.PI/2;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.CombinedCamera.prototype.toBottomView=function(){this.rotation.x=Math.PI/2;this.rotation.y=0;this.rotation.z=0;this.rotationAutoUpdate=!1};THREE.BoxGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,q){var w,v=h.widthSegments,t=h.heightSegments,x=e/2,F=f/2,z=h.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)w="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)w="y",t=h.depthSegments;else if("z"===a&&"y"===b||"y"===a&&"z"===b)w="x",v=h.depthSegments;var N=v+1,H=t+1,E=e/v,L=f/t,B=new THREE.Vector3;B[w]=0=e)return new THREE.Vector2(c,a);e=Math.sqrt(e/2)}else a=!1,1E-10e?-1E-10>g&& -(a=!0):d(f)==d(h)&&(a=!0),a?(c=-f,a=e,e=Math.sqrt(k)):(c=e,a=f,e=Math.sqrt(k/2));return new THREE.Vector2(c/e,a/e)}function e(c,d){var e,f;for(J=c.length;0<=--J;){e=J;f=J-1;0>f&&(f=c.length-1);for(var g=0,h=s+2*n,g=0;gf&&(f=c.length-1);for(var g=0,h=s+2*n,g=0;gMath.abs(c-k)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(l,1-g),new THREE.Vector2(r,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(k,1-f),new THREE.Vector2(n,1-g),new THREE.Vector2(p,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);!1===a instanceof Array&&(a=[a]);this.shapebb=a[a.length-1].getBoundingBox();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;c=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(n=!1,r=a(THREE.ShaderFlares.lensFlare,d)):(n=!0,r=a(THREE.ShaderFlares.lensFlareVertexTexture,d));p={};s={};p.vertex=b.getAttribLocation(r,"position");p.uv=b.getAttribLocation(r,"uv");s.renderType=b.getUniformLocation(r,"renderType");s.map=b.getUniformLocation(r,"map");s.occlusionMap=b.getUniformLocation(r,"occlusionMap");s.opacity= -b.getUniformLocation(r,"opacity");s.color=b.getUniformLocation(r,"color");s.scale=b.getUniformLocation(r,"scale");s.rotation=b.getUniformLocation(r,"rotation");s.screenPosition=b.getUniformLocation(r,"screenPosition")};this.render=function(a,d,e,f){a=a.__webglFlares;var t=a.length;if(t){var x=new THREE.Vector3,F=f/e,z=0.5*e,N=0.5*f,H=16/f,E=new THREE.Vector2(H*F,H),L=new THREE.Vector3(1,1,0),B=new THREE.Vector2(1,1),C=s,H=p;b.useProgram(r);b.enableVertexAttribArray(p.vertex);b.enableVertexAttribArray(p.uv); -b.uniform1i(C.occlusionMap,0);b.uniform1i(C.map,1);b.bindBuffer(b.ARRAY_BUFFER,g);b.vertexAttribPointer(H.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(H.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.disable(b.CULL_FACE);b.depthMask(!1);var O,D,A,y,K;for(O=0;OE;E++)F[E]=new THREE.Vector3,t[E]=new THREE.Vector3;F=z.shadowCascadeNearZ[x];z=z.shadowCascadeFarZ[x];t[0].set(-1,-1,F);t[1].set(1,-1,F);t[2].set(-1, -1,F);t[3].set(1,1,F);t[4].set(-1,-1,z);t[5].set(1,-1,z);t[6].set(-1,1,z);t[7].set(1,1,z);H.originalCamera=p;t=new THREE.Gyroscope;t.position.copy(q.shadowCascadeOffset);t.add(H);t.add(H.target);p.add(t);q.shadowCascadeArray[v]=H;console.log("Created virtualLight",H)}x=q;F=v;z=x.shadowCascadeArray[F];z.position.copy(x.position);z.target.position.copy(x.target.position);z.lookAt(z.target);z.shadowCameraVisible=x.shadowCameraVisible;z.shadowDarkness=x.shadowDarkness;z.shadowBias=x.shadowCascadeBias[F]; -t=x.shadowCascadeNearZ[F];x=x.shadowCascadeFarZ[F];z=z.pointsFrustum;z[0].z=t;z[1].z=t;z[2].z=t;z[3].z=t;z[4].z=x;z[5].z=x;z[6].z=x;z[7].z=x;N[w]=H;w++}else N[w]=q,w++;s=0;for(u=N.length;sD;D++)E[D]=new THREE.Vector3,t[D]=new THREE.Vector3;E=x.shadowCascadeNearZ[y];x=x.shadowCascadeFarZ[y];t[0].set(-1,-1,E);t[1].set(1,-1,E);t[2].set(-1, +1,E);t[3].set(1,1,E);t[4].set(-1,-1,x);t[5].set(1,-1,x);t[6].set(-1,1,x);t[7].set(1,1,x);A.originalCamera=p;t=new THREE.Gyroscope;t.position.copy(q.shadowCascadeOffset);t.add(A);t.add(A.target);p.add(t);q.shadowCascadeArray[v]=A;console.log("Created virtualLight",A)}y=q;E=v;x=y.shadowCascadeArray[E];x.position.copy(y.position);x.target.position.copy(y.target.position);x.lookAt(x.target);x.shadowCameraVisible=y.shadowCameraVisible;x.shadowDarkness=y.shadowDarkness;x.shadowBias=y.shadowCascadeBias[E]; +t=y.shadowCascadeNearZ[E];y=y.shadowCascadeFarZ[E];x=x.pointsFrustum;x[0].z=t;x[1].z=t;x[2].z=t;x[3].z=t;x[4].z=y;x[5].z=y;x[6].z=y;x[7].z=y;L[w]=A;w++}else L[w]=q,w++;s=0;for(u=L.length;sx;x++)F=z[x],F.copy(t[x]),THREE.ShadowMapPlugin.__projector.unprojectVector(F,v),F.applyMatrix4(w.matrixWorldInverse),F.xl.x&&(l.x=F.x),F.yl.y&&(l.y=F.y),F.zl.z&&(l.z=F.z);w.left=k.x;w.right=l.x;w.top=l.y;w.bottom=k.y;w.updateProjectionMatrix()}w=q.shadowMap;t=q.shadowMatrix;v=q.shadowCamera;v.position.setFromMatrixPosition(q.matrixWorld);n.setFromMatrixPosition(q.target.matrixWorld);v.lookAt(n);v.updateMatrixWorld();v.matrixWorldInverse.getInverse(v.matrixWorld);q.cameraHelper&&(q.cameraHelper.visible=q.shadowCameraVisible);q.shadowCameraVisible&&q.cameraHelper.update();t.set(0.5,0,0,0.5,0,0.5,0,0.5, -0,0,0.5,0.5,0,0,0,1);t.multiply(v.projectionMatrix);t.multiply(v.matrixWorldInverse);h.multiplyMatrices(v.projectionMatrix,v.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(w);b.clear();z=r.__webglObjects;q=0;for(w=z.length;q 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")); -t.compileShader(C);t.compileShader(O);t.attachShader(v,C);t.attachShader(v,O);t.linkProgram(v);L=v;q=t.getAttribLocation(L,"position");w=t.getAttribLocation(L,"uv");a=t.getUniformLocation(L,"uvOffset");b=t.getUniformLocation(L,"uvScale");c=t.getUniformLocation(L,"rotation");d=t.getUniformLocation(L,"scale");e=t.getUniformLocation(L,"color");f=t.getUniformLocation(L,"map");g=t.getUniformLocation(L,"opacity");h=t.getUniformLocation(L,"modelViewMatrix");k=t.getUniformLocation(L,"projectionMatrix");l= -t.getUniformLocation(L,"fogType");n=t.getUniformLocation(L,"fogDensity");r=t.getUniformLocation(L,"fogNear");p=t.getUniformLocation(L,"fogFar");s=t.getUniformLocation(L,"fogColor");u=t.getUniformLocation(L,"alphaTest");v=document.createElement("canvas");v.width=8;v.height=8;C=v.getContext("2d");C.fillStyle="#ffffff";C.fillRect(0,0,v.width,v.height);F=new THREE.Texture(v);F.needsUpdate=!0};this.render=function(z,C,O,D){O=z.__webglSprites;if(D=O.length){t.useProgram(L);t.enableVertexAttribArray(q); -t.enableVertexAttribArray(w);t.disable(t.CULL_FACE);t.enable(t.BLEND);t.bindBuffer(t.ARRAY_BUFFER,H);t.vertexAttribPointer(q,2,t.FLOAT,!1,16,0);t.vertexAttribPointer(w,2,t.FLOAT,!1,16,8);t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,E);t.uniformMatrix4fv(k,!1,C.projectionMatrix.elements);t.activeTexture(t.TEXTURE0);t.uniform1i(f,0);var A=0,y=0,K=z.fog;K?(t.uniform3f(s,K.color.r,K.color.g,K.color.b),K instanceof THREE.Fog?(t.uniform1f(r,K.near),t.uniform1f(p,K.far),t.uniform1i(l,1),y=A=1):K instanceof THREE.FogExp2&& -(t.uniform1f(n,K.density),t.uniform1i(l,2),y=A=2)):(t.uniform1i(l,0),y=A=0);for(var G,N=[],K=0;Ky;y++)E=x[y],E.copy(t[y]),THREE.ShadowMapPlugin.__projector.unprojectVector(E,v),E.applyMatrix4(w.matrixWorldInverse),E.xl.x&&(l.x=E.x),E.yl.y&&(l.y=E.y),E.zl.z&&(l.z=E.z);w.left=k.x;w.right=l.x;w.top=l.y;w.bottom=k.y;w.updateProjectionMatrix()}w=q.shadowMap;t=q.shadowMatrix;v=q.shadowCamera;v.position.setFromMatrixPosition(q.matrixWorld);n.setFromMatrixPosition(q.target.matrixWorld);v.lookAt(n);v.updateMatrixWorld();v.matrixWorldInverse.getInverse(v.matrixWorld);q.cameraHelper&&(q.cameraHelper.visible=q.shadowCameraVisible);q.shadowCameraVisible&&q.cameraHelper.update();t.set(0.5,0,0,0.5,0,0.5,0,0.5, +0,0,0.5,0.5,0,0,0,1);t.multiply(v.projectionMatrix);t.multiply(v.matrixWorldInverse);h.multiplyMatrices(v.projectionMatrix,v.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(w);b.clear();x=r.__webglObjects;q=0;for(w=x.length;q 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")); +t.compileShader(G);t.compileShader(P);t.attachShader(v,G);t.attachShader(v,P);t.linkProgram(v);M=v;q=t.getAttribLocation(M,"position");w=t.getAttribLocation(M,"uv");a=t.getUniformLocation(M,"uvOffset");b=t.getUniformLocation(M,"uvScale");c=t.getUniformLocation(M,"rotation");d=t.getUniformLocation(M,"scale");e=t.getUniformLocation(M,"color");f=t.getUniformLocation(M,"map");g=t.getUniformLocation(M,"opacity");h=t.getUniformLocation(M,"modelViewMatrix");k=t.getUniformLocation(M,"projectionMatrix");l= +t.getUniformLocation(M,"fogType");n=t.getUniformLocation(M,"fogDensity");r=t.getUniformLocation(M,"fogNear");p=t.getUniformLocation(M,"fogFar");s=t.getUniformLocation(M,"fogColor");u=t.getUniformLocation(M,"alphaTest");v=document.createElement("canvas");v.width=8;v.height=8;G=v.getContext("2d");G.fillStyle="#ffffff";G.fillRect(0,0,v.width,v.height);E=new THREE.Texture(v);E.needsUpdate=!0};this.render=function(z,x,L,C){L=z.__webglSprites;if(C=L.length){t.useProgram(M);t.enableVertexAttribArray(q); +t.enableVertexAttribArray(w);t.disable(t.CULL_FACE);t.enable(t.BLEND);t.bindBuffer(t.ARRAY_BUFFER,A);t.vertexAttribPointer(q,2,t.FLOAT,!1,16,0);t.vertexAttribPointer(w,2,t.FLOAT,!1,16,8);t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,D);t.uniformMatrix4fv(k,!1,x.projectionMatrix.elements);t.activeTexture(t.TEXTURE0);t.uniform1i(f,0);var B=0,F=0,K=z.fog;K?(t.uniform3f(s,K.color.r,K.color.g,K.color.b),K instanceof THREE.Fog?(t.uniform1f(r,K.near),t.uniform1f(p,K.far),t.uniform1i(l,1),F=B=1):K instanceof THREE.FogExp2&& +(t.uniform1f(n,K.density),t.uniform1i(l,2),F=B=2)):(t.uniform1i(l,0),F=B=0);for(var H,Q=[],K=0;K