diff --git a/build/three.js b/build/three.js index 77a1acdf9bc46057fb1f9d8e5d0985836f915184..821d05417c8bb2fb307e22e529fb453b0bceedf3 100644 --- a/build/three.js +++ b/build/three.js @@ -3842,6 +3842,8 @@ THREE.Projector = function() { } + face.vertexNormalsLength = faceVertexNormals.length; + for ( c = 0, cl = faceVertexUvs.length; c < cl; c ++ ) { uvs = faceVertexUvs[ c ][ f ]; @@ -11888,7 +11890,6 @@ THREE.CanvasRenderer = function ( parameters ) { _context.beginPath(); _context.moveTo( v1.positionScreen.x, v1.positionScreen.y ); _context.lineTo( v2.positionScreen.x, v2.positionScreen.y ); - _context.closePath(); if ( material instanceof THREE.LineBasicMaterial ) { @@ -11967,7 +11968,7 @@ THREE.CanvasRenderer = function ( parameters ) { if ( _enableLighting === true ) { - if ( material.wireframe === false && material.shading == THREE.SmoothShading && element.vertexNormalsWorld.length == 3 ) { + if ( material.wireframe === false && material.shading == THREE.SmoothShading && element.vertexNormalsLength == 3 ) { _color1.r = _color2.r = _color3.r = _ambientLight.r; _color1.g = _color2.g = _color3.g = _ambientLight.g; @@ -12084,7 +12085,7 @@ THREE.CanvasRenderer = function ( parameters ) { if ( _enableLighting === true ) { - if ( !material.wireframe && material.shading == THREE.SmoothShading && element.vertexNormalsWorld.length == 4 ) { + if ( !material.wireframe && material.shading == THREE.SmoothShading && element.vertexNormalsLength == 4 ) { _color1.r = _color2.r = _color3.r = _color4.r = _ambientLight.r; _color1.g = _color2.g = _color3.g = _color4.g = _ambientLight.g; @@ -12189,7 +12190,7 @@ THREE.CanvasRenderer = function ( parameters ) { _context.moveTo( x0, y0 ); _context.lineTo( x1, y1 ); _context.lineTo( x2, y2 ); - _context.lineTo( x0, y0 ); + _context.closePath(); } @@ -12200,7 +12201,7 @@ THREE.CanvasRenderer = function ( parameters ) { _context.lineTo( x1, y1 ); _context.lineTo( x2, y2 ); _context.lineTo( x3, y3 ); - _context.lineTo( x0, y0 ); + _context.closePath(); } @@ -21496,6 +21497,7 @@ THREE.RenderableFace3 = function () { this.normalWorld = new THREE.Vector3(); this.vertexNormalsWorld = [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ]; + this.vertexNormalsLength = 0; this.material = null; this.uvs = [[]]; @@ -21519,6 +21521,7 @@ THREE.RenderableFace4 = function () { this.normalWorld = new THREE.Vector3(); this.vertexNormalsWorld = [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ]; + this.vertexNormalsLength = 0; this.material = null; this.uvs = [[]]; diff --git a/build/three.min.js b/build/three.min.js index f7ee869f4b151aaf355a4b9aebc7a1ae2760683a..a280d6ad8d7a7ebe9fd511c941790b38292b8dc2 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -76,17 +76,17 @@ true},updateMatrixWorld:function(a){this.matrixAutoUpdate===true&&this.updateMat clone:function(){}};THREE.Object3D.__m1=new THREE.Matrix4;THREE.Object3DCount=0; THREE.Projector=function(){function a(){var a;if(e===g.length){a=new THREE.RenderableObject;g.push(a)}else a=g[e];e++;return a}function b(){var a;if(i===k.length){a=new THREE.RenderableVertex;k.push(a)}else a=k[i];i++;return a}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,f=a.z+a.w,e=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(f>=0&&e>=0&&g>=0&&h>=0)return true;if(f<0&&e<0||g<0&&h<0)return false;f<0?c=Math.max(c,f/(f-e)):e<0&&(d=Math.min(d,f/(f-e)));g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d, g/(g-h)));if(dI&&h.positionScreen.z0)){ga=k[i-2];F.copy(V.positionScreen);N.copy(ga.positionScreen);if(d(F,N)===true){F.multiplyScalar(1/F.w);N.multiplyScalar(1/N.w);ca=void 0;if(r===s.length){ca=new THREE.RenderableLine;s.push(ca)}else ca=s[r];r++;n=ca;n.v1.positionScreen.copy(F);n.v2.positionScreen.copy(N);n.z=Math.max(F.z,N.z);n.material=Y.material;A.elements.push(n)}}}}}g=0;for(G=A.sprites.length;g0&&B.z<1){I=void 0;if(v===u.length){I=new THREE.RenderableParticle;u.push(I)}else I=u[v];v++;t=I;t.object=Y;t.x=B.x/B.w;t.y=B.y/B.w;t.z=B.z;t.rotation=Y.rotation.z;t.scale.x=Y.scale.x*Math.abs(t.x-(B.x+H.projectionMatrix.elements[0])/(B.w+H.projectionMatrix.elements[12]));t.scale.y=Y.scale.y*Math.abs(t.y-(B.y+H.projectionMatrix.elements[5])/(B.w+H.projectionMatrix.elements[13]));t.material=Y.material;A.elements.push(t)}}}D&&A.elements.sort(c); -return A}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1}; +function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);C.multiply(b.matrixWorld,b.projectionMatrixInverse);C.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(g,H,D){var I=H.near,Q=H.far,L=false,G,U,O,K,X,ga,da,sa,Y,ba,$,ca,na,qa,Ba,oa,Ga;v=r=q=o=0;A.elements.length=0;g.updateMatrixWorld();H.parent=== +void 0&&H.updateMatrixWorld();H.matrixWorldInverse.getInverse(H.matrixWorld);C.multiply(H.projectionMatrix,H.matrixWorldInverse);J.setFromMatrix(C);e=0;A.objects.length=0;A.sprites.length=0;A.lights.length=0;var Qa=function(b){if(b.visible!==false){if((b instanceof THREE.Mesh||b instanceof THREE.Line)&&(b.frustumCulled===false||J.contains(b)===true)){y.copy(b.matrixWorld.getPosition());C.multiplyVector3(y);f=a();f.object=b;f.z=y.z;A.objects.push(f)}else if(b instanceof THREE.Sprite||b instanceof THREE.Particle){y.copy(b.matrixWorld.getPosition()); +C.multiplyVector3(y);f=a();f.object=b;f.z=y.z;A.sprites.push(f)}else b instanceof THREE.Light&&A.lights.push(b);for(var c=0,d=b.children.length;cI&&h.positionScreen.z0)){ga=k[i-2];F.copy(X.positionScreen);N.copy(ga.positionScreen);if(d(F,N)===true){F.multiplyScalar(1/F.w);N.multiplyScalar(1/N.w);ca=void 0;if(r===s.length){ca=new THREE.RenderableLine;s.push(ca)}else ca=s[r];r++;n=ca;n.v1.positionScreen.copy(F);n.v2.positionScreen.copy(N);n.z=Math.max(F.z,N.z);n.material=Y.material;A.elements.push(n)}}}}}g=0;for(G=A.sprites.length;g0&&B.z<1){I=void 0;if(v===u.length){I=new THREE.RenderableParticle;u.push(I)}else I=u[v];v++;t=I;t.object=Y;t.x=B.x/B.w;t.y=B.y/B.w;t.z=B.z;t.rotation=Y.rotation.z;t.scale.x=Y.scale.x*Math.abs(t.x-(B.x+H.projectionMatrix.elements[0])/(B.w+H.projectionMatrix.elements[12]));t.scale.y=Y.scale.y*Math.abs(t.y-(B.y+H.projectionMatrix.elements[5])/(B.w+H.projectionMatrix.elements[13]));t.material=Y.material;A.elements.push(t)}}}D&& +A.elements.sort(c);return A}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),f=Math.cos(a.z/2),e=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);if(b===void 0||b==="XYZ"){this.x=e*d*f+c*g*h;this.y=c*g*f-e*d*h;this.z=c*d*h+e*g*f;this.w=c*d*f-e*g*h}else if(b==="YXZ"){this.x=e*d*f+c*g*h;this.y=c*g*f-e*d*h;this.z= c*d*h-e*g*f;this.w=c*d*f+e*g*h}else if(b==="ZXY"){this.x=e*d*f-c*g*h;this.y=c*g*f+e*d*h;this.z=c*d*h+e*g*f;this.w=c*d*f-e*g*h}else if(b==="ZYX"){this.x=e*d*f-c*g*h;this.y=c*g*f+e*d*h;this.z=c*d*h-e*g*f;this.w=c*d*f+e*g*h}else if(b==="YZX"){this.x=e*d*f+c*g*h;this.y=c*g*f+e*d*h;this.z=c*d*h-e*g*f;this.w=c*d*f-e*g*h}else if(b==="XZY"){this.x=e*d*f-c*g*h;this.y=c*g*f-e*d*h;this.z=c*d*h+e*g*f;this.w=c*d*f+e*g*h}return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d;this.y=a.y* d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0],a=b[4],d=b[8],f=b[1],e=b[5],g=b[9],h=b[2],i=b[6],b=b[10],k=c+e+b;if(k>0){c=0.5/Math.sqrt(k+1);this.w=0.25/c;this.x=(i-g)*c;this.y=(d-h)*c;this.z=(f-a)*c}else if(c>e&&c>b){c=2*Math.sqrt(1+c-e-b);this.w=(i-g)/c;this.x=0.25*c;this.y=(a+f)/c;this.z=(d+h)/c}else if(e>b){c=2*Math.sqrt(1+e-c-b);this.w=(d-h)/c;this.x=(a+f)/c;this.y=0.25*c;this.z=(g+i)/c}else{c=2*Math.sqrt(1+b-c-e);this.w=(f-a)/c;this.x= @@ -119,10 +119,10 @@ THREE.BufferGeometry.prototype={constructor:THREE.BufferGeometry,applyMatrix:fun Infinity),max:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};var a=this.attributes.position.array;if(a)for(var b=this.boundingBox,c,d,f,e=0,g=a.length;eb.max.x)b.max.x=c;if(db.max.y)b.max.y=d;if(fb.max.z)b.max.z=f}if(a===void 0||a.length===0){this.boundingBox.min.set(0,0,0);this.boundingBox.max.set(0,0,0)}},computeBoundingSphere:function(){if(!this.boundingSphere)this.boundingSphere= {radius:0};var a=this.attributes.position.array;if(a){for(var b,c=0,d,f,e=0,g=a.length;ec&&(c=b)}this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position&&this.attributes.index){var a,b,c,d;a=this.attributes.position.array.length;if(this.attributes.normal===void 0)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;athis.points.length-2?this.points.length-1:e+1;c[3]=e>this.points.length-3?this.points.length-1: e+2;k=this.points[c[0]];j=this.points[c[1]];o=this.points[c[2]];m=this.points[c[3]];h=g*g;i=g*h;d.x=b(k.x,j.x,o.x,m.x,g,h,i);d.y=b(k.y,j.y,o.y,m.y,g,h,i);d.z=b(k.z,j.z,o.z,m.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a0){c(THREE.NormalBlending);b(1); -f("rgba("+Math.floor(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b*255)+","+s+")");n.fillRect(Math.floor(Ha.getX()),Math.floor(Ha.getY()),Math.floor(Ha.getWidth()),Math.floor(Ha.getHeight()))}Ha.empty()}};this.render=function(a,j){function o(a,b,c,d){var f,e,g,h,i,l;f=0;for(e=a.length;f0){c(THREE.NormalBlending);b(1); +f("rgba("+Math.floor(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b*255)+","+s+")");n.fillRect(Math.floor(Ia.getX()),Math.floor(Ia.getY()),Math.floor(Ia.getWidth()),Math.floor(Ia.getHeight()))}Ia.empty()}};this.render=function(a,j){function o(a,b,c,d){var f,e,g,h,i,l;f=0;for(e=a.length;f255?255:f;Ua[1]=e<0?0:e>255?255:e;Ua[2]=a<0?0:a>255?255:a;Ua[4]=g<0?0:g>255?255:g;Ua[5]=h<0?0:h>255?255:h;Ua[6]=b<0?0:b>255?255:b;Ua[8]=i<0?0:i>255?255:i;Ua[9]=j<0?0:j>255?255:j;Ua[10]=c<0?0:c>255?255:c;Ua[12]=k<0?0:k>255?255:k;Ua[13]=m<0?0:m>255?255:m;Ua[14]=d<0?0:d>255?255:d;l.putImageData(bb,0,0);gb.drawImage(fb,0,0);return Kb}function dc(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function ic(a){a= -(a+1)*0.5;return a<0?0:a>1?1:a}function Tb(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;if(f!==0){f=1/Math.sqrt(f);c=c*f;d=d*f;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}if(j instanceof THREE.Camera===false)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var ec,jc,ka,X;this.autoClear===true?this.clear():n.setTransform(1,0,0,-1,q,p);e.info.render.vertices=0;e.info.render.faces=0;g=k.projectScene(a,j,this.sortElements);h=g.elements;i=g.lights;Wa=i.length>0;if(Wa=== -true){ec=i;var ia,va;Ca.setRGB(0,0,0);Qa.setRGB(0,0,0);Ia.setRGB(0,0,0);jc=0;for(X=ec.length;jc>1;Qc=ka.height>>1;hb=va.scale.x*q;ib=va.scale.y*p;nb=hb*kc;ob=ib*Qc;Ba.set(ia.x-nb,ia.y-ob,ia.x+nb,ia.y+ob);if(eb.intersects(Ba)!==false){n.save();n.translate(ia.x,ia.y);n.rotate(-va.rotation);n.scale(hb,-ib);n.translate(-kc,-Qc);n.drawImage(ka,0,0);n.restore()}}else if(X instanceof THREE.ParticleCanvasMaterial){nb=va.scale.x*q;ob=va.scale.y*p;Ba.set(ia.x-nb,ia.y-ob,ia.x+nb,ia.y+ob);if(eb.intersects(Ba)!==false){d(X.color.getContextStyle());f(X.color.getContextStyle());n.save(); -n.translate(ia.x,ia.y);n.rotate(-va.rotation);n.scale(nb,ob);X.program(n);n.restore()}}}else if(ka instanceof THREE.RenderableLine){w=ka.v1;J=ka.v2;w.positionScreen.x=w.positionScreen.x*q;w.positionScreen.y=w.positionScreen.y*p;J.positionScreen.x=J.positionScreen.x*q;J.positionScreen.y=J.positionScreen.y*p;Ba.addPoint(w.positionScreen.x,w.positionScreen.y);Ba.addPoint(J.positionScreen.x,J.positionScreen.y);if(eb.intersects(Ba)===true){ia=w;va=J;b(X.opacity);c(X.blending);n.beginPath();n.moveTo(ia.positionScreen.x, -ia.positionScreen.y);n.lineTo(va.positionScreen.x,va.positionScreen.y);n.closePath();if(X instanceof THREE.LineBasicMaterial){ia=X.linewidth;if(y!==ia)y=n.lineWidth=ia;ia=X.linecap;if(B!==ia)B=n.lineCap=ia;ia=X.linejoin;if(C!==ia)C=n.lineJoin=ia;d(X.color.getContextStyle());n.stroke();Ba.inflate(X.linewidth*2)}}}else if(ka instanceof THREE.RenderableFace3){w=ka.v1;J=ka.v2;F=ka.v3;w.positionScreen.x=w.positionScreen.x*q;w.positionScreen.y=w.positionScreen.y*p;J.positionScreen.x=J.positionScreen.x* -q;J.positionScreen.y=J.positionScreen.y*p;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y=F.positionScreen.y*p;if(X.overdraw===true){Tb(w.positionScreen,J.positionScreen);Tb(J.positionScreen,F.positionScreen);Tb(F.positionScreen,w.positionScreen)}Ba.add3Points(w.positionScreen.x,w.positionScreen.y,J.positionScreen.x,J.positionScreen.y,F.positionScreen.x,F.positionScreen.y);eb.intersects(Ba)===true&&m(w,J,F,0,1,2,ka,X,a)}else if(ka instanceof THREE.RenderableFace4){w=ka.v1;J=ka.v2;F=ka.v3; -N=ka.v4;w.positionScreen.x=w.positionScreen.x*q;w.positionScreen.y=w.positionScreen.y*p;J.positionScreen.x=J.positionScreen.x*q;J.positionScreen.y=J.positionScreen.y*p;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y=F.positionScreen.y*p;N.positionScreen.x=N.positionScreen.x*q;N.positionScreen.y=N.positionScreen.y*p;M.positionScreen.copy(J.positionScreen);H.positionScreen.copy(N.positionScreen);if(X.overdraw===true){Tb(w.positionScreen,J.positionScreen);Tb(J.positionScreen,N.positionScreen); -Tb(N.positionScreen,w.positionScreen);Tb(F.positionScreen,M.positionScreen);Tb(F.positionScreen,H.positionScreen)}Ba.addPoint(w.positionScreen.x,w.positionScreen.y);Ba.addPoint(J.positionScreen.x,J.positionScreen.y);Ba.addPoint(F.positionScreen.x,F.positionScreen.y);Ba.addPoint(N.positionScreen.x,N.positionScreen.y);if(eb.intersects(Ba)===true){ia=w;va=J;nb=F;ob=N;hb=M;ib=H;kc=a;e.info.render.vertices=e.info.render.vertices+4;e.info.render.faces++;b(X.opacity);c(X.blending);if(X.map!==void 0&&X.map!== -null||X.envMap!==void 0&&X.envMap!==null){m(ia,va,ob,0,1,3,ka,X,kc);m(hb,nb,ib,1,2,3,ka,X,kc)}else{D=ia.positionScreen.x;I=ia.positionScreen.y;Q=va.positionScreen.x;L=va.positionScreen.y;G=nb.positionScreen.x;U=nb.positionScreen.y;O=ob.positionScreen.x;K=ob.positionScreen.y;V=hb.positionScreen.x;ga=hb.positionScreen.y;ha=ib.positionScreen.x;da=ib.positionScreen.y;if(X instanceof THREE.MeshBasicMaterial){Sb(D,I,Q,L,G,U,O,K);X.wireframe===true?r(X.color,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin): -s(X.color)}else if(X instanceof THREE.MeshLambertMaterial)if(Wa===true)if(!X.wireframe&&X.shading==THREE.SmoothShading&&ka.vertexNormalsWorld.length==4){ba.r=$.r=ca.r=ma.r=Ca.r;ba.g=$.g=ca.g=ma.g=Ca.g;ba.b=$.b=ca.b=ma.b=Ca.b;o(i,ka.v1.positionWorld,ka.vertexNormalsWorld[0],ba);o(i,ka.v2.positionWorld,ka.vertexNormalsWorld[1],$);o(i,ka.v4.positionWorld,ka.vertexNormalsWorld[3],ca);o(i,ka.v3.positionWorld,ka.vertexNormalsWorld[2],ma);ba.r=Math.max(0,Math.min(X.color.r*ba.r,1));ba.g=Math.max(0,Math.min(X.color.g* -ba.g,1));ba.b=Math.max(0,Math.min(X.color.b*ba.b,1));$.r=Math.max(0,Math.min(X.color.r*$.r,1));$.g=Math.max(0,Math.min(X.color.g*$.g,1));$.b=Math.max(0,Math.min(X.color.b*$.b,1));ca.r=Math.max(0,Math.min(X.color.r*ca.r,1));ca.g=Math.max(0,Math.min(X.color.g*ca.g,1));ca.b=Math.max(0,Math.min(X.color.b*ca.b,1));ma.r=Math.max(0,Math.min(X.color.r*ma.r,1));ma.g=Math.max(0,Math.min(X.color.g*ma.g,1));ma.b=Math.max(0,Math.min(X.color.b*ma.b,1));Pa=A(ba,$,ca,ma);u(D,I,Q,L,O,K);v(D,I,Q,L,O,K,0,0,1,0,0,1, -Pa);u(V,ga,G,U,ha,da);v(V,ga,G,U,ha,da,1,0,1,1,0,1,Pa)}else{Y.r=Ca.r;Y.g=Ca.g;Y.b=Ca.b;o(i,ka.centroidWorld,ka.normalWorld,Y);Y.r=Math.max(0,Math.min(X.color.r*Y.r,1));Y.g=Math.max(0,Math.min(X.color.g*Y.g,1));Y.b=Math.max(0,Math.min(X.color.b*Y.b,1));Sb(D,I,Q,L,G,U,O,K);X.wireframe===true?r(Y,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin):s(Y)}else{Sb(D,I,Q,L,G,U,O,K);X.wireframe===true?r(X.color,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin):s(X.color)}else if(X instanceof -THREE.MeshNormalMaterial){Y.r=ic(ka.normalWorld.x);Y.g=ic(ka.normalWorld.y);Y.b=ic(ka.normalWorld.z);Sb(D,I,Q,L,G,U,O,K);X.wireframe===true?r(Y,X.wireframeLinewidth,X.wireframeLinecap,X.wireframeLinejoin):s(Y)}else if(X instanceof THREE.MeshDepthMaterial){qa=j.near;Fa=j.far;ba.r=ba.g=ba.b=1-dc(ia.positionScreen.z,qa,Fa);$.r=$.g=$.b=1-dc(va.positionScreen.z,qa,Fa);ca.r=ca.g=ca.b=1-dc(ob.positionScreen.z,qa,Fa);ma.r=ma.g=ma.b=1-dc(nb.positionScreen.z,qa,Fa);Pa=A(ba,$,ca,ma);u(D,I,Q,L,O,K);v(D,I,Q,L, -O,K,0,0,1,0,0,1,Pa);u(V,ga,G,U,ha,da);v(V,ga,G,U,ha,da,1,0,1,1,0,1,Pa)}}}}Ha.addRectangle(Ba)}}n.setTransform(1,0,0,1,0,0)}}}; +255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),m=~~(d.g*255),d=~~(d.b*255);Va[0]=f<0?0:f>255?255:f;Va[1]=e<0?0:e>255?255:e;Va[2]=a<0?0:a>255?255:a;Va[4]=g<0?0:g>255?255:g;Va[5]=h<0?0:h>255?255:h;Va[6]=b<0?0:b>255?255:b;Va[8]=i<0?0:i>255?255:i;Va[9]=j<0?0:j>255?255:j;Va[10]=c<0?0:c>255?255:c;Va[12]=k<0?0:k>255?255:k;Va[13]=m<0?0:m>255?255:m;Va[14]=d<0?0:d>255?255:d;l.putImageData(bb,0,0);gb.drawImage(fb,0,0);return Kb}function dc(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function ic(a){a= +(a+1)*0.5;return a<0?0:a>1?1:a}function Tb(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;if(f!==0){f=1/Math.sqrt(f);c=c*f;d=d*f;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}if(j instanceof THREE.Camera===false)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var ec,jc,ja,W;this.autoClear===true?this.clear():n.setTransform(1,0,0,-1,q,p);e.info.render.vertices=0;e.info.render.faces=0;g=k.projectScene(a,j,this.sortElements);h=g.elements;i=g.lights;Xa=i.length>0;if(Xa=== +true){ec=i;var ha,va;Da.setRGB(0,0,0);Ra.setRGB(0,0,0);Ja.setRGB(0,0,0);jc=0;for(W=ec.length;jc>1;Qc=ja.height>>1;hb=va.scale.x*q;ib=va.scale.y*p;nb=hb*kc;ob=ib*Qc;Ca.set(ha.x-nb,ha.y-ob,ha.x+nb,ha.y+ob);if(eb.intersects(Ca)!==false){n.save();n.translate(ha.x,ha.y);n.rotate(-va.rotation);n.scale(hb,-ib);n.translate(-kc,-Qc);n.drawImage(ja,0,0);n.restore()}}else if(W instanceof THREE.ParticleCanvasMaterial){nb=va.scale.x*q;ob=va.scale.y*p;Ca.set(ha.x-nb,ha.y-ob,ha.x+nb,ha.y+ob);if(eb.intersects(Ca)!==false){d(W.color.getContextStyle());f(W.color.getContextStyle());n.save(); +n.translate(ha.x,ha.y);n.rotate(-va.rotation);n.scale(nb,ob);W.program(n);n.restore()}}}else if(ja instanceof THREE.RenderableLine){w=ja.v1;J=ja.v2;w.positionScreen.x=w.positionScreen.x*q;w.positionScreen.y=w.positionScreen.y*p;J.positionScreen.x=J.positionScreen.x*q;J.positionScreen.y=J.positionScreen.y*p;Ca.addPoint(w.positionScreen.x,w.positionScreen.y);Ca.addPoint(J.positionScreen.x,J.positionScreen.y);if(eb.intersects(Ca)===true){ha=w;va=J;b(W.opacity);c(W.blending);n.beginPath();n.moveTo(ha.positionScreen.x, +ha.positionScreen.y);n.lineTo(va.positionScreen.x,va.positionScreen.y);if(W instanceof THREE.LineBasicMaterial){ha=W.linewidth;if(y!==ha)y=n.lineWidth=ha;ha=W.linecap;if(B!==ha)B=n.lineCap=ha;ha=W.linejoin;if(C!==ha)C=n.lineJoin=ha;d(W.color.getContextStyle());n.stroke();Ca.inflate(W.linewidth*2)}}}else if(ja instanceof THREE.RenderableFace3){w=ja.v1;J=ja.v2;F=ja.v3;w.positionScreen.x=w.positionScreen.x*q;w.positionScreen.y=w.positionScreen.y*p;J.positionScreen.x=J.positionScreen.x*q;J.positionScreen.y= +J.positionScreen.y*p;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y=F.positionScreen.y*p;if(W.overdraw===true){Tb(w.positionScreen,J.positionScreen);Tb(J.positionScreen,F.positionScreen);Tb(F.positionScreen,w.positionScreen)}Ca.add3Points(w.positionScreen.x,w.positionScreen.y,J.positionScreen.x,J.positionScreen.y,F.positionScreen.x,F.positionScreen.y);eb.intersects(Ca)===true&&m(w,J,F,0,1,2,ja,W,a)}else if(ja instanceof THREE.RenderableFace4){w=ja.v1;J=ja.v2;F=ja.v3;N=ja.v4;w.positionScreen.x= +w.positionScreen.x*q;w.positionScreen.y=w.positionScreen.y*p;J.positionScreen.x=J.positionScreen.x*q;J.positionScreen.y=J.positionScreen.y*p;F.positionScreen.x=F.positionScreen.x*q;F.positionScreen.y=F.positionScreen.y*p;N.positionScreen.x=N.positionScreen.x*q;N.positionScreen.y=N.positionScreen.y*p;M.positionScreen.copy(J.positionScreen);H.positionScreen.copy(N.positionScreen);if(W.overdraw===true){Tb(w.positionScreen,J.positionScreen);Tb(J.positionScreen,N.positionScreen);Tb(N.positionScreen,w.positionScreen); +Tb(F.positionScreen,M.positionScreen);Tb(F.positionScreen,H.positionScreen)}Ca.addPoint(w.positionScreen.x,w.positionScreen.y);Ca.addPoint(J.positionScreen.x,J.positionScreen.y);Ca.addPoint(F.positionScreen.x,F.positionScreen.y);Ca.addPoint(N.positionScreen.x,N.positionScreen.y);if(eb.intersects(Ca)===true){ha=w;va=J;nb=F;ob=N;hb=M;ib=H;kc=a;e.info.render.vertices=e.info.render.vertices+4;e.info.render.faces++;b(W.opacity);c(W.blending);if(W.map!==void 0&&W.map!==null||W.envMap!==void 0&&W.envMap!== +null){m(ha,va,ob,0,1,3,ja,W,kc);m(hb,nb,ib,1,2,3,ja,W,kc)}else{D=ha.positionScreen.x;I=ha.positionScreen.y;Q=va.positionScreen.x;L=va.positionScreen.y;G=nb.positionScreen.x;U=nb.positionScreen.y;O=ob.positionScreen.x;K=ob.positionScreen.y;X=hb.positionScreen.x;ga=hb.positionScreen.y;da=ib.positionScreen.x;sa=ib.positionScreen.y;if(W instanceof THREE.MeshBasicMaterial){Sb(D,I,Q,L,G,U,O,K);W.wireframe===true?r(W.color,W.wireframeLinewidth,W.wireframeLinecap,W.wireframeLinejoin):s(W.color)}else if(W instanceof +THREE.MeshLambertMaterial)if(Xa===true)if(!W.wireframe&&W.shading==THREE.SmoothShading&&ja.vertexNormalsLength==4){ba.r=$.r=ca.r=na.r=Da.r;ba.g=$.g=ca.g=na.g=Da.g;ba.b=$.b=ca.b=na.b=Da.b;o(i,ja.v1.positionWorld,ja.vertexNormalsWorld[0],ba);o(i,ja.v2.positionWorld,ja.vertexNormalsWorld[1],$);o(i,ja.v4.positionWorld,ja.vertexNormalsWorld[3],ca);o(i,ja.v3.positionWorld,ja.vertexNormalsWorld[2],na);ba.r=Math.max(0,Math.min(W.color.r*ba.r,1));ba.g=Math.max(0,Math.min(W.color.g*ba.g,1));ba.b=Math.max(0, +Math.min(W.color.b*ba.b,1));$.r=Math.max(0,Math.min(W.color.r*$.r,1));$.g=Math.max(0,Math.min(W.color.g*$.g,1));$.b=Math.max(0,Math.min(W.color.b*$.b,1));ca.r=Math.max(0,Math.min(W.color.r*ca.r,1));ca.g=Math.max(0,Math.min(W.color.g*ca.g,1));ca.b=Math.max(0,Math.min(W.color.b*ca.b,1));na.r=Math.max(0,Math.min(W.color.r*na.r,1));na.g=Math.max(0,Math.min(W.color.g*na.g,1));na.b=Math.max(0,Math.min(W.color.b*na.b,1));Qa=A(ba,$,ca,na);u(D,I,Q,L,O,K);v(D,I,Q,L,O,K,0,0,1,0,0,1,Qa);u(X,ga,G,U,da,sa);v(X, +ga,G,U,da,sa,1,0,1,1,0,1,Qa)}else{Y.r=Da.r;Y.g=Da.g;Y.b=Da.b;o(i,ja.centroidWorld,ja.normalWorld,Y);Y.r=Math.max(0,Math.min(W.color.r*Y.r,1));Y.g=Math.max(0,Math.min(W.color.g*Y.g,1));Y.b=Math.max(0,Math.min(W.color.b*Y.b,1));Sb(D,I,Q,L,G,U,O,K);W.wireframe===true?r(Y,W.wireframeLinewidth,W.wireframeLinecap,W.wireframeLinejoin):s(Y)}else{Sb(D,I,Q,L,G,U,O,K);W.wireframe===true?r(W.color,W.wireframeLinewidth,W.wireframeLinecap,W.wireframeLinejoin):s(W.color)}else if(W instanceof THREE.MeshNormalMaterial){Y.r= +ic(ja.normalWorld.x);Y.g=ic(ja.normalWorld.y);Y.b=ic(ja.normalWorld.z);Sb(D,I,Q,L,G,U,O,K);W.wireframe===true?r(Y,W.wireframeLinewidth,W.wireframeLinecap,W.wireframeLinejoin):s(Y)}else if(W instanceof THREE.MeshDepthMaterial){oa=j.near;Ga=j.far;ba.r=ba.g=ba.b=1-dc(ha.positionScreen.z,oa,Ga);$.r=$.g=$.b=1-dc(va.positionScreen.z,oa,Ga);ca.r=ca.g=ca.b=1-dc(ob.positionScreen.z,oa,Ga);na.r=na.g=na.b=1-dc(nb.positionScreen.z,oa,Ga);Qa=A(ba,$,ca,na);u(D,I,Q,L,O,K);v(D,I,Q,L,O,K,0,0,1,0,0,1,Qa);u(X,ga,G, +U,da,sa);v(X,ga,G,U,da,sa,1,0,1,1,0,1,Qa)}}}}Ia.addRectangle(Ca)}}n.setTransform(1,0,0,1,0,0)}}}; THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform float flipEnvMap;\nuniform int combine;\n#ifdef USE_BUMPMAP\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif", envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#ifdef USE_BUMPMAP\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nreflectVec = refract( cameraToVertex, normal, refractionRatio );\n} else { \nreflectVec = reflect( cameraToVertex, normal );\n}\n#else\nreflectVec = vReflect;\n#endif\n#ifdef DOUBLE_SIDED\nfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\nvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#else\nvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#endif\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\nif ( combine == 1 ) {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n} else {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n}\n#endif", envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP )\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = modelMatrix * vec4( position, 1.0 );\n#endif\n#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP )\nvec3 nWorld = mat3( modelMatrix[ 0 ].xyz, modelMatrix[ 1 ].xyz, modelMatrix[ 2 ].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refractionRatio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif", @@ -328,18 +328,18 @@ THREE.ShaderChunk.shadowmap_pars_fragment,"void main() {\ngl_FragColor = vec4( p THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}}; THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){if(a.__webglCustomAttributesList===void 0)a.__webglCustomAttributesList=[];for(var f in d.attributes){var e=d.attributes[f];if(!e.__webglInitialized||e.createUniqueBuffers){e.__webglInitialized=true;var g=1;e.type==="v2"?g=2:e.type==="v3"?g=3:e.type==="v4"?g=4:e.type==="c"&&(g=3);e.size=g;e.array=new Float32Array(c*g);e.buffer=l.createBuffer();e.buffer.belongsToAttribute=f;e.needsUpdate=true}a.__webglCustomAttributesList.push(e)}}} function c(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function d(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?false:a&&a.shading!==void 0&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function f(a){return a.map||a.lightMap||a.bumpMap||a.specularMap||a instanceof THREE.ShaderMaterial?true:false}function e(a,b,c){var d, -f,e,g,h=a.vertices;g=h.length;var i=a.colors,j=i.length,k=a.__vertexArray,m=a.__colorArray,n=a.__sortArray,o=a.verticesNeedUpdate,p=a.colorsNeedUpdate,q=a.__webglCustomAttributesList;if(c.sortParticles){Ca.copy(Wa);Ca.multiplySelf(c.matrixWorld);for(d=0;d=0;c--)a[c].object===b&&a.splice(c,1)}function n(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function r(a,b,c,d,f){if(d.needsUpdate){d.program&&G.deallocateMaterial(d);G.initMaterial(d,b,c,f);d.needsUpdate=false}if(d.morphTargets&&!f.__webglMorphTargetInfluences)f.__webglMorphTargetInfluences=new Float32Array(G.maxMorphTargets);var e=false,g=d.program,h=g.uniforms,i=d.uniforms;if(g!==K){l.useProgram(g);K=g;e=true}if(d.id!==ga){ga=d.id;e= -true}if(e||a!==da){l.uniformMatrix4fv(h.projectionMatrix,false,a._projectionMatrixArray);a!==da&&(da=a)}if(e){if(c&&d.fog){i.fogColor.value=c.color;if(c instanceof THREE.Fog){i.fogNear.value=c.near;i.fogFar.value=c.far}else if(c instanceof THREE.FogExp2)i.fogDensity.value=c.density}if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(ta){for(var j,k=0,m=0,n=0,o,p,q,u=fb,r=u.directional.colors,s=u.directional.positions,t=u.point.colors,v=u.point.positions,y= +true}if(e||a!==sa){l.uniformMatrix4fv(h.projectionMatrix,false,a._projectionMatrixArray);a!==sa&&(sa=a)}if(e){if(c&&d.fog){i.fogColor.value=c.color;if(c instanceof THREE.Fog){i.fogNear.value=c.near;i.fogFar.value=c.far}else if(c instanceof THREE.FogExp2)i.fogDensity.value=c.density}if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(ta){for(var j,k=0,m=0,n=0,o,p,q,u=fb,r=u.directional.colors,s=u.directional.positions,t=u.point.colors,v=u.point.positions,y= u.point.distances,B=u.spot.colors,D=u.spot.positions,I=u.spot.distances,F=u.spot.directions,J=u.spot.angles,M=u.spot.exponents,O=0,Y=0,N=0,H=q=0,c=H=0,e=b.length;c1||b.__oldAnisotropy)){l.texParameterf(a, bb.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,gb));b.__oldAnisotropy=b.anisotropy}}function y(a,b){l.bindRenderbuffer(l.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){l.renderbufferStorage(l.RENDERBUFFER,l.DEPTH_COMPONENT16,b.width,b.height);l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_ATTACHMENT,l.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){l.renderbufferStorage(l.RENDERBUFFER,l.DEPTH_STENCIL,b.width,b.height);l.framebufferRenderbuffer(l.FRAMEBUFFER,l.DEPTH_STENCIL_ATTACHMENT, l.RENDERBUFFER,a)}else l.renderbufferStorage(l.RENDERBUFFER,l.RGBA4,b.width,b.height)}function B(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?l.NEAREST:l.LINEAR}function C(a){return a===THREE.RepeatWrapping?l.REPEAT:a===THREE.ClampToEdgeWrapping?l.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?l.MIRRORED_REPEAT:a===THREE.NearestFilter?l.NEAREST:a===THREE.NearestMipMapNearestFilter?l.NEAREST_MIPMAP_NEAREST:a===THREE.NearestMipMapLinearFilter? @@ -362,8 +362,8 @@ l.INT:a===THREE.UnsignedIntType?l.UNSIGNED_INT:a===THREE.FloatType?l.FLOAT:a===T l.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?l.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?l.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?l.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?l.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?l.DST_COLOR:a===THREE.OneMinusDstColorFactor?l.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?l.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},w=a.canvas!==void 0?a.canvas:document.createElement("canvas"),J=a.precision!==void 0? a.precision:"highp",F=a.alpha!==void 0?a.alpha:true,N=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,M=a.antialias!==void 0?a.antialias:false,H=a.stencil!==void 0?a.stencil:true,D=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,I=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),Q=a.clearAlpha!==void 0?a.clearAlpha:0,L=a.maxLights!==void 0?a.maxLights:4;this.domElement=w;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil= this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}}; -var G=this,U=[],O=0,K=null,V=null,ga=-1,ha=null,da=null,Y=0,ba=-1,$=-1,ca=-1,ma=-1,sa=-1,$a=-1,qa=-1,Fa=-1,Pa=null,Ta=null,Jb=null,rb=null,Rb=0,sb=0,cb=0,db=0,eb=0,Ha=0,Ba=new THREE.Frustum,Wa=new THREE.Matrix4,Ca=new THREE.Matrix4,Qa=new THREE.Vector4,Ia=new THREE.Vector3,ta=true,fb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},l,bb;try{if(!(l= -w.getContext("experimental-webgl",{alpha:F,premultipliedAlpha:N,antialias:M,stencil:H,preserveDrawingBuffer:D})))throw"Error creating WebGL context.";}catch(Ua){console.error(Ua)}a=l.getExtension("OES_texture_float");F=l.getExtension("OES_standard_derivatives");bb=l.getExtension("EXT_texture_filter_anisotropic")||l.getExtension("MOZ_EXT_texture_filter_anisotropic")||l.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");F||console.log("THREE.WebGLRenderer: Standard derivatives not supported."); +var G=this,U=[],O=0,K=null,X=null,ga=-1,da=null,sa=null,Y=0,ba=-1,$=-1,ca=-1,na=-1,qa=-1,Ba=-1,oa=-1,Ga=-1,Qa=null,Ua=null,Jb=null,rb=null,Rb=0,sb=0,cb=0,db=0,eb=0,Ia=0,Ca=new THREE.Frustum,Xa=new THREE.Matrix4,Da=new THREE.Matrix4,Ra=new THREE.Vector4,Ja=new THREE.Vector3,ta=true,fb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},l,bb;try{if(!(l= +w.getContext("experimental-webgl",{alpha:F,premultipliedAlpha:N,antialias:M,stencil:H,preserveDrawingBuffer:D})))throw"Error creating WebGL context.";}catch(Va){console.error(Va)}a=l.getExtension("OES_texture_float");F=l.getExtension("OES_standard_derivatives");bb=l.getExtension("EXT_texture_filter_anisotropic")||l.getExtension("MOZ_EXT_texture_filter_anisotropic")||l.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");F||console.log("THREE.WebGLRenderer: Standard derivatives not supported."); bb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");l.clearColor(0,0,0,1);l.clearDepth(1);l.clearStencil(0);l.enable(l.DEPTH_TEST);l.depthFunc(l.LEQUAL);l.frontFace(l.CCW);l.cullFace(l.BACK);l.enable(l.CULL_FACE);l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA);l.clearColor(I.r,I.g,I.b,Q);this.context=l;F=l.getParameter(l.MAX_VERTEX_TEXTURE_IMAGE_UNITS);l.getParameter(l.MAX_TEXTURE_SIZE);var Kb=l.getParameter(l.MAX_CUBE_MAP_TEXTURE_SIZE), gb=bb?l.getParameter(bb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,sc=F>0,bc=sc&&a;this.getContext=function(){return l};this.supportsVertexTextures=function(){return sc};this.getMaxAnisotropy=function(){return gb};this.setSize=function(a,b){w.width=a;w.height=b;this.setViewport(0,0,w.width,w.height)};this.setViewport=function(a,b,c,d){Rb=a!==void 0?a:0;sb=b!==void 0?b:0;cb=c!==void 0?c:w.width;db=d!==void 0?d:w.height;l.viewport(Rb,sb,cb,db)};this.setScissor=function(a,b,c,d){l.scissor(a,b,c,d)};this.enableScissorTest= function(a){a?l.enable(l.SCISSOR_TEST):l.disable(l.SCISSOR_TEST)};this.setClearColorHex=function(a,b){I.setHex(a);Q=b;l.clearColor(I.r,I.g,I.b,Q)};this.setClearColor=function(a,b){I.copy(a);Q=b;l.clearColor(I.r,I.g,I.b,Q)};this.getClearColor=function(){return I};this.getClearAlpha=function(){return Q};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|l.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|l.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|l.STENCIL_BUFFER_BIT;l.clear(d)};this.clearTarget=function(a,b, @@ -371,14 +371,14 @@ c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a l.deleteBuffer(c.__webglVertexBuffer);l.deleteBuffer(c.__webglNormalBuffer);l.deleteBuffer(c.__webglTangentBuffer);l.deleteBuffer(c.__webglColorBuffer);l.deleteBuffer(c.__webglUVBuffer);l.deleteBuffer(c.__webglUV2Buffer);l.deleteBuffer(c.__webglSkinIndicesBuffer);l.deleteBuffer(c.__webglSkinWeightsBuffer);l.deleteBuffer(c.__webglFaceBuffer);l.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d1&&(b=true);d=0;for(c=f.length;d1&&(b=true);d=0;for(c=f.length;d=0&&h){i=h.itemSize;l.bindBuffer(l.ARRAY_BUFFER,h.buffer);l.vertexAttribPointer(a.normal,i,l.FLOAT,false,0,g*i*4)}h=e.attributes.uv;if(a.uv>=0&&h)if(h.buffer){i=h.itemSize;l.bindBuffer(l.ARRAY_BUFFER,h.buffer);l.vertexAttribPointer(a.uv,i,l.FLOAT,false,0,g*i*4);l.enableVertexAttribArray(a.uv)}else l.disableVertexAttribArray(a.uv);h=e.attributes.color;if(a.color>= 0&&h){i=h.itemSize;l.bindBuffer(l.ARRAY_BUFFER,h.buffer);l.vertexAttribPointer(a.color,i,l.FLOAT,false,0,g*i*4)}h=e.attributes.tangent;if(a.tangent>=0&&h){i=h.itemSize;l.bindBuffer(l.ARRAY_BUFFER,h.buffer);l.vertexAttribPointer(a.tangent,i,l.FLOAT,false,0,g*i*4)}l.bindBuffer(l.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}l.drawElements(l.TRIANGLES,f[d].count,l.UNSIGNED_SHORT,f[d].start*2);G.info.render.calls++;G.info.render.vertices=G.info.render.vertices+f[d].count;G.info.render.faces=G.info.render.faces+ -f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var g,i,c=r(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==ha){ha=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){l.bindBuffer(l.ARRAY_BUFFER,e.__webglVertexBuffer);l.vertexAttribPointer(b.position,3,l.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;if(f.morphTargetBase!==-1){l.bindBuffer(l.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);l.vertexAttribPointer(c.position, +f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var g,i,c=r(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==da){da=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){l.bindBuffer(l.ARRAY_BUFFER,e.__webglVertexBuffer);l.vertexAttribPointer(b.position,3,l.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;if(f.morphTargetBase!==-1){l.bindBuffer(l.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);l.vertexAttribPointer(c.position, 3,l.FLOAT,false,0,0)}else if(c.position>=0){l.bindBuffer(l.ARRAY_BUFFER,e.__webglVertexBuffer);l.vertexAttribPointer(c.position,3,l.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var j=0;i=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;j0&&i.push([k,j])}if(i.length>d.numSupportedMorphTargets){i.sort(h);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals?i.sort(h):i.length===0&&i.push([0,0]);for(j=0;j=0){l.bindBuffer(l.ARRAY_BUFFER,e.__webglSkinIndicesBuffer);l.vertexAttribPointer(b.skinIndex,4,l.FLOAT,false,0,0);l.bindBuffer(l.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);l.vertexAttribPointer(b.skinWeight,4,l.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==rb){l.lineWidth(d);rb=d}a&&l.bindBuffer(l.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);l.drawElements(l.LINES,e.__webglLineCount,l.UNSIGNED_SHORT,0)}else{a&&l.bindBuffer(l.ELEMENT_ARRAY_BUFFER, e.__webglFaceBuffer);l.drawElements(l.TRIANGLES,e.__webglFaceCount,l.UNSIGNED_SHORT,0)}G.info.render.calls++;G.info.render.vertices=G.info.render.vertices+e.__webglFaceCount;G.info.render.faces=G.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?l.LINE_STRIP:l.LINES;d=d.linewidth;if(d!==rb){l.lineWidth(d);rb=d}l.drawArrays(f,0,e.__webglLineCount);G.info.render.calls++}else if(f instanceof THREE.ParticleSystem){l.drawArrays(l.POINTS,0,e.__webglParticleCount); G.info.render.calls++;G.info.render.points=G.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){l.drawArrays(l.TRIANGLE_STRIP,0,e.__webglVertexCount);G.info.render.calls++}}};this.render=function(a,b,c,d){if(b instanceof THREE.Camera===false)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,h,n,m=a.__lights,o=a.fog;ga=-1;ta=true;this.autoUpdateScene&&a.updateMatrixWorld();b.parent===void 0&&b.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray= -new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Wa.multiply(b.projectionMatrix,b.matrixWorldInverse);Ba.setFromMatrix(Wa);this.autoUpdateObjects&&this.initWebGLObjects(a);i(this.renderPluginsPre,a,b);G.info.render.calls=0;G.info.render.vertices=0;G.info.render.faces=0;G.info.render.points= -0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);n=a.__webglObjects;d=0;for(e=n.length;d=0){r=q.geometry.materials[r];if(r.transparent){p.transparent= -r;p.opaque=null}else{p.opaque=r;p.transparent=null}}}else if(r)if(r.transparent){p.transparent=r;p.opaque=null}else{p.opaque=r;p.transparent=null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{Qa.copy(h.matrixWorld.getPosition());Wa.multiplyVector3(Qa);f.z=Qa.z}}}this.sortObjects&&n.sort(g);n=a.__webglObjectsImmediate;d=0;for(e=n.length;d=0){r=q.geometry.materials[r];if(r.transparent){p.transparent= +r;p.opaque=null}else{p.opaque=r;p.transparent=null}}}else if(r)if(r.transparent){p.transparent=r;p.opaque=null}else{p.opaque=r;p.transparent=null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{Ra.copy(h.matrixWorld.getPosition());Xa.multiplyVector3(Ra);f.z=Ra.z}}}this.sortObjects&&n.sort(g);n=a.__webglObjectsImmediate;d=0;for(e=n.length;d65535){C[y].counter=C[y].counter+1;A=C[y].hash+"_"+C[y].counter;r.geometryGroups[A]===void 0&&(r.geometryGroups[A]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:B,numMorphNormals:D})}t instanceof THREE.Face3?r.geometryGroups[A].faces3.push(u):r.geometryGroups[A].faces4.push(u);r.geometryGroups[A].vertices=r.geometryGroups[A].vertices+w}r.geometryGroupsList= [];var I=void 0;for(I in r.geometryGroups){r.geometryGroups[I].id=Y++;r.geometryGroupsList.push(r.geometryGroups[I])}}for(i in j.geometryGroups){k=j.geometryGroups[i];if(!k.__webglVertexBuffer){var F=k;F.__webglVertexBuffer=l.createBuffer();F.__webglNormalBuffer=l.createBuffer();F.__webglTangentBuffer=l.createBuffer();F.__webglColorBuffer=l.createBuffer();F.__webglUVBuffer=l.createBuffer();F.__webglUV2Buffer=l.createBuffer();F.__webglSkinIndicesBuffer=l.createBuffer();F.__webglSkinWeightsBuffer=l.createBuffer(); F.__webglFaceBuffer=l.createBuffer();F.__webglLineBuffer=l.createBuffer();var J=void 0,K=void 0;if(F.numMorphTargets){F.__webglMorphTargetsBuffers=[];J=0;for(K=F.numMorphTargets;J0||M.faceVertexUvs.length>0)H.__uvArray=new Float32Array($*2);if(M.faceUvs.length>1||M.faceVertexUvs.length>1)H.__uv2Array=new Float32Array($*2)}if(L.geometry.skinWeights.length&&L.geometry.skinIndices.length){H.__skinIndexArray= -new Float32Array($*4);H.__skinWeightArray=new Float32Array($*4)}H.__faceArray=new Uint16Array(Q*3);H.__lineArray=new Uint16Array(V*2);var ma=void 0,ha=void 0;if(H.numMorphTargets){H.__morphTargetsArrays=[];ma=0;for(ha=H.numMorphTargets;ma0||M.faceVertexUvs.length>0)H.__uvArray=new Float32Array($*2);if(M.faceUvs.length>1||M.faceVertexUvs.length>1)H.__uv2Array=new Float32Array($*2)}if(L.geometry.skinWeights.length&&L.geometry.skinIndices.length){H.__skinIndexArray= +new Float32Array($*4);H.__skinWeightArray=new Float32Array($*4)}H.__faceArray=new Uint16Array(Q*3);H.__lineArray=new Uint16Array(X*2);var da=void 0,na=void 0;if(H.numMorphTargets){H.__morphTargetsArrays=[];da=0;for(na=H.numMorphTargets;da0){l.bindBuffer(l.ARRAY_BUFFER,la.__webglSkinIndicesBuffer);l.bufferData(l.ARRAY_BUFFER,ya,kb);l.bindBuffer(l.ARRAY_BUFFER,la.__webglSkinWeightsBuffer);l.bufferData(l.ARRAY_BUFFER,za,kb)}}if(wd&&Xc){E=0;for(W=na.length;E0){l.bindBuffer(l.ARRAY_BUFFER,la.__webglColorBuffer);l.bufferData(l.ARRAY_BUFFER, -Na,kb)}}if(vd&&Ya.hasTangents){E=0;for(W=na.length;E0){l.bindBuffer(l.ARRAY_BUFFER,la.__webglUVBuffer);l.bufferData(l.ARRAY_BUFFER,yc,kb)}}if(jd&&bd&&gd){E=0;for(W=na.length;E0){l.bindBuffer(l.ARRAY_BUFFER,la.__webglUV2Buffer);l.bufferData(l.ARRAY_BUFFER, -zc,kb)}}if(td){E=0;for(W=na.length;E0){l.bindBuffer(l.ARRAY_BUFFER,ka.__webglSkinIndicesBuffer);l.bufferData(l.ARRAY_BUFFER,ya,kb);l.bindBuffer(l.ARRAY_BUFFER,ka.__webglSkinWeightsBuffer);l.bufferData(l.ARRAY_BUFFER,za,kb)}}if(wd&&Xc){E=0;for(V=la.length;E0){l.bindBuffer(l.ARRAY_BUFFER,ka.__webglColorBuffer);l.bufferData(l.ARRAY_BUFFER, +Oa,kb)}}if(vd&&Za.hasTangents){E=0;for(V=la.length;E0){l.bindBuffer(l.ARRAY_BUFFER,ka.__webglUVBuffer);l.bufferData(l.ARRAY_BUFFER,yc,kb)}}if(jd&&bd&&gd){E=0;for(V=la.length;E0){l.bindBuffer(l.ARRAY_BUFFER,ka.__webglUV2Buffer);l.bufferData(l.ARRAY_BUFFER, +zc,kb)}}if(td){E=0;for(V=la.length;E=0&&l.enableVertexAttribArray(q.position);q.color>=0&&l.enableVertexAttribArray(q.color);q.normal>=0&&l.enableVertexAttribArray(q.normal);q.tangent>=0&&l.enableVertexAttribArray(q.tangent);if(a.skinning&&q.skinIndex>=0&&q.skinWeight>=0){l.enableVertexAttribArray(q.skinIndex);l.enableVertexAttribArray(q.skinWeight)}if(a.attributes)for(i in a.attributes)q[i]!== void 0&&q[i]>=0&&l.enableVertexAttribArray(q[i]);if(a.morphTargets){a.numSupportedMorphTargets=0;r="morphTarget";for(i=0;i=0){l.enableVertexAttribArray(q[s]);a.numSupportedMorphTargets++}}}if(a.morphNormals){a.numSupportedMorphNormals=0;r="morphNormal";for(i=0;i=0){l.enableVertexAttribArray(q[s]);a.numSupportedMorphNormals++}}}a.uniformsList=[];for(h in a.uniforms)a.uniformsList.push([a.uniforms[h],h])};this.setFaceCulling= -function(a,b){if(a){!b||b==="ccw"?l.frontFace(l.CCW):l.frontFace(l.CW);a==="back"?l.cullFace(l.BACK):a==="front"?l.cullFace(l.FRONT):l.cullFace(l.FRONT_AND_BACK);l.enable(l.CULL_FACE)}else l.disable(l.CULL_FACE)};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide,a=a.side===THREE.BackSide;if(ba!==b){b?l.disable(l.CULL_FACE):l.enable(l.CULL_FACE);ba=b}if($!==a){a?l.frontFace(l.CW):l.frontFace(l.CCW);$=a}};this.setDepthTest=function(a){if(qa!==a){a?l.enable(l.DEPTH_TEST):l.disable(l.DEPTH_TEST); -qa=a}};this.setDepthWrite=function(a){if(Fa!==a){l.depthMask(a);Fa=a}};this.setBlending=function(a,b,c,d){if(a!==ca){if(a===THREE.NoBlending)l.disable(l.BLEND);else if(a===THREE.AdditiveBlending){l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.SRC_ALPHA,l.ONE)}else if(a===THREE.SubtractiveBlending){l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.ZERO,l.ONE_MINUS_SRC_COLOR)}else if(a===THREE.MultiplyBlending){l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.ZERO, -l.SRC_COLOR)}else if(a===THREE.CustomBlending)l.enable(l.BLEND);else{l.enable(l.BLEND);l.blendEquationSeparate(l.FUNC_ADD,l.FUNC_ADD);l.blendFuncSeparate(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA,l.ONE,l.ONE_MINUS_SRC_ALPHA)}ca=a}if(a===THREE.CustomBlending){if(b!==ma){l.blendEquation(C(b));ma=b}if(c!==sa||d!==$a){l.blendFunc(C(c),C(d));sa=c;$a=d}}else $a=sa=ma=null};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit){a.__webglInit=true;a.__webglTexture=l.createTexture();G.info.memory.textures++}l.activeTexture(l.TEXTURE0+ +function(a,b){if(a){!b||b==="ccw"?l.frontFace(l.CCW):l.frontFace(l.CW);a==="back"?l.cullFace(l.BACK):a==="front"?l.cullFace(l.FRONT):l.cullFace(l.FRONT_AND_BACK);l.enable(l.CULL_FACE)}else l.disable(l.CULL_FACE)};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide,a=a.side===THREE.BackSide;if(ba!==b){b?l.disable(l.CULL_FACE):l.enable(l.CULL_FACE);ba=b}if($!==a){a?l.frontFace(l.CW):l.frontFace(l.CCW);$=a}};this.setDepthTest=function(a){if(oa!==a){a?l.enable(l.DEPTH_TEST):l.disable(l.DEPTH_TEST); +oa=a}};this.setDepthWrite=function(a){if(Ga!==a){l.depthMask(a);Ga=a}};this.setBlending=function(a,b,c,d){if(a!==ca){if(a===THREE.NoBlending)l.disable(l.BLEND);else if(a===THREE.AdditiveBlending){l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.SRC_ALPHA,l.ONE)}else if(a===THREE.SubtractiveBlending){l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.ZERO,l.ONE_MINUS_SRC_COLOR)}else if(a===THREE.MultiplyBlending){l.enable(l.BLEND);l.blendEquation(l.FUNC_ADD);l.blendFunc(l.ZERO, +l.SRC_COLOR)}else if(a===THREE.CustomBlending)l.enable(l.BLEND);else{l.enable(l.BLEND);l.blendEquationSeparate(l.FUNC_ADD,l.FUNC_ADD);l.blendFuncSeparate(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA,l.ONE,l.ONE_MINUS_SRC_ALPHA)}ca=a}if(a===THREE.CustomBlending){if(b!==na){l.blendEquation(C(b));na=b}if(c!==qa||d!==Ba){l.blendFunc(C(c),C(d));qa=c;Ba=d}}else Ba=qa=na=null};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit){a.__webglInit=true;a.__webglTexture=l.createTexture();G.info.memory.textures++}l.activeTexture(l.TEXTURE0+ b);l.bindTexture(l.TEXTURE_2D,a.__webglTexture);l.pixelStorei(l.UNPACK_FLIP_Y_WEBGL,a.flipY);l.pixelStorei(l.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);var c=a.image,d=(c.width&c.width-1)===0&&(c.height&c.height-1)===0,e=C(a.format),f=C(a.type);A(l.TEXTURE_2D,a,d);a instanceof THREE.DataTexture?l.texImage2D(l.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data):l.texImage2D(l.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&l.generateMipmap(l.TEXTURE_2D);a.needsUpdate=false;if(a.onUpdate)a.onUpdate()}else{l.activeTexture(l.TEXTURE0+ b);l.bindTexture(l.TEXTURE_2D,a.__webglTexture)}};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=true;if(a.stencilBuffer===void 0)a.stencilBuffer=true;a.__webglTexture=l.createTexture();var c=(a.width&a.width-1)===0&&(a.height&a.height-1)===0,d=C(a.format),e=C(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];l.bindTexture(l.TEXTURE_CUBE_MAP,a.__webglTexture);A(l.TEXTURE_CUBE_MAP,a,c); for(var f=0;f<6;f++){a.__webglFramebuffer[f]=l.createFramebuffer();a.__webglRenderbuffer[f]=l.createRenderbuffer();l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=l.TEXTURE_CUBE_MAP_POSITIVE_X+f;l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer[f]);l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,h,g.__webglTexture,0);y(a.__webglRenderbuffer[f],a)}c&&l.generateMipmap(l.TEXTURE_CUBE_MAP)}else{a.__webglFramebuffer=l.createFramebuffer();a.__webglRenderbuffer= l.createRenderbuffer();l.bindTexture(l.TEXTURE_2D,a.__webglTexture);A(l.TEXTURE_2D,a,c);l.texImage2D(l.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null);d=l.TEXTURE_2D;l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer);l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,d,a.__webglTexture,0);y(a.__webglRenderbuffer,a);c&&l.generateMipmap(l.TEXTURE_2D)}b?l.bindTexture(l.TEXTURE_CUBE_MAP,null):l.bindTexture(l.TEXTURE_2D,null);l.bindRenderbuffer(l.RENDERBUFFER,null);l.bindFramebuffer(l.FRAMEBUFFER, -null)}if(a){b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer;c=a.width;a=a.height;e=d=0}else{b=null;c=cb;a=db;d=Rb;e=sb}if(b!==V){l.bindFramebuffer(l.FRAMEBUFFER,b);l.viewport(d,e,c,a);V=b}eb=c;Ha=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; +null)}if(a){b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer;c=a.width;a=a.height;e=d=0}else{b=null;c=cb;a=db;d=Rb;e=sb}if(b!==X){l.bindFramebuffer(l.FRAMEBUFFER,b);l.viewport(d,e,c,a);X=b}eb=c;Ia=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=c.wrapS!==void 0?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=c.wrapT!==void 0?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=c.magFilter!==void 0?c.magFilter:THREE.LinearFilter;this.minFilter=c.minFilter!==void 0?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=c.anisotropy!==void 0?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=c.format!==void 0?c.format: THREE.RGBAFormat;this.type=c.type!==void 0?c.type:THREE.UnsignedByteType;this.depthBuffer=c.depthBuffer!==void 0?c.depthBuffer:true;this.stencilBuffer=c.stencilBuffer!==void 0?c.stencilBuffer:true;this.generateMipmaps=true}; THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.anisotropy=this.anisotropy;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;return a}; 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=true};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.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.material=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.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.material=null;this.uvs=[[]];this.z=null};THREE.RenderableObject=function(){this.z=this.object=null}; -THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=this.object=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null}; +THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsLength=0;this.material=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.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsLength=0;this.material=null;this.uvs=[[]];this.z=null}; +THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=this.object=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null}; THREE.ColorUtils={adjustHSV:function(a,b,c,d){var f=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,f);f.h=THREE.Math.clamp(f.h+b,0,1);f.s=THREE.Math.clamp(f.s+c,0,1);f.v=THREE.Math.clamp(f.v+d,0,1);a.setHSV(f.h,f.s,f.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,f=a.b,e=Math.max(Math.max(c,d),f),g=Math.min(Math.min(c,d),f);if(g===e)g=c=0;else{var h=e-g,g=h/e,c=(c===e?(d-f)/h:d===e?2+(f-c)/h:4+(c-d)/h)/6;c<0&&(c=c+1);c>1&&(c=c-1)}b===void 0&&(b={h:0,s:0,v:0});b.h=c;b.s=g;b.v=e;return b}}; THREE.ColorUtils.__hsv={h:0,s:0,v:0}; THREE.GeometryUtils={merge:function(a,b){for(var c,d,f=a.vertices.length,e=b instanceof THREE.Mesh?b.geometry:b,g=a.vertices,h=e.vertices,i=a.faces,k=e.faces,j=a.faceVertexUvs[0],o=e.faceVertexUvs[0],m={},q=0;q0?e.zoomOut():e.zoomIn())},false)}; THREE.CircleGeometry=function(a,b,c,d){THREE.Geometry.call(this);var a=a||50,c=c!==void 0?c:0,d=d!==void 0?d:Math.PI*2,b=b!==void 0?Math.max(3,b):8,f,e=[];f=new THREE.Vector3;var g=new THREE.UV(0.5,0.5);this.vertices.push(f);e.push(g);for(f=0;f<=b;f++){var h=new THREE.Vector3;h.x=a*Math.cos(c+f/b*d);h.y=a*Math.sin(c+f/b*d);this.vertices.push(h);e.push(new THREE.UV((h.x/a+1)/2,-(h.y/a+1)/2+1))}c=new THREE.Vector3(0,0,-1);for(f=1;f<=b;f++){this.faces.push(new THREE.Face3(f,f+1,0,[c,c,c]));this.faceVertexUvs[0].push([e[f], e[f+1],g])}this.computeCentroids();this.computeFaceNormals();this.boundingSphere={radius:a}};THREE.CircleGeometry.prototype=Object.create(THREE.Geometry.prototype); -THREE.CubeGeometry=function(a,b,c,d,f,e,g,h){function i(a,b,c,g,h,i,j,m){var n,o=d||1,p=f||1,q=h/2,r=i/2,s=k.vertices.length;if(a==="x"&&b==="y"||a==="y"&&b==="x")n="z";else if(a==="x"&&b==="z"||a==="z"&&b==="x"){n="y";p=e||1}else if(a==="z"&&b==="y"||a==="y"&&b==="z"){n="x";o=e||1}var t=o+1,v=p+1,U=h/o,O=i/p,K=new THREE.Vector3;K[n]=j>0?1:-1;for(h=0;h0?1:-1;for(h=0;ha&&(a=a+Math.PI*2);c=(b+a)/2;a=-Math.cos(c);c=-Math.sin(c);return new THREE.Vector2(a,c)}return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function f(c,d){var e,f;for(K=c.length;--K>=0;){e=K;f=K-1;f<0&&(f= c.length-1);for(var g=0,h=m+j*2,g=0;g=0;D--){C=D/j;Q=i*(1-C);I=k*Math.sin(C*Math.PI/2);K=0;for(V=p.length;K=0;D--){C=D/j;Q=i*(1-C);I=k*Math.sin(C*Math.PI/2);K=0;for(X=p.length;K