diff --git a/build/three.js b/build/three.js index cc0b902860f3e98a1def66502b56b075511aa33d..244776eb23189ae6462a29ac47724be46ae13f37 100644 --- a/build/three.js +++ b/build/three.js @@ -21444,6 +21444,8 @@ THREE.WebGLRenderer = function ( parameters ) { // render lines + setLineWidth( material.linewidth ); + _gl.drawArrays( _gl.LINE_STRIP, 0, position.numItems / 3 ); _this.info.render.calls ++; diff --git a/build/three.min.js b/build/three.min.js index 3d31f55a5e8ad759968a0458e4f2a4b9ea70ef9f..fc405d0c387b73bde25c10674f94bfc25baca994 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -76,8 +76,8 @@ THREE.extend(THREE.Matrix4.prototype,{set:function(a,b,c,d,e,f,g,h,i,k,l,n,m,s,r d=a.x,e=a.y,f=a.z,g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e),i=Math.cos(f),f=Math.sin(f);if(void 0===b||"XYZ"===b){var k=g*i,l=g*f,n=d*i,m=d*f;c[0]=h*i;c[4]=-h*f;c[8]=e;c[1]=l+n*e;c[5]=k-m*e;c[9]=-d*h;c[2]=m-k*e;c[6]=n+l*e;c[10]=g*h}else"YXZ"===b?(k=h*i,l=h*f,n=e*i,m=e*f,c[0]=k+m*d,c[4]=n*d-l,c[8]=g*e,c[1]=g*f,c[5]=g*i,c[9]=-d,c[2]=l*d-n,c[6]=m+k*d,c[10]=g*h):"ZXY"===b?(k=h*i,l=h*f,n=e*i,m=e*f,c[0]=k-m*d,c[4]=-g*f,c[8]=n+l*d,c[1]=l+n*d,c[5]=g*i,c[9]=m-k*d,c[2]=-g*e,c[6]=d,c[10]=g*h): "ZYX"===b?(k=g*i,l=g*f,n=d*i,m=d*f,c[0]=h*i,c[4]=n*e-l,c[8]=k*e+m,c[1]=h*f,c[5]=m*e+k,c[9]=l*e-n,c[2]=-e,c[6]=d*h,c[10]=g*h):"YZX"===b?(k=g*h,l=g*e,n=d*h,m=d*e,c[0]=h*i,c[4]=m-k*f,c[8]=n*f+l,c[1]=f,c[5]=g*i,c[9]=-d*i,c[2]=-e*i,c[6]=l*f+n,c[10]=k-m*f):"XZY"===b&&(k=g*h,l=g*e,n=d*h,m=d*e,c[0]=h*i,c[4]=-f,c[8]=e*i,c[1]=k*f+m,c[5]=g*i,c[9]=l*f-n,c[2]=n*f-l,c[6]=d*i,c[10]=m*f+k);return this},setRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,i=e+e,a=c*g,k=c*h, c=c*i,l=d*h,d=d*i,e=e*i,g=f*g,h=f*h,f=f*i;b[0]=1-(l+e);b[4]=k-f;b[8]=c+h;b[1]=k+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+l);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],i=c[12],k=c[1],l=c[5],n=c[9],m=c[13],s=c[2],r=c[6],p=c[10],q=c[14],x=c[3],t=c[7],v=c[11],c=c[15],w=d[0],D=d[4],K=d[8],A=d[12],z=d[1],F=d[5],H=d[9], -G=d[13],V=d[2],B=d[6],T=d[10],C=d[14],I=d[3],M=d[7],W=d[11],d=d[15];e[0]=f*w+g*z+h*V+i*I;e[4]=f*D+g*F+h*B+i*M;e[8]=f*K+g*H+h*T+i*W;e[12]=f*A+g*G+h*C+i*d;e[1]=k*w+l*z+n*V+m*I;e[5]=k*D+l*F+n*B+m*M;e[9]=k*K+l*H+n*T+m*W;e[13]=k*A+l*G+n*C+m*d;e[2]=s*w+r*z+p*V+q*I;e[6]=s*D+r*F+p*B+q*M;e[10]=s*K+r*H+p*T+q*W;e[14]=s*A+r*G+p*C+q*d;e[3]=x*w+t*z+v*V+c*I;e[7]=x*D+t*F+v*B+c*M;e[11]=x*K+t*H+v*T+c*W;e[15]=x*A+t*G+v*C+c*d;return this},multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b); +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],i=c[12],k=c[1],l=c[5],n=c[9],m=c[13],s=c[2],r=c[6],p=c[10],q=c[14],x=c[3],t=c[7],v=c[11],c=c[15],w=d[0],E=d[4],J=d[8],A=d[12],z=d[1],G=d[5],I=d[9], +F=d[13],V=d[2],B=d[6],T=d[10],C=d[14],K=d[3],L=d[7],W=d[11],d=d[15];e[0]=f*w+g*z+h*V+i*K;e[4]=f*E+g*G+h*B+i*L;e[8]=f*J+g*I+h*T+i*W;e[12]=f*A+g*F+h*C+i*d;e[1]=k*w+l*z+n*V+m*K;e[5]=k*E+l*G+n*B+m*L;e[9]=k*J+l*I+n*T+m*W;e[13]=k*A+l*F+n*C+m*d;e[2]=s*w+r*z+p*V+q*K;e[6]=s*E+r*G+p*B+q*L;e[10]=s*J+r*I+p*T+q*W;e[14]=s*A+r*F+p*C+q*d;e[3]=x*w+t*z+v*V+c*K;e[7]=x*E+t*G+v*B+c*L;e[11]=x*J+t*I+v*T+c*W;e[15]=x*A+t*F+v*C+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(){var a=new THREE.Vector3;return function(b){for(var c=0,d=b.length;ch.scale.x)return k;k.push({distance:i,point:h.position,face:null,object:h})}else if(h instanceof -a.Mesh){f.getPositionFromMatrix(h.matrixWorld);b.set(f,h.geometry.boundingSphere.radius*h.matrixWorld.getMaxScaleOnAxis());if(!i.ray.isIntersectionSphere(b))return k;var s=h.geometry,r=s.vertices,p=h.material instanceof a.MeshFaceMaterial,q=!0===p?h.material.materials:null,x=h.material.side,t,v,w,D=i.precision;h.matrixRotationWorld.extractRotation(h.matrixWorld);g.getInverse(h.matrixWorld);c.copy(i.ray).transform(g);for(var K=0,A=s.faces.length;KF)){x=x.side;if(x!==a.DoubleSide&&(t=c.direction.dot(d.normal),!(x===a.FrontSide?0>t:0i.far)){e=c.at(F,e);if(z instanceof a.Face3){if(x=r[z.a],t=r[z.b],v=r[z.c],!a.Triangle.containsPoint(e,x,t,v))continue}else if(z instanceof a.Face4){if(x=r[z.a],t=r[z.b],v=r[z.c],w=r[z.d],!a.Triangle.containsPoint(e,x,t,w)&&!a.Triangle.containsPoint(e,t,v,w))continue}else throw Error("face type not supported"); -k.push({distance:F,point:i.ray.at(F),face:z,faceIndex:K,object:h})}}}}}},k=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;dG)){x=x.side;if(x!==a.DoubleSide&&(t=c.direction.dot(d.normal),!(x===a.FrontSide?0>t:0i.far)){e=c.at(G,e);if(z instanceof a.Face3){if(x=r[z.a],t=r[z.b],v=r[z.c],!a.Triangle.containsPoint(e,x,t,v))continue}else if(z instanceof a.Face4){if(x=r[z.a],t=r[z.b],v=r[z.c],w=r[z.d],!a.Triangle.containsPoint(e,x,t,w)&&!a.Triangle.containsPoint(e,t,v,w))continue}else throw Error("face type not supported"); +k.push({distance:G,point:i.ray.at(G),face:z,faceIndex:J,object:h})}}}}}},k=function(a,b,c){for(var a=a.getDescendants(),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(d< -c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var e,f,g=[],h=0,i,k,l=[],n=0,m,s,r=[],p=0,q,x=[],t=0,v,w,D=[],K=0,A,z,F=[],H=0,G={objects:[],sprites:[],lights:[],elements:[]},V=new THREE.Vector3,B=new THREE.Vector4,T=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),C=new THREE.Box3,I=Array(3),M=Array(4),W=new THREE.Matrix4,ua=new THREE.Matrix4,Ha,oa=new THREE.Matrix4,J=new THREE.Matrix3,da=new THREE.Matrix3,ka=new THREE.Vector3,Y=new THREE.Frustum,L=new THREE.Vector4,va=new THREE.Vector4; -this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);ua.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(ua)};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);ua.multiplyMatrices(b.matrixWorld,b.projectionMatrixInverse);return a.applyProjection(ua)};this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a, -c)};this.projectScene=function(g,h,n,ta){var Ma=!1,ga,ja,ma,X,ha,ra,fa,Da,Za,$a,ia,Ra,Ua;z=w=q=s=0;G.elements.length=0;g.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();W.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));ua.multiplyMatrices(h.projectionMatrix,W);da.getInverse(W);da.transpose();Y.setFromMatrix(ua);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var Sa=function(b){for(var c=0,d=b.children.length;ci.positionScreen.x||1i.positionScreen.y||1i.positionScreen.z||1(fa.positionScreen.x-X.positionScreen.x)*(ha.positionScreen.y-X.positionScreen.y)-(fa.positionScreen.y-X.positionScreen.y)*(ha.positionScreen.x-X.positionScreen.x),ra===THREE.DoubleSide||Ma===(ra===THREE.FrontSide))s===p?(ia=new THREE.RenderableFace3,r.push(ia),p++,s++,m=ia):m=r[s++],m.v1.copy(X),m.v2.copy(ha),m.v3.copy(fa); -else continue;else continue;else if(ja instanceof THREE.Face4)if(X=l[ja.a],ha=l[ja.b],fa=l[ja.c],ia=l[ja.d],M[0]=X.positionScreen,M[1]=ha.positionScreen,M[2]=fa.positionScreen,M[3]=ia.positionScreen,!0===X.visible||!0===ha.visible||!0===fa.visible||!0===ia.visible||T.isIntersectionBox(C.setFromPoints(M)))if(Ma=0>(ia.positionScreen.x-X.positionScreen.x)*(ha.positionScreen.y-X.positionScreen.y)-(ia.positionScreen.y-X.positionScreen.y)*(ha.positionScreen.x-X.positionScreen.x)||0>(ha.positionScreen.x- -fa.positionScreen.x)*(ia.positionScreen.y-fa.positionScreen.y)-(ha.positionScreen.y-fa.positionScreen.y)*(ia.positionScreen.x-fa.positionScreen.x),ra===THREE.DoubleSide||Ma===(ra===THREE.FrontSide)){if(q===t){var pb=new THREE.RenderableFace4;x.push(pb);t++;q++;m=pb}else m=x[q++];m.v1.copy(X);m.v2.copy(ha);m.v3.copy(fa);m.v4.copy(ia)}else continue;else continue;m.normalModel.copy(ja.normal);!1===Ma&&(ra===THREE.BackSide||ra===THREE.DoubleSide)&&m.normalModel.negate();m.normalModel.applyMatrix3(J).normalize(); -m.normalModelView.copy(m.normalModel).applyMatrix3(da);m.centroidModel.copy(ja.centroid).applyMatrix4(Ha);fa=ja.vertexNormals;X=0;for(ha=fa.length;XB.z&&(z===H?(Ma=new THREE.RenderableParticle,F.push(Ma),H++,z++,A=Ma):A=F[z++],A.object=Da,A.x=B.x/B.w,A.y=B.y/B.w, -A.z=B.z,A.rotation=Da.rotation.z,A.scale.x=Da.scale.x*Math.abs(A.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),A.scale.y=Da.scale.y*Math.abs(A.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),A.material=Da.material,G.elements.push(A)));!0===ta&&G.elements.sort(c);return G}};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;this.centroid=new THREE.Vector3}; +c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var e,f,g=[],h=0,i,k,l=[],n=0,m,s,r=[],p=0,q,x=[],t=0,v,w,E=[],J=0,A,z,G=[],I=0,F={objects:[],sprites:[],lights:[],elements:[]},V=new THREE.Vector3,B=new THREE.Vector4,T=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),C=new THREE.Box3,K=Array(3),L=Array(4),W=new THREE.Matrix4,X=new THREE.Matrix4,qa,ga=new THREE.Matrix4,H=new THREE.Matrix3,ba=new THREE.Matrix3,Ca=new THREE.Vector3,ja=new THREE.Frustum,oa=new THREE.Vector4,M=new THREE.Vector4; +this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);X.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(X)};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);X.multiplyMatrices(b.matrixWorld,b.projectionMatrixInverse);return a.applyProjection(X)};this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a, +c)};this.projectScene=function(g,h,n,xb){var za=!1,ca,ma,na,Z,ha,sa,ka,Ia,db,$a,ua,Wa,Ta;z=w=q=s=0;F.elements.length=0;g.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();W.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));X.multiplyMatrices(h.projectionMatrix,W);ba.getInverse(W);ba.transpose();ja.setFromMatrix(X);f=0;F.objects.length=0;F.sprites.length=0;F.lights.length=0;var Ua=function(b){for(var c=0,d=b.children.length;ci.positionScreen.x||1i.positionScreen.y||1i.positionScreen.z||1(ka.positionScreen.x-Z.positionScreen.x)*(ha.positionScreen.y-Z.positionScreen.y)-(ka.positionScreen.y-Z.positionScreen.y)*(ha.positionScreen.x-Z.positionScreen.x),sa===THREE.DoubleSide||za===(sa===THREE.FrontSide))s===p?(ua=new THREE.RenderableFace3,r.push(ua),p++,s++,m=ua):m=r[s++],m.v1.copy(Z),m.v2.copy(ha),m.v3.copy(ka); +else continue;else continue;else if(ma instanceof THREE.Face4)if(Z=l[ma.a],ha=l[ma.b],ka=l[ma.c],ua=l[ma.d],L[0]=Z.positionScreen,L[1]=ha.positionScreen,L[2]=ka.positionScreen,L[3]=ua.positionScreen,!0===Z.visible||!0===ha.visible||!0===ka.visible||!0===ua.visible||T.isIntersectionBox(C.setFromPoints(L)))if(za=0>(ua.positionScreen.x-Z.positionScreen.x)*(ha.positionScreen.y-Z.positionScreen.y)-(ua.positionScreen.y-Z.positionScreen.y)*(ha.positionScreen.x-Z.positionScreen.x)||0>(ha.positionScreen.x- +ka.positionScreen.x)*(ua.positionScreen.y-ka.positionScreen.y)-(ha.positionScreen.y-ka.positionScreen.y)*(ua.positionScreen.x-ka.positionScreen.x),sa===THREE.DoubleSide||za===(sa===THREE.FrontSide)){if(q===t){var yb=new THREE.RenderableFace4;x.push(yb);t++;q++;m=yb}else m=x[q++];m.v1.copy(Z);m.v2.copy(ha);m.v3.copy(ka);m.v4.copy(ua)}else continue;else continue;m.normalModel.copy(ma.normal);!1===za&&(sa===THREE.BackSide||sa===THREE.DoubleSide)&&m.normalModel.negate();m.normalModel.applyMatrix3(H).normalize(); +m.normalModelView.copy(m.normalModel).applyMatrix3(ba);m.centroidModel.copy(ma.centroid).applyMatrix4(qa);ka=ma.vertexNormals;Z=0;for(ha=ka.length;ZB.z&&(z===I?(za=new THREE.RenderableParticle,G.push(za),I++,z++,A=za):A=G[z++],A.object=Ia,A.x=B.x/B.w,A.y=B.y/B.w,A.z= +B.z,A.rotation=Ia.rotation.z,A.scale.x=Ia.scale.x*Math.abs(A.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),A.scale.y=Ia.scale.y*Math.abs(A.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),A.material=Ia.material,F.elements.push(A)));!0===xb&&F.elements.sort(c);return F}};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;this.centroid=new THREE.Vector3}; 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.centroid.copy(this.centroid);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;be?-1:1,f.vertexTangents[d]=new THREE.Vector4(B.x,B.y,B.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;ce?-1:1,f.vertexTangents[d]=new THREE.Vector4(B.x,B.y,B.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;ci;i++)if(h[i]==h[(i+1)%3]){e.push(f);break}}else if(a instanceof THREE.Face4){a.a=c[a.a];a.b=c[a.b];a.c=c[a.c];a.d=c[a.d];h=[a.a,a.b,a.c,a.d];d=-1;for(i=0;4>i;i++)h[i]==h[(i+1)%4]&&(0<=d&&e.push(f),d=i);if(0<=d){h.splice(d,1);var l=new THREE.Face3(h[0],h[1],h[2],a.normal,a.color,a.materialIndex);h=0;for(i=this.faceVertexUvs.length;hc&&(c=b);this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position){var a,b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;aka?-1:1;h[4*a]=W.x;h[4*a+1]=W.y;h[4*a+2]=W.z;h[4*a+3]=J}if(void 0===this.attributes.index||void 0===this.attributes.position|| +!0}},normalizeNormals:function(){for(var a=this.attributes.normal.array,b,c,d,e=0,f=a.length;eCa?-1:1;h[4*a]=W.x;h[4*a+1]=W.y;h[4*a+2]=W.z;h[4*a+3]=H}if(void 0===this.attributes.index||void 0===this.attributes.position|| void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var b=this.attributes.index.array,c=this.attributes.position.array,d=this.attributes.normal.array,e=this.attributes.uv.array,f=c.length/3;if(void 0===this.attributes.tangent){var g=4*f;this.attributes.tangent={itemSize:4,array:new Float32Array(g),numItems:g}}for(var h=this.attributes.tangent.array,i=[],k=[],g=0;gC.parameters.opacity&& -(C.parameters.transparent=!0);C.parameters.normalMap?(G=THREE.ShaderLib.normalmap,B=THREE.UniformsUtils.clone(G.uniforms),q=C.parameters.color,T=C.parameters.specular,p=C.parameters.ambient,V=C.parameters.shininess,B.tNormal.value=z.textures[C.parameters.normalMap],C.parameters.normalScale&&B.uNormalScale.value.set(C.parameters.normalScale[0],C.parameters.normalScale[1]),C.parameters.map&&(B.tDiffuse.value=C.parameters.map,B.enableDiffuse.value=!0),C.parameters.envMap&&(B.tCube.value=C.parameters.envMap, +p.segmentsT),z.geometries[B]=m;else if("icosahedron"===p.type)m=new THREE.IcosahedronGeometry(p.radius,p.subdivisions),z.geometries[B]=m;else if(p.type in this.geometryHandlerMap){T={};for(q in p)"type"!==q&&"url"!==q&&(T[q]=p[q]);this.geometryHandlerMap[p.type].loaderObject.load(d(p.url,I.urlBaseType),g(B),T)}else"embedded"===p.type&&(T=I.embeds[p.id],T.metadata=I.metadata,T&&this.geometryHandlerMap.ascii.loaderObject.createModel(T,i(B),""));for(var C in I.textures)if(B=I.textures[C],B.url instanceof +Array){E+=B.url.length;for(q=0;qC.parameters.opacity&& +(C.parameters.transparent=!0);C.parameters.normalMap?(F=THREE.ShaderLib.normalmap,B=THREE.UniformsUtils.clone(F.uniforms),q=C.parameters.color,T=C.parameters.specular,p=C.parameters.ambient,V=C.parameters.shininess,B.tNormal.value=z.textures[C.parameters.normalMap],C.parameters.normalScale&&B.uNormalScale.value.set(C.parameters.normalScale[0],C.parameters.normalScale[1]),C.parameters.map&&(B.tDiffuse.value=C.parameters.map,B.enableDiffuse.value=!0),C.parameters.envMap&&(B.tCube.value=C.parameters.envMap, B.enableReflection.value=!0,B.uReflectivity.value=C.parameters.reflectivity),C.parameters.lightMap&&(B.tAO.value=C.parameters.lightMap,B.enableAO.value=!0),C.parameters.specularMap&&(B.tSpecular.value=z.textures[C.parameters.specularMap],B.enableSpecular.value=!0),C.parameters.displacementMap&&(B.tDisplacement.value=z.textures[C.parameters.displacementMap],B.enableDisplacement.value=!0,B.uDisplacementBias.value=C.parameters.displacementBias,B.uDisplacementScale.value=C.parameters.displacementScale), -B.uDiffuseColor.value.setHex(q),B.uSpecularColor.value.setHex(T),B.uAmbientColor.value.setHex(p),B.uShininess.value=V,C.parameters.opacity&&(B.uOpacity.value=C.parameters.opacity),s=new THREE.ShaderMaterial({fragmentShader:G.fragmentShader,vertexShader:G.vertexShader,uniforms:B,lights:!0,fog:!0})):s=new THREE[C.type](C.parameters);z.materials[I]=s}for(I in H.materials)if(C=H.materials[I],C.parameters.materials){M=[];for(q=0;qD&&v.clearRect(qa.min.x|0,qa.min.y|0,qa.max.x-qa.min.x|0,qa.max.y-qa.min.y|0),0=j||(j*=f.intensity,c.add(Da.multiplyScalar(j)))}else f instanceof THREE.PointLight&&(g=ab.getPositionFromMatrix(f.matrixWorld),j=b.dot(ab.subVectors(g,a).normalize()),0>=j||(j*=0==f.distance?1:1-Math.min(a.distanceTo(g)/f.distance,1),0!=j&&(j*=f.intensity,c.add(Da.multiplyScalar(j)))))}}function r(a,d,e,f,g,j,h,i){k.info.render.vertices+= -3;k.info.render.faces++;b(i.opacity);c(i.blending);oa=a.positionScreen.x;J=a.positionScreen.y;da=d.positionScreen.x;ka=d.positionScreen.y;Y=e.positionScreen.x;L=e.positionScreen.y;z(oa,J,da,ka,Y,L);(i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial)&&null===i.map?(ra.copy(i.color),fa.copy(i.emissive),i.vertexColors===THREE.FaceColors&&ra.multiply(h.color),!0===gc?!1===i.wireframe&&i.shading==THREE.SmoothShading&&3==h.vertexNormalsLength?(ja.copy(vb),ma.copy(vb),X.copy(vb), -q(h.v1.positionWorld,h.vertexNormalsModel[0],ja),q(h.v2.positionWorld,h.vertexNormalsModel[1],ma),q(h.v3.positionWorld,h.vertexNormalsModel[2],X),ja.multiply(ra).add(fa),ma.multiply(ra).add(fa),X.multiply(ra).add(fa),ha.addColors(ma,X).multiplyScalar(0.5),Ua=G(ja,ma,X,ha),F(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ua)):(ga.copy(vb),q(h.centroidModel,h.normalModel,ga),ga.multiply(ra).add(fa),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):!0===i.wireframe?B(i.color,i.wireframeLinewidth, -i.wireframeLinecap,i.wireframeLinejoin):A(i.color)):i instanceof THREE.MeshBasicMaterial||i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial?null!==i.map?i.map.mapping instanceof THREE.UVMapping&&(Sa=h.uvs[0],D(oa,J,da,ka,Y,L,Sa[f].x,Sa[f].y,Sa[g].x,Sa[g].y,Sa[j].x,Sa[j].y,i.map)):null!==i.envMap?i.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(ab.copy(h.vertexNormalsModelView[f]),fb=0.5*ab.x+0.5,pb=0.5*ab.y+0.5,ab.copy(h.vertexNormalsModelView[g]),Ib=0.5*ab.x+ -0.5,Jb=0.5*ab.y+0.5,ab.copy(h.vertexNormalsModelView[j]),fc=0.5*ab.x+0.5,mc=0.5*ab.y+0.5,D(oa,J,da,ka,Y,L,fb,pb,Ib,Jb,fc,mc,i.envMap)):(ga.copy(i.color),i.vertexColors===THREE.FaceColors&&ga.multiply(h.color),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):i instanceof THREE.MeshDepthMaterial?(ia=p.near,Ra=p.far,g=1-K(a.positionScreen.z*a.positionScreen.w,ia,Ra),ja.setRGB(g,g,g),g=1-K(d.positionScreen.z*d.positionScreen.w,ia,Ra),ma.setRGB(g,g,g),g=1-K(e.positionScreen.z* -e.positionScreen.w,ia,Ra),X.setRGB(g,g,g),ha.addColors(ma,X).multiplyScalar(0.5),Ua=G(ja,ma,X,ha),F(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ua)):i instanceof THREE.MeshNormalMaterial&&(i.shading==THREE.FlatShading?(d=h.normalModelView,ga.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),!0===i.wireframe?B(ga,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ga)):i.shading==THREE.SmoothShading&&(d=h.vertexNormalsModelView[f],ja.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[g], -ma.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[j],X.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),ha.addColors(ma,X).multiplyScalar(0.5),Ua=G(ja,ma,X,ha),F(oa,J,da,ka,Y,L,0,0,1,0,0,1,Ua)))}function z(a,b,c,d,e,f){v.beginPath();v.moveTo(a,b);v.lineTo(c,d);v.lineTo(e,f);v.closePath()}function w(a,b,c,d,e,f,g,j){v.beginPath();v.moveTo(a,b);v.lineTo(c,d);v.lineTo(e,f);v.lineTo(g,j);v.closePath()}function B(a,b,c,j){d(b);e(c);f(j);g(a.getStyle());v.stroke(); -Ea.expandByScalar(2*b)}function A(a){h(a.getStyle());v.fill()}function D(a,b,c,d,e,f,g,j,i,ea,k,m,l){if(!(l instanceof THREE.DataTexture||void 0===l.image||0==l.image.width)){if(!0===l.needsUpdate){var n=l.wrapS==THREE.RepeatWrapping,gb=l.wrapT==THREE.RepeatWrapping;Za[l.id]=v.createPattern(l.image,!0===n&&!0===gb?"repeat":!0===n&&!1===gb?"repeat-x":!1===n&&!0===gb?"repeat-y":"no-repeat");l.needsUpdate=!1}void 0===Za[l.id]?h("rgba(0,0,0,1)"):h(Za[l.id]);var n=l.offset.x/l.repeat.x,gb=l.offset.y/l.repeat.y, -p=l.image.width*l.repeat.x,q=l.image.height*l.repeat.y,g=(g+n)*p,j=(1-j+gb)*q,c=c-a,d=d-b,e=e-a,f=f-b,i=(i+n)*p-g,ea=(1-ea+gb)*q-j,k=(k+n)*p-g,m=(1-m+gb)*q-j,n=i*m-k*ea;0===n?(void 0===$a[l.id]&&(b=document.createElement("canvas"),b.width=l.image.width,b.height=l.image.height,b=b.getContext("2d"),b.drawImage(l.image,0,0),$a[l.id]=b.getImageData(0,0,l.image.width,l.image.height).data),b=$a[l.id],g=4*(Math.floor(g)+Math.floor(j)*l.image.width),ga.setRGB(b[g]/255,b[g+1]/255,b[g+2]/255),A(ga)):(n=1/n, -l=(m*c-ea*e)*n,ea=(m*d-ea*f)*n,c=(i*e-k*c)*n,d=(i*f-k*d)*n,a=a-l*g-c*j,g=b-ea*g-d*j,v.save(),v.transform(l,ea,c,d,a,g),v.fill(),v.restore())}}function F(a,b,c,d,e,f,g,j,h,i,ea,k,l){var n,m;n=l.width-1;m=l.height-1;g*=n;j*=m;c-=a;d-=b;e-=a;f-=b;h=h*n-g;i=i*m-j;ea=ea*n-g;k=k*m-j;m=1/(h*k-ea*i);n=(k*c-i*e)*m;i=(k*d-i*f)*m;c=(h*e-ea*c)*m;d=(h*f-ea*d)*m;a=a-n*g-c*j;b=b-i*g-d*j;v.save();v.transform(n,i,c,d,a,b);v.clip();v.drawImage(l,0,0);v.restore()}function G(a,b,c,d){bb[0]=255*a.r|0;bb[1]=255*a.g|0; -bb[2]=255*a.b|0;bb[4]=255*b.r|0;bb[5]=255*b.g|0;bb[6]=255*b.b|0;bb[8]=255*c.r|0;bb[9]=255*c.g|0;bb[10]=255*c.b|0;bb[12]=255*d.r|0;bb[13]=255*d.g|0;bb[14]=255*d.b|0;j.putImageData(yb,0,0);Va.drawImage(xb,0,0);return ob}function K(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function H(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===p instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera."); -else{!0===this.autoClear&&this.clear();v.setTransform(1,0,0,-1,x,t);k.info.render.vertices=0;k.info.render.faces=0;l=s.projectScene(a,p,this.sortObjects,this.sortElements);n=l.elements;m=l.lights;gc=0>1,od=ea.height>>1,Bb=jb.scale.x*x,Cb=jb.scale.y*t,gb=Bb*yc,Ab=Cb*od,Ea.min.set(aa.x-gb,aa.y-Ab),Ea.max.set(aa.x+gb,aa.y+Ab),!1!==qb.isIntersectionBox(Ea)&&(v.save(),v.translate(aa.x,aa.y),v.rotate(-jb.rotation),v.scale(Bb,-Cb),v.translate(-yc,-od),v.drawImage(ea,0,0),v.restore())):O instanceof THREE.ParticleCanvasMaterial&&(gb=jb.scale.x*x,Ab=jb.scale.y*t,Ea.min.set(aa.x-gb,aa.y-Ab),Ea.max.set(aa.x+ -gb,aa.y+Ab),!1!==qb.isIntersectionBox(Ea)&&(g(O.color.getStyle()),h(O.color.getStyle()),v.save(),v.translate(aa.x,aa.y),v.rotate(-jb.rotation),v.scale(gb,Ab),O.program(v),v.restore()))}else if(ea instanceof THREE.RenderableLine)C=ea.v1,I=ea.v2,C.positionScreen.x*=x,C.positionScreen.y*=t,I.positionScreen.x*=x,I.positionScreen.y*=t,Ea.setFromPoints([C.positionScreen,I.positionScreen]),!0===qb.isIntersectionBox(Ea)&&(aa=C,jb=I,b(O.opacity),c(O.blending),v.beginPath(),v.moveTo(aa.positionScreen.x,aa.positionScreen.y), -v.lineTo(jb.positionScreen.x,jb.positionScreen.y),O instanceof THREE.LineBasicMaterial?(d(O.linewidth),e(O.linecap),f(O.linejoin),g(O.color.getStyle()),i(null,null),v.stroke(),Ea.expandByScalar(2*O.linewidth)):O instanceof THREE.LineDashedMaterial&&(d(O.linewidth),e(O.linecap),f(O.linejoin),g(O.color.getStyle()),i(O.dashSize,O.gapSize),v.stroke(),Ea.expandByScalar(2*O.linewidth)));else if(ea instanceof THREE.RenderableFace3){C=ea.v1;I=ea.v2;M=ea.v3;if(-1>C.positionScreen.z||1I.positionScreen.z||1M.positionScreen.z||1C.positionScreen.z||1I.positionScreen.z||1M.positionScreen.z||1W.positionScreen.z||1E&&v.clearRect(Qa.min.x|0,Qa.min.y|0,Qa.max.x-Qa.min.x|0,Qa.max.y-Qa.min.y|0),0=j||(j*=f.intensity,c.add(Ia.multiplyScalar(j)))}else f instanceof THREE.PointLight&&(g=ia.getPositionFromMatrix(f.matrixWorld),j=b.dot(ia.subVectors(g,a).normalize()),0>=j||(j*=0==f.distance?1:1-Math.min(a.distanceTo(g)/f.distance,1),0!=j&&(j*=f.intensity,c.add(Ia.multiplyScalar(j)))))}}function r(a,d,e,f,g,j,h,i){k.info.render.vertices+= +3;k.info.render.faces++;b(i.opacity);c(i.blending);ga=a.positionScreen.x;H=a.positionScreen.y;ba=d.positionScreen.x;Ca=d.positionScreen.y;ja=e.positionScreen.x;oa=e.positionScreen.y;z(ga,H,ba,Ca,ja,oa);(i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial)&&null===i.map?(sa.copy(i.color),ka.copy(i.emissive),i.vertexColors===THREE.FaceColors&&sa.multiply(h.color),!0===zb?!1===i.wireframe&&i.shading==THREE.SmoothShading&&3==h.vertexNormalsLength?(ma.copy(pb),na.copy(pb),Z.copy(pb), +q(h.v1.positionWorld,h.vertexNormalsModel[0],ma),q(h.v2.positionWorld,h.vertexNormalsModel[1],na),q(h.v3.positionWorld,h.vertexNormalsModel[2],Z),ma.multiply(sa).add(ka),na.multiply(sa).add(ka),Z.multiply(sa).add(ka),ha.addColors(na,Z).multiplyScalar(0.5),Ta=F(ma,na,Z,ha),G(ga,H,ba,Ca,ja,oa,0,0,1,0,0,1,Ta)):(ca.copy(pb),q(h.centroidModel,h.normalModel,ca),ca.multiply(sa).add(ka),!0===i.wireframe?B(ca,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ca)):!0===i.wireframe?B(i.color,i.wireframeLinewidth, +i.wireframeLinecap,i.wireframeLinejoin):A(i.color)):i instanceof THREE.MeshBasicMaterial||i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial?null!==i.map?i.map.mapping instanceof THREE.UVMapping&&(Ua=h.uvs[0],E(ga,H,ba,Ca,ja,oa,Ua[f].x,Ua[f].y,Ua[g].x,Ua[g].y,Ua[j].x,Ua[j].y,i.map)):null!==i.envMap?i.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(ia.copy(h.vertexNormalsModelView[f]),nb=0.5*ia.x+0.5,yb=0.5*ia.y+0.5,ia.copy(h.vertexNormalsModelView[g]),Kb=0.5* +ia.x+0.5,gc=0.5*ia.y+0.5,ia.copy(h.vertexNormalsModelView[j]),Bb=0.5*ia.x+0.5,Cb=0.5*ia.y+0.5,E(ga,H,ba,Ca,ja,oa,nb,yb,Kb,gc,Bb,Cb,i.envMap)):(ca.copy(i.color),i.vertexColors===THREE.FaceColors&&ca.multiply(h.color),!0===i.wireframe?B(ca,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ca)):i instanceof THREE.MeshDepthMaterial?(ua=p.near,Wa=p.far,g=1-J(a.positionScreen.z*a.positionScreen.w,ua,Wa),ma.setRGB(g,g,g),g=1-J(d.positionScreen.z*d.positionScreen.w,ua,Wa),na.setRGB(g,g,g),g= +1-J(e.positionScreen.z*e.positionScreen.w,ua,Wa),Z.setRGB(g,g,g),ha.addColors(na,Z).multiplyScalar(0.5),Ta=F(ma,na,Z,ha),G(ga,H,ba,Ca,ja,oa,0,0,1,0,0,1,Ta)):i instanceof THREE.MeshNormalMaterial&&(i.shading==THREE.FlatShading?(d=h.normalModelView,ca.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),!0===i.wireframe?B(ca,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):A(ca)):i.shading==THREE.SmoothShading&&(d=h.vertexNormalsModelView[f],ma.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5), +d=h.vertexNormalsModelView[g],na.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[j],Z.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),ha.addColors(na,Z).multiplyScalar(0.5),Ta=F(ma,na,Z,ha),G(ga,H,ba,Ca,ja,oa,0,0,1,0,0,1,Ta)))}function z(a,b,c,d,e,f){v.beginPath();v.moveTo(a,b);v.lineTo(c,d);v.lineTo(e,f);v.closePath()}function w(a,b,c,d,e,f,g,j){v.beginPath();v.moveTo(a,b);v.lineTo(c,d);v.lineTo(e,f);v.lineTo(g,j);v.closePath()}function B(a,b,c,j){d(b);e(c); +f(j);g(a.getStyle());v.stroke();Da.expandByScalar(2*b)}function A(a){h(a.getStyle());v.fill()}function E(a,b,c,d,e,f,g,j,i,xa,k,m,l){if(!(l instanceof THREE.DataTexture||void 0===l.image||0==l.image.width)){if(!0===l.needsUpdate){var n=l.wrapS==THREE.RepeatWrapping,fb=l.wrapT==THREE.RepeatWrapping;db[l.id]=v.createPattern(l.image,!0===n&&!0===fb?"repeat":!0===n&&!1===fb?"repeat-x":!1===n&&!0===fb?"repeat-y":"no-repeat");l.needsUpdate=!1}void 0===db[l.id]?h("rgba(0,0,0,1)"):h(db[l.id]);var n=l.offset.x/ +l.repeat.x,fb=l.offset.y/l.repeat.y,p=l.image.width*l.repeat.x,q=l.image.height*l.repeat.y,g=(g+n)*p,j=(1-j+fb)*q,c=c-a,d=d-b,e=e-a,f=f-b,i=(i+n)*p-g,xa=(1-xa+fb)*q-j,k=(k+n)*p-g,m=(1-m+fb)*q-j,n=i*m-k*xa;0===n?(void 0===$a[l.id]&&(b=document.createElement("canvas"),b.width=l.image.width,b.height=l.image.height,b=b.getContext("2d"),b.drawImage(l.image,0,0),$a[l.id]=b.getImageData(0,0,l.image.width,l.image.height).data),b=$a[l.id],g=4*(Math.floor(g)+Math.floor(j)*l.image.width),ca.setRGB(b[g]/255, +b[g+1]/255,b[g+2]/255),A(ca)):(n=1/n,l=(m*c-xa*e)*n,xa=(m*d-xa*f)*n,c=(i*e-k*c)*n,d=(i*f-k*d)*n,a=a-l*g-c*j,g=b-xa*g-d*j,v.save(),v.transform(l,xa,c,d,a,g),v.fill(),v.restore())}}function G(a,b,c,d,e,f,g,j,h,i,xa,k,l){var n,m;n=l.width-1;m=l.height-1;g*=n;j*=m;c-=a;d-=b;e-=a;f-=b;h=h*n-g;i=i*m-j;xa=xa*n-g;k=k*m-j;m=1/(h*k-xa*i);n=(k*c-i*e)*m;i=(k*d-i*f)*m;c=(h*e-xa*c)*m;d=(h*f-xa*d)*m;a=a-n*g-c*j;b=b-i*g-d*j;v.save();v.transform(n,i,c,d,a,b);v.clip();v.drawImage(l,0,0);v.restore()}function F(a,b, +c,d){Oa[0]=255*a.r|0;Oa[1]=255*a.g|0;Oa[2]=255*a.b|0;Oa[4]=255*b.r|0;Oa[5]=255*b.g|0;Oa[6]=255*b.b|0;Oa[8]=255*c.r|0;Oa[9]=255*c.g|0;Oa[10]=255*c.b|0;Oa[12]=255*d.r|0;Oa[13]=255*d.g|0;Oa[14]=255*d.b|0;Ab.putImageData(j,0,0);eb.drawImage(mb,0,0);return ub}function J(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function I(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===p instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera."); +else{!0===this.autoClear&&this.clear();v.setTransform(1,0,0,-1,x,t);k.info.render.vertices=0;k.info.render.faces=0;l=s.projectScene(a,p,this.sortObjects,this.sortElements);n=l.elements;m=l.lights;zb=0>1,md=da.height>>1,Eb=xa.scale.x*x,Fb=xa.scale.y*t,Db=Eb*yc,fb=Fb*md,Da.min.set(Y.x-Db,Y.y-fb),Da.max.set(Y.x+Db,Y.y+fb),!1!==ob.isIntersectionBox(Da)&&(v.save(),v.translate(Y.x,Y.y),v.rotate(-xa.rotation),v.scale(Eb,-Fb),v.translate(-yc,-md),v.drawImage(da,0,0),v.restore())):N instanceof THREE.ParticleCanvasMaterial&&(Db=xa.scale.x*x,fb=xa.scale.y*t,Da.min.set(Y.x-Db,Y.y-fb),Da.max.set(Y.x+Db,Y.y+fb),!1!==ob.isIntersectionBox(Da)&& +(g(N.color.getStyle()),h(N.color.getStyle()),v.save(),v.translate(Y.x,Y.y),v.rotate(-xa.rotation),v.scale(Db,fb),N.program(v),v.restore()))}else if(da instanceof THREE.RenderableLine)C=da.v1,K=da.v2,C.positionScreen.x*=x,C.positionScreen.y*=t,K.positionScreen.x*=x,K.positionScreen.y*=t,Da.setFromPoints([C.positionScreen,K.positionScreen]),!0===ob.isIntersectionBox(Da)&&(Y=C,xa=K,b(N.opacity),c(N.blending),v.beginPath(),v.moveTo(Y.positionScreen.x,Y.positionScreen.y),v.lineTo(xa.positionScreen.x,xa.positionScreen.y), +N instanceof THREE.LineBasicMaterial?(d(N.linewidth),e(N.linecap),f(N.linejoin),g(N.color.getStyle()),i(null,null),v.stroke(),Da.expandByScalar(2*N.linewidth)):N instanceof THREE.LineDashedMaterial&&(d(N.linewidth),e(N.linecap),f(N.linejoin),g(N.color.getStyle()),i(N.dashSize,N.gapSize),v.stroke(),Da.expandByScalar(2*N.linewidth)));else if(da instanceof THREE.RenderableFace3){C=da.v1;K=da.v2;L=da.v3;if(-1>C.positionScreen.z||1K.positionScreen.z||1L.positionScreen.z||1C.positionScreen.z|| +1K.positionScreen.z||1L.positionScreen.z||1W.positionScreen.z||1m;m++)L.autoScaleCubemaps&&!f?(n=k,r=m,t=c.image[m],x=id,t.width<=x&&t.height<=x||(w=Math.max(t.width,t.height),v=Math.floor(t.width*x/w),x=Math.floor(t.height*x/w),w=document.createElement("canvas"),w.width=v,w.height=x,w.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,v,x),t=w),n[r]=t):k[m]=c.image[m];m=k[0];n=0===(m.width&m.width-1)&&0===(m.height&m.height-1);r=I(c.format); -t=I(c.type);B(j.TEXTURE_CUBE_MAP,c,n);for(m=0;6>m;m++)if(f){x=k[m].mipmaps;w=0;for(C=x.length;w=Oc&&console.warn("WebGLRenderer: trying to use "+ -a+" texture units while this GPU supports only "+Oc);ma+=1;return a}function A(a,b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function z(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 F(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function H(a,b,c){Ra!==a&&(a?j.enable(j.POLYGON_OFFSET_FILL):j.disable(j.POLYGON_OFFSET_FILL),Ra=a);if(a&&(Ua!==b||Sa!==c))j.polygonOffset(b,c), -Ua=b,Sa=c}function G(a){for(var a=a.split("\n"),b=0,c=a.length;bm;m++)M.autoScaleCubemaps&&!f?(n=k,r=m,t=c.image[m],x=gd,t.width<=x&&t.height<=x||(w=Math.max(t.width,t.height),v=Math.floor(t.width*x/w),x=Math.floor(t.height*x/w),w=document.createElement("canvas"),w.width=v,w.height=x,w.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,v,x),t=w),n[r]=t):k[m]=c.image[m];m=k[0];n=0===(m.width&m.width-1)&&0===(m.height&m.height-1);r=L(c.format); +t=L(c.type);T(j.TEXTURE_CUBE_MAP,c,n);for(m=0;6>m;m++)if(f){x=k[m].mipmaps;w=0;for(B=x.length;w=Mc&&console.warn("WebGLRenderer: trying to use "+ +a+" texture units while this GPU supports only "+Mc);Z+=1;return a}function A(a,b){a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function z(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 G(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function I(a){a!==yb&&(j.lineWidth(a),yb=a)}function F(a,b,c){Ta!==a&&(a?j.enable(j.POLYGON_OFFSET_FILL):j.disable(j.POLYGON_OFFSET_FILL),Ta=a);if(a&& +(Ua!==b||nb!==c))j.polygonOffset(b,c),Ua=b,nb=c}function V(a){for(var a=a.split("\n"),b=0,c=a.length;bb;b++)j.deleteFramebuffer(a.__webglFramebuffer[b]),j.deleteRenderbuffer(a.__webglRenderbuffer[b]); -else j.deleteFramebuffer(a.__webglFramebuffer),j.deleteRenderbuffer(a.__webglRenderbuffer);L.info.memory.textures--},O=function(a){a=a.target;a.removeEventListener("dispose",O);aa(a)},aa=function(a){var b=a.program;if(void 0!==b){a.program=void 0;var c,d,e=!1,a=0;for(c=va.length;ab;b++)j.deleteFramebuffer(a.__webglFramebuffer[b]),j.deleteRenderbuffer(a.__webglRenderbuffer[b]); +else j.deleteFramebuffer(a.__webglFramebuffer),j.deleteRenderbuffer(a.__webglRenderbuffer);M.info.memory.textures--},Y=function(a){a=a.target;a.removeEventListener("dispose",Y);da(a)},da=function(a){var b=a.program;if(void 0!==b){a.program=void 0;var c,d,e=!1,a=0;for(c=Na.length;ad.numSupportedMorphTargets?(h.sort(m),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(m):0===h.length&&h.push([0,0]);for(i=0;id.numSupportedMorphTargets?(h.sort(m),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(m):0===h.length&&h.push([0,0]);for(i=0;iya;ya++)nc=$a[ya],Eb[kb]=nc.x,Eb[kb+1]=nc.y,Eb[kb+2]=nc.z,kb+=3;else for(ya=0;3>ya;ya++)Eb[kb]=Va.x,Eb[kb+1]=Va.y,Eb[kb+2]=Va.z,kb+=3;E=0;for(U=xa.length;Eya;ya++)nc=$a[ya],Eb[kb]=nc.x,Eb[kb+1]=nc.y,Eb[kb+ -2]=nc.z,kb+=3;else for(ya=0;4>ya;ya++)Eb[kb]=Va.x,Eb[kb+1]=Va.y,Eb[kb+2]=Va.z,kb+=3;j.bindBuffer(j.ARRAY_BUFFER,sa.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,Eb,qa)}if(Ec&&qd&&ab){E=0;for(U=wa.length;Eya;ya++)zc=pb[ya],Fc[ic]=zc.x,Fc[ic+1]=zc.y,ic+=2;E=0;for(U=xa.length;Eya;ya++)zc=pb[ya],Fc[ic]=zc.x,Fc[ic+1]=zc.y,ic+=2;0ya;ya++)Ac=qb[ya],Gc[jc]=Ac.x,Gc[jc+1]=Ac.y,jc+=2;E=0;for(U=xa.length;Eya;ya++)Ac=qb[ya],Gc[jc]=Ac.x,Gc[jc+1]=Ac.y,jc+=2;0ya;ya++)mc=Xa[ya],Hb[ib]=mc.x,Hb[ib+1]=mc.y,Hb[ib+2]=mc.z,ib+=3;else for(ya=0;3>ya;ya++)Hb[ib]=$a.x,Hb[ib+1]=$a.y,Hb[ib+2]=$a.z,ib+=3;D=0;for(U=wa.length;Dya;ya++)mc= +Xa[ya],Hb[ib]=mc.x,Hb[ib+1]=mc.y,Hb[ib+2]=mc.z,ib+=3;else for(ya=0;4>ya;ya++)Hb[ib]=$a.x,Hb[ib+1]=$a.y,Hb[ib+2]=$a.z,ib+=3;j.bindBuffer(j.ARRAY_BUFFER,ta.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,Hb,qa)}if(Cc&&pd&&db){D=0;for(U=va.length;Dya;ya++)Bb=nb[ya],Dc[ic]=Bb.x,Dc[ic+1]=Bb.y,ic+=2;D=0;for(U=wa.length;Dya;ya++)Bb=nb[ya],Dc[ic]=Bb.x,Dc[ic+1]=Bb.y,ic+=2;0ya;ya++)Cb=ob[ya],Ec[jc]=Cb.x,Ec[jc+1]=Cb.y,jc+=2;D=0;for(U=wa.length;Dya;ya++)Cb=ob[ya],Ec[jc]=Cb.x,Ec[jc+1]=Cb.y,jc+=2;0f;f++){a.__webglFramebuffer[f]=j.createFramebuffer();a.__webglRenderbuffer[f]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=j.TEXTURE_CUBE_MAP_POSITIVE_X+f;j.bindFramebuffer(j.FRAMEBUFFER, -a.__webglFramebuffer[f]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,h,g.__webglTexture,0);T(a.__webglRenderbuffer[f],a)}c&&j.generateMipmap(j.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=j.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),B(j.TEXTURE_2D,a,c),j.texImage2D(j.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer), -j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_STENCIL_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):T(a.__webglRenderbuffer,a),c&&j.generateMipmap(j.TEXTURE_2D);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER, -null);j.bindFramebuffer(j.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Jb,a=fc,d=pb,e=Ib);b!==Hb&&(j.bindFramebuffer(j.FRAMEBUFFER,b),j.viewport(d,e,c,a),Hb=b);mc=c;qb=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){THREE.EventDispatcher.call(this);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); +w);for(w=0;wf;f++){a.__webglFramebuffer[f]=j.createFramebuffer();a.__webglRenderbuffer[f]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=j.TEXTURE_CUBE_MAP_POSITIVE_X+f;j.bindFramebuffer(j.FRAMEBUFFER, +a.__webglFramebuffer[f]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,h,g.__webglTexture,0);C(a.__webglRenderbuffer[f],a)}c&&j.generateMipmap(j.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=j.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),T(j.TEXTURE_2D,a,c),j.texImage2D(j.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer), +j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_STENCIL_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):C(a.__webglRenderbuffer,a),c&&j.generateMipmap(j.TEXTURE_2D);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER, +null);j.bindFramebuffer(j.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Bb,a=Cb,d=Kb,e=gc);b!==xb&&(j.bindFramebuffer(j.FRAMEBUFFER,b),j.viewport(d,e,c,a),xb=b);ob=c;Qa=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){THREE.EventDispatcher.call(this);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.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;a.shareDepthFrom=this.shareDepthFrom;return a}; THREE.WebGLRenderTarget.prototype.dispose=function(){this.dispatchEvent({type:"dispose"})};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)};THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.material=this.color=null;this.uvs=[[]];this.z=null};THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.v4=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3]; @@ -521,7 +522,7 @@ c=Math.floor(255*c.b),h=0;he)return null;var f=[],g=[],h=[],i,k,l;if(0=n--){console.log("Warning, unable to triangulate polygon!");break}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);l=k+1;e<=l&&(l=0);var m;a:{var s=m=void 0,r=void 0,p=void 0,q=void 0,x=void 0,t=void 0,v=void 0,w= -void 0,s=a[g[i]].x,r=a[g[i]].y,p=a[g[k]].x,q=a[g[k]].y,x=a[g[l]].x,t=a[g[l]].y;if(1E-10>(p-s)*(t-r)-(q-r)*(x-s))m=!1;else{var D=void 0,K=void 0,A=void 0,z=void 0,F=void 0,H=void 0,G=void 0,V=void 0,B=void 0,T=void 0,B=V=G=w=v=void 0,D=x-p,K=t-q,A=s-x,z=r-t,F=p-s,H=q-r;for(m=0;m(p-s)*(t-r)-(q-r)*(x-s))m=!1;else{var E=void 0,J=void 0,A=void 0,z=void 0,G=void 0,I=void 0,F=void 0,V=void 0,B=void 0,T=void 0,B=V=F=w=v=void 0,E=x-p,J=t-q,A=s-x,z=r-t,G=p-s,I=q-r;for(m=0;mi)g=d+1;else if(0b&&(b=0);1g?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).add(h).sub(a).clone()}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*l, -g=0;gg?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).add(h).sub(a).clone()}function e(c,d){var e,f;for(H=c.length;0<=--H;){e=H;f=H-1;0>f&&(f=c.length-1);for(var g=0,h=s+2*l, +g=0;gMath.abs(c-i)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(k,1-g),new THREE.Vector2(n,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(i,1-f),new THREE.Vector2(l,1-g),new THREE.Vector2(m,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.computeCentroids();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)?(l=!1,n=a(THREE.ShaderFlares.lensFlare,d)):(l=!0,n=a(THREE.ShaderFlares.lensFlareVertexTexture,d));m={};s={};m.vertex=b.getAttribLocation(n,"position");m.uv=b.getAttribLocation(n,"uv");s.renderType=b.getUniformLocation(n,"renderType");s.map=b.getUniformLocation(n,"map");s.occlusionMap=b.getUniformLocation(n,"occlusionMap");s.opacity= -b.getUniformLocation(n,"opacity");s.color=b.getUniformLocation(n,"color");s.scale=b.getUniformLocation(n,"scale");s.rotation=b.getUniformLocation(n,"rotation");s.screenPosition=b.getUniformLocation(n,"screenPosition")};this.render=function(a,d,e,f){var a=a.__webglFlares,t=a.length;if(t){var v=new THREE.Vector3,w=f/e,D=0.5*e,K=0.5*f,A=16/f,z=new THREE.Vector2(A*w,A),F=new THREE.Vector3(1,1,0),H=new THREE.Vector2(1,1),G=s,A=m;b.useProgram(n);b.enableVertexAttribArray(m.vertex);b.enableVertexAttribArray(m.uv); -b.uniform1i(G.occlusionMap,0);b.uniform1i(G.map,1);b.bindBuffer(b.ARRAY_BUFFER,g);b.vertexAttribPointer(A.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(A.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.disable(b.CULL_FACE);b.depthMask(!1);var V,B,T,C,I;for(V=0;Vz;z++)w[z]=new THREE.Vector3,t[z]=new THREE.Vector3;w=D.shadowCascadeNearZ[v];D=D.shadowCascadeFarZ[v];t[0].set(-1,-1,w);t[1].set(1,-1,w);t[2].set(-1, -1,w);t[3].set(1,1,w);t[4].set(-1,-1,D);t[5].set(1,-1,D);t[6].set(-1,1,D);t[7].set(1,1,D);A.originalCamera=m;t=new THREE.Gyroscope;t.position=p.shadowCascadeOffset;t.add(A);t.add(A.target);m.add(t);p.shadowCascadeArray[x]=A;console.log("Created virtualLight",A)}v=p;w=x;D=v.shadowCascadeArray[w];D.position.copy(v.position);D.target.position.copy(v.target.position);D.lookAt(D.target);D.shadowCameraVisible=v.shadowCameraVisible;D.shadowDarkness=v.shadowDarkness;D.shadowBias=v.shadowCascadeBias[w];t=v.shadowCascadeNearZ[w]; -v=v.shadowCascadeFarZ[w];D=D.pointsFrustum;D[0].z=t;D[1].z=t;D[2].z=t;D[3].z=t;D[4].z=v;D[5].z=v;D[6].z=v;D[7].z=v;K[q]=A;q++}else K[q]=p,q++;s=0;for(r=K.length;sz;z++)w[z]=new THREE.Vector3,t[z]=new THREE.Vector3;w=E.shadowCascadeNearZ[v];E=E.shadowCascadeFarZ[v];t[0].set(-1,-1,w);t[1].set(1,-1,w);t[2].set(-1, +1,w);t[3].set(1,1,w);t[4].set(-1,-1,E);t[5].set(1,-1,E);t[6].set(-1,1,E);t[7].set(1,1,E);A.originalCamera=m;t=new THREE.Gyroscope;t.position=p.shadowCascadeOffset;t.add(A);t.add(A.target);m.add(t);p.shadowCascadeArray[x]=A;console.log("Created virtualLight",A)}v=p;w=x;E=v.shadowCascadeArray[w];E.position.copy(v.position);E.target.position.copy(v.target.position);E.lookAt(E.target);E.shadowCameraVisible=v.shadowCameraVisible;E.shadowDarkness=v.shadowDarkness;E.shadowBias=v.shadowCascadeBias[w];t=v.shadowCascadeNearZ[w]; +v=v.shadowCascadeFarZ[w];E=E.pointsFrustum;E[0].z=t;E[1].z=t;E[2].z=t;E[3].z=t;E[4].z=v;E[5].z=v;E[6].z=v;E[7].z=v;J[q]=A;q++}else J[q]=p,q++;s=0;for(r=J.length;sv;v++)w=D[v],w.copy(t[v]),THREE.ShadowMapPlugin.__projector.unprojectVector(w,x),w.applyMatrix4(q.matrixWorldInverse),w.xk.x&&(k.x=w.x),w.yk.y&&(k.y=w.y),w.zk.z&& +!p.cameraHelper&&(p.cameraHelper=new THREE.CameraHelper(p.shadowCamera),p.shadowCamera.add(p.cameraHelper));if(p.isVirtual&&A.originalCamera==m){x=m;q=p.shadowCamera;t=p.pointsFrustum;E=p.pointsWorld;i.set(Infinity,Infinity,Infinity);k.set(-Infinity,-Infinity,-Infinity);for(v=0;8>v;v++)w=E[v],w.copy(t[v]),THREE.ShadowMapPlugin.__projector.unprojectVector(w,x),w.applyMatrix4(q.matrixWorldInverse),w.xk.x&&(k.x=w.x),w.yk.y&&(k.y=w.y),w.zk.z&& (k.z=w.z);q.left=i.x;q.right=k.x;q.top=k.y;q.bottom=i.y;q.updateProjectionMatrix()}q=p.shadowMap;t=p.shadowMatrix;x=p.shadowCamera;x.position.getPositionFromMatrix(p.matrixWorld);l.getPositionFromMatrix(p.target.matrixWorld);x.lookAt(l);x.updateMatrixWorld();x.matrixWorldInverse.getInverse(x.matrixWorld);p.cameraHelper&&(p.cameraHelper.visible=p.shadowCameraVisible);p.shadowCameraVisible&&p.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(x.projectionMatrix);t.multiply(x.matrixWorldInverse); -h.multiplyMatrices(x.projectionMatrix,x.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();D=n.__webglObjects;p=0;for(q=D.length;p