diff --git a/build/Three.js b/build/Three.js index 6c246c9f..07b49754 100644 --- a/build/Three.js +++ b/build/Three.js @@ -30,7 +30,7 @@ THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b= THREE.Matrix4=function(a,b,c,d,e,f,g,h,i,k,j,o,p,m,q,n){this.set(a!==void 0?a:1,b||0,c||0,d||0,e||0,f!==void 0?f:1,g||0,h||0,i||0,k||0,j!==void 0?j:1,o||0,p||0,m||0,q||0,n!==void 0?n:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,i,k,j,o,p,m,q,n){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=e;this.n22=f;this.n23=g;this.n24=h;this.n31=i;this.n32=k;this.n33=j;this.n34=o;this.n41=p;this.n42=m;this.n43=q;this.n44=n;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, b,c){var d=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,f=THREE.Matrix4.__v3;f.sub(a,b).normalize();if(f.length()===0)f.z=1;d.cross(c,f).normalize();d.length()===0&&(f.x+=1.0E-4,d.cross(c,f).normalize());e.cross(f,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=f.x;this.n21=d.y;this.n22=e.y;this.n23=f.y;this.n31=d.z;this.n32=e.z;this.n33=f.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,e=a.n13,f=a.n14,g=a.n21,h=a.n22,i=a.n23,k=a.n24,j=a.n31,o=a.n32,p=a.n33,m=a.n34,q=a.n41,n=a.n42,s=a.n43, -r=a.n44,u=b.n11,t=b.n12,z=b.n13,A=b.n14,E=b.n21,D=b.n22,B=b.n23,w=b.n24,G=b.n31,y=b.n32,K=b.n33,$=b.n34,Q=b.n41,X=b.n42,S=b.n43,R=b.n44;this.n11=c*u+d*E+e*G+f*Q;this.n12=c*t+d*D+e*y+f*X;this.n13=c*z+d*B+e*K+f*S;this.n14=c*A+d*w+e*$+f*R;this.n21=g*u+h*E+i*G+k*Q;this.n22=g*t+h*D+i*y+k*X;this.n23=g*z+h*B+i*K+k*S;this.n24=g*A+h*w+i*$+k*R;this.n31=j*u+o*E+p*G+m*Q;this.n32=j*t+o*D+p*y+m*X;this.n33=j*z+o*B+p*K+m*S;this.n34=j*A+o*w+p*$+m*R;this.n41=q*u+n*E+s*G+r*Q;this.n42=q*t+n*D+s*y+r*X;this.n43=q*z+n* +r=a.n44,u=b.n11,t=b.n12,z=b.n13,A=b.n14,E=b.n21,D=b.n22,B=b.n23,w=b.n24,G=b.n31,y=b.n32,K=b.n33,$=b.n34,Q=b.n41,Y=b.n42,S=b.n43,R=b.n44;this.n11=c*u+d*E+e*G+f*Q;this.n12=c*t+d*D+e*y+f*Y;this.n13=c*z+d*B+e*K+f*S;this.n14=c*A+d*w+e*$+f*R;this.n21=g*u+h*E+i*G+k*Q;this.n22=g*t+h*D+i*y+k*Y;this.n23=g*z+h*B+i*K+k*S;this.n24=g*A+h*w+i*$+k*R;this.n31=j*u+o*E+p*G+m*Q;this.n32=j*t+o*D+p*y+m*Y;this.n33=j*z+o*B+p*K+m*S;this.n34=j*A+o*w+p*$+m*R;this.n41=q*u+n*E+s*G+r*Q;this.n42=q*t+n*D+s*y+r*Y;this.n43=q*z+n* B+s*K+r*S;this.n44=q*A+n*w+s*$+r*R;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,e=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*e;a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*e;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*e;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,e=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*e;a.y=this.n21*b+this.n22* c+this.n23*d+this.n24*e;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*e;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*e;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33* @@ -64,12 +64,12 @@ this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)this.parent?this.matrixWor THREE.Projector=function(){function a(){var a=g[f]=g[f]||new THREE.RenderableObject;f++;return a}function b(){var a=k[i]=k[i]||new THREE.RenderableVertex;i++;return a}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;return e>=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),dg&&h.positionScreen.zg&&h.positionScreen.z0&&D.z<1))g=z[t]=z[t]||new THREE.RenderableParticle,t++,u=g,u.x= D.x/D.w,u.y=D.y/D.w,u.z=D.z,u.rotation=T.rotation.z,u.scale.x=T.scale.x*Math.abs(u.x-(D.x+e.projectionMatrix.n11)/(D.w+e.projectionMatrix.n14)),u.scale.y=T.scale.y*Math.abs(u.y-(D.y+e.projectionMatrix.n22)/(D.w+e.projectionMatrix.n24)),u.material=T.material,A.elements.push(u);f&&A.elements.sort(c);return A}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,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){var b=Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-e),e=Math.sin(-e),f=Math.cos(c),c=Math.sin(c),g=a*b,h=d*e;this.w=g*f-h*c;this.x=g*c+h*f;this.y=d*b*f+a*e*c;this.z=a*e*f-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); @@ -88,8 +88,8 @@ b,c,d,e,f,g=new THREE.Vector3,h=new THREE.Vector3;a=0;for(b=this.faces.length;a< this.faces[a],c instanceof THREE.Face3)c.vertexNormals=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];else if(c instanceof THREE.Face4)c.vertexNormals=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3]}else{d=this.__tmpVertices;a=0;for(b=this.vertices.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a= 0,b=0,c=this.vertices.length;b0&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(s.r*255)+","+Math.floor(s.g*255)+","+Math.floor(s.b*255)+","+r+")"),n.fillRect(Math.floor(ta.getX()), -Math.floor(ta.getY()),Math.floor(ta.getWidth()),Math.floor(ta.getHeight()))),ta.empty())};this.render=function(a,j){function o(a){var b,c,d,e;ea.setRGB(0,0,0);Y.setRGB(0,0,0);H.setRGB(0,0,0);b=0;for(c=a.length;b0&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(s.r*255)+","+Math.floor(s.g*255)+","+Math.floor(s.b*255)+","+r+")"),n.fillRect(Math.floor(ta.getX()), +Math.floor(ta.getY()),Math.floor(ta.getWidth()),Math.floor(ta.getHeight()))),ta.empty())};this.render=function(a,j){function o(a){var b,c,d,e;ea.setRGB(0,0,0);V.setRGB(0,0,0);H.setRGB(0,0,0);b=0;for(c=a.length;b> -1,H=i.height>>1,g=f.scale.x*m,l=f.scale.y*q,ea=g*j,h=l*H,pa.set(a.x-ea,a.y-h,a.x+ea,a.y+h),qa.intersects(pa)&&(n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(g,-l),n.translate(-j,-H),n.drawImage(i,0,0),n.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(ea=f.scale.x*m,h=f.scale.y*q,pa.set(a.x-ea,a.y-h,a.x+ea,a.y+h),qa.intersects(pa)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(ea,h),g.program(n),n.restore()))} -function r(a,e,f,g){b(g.opacity);c(g.blending);n.beginPath();n.moveTo(a.positionScreen.x,a.positionScreen.y);n.lineTo(e.positionScreen.x,e.positionScreen.y);n.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(E!=a)n.lineWidth=E=a;a=g.linecap;if(D!=a)n.lineCap=D=a;a=g.linejoin;if(B!=a)n.lineJoin=B=a;d(g.color.getContextStyle());n.stroke();pa.inflate(g.linewidth*2)}}function u(a,d,e,g,h,H,k,Y){f.info.render.vertices+=3;f.info.render.faces++;b(Y.opacity);c(Y.blending);X=a.positionScreen.x; -S=a.positionScreen.y;R=d.positionScreen.x;l=d.positionScreen.y;V=e.positionScreen.x;v=e.positionScreen.y;z(X,S,R,l,V,v);if(Y instanceof THREE.MeshBasicMaterial)if(Y.map)Y.map.mapping instanceof THREE.UVMapping&&(ja=k.uvs[0],Pa(X,S,R,l,V,v,ja[g].u,ja[g].v,ja[h].u,ja[h].v,ja[H].u,ja[H].v,Y.map));else if(Y.envMap){if(Y.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=j.matrixWorldInverse,ra.copy(k.vertexNormalsWorld[g]),Ba=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,wa=-(ra.x*a.n21+ra.y*a.n22+ -ra.z*a.n23)*0.5+0.5,ra.copy(k.vertexNormalsWorld[h]),xa=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,ya=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,ra.copy(k.vertexNormalsWorld[H]),za=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,Aa=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,Pa(X,S,R,l,V,v,Ba,wa,xa,ya,za,Aa,Y.envMap)}else Y.wireframe?J(Y.color,Y.wireframeLinewidth,Y.wireframeLinecap,Y.wireframeLinejoin):Ea(Y.color);else if(Y instanceof THREE.MeshLambertMaterial)Y.map&&!Y.wireframe&&(Y.map.mapping instanceof -THREE.UVMapping&&(ja=k.uvs[0],Pa(X,S,R,l,V,v,ja[g].u,ja[g].v,ja[h].u,ja[h].v,ja[H].u,ja[H].v,Y.map)),c(THREE.SubtractiveBlending)),Ia?!Y.wireframe&&Y.shading==THREE.SmoothShading&&k.vertexNormalsWorld.length==3?(O.r=aa.r=ca.r=ea.r,O.g=aa.g=ca.g=ea.g,O.b=aa.b=ca.b=ea.b,p(i,k.v1.positionWorld,k.vertexNormalsWorld[0],O),p(i,k.v2.positionWorld,k.vertexNormalsWorld[1],aa),p(i,k.v3.positionWorld,k.vertexNormalsWorld[2],ca),O.r=Math.max(0,Math.min(Y.color.r*O.r,1)),O.g=Math.max(0,Math.min(Y.color.g*O.g, -1)),O.b=Math.max(0,Math.min(Y.color.b*O.b,1)),aa.r=Math.max(0,Math.min(Y.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(Y.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(Y.color.b*aa.b,1)),ca.r=Math.max(0,Math.min(Y.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(Y.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(Y.color.b*ca.b,1)),ga.r=(aa.r+ca.r)*0.5,ga.g=(aa.g+ca.g)*0.5,ga.b=(aa.b+ca.b)*0.5,sa=P(O,aa,ca,ga),Ja(X,S,R,l,V,v,0,0,1,0,0,1,sa)):(U.r=ea.r,U.g=ea.g,U.b=ea.b,p(i,k.centroidWorld,k.normalWorld,U),U.r=Math.max(0, -Math.min(Y.color.r*U.r,1)),U.g=Math.max(0,Math.min(Y.color.g*U.g,1)),U.b=Math.max(0,Math.min(Y.color.b*U.b,1)),Y.wireframe?J(U,Y.wireframeLinewidth,Y.wireframeLinecap,Y.wireframeLinejoin):Ea(U)):Y.wireframe?J(Y.color,Y.wireframeLinewidth,Y.wireframeLinecap,Y.wireframeLinejoin):Ea(Y.color);else if(Y instanceof THREE.MeshDepthMaterial)na=j.near,la=j.far,O.r=O.g=O.b=1-M(a.positionScreen.z,na,la),aa.r=aa.g=aa.b=1-M(d.positionScreen.z,na,la),ca.r=ca.g=ca.b=1-M(e.positionScreen.z,na,la),ga.r=(aa.r+ca.r)* -0.5,ga.g=(aa.g+ca.g)*0.5,ga.b=(aa.b+ca.b)*0.5,sa=P(O,aa,ca,ga),Ja(X,S,R,l,V,v,0,0,1,0,0,1,sa);else if(Y instanceof THREE.MeshNormalMaterial)U.r=N(k.normalWorld.x),U.g=N(k.normalWorld.y),U.b=N(k.normalWorld.z),Y.wireframe?J(U,Y.wireframeLinewidth,Y.wireframeLinecap,Y.wireframeLinejoin):Ea(U)}function t(a,d,e,g,h,Y,H,k,n){f.info.render.vertices+=4;f.info.render.faces++;b(k.opacity);c(k.blending);if(k.map||k.envMap)u(a,d,g,0,1,3,H,k,n),u(h,e,Y,1,2,3,H,k,n);else if(X=a.positionScreen.x,S=a.positionScreen.y, -R=d.positionScreen.x,l=d.positionScreen.y,V=e.positionScreen.x,v=e.positionScreen.y,W=g.positionScreen.x,L=g.positionScreen.y,Z=h.positionScreen.x,da=h.positionScreen.y,ba=Y.positionScreen.x,T=Y.positionScreen.y,k instanceof THREE.MeshBasicMaterial)A(X,S,R,l,V,v,W,L),k.wireframe?J(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(k.color);else if(k instanceof THREE.MeshLambertMaterial)Ia?!k.wireframe&&k.shading==THREE.SmoothShading&&H.vertexNormalsWorld.length==4?(O.r=aa.r=ca.r= +1,H=i.height>>1,g=f.scale.x*m,l=f.scale.y*q,ea=g*j,h=l*H,pa.set(a.x-ea,a.y-h,a.x+ea,a.y+h),la.intersects(pa)&&(n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(g,-l),n.translate(-j,-H),n.drawImage(i,0,0),n.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(ea=f.scale.x*m,h=f.scale.y*q,pa.set(a.x-ea,a.y-h,a.x+ea,a.y+h),la.intersects(pa)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(ea,h),g.program(n),n.restore()))} +function r(a,e,f,g){b(g.opacity);c(g.blending);n.beginPath();n.moveTo(a.positionScreen.x,a.positionScreen.y);n.lineTo(e.positionScreen.x,e.positionScreen.y);n.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(E!=a)n.lineWidth=E=a;a=g.linecap;if(D!=a)n.lineCap=D=a;a=g.linejoin;if(B!=a)n.lineJoin=B=a;d(g.color.getContextStyle());n.stroke();pa.inflate(g.linewidth*2)}}function u(a,d,e,g,h,H,k,V){f.info.render.vertices+=3;f.info.render.faces++;b(V.opacity);c(V.blending);Y=a.positionScreen.x; +S=a.positionScreen.y;R=d.positionScreen.x;l=d.positionScreen.y;W=e.positionScreen.x;v=e.positionScreen.y;z(Y,S,R,l,W,v);if(V instanceof THREE.MeshBasicMaterial)if(V.map)V.map.mapping instanceof THREE.UVMapping&&(qa=k.uvs[0],Pa(Y,S,R,l,W,v,qa[g].u,qa[g].v,qa[h].u,qa[h].v,qa[H].u,qa[H].v,V.map));else if(V.envMap){if(V.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=j.matrixWorldInverse,ra.copy(k.vertexNormalsWorld[g]),Ba=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,wa=-(ra.x*a.n21+ra.y*a.n22+ +ra.z*a.n23)*0.5+0.5,ra.copy(k.vertexNormalsWorld[h]),xa=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,ya=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,ra.copy(k.vertexNormalsWorld[H]),za=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,Aa=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,Pa(Y,S,R,l,W,v,Ba,wa,xa,ya,za,Aa,V.envMap)}else V.wireframe?J(V.color,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Ea(V.color);else if(V instanceof THREE.MeshLambertMaterial)V.map&&!V.wireframe&&(V.map.mapping instanceof +THREE.UVMapping&&(qa=k.uvs[0],Pa(Y,S,R,l,W,v,qa[g].u,qa[g].v,qa[h].u,qa[h].v,qa[H].u,qa[H].v,V.map)),c(THREE.SubtractiveBlending)),Ia?!V.wireframe&&V.shading==THREE.SmoothShading&&k.vertexNormalsWorld.length==3?(O.r=aa.r=ca.r=ea.r,O.g=aa.g=ca.g=ea.g,O.b=aa.b=ca.b=ea.b,p(i,k.v1.positionWorld,k.vertexNormalsWorld[0],O),p(i,k.v2.positionWorld,k.vertexNormalsWorld[1],aa),p(i,k.v3.positionWorld,k.vertexNormalsWorld[2],ca),O.r=Math.max(0,Math.min(V.color.r*O.r,1)),O.g=Math.max(0,Math.min(V.color.g*O.g, +1)),O.b=Math.max(0,Math.min(V.color.b*O.b,1)),aa.r=Math.max(0,Math.min(V.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(V.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(V.color.b*aa.b,1)),ca.r=Math.max(0,Math.min(V.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(V.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(V.color.b*ca.b,1)),ga.r=(aa.r+ca.r)*0.5,ga.g=(aa.g+ca.g)*0.5,ga.b=(aa.b+ca.b)*0.5,sa=P(O,aa,ca,ga),Ja(Y,S,R,l,W,v,0,0,1,0,0,1,sa)):(U.r=ea.r,U.g=ea.g,U.b=ea.b,p(i,k.centroidWorld,k.normalWorld,U),U.r=Math.max(0, +Math.min(V.color.r*U.r,1)),U.g=Math.max(0,Math.min(V.color.g*U.g,1)),U.b=Math.max(0,Math.min(V.color.b*U.b,1)),V.wireframe?J(U,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Ea(U)):V.wireframe?J(V.color,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Ea(V.color);else if(V instanceof THREE.MeshDepthMaterial)na=j.near,ja=j.far,O.r=O.g=O.b=1-M(a.positionScreen.z,na,ja),aa.r=aa.g=aa.b=1-M(d.positionScreen.z,na,ja),ca.r=ca.g=ca.b=1-M(e.positionScreen.z,na,ja),ga.r=(aa.r+ca.r)* +0.5,ga.g=(aa.g+ca.g)*0.5,ga.b=(aa.b+ca.b)*0.5,sa=P(O,aa,ca,ga),Ja(Y,S,R,l,W,v,0,0,1,0,0,1,sa);else if(V instanceof THREE.MeshNormalMaterial)U.r=N(k.normalWorld.x),U.g=N(k.normalWorld.y),U.b=N(k.normalWorld.z),V.wireframe?J(U,V.wireframeLinewidth,V.wireframeLinecap,V.wireframeLinejoin):Ea(U)}function t(a,d,e,g,h,V,H,k,n){f.info.render.vertices+=4;f.info.render.faces++;b(k.opacity);c(k.blending);if(k.map||k.envMap)u(a,d,g,0,1,3,H,k,n),u(h,e,V,1,2,3,H,k,n);else if(Y=a.positionScreen.x,S=a.positionScreen.y, +R=d.positionScreen.x,l=d.positionScreen.y,W=e.positionScreen.x,v=e.positionScreen.y,X=g.positionScreen.x,L=g.positionScreen.y,Z=h.positionScreen.x,da=h.positionScreen.y,ba=V.positionScreen.x,T=V.positionScreen.y,k instanceof THREE.MeshBasicMaterial)A(Y,S,R,l,W,v,X,L),k.wireframe?J(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(k.color);else if(k instanceof THREE.MeshLambertMaterial)Ia?!k.wireframe&&k.shading==THREE.SmoothShading&&H.vertexNormalsWorld.length==4?(O.r=aa.r=ca.r= ga.r=ea.r,O.g=aa.g=ca.g=ga.g=ea.g,O.b=aa.b=ca.b=ga.b=ea.b,p(i,H.v1.positionWorld,H.vertexNormalsWorld[0],O),p(i,H.v2.positionWorld,H.vertexNormalsWorld[1],aa),p(i,H.v4.positionWorld,H.vertexNormalsWorld[3],ca),p(i,H.v3.positionWorld,H.vertexNormalsWorld[2],ga),O.r=Math.max(0,Math.min(k.color.r*O.r,1)),O.g=Math.max(0,Math.min(k.color.g*O.g,1)),O.b=Math.max(0,Math.min(k.color.b*O.b,1)),aa.r=Math.max(0,Math.min(k.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(k.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(k.color.b* -aa.b,1)),ca.r=Math.max(0,Math.min(k.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(k.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(k.color.b*ca.b,1)),ga.r=Math.max(0,Math.min(k.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(k.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(k.color.b*ga.b,1)),sa=P(O,aa,ca,ga),z(X,S,R,l,W,L),Ja(X,S,R,l,W,L,0,0,1,0,0,1,sa),z(Z,da,V,v,ba,T),Ja(Z,da,V,v,ba,T,1,0,1,1,0,1,sa)):(U.r=ea.r,U.g=ea.g,U.b=ea.b,p(i,H.centroidWorld,H.normalWorld,U),U.r=Math.max(0,Math.min(k.color.r*U.r,1)),U.g=Math.max(0, -Math.min(k.color.g*U.g,1)),U.b=Math.max(0,Math.min(k.color.b*U.b,1)),A(X,S,R,l,V,v,W,L),k.wireframe?J(U,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(U)):(A(X,S,R,l,V,v,W,L),k.wireframe?J(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(k.color));else if(k instanceof THREE.MeshNormalMaterial)U.r=N(H.normalWorld.x),U.g=N(H.normalWorld.y),U.b=N(H.normalWorld.z),A(X,S,R,l,V,v,W,L),k.wireframe?J(U,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(U); -else if(k instanceof THREE.MeshDepthMaterial)na=j.near,la=j.far,O.r=O.g=O.b=1-M(a.positionScreen.z,na,la),aa.r=aa.g=aa.b=1-M(d.positionScreen.z,na,la),ca.r=ca.g=ca.b=1-M(g.positionScreen.z,na,la),ga.r=ga.g=ga.b=1-M(e.positionScreen.z,na,la),sa=P(O,aa,ca,ga),z(X,S,R,l,W,L),Ja(X,S,R,l,W,L,0,0,1,0,0,1,sa),z(Z,da,V,v,ba,T),Ja(Z,da,V,v,ba,T,1,0,1,1,0,1,sa)}function z(a,b,c,d,e,f){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(a,b);n.closePath()}function A(a,b,c,d,e,f,g,ea){n.beginPath(); -n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(g,ea);n.lineTo(a,b);n.closePath()}function J(a,b,c,e){if(E!=b)n.lineWidth=E=b;if(D!=c)n.lineCap=D=c;if(B!=e)n.lineJoin=B=e;d(a.getContextStyle());n.stroke();pa.inflate(b*2)}function Ea(a){e(a.getContextStyle());n.fill()}function Pa(a,b,c,d,f,g,ea,h,l,i,k,j,H){if(H.image.width!=0){if(H.needsUpdate==!0||va[H.id]==void 0){var Y=H.wrapS==THREE.RepeatWrapping,m=H.wrapT==THREE.RepeatWrapping;va[H.id]=n.createPattern(H.image,Y&&m?"repeat":Y&&!m?"repeat-x": -!Y&&m?"repeat-y":"no-repeat");H.needsUpdate=!1}e(va[H.id]);var Y=H.offset.x/H.repeat.x,m=H.offset.y/H.repeat.y,o=H.image.width*H.repeat.x,p=H.image.height*H.repeat.y,ea=(ea+Y)*o,h=(h+m)*p,l=(l+Y)*o,i=(i+m)*p,k=(k+Y)*o,j=(j+m)*p;c-=a;d-=b;f-=a;g-=b;l-=ea;i-=h;k-=ea;j-=h;Y=l*j-k*i;if(Y==0){if(fa[H.id]==void 0)b=document.createElement("canvas"),b.width=H.image.width,b.height=H.image.height,a=b.getContext("2d"),a.drawImage(H.image,0,0),fa[H.id]=a.getImageData(0,0,H.image.width,H.image.height).data,delete b; -b=fa[H.id];ea=(Math.floor(ea)+Math.floor(h)*H.image.width)*4;U.setRGB(b[ea]/255,b[ea+1]/255,b[ea+2]/255);Ea(U)}else Y=1/Y,H=(j*c-i*f)*Y,i=(j*d-i*g)*Y,c=(l*f-k*c)*Y,d=(l*g-k*d)*Y,a=a-H*ea-c*h,ea=b-i*ea-d*h,n.save(),n.transform(H,i,c,d,a,ea),n.fill(),n.restore()}}function Ja(a,b,c,d,e,f,g,ea,h,l,i,k,H){var Y,j;Y=H.width-1;j=H.height-1;g*=Y;ea*=j;h*=Y;l*=j;i*=Y;k*=j;c-=a;d-=b;e-=a;f-=b;h-=g;l-=ea;i-=g;k-=ea;j=1/(h*k-i*l);Y=(k*c-l*e)*j;l=(k*d-l*f)*j;c=(h*e-i*c)*j;d=(h*f-i*d)*j;a=a-Y*g-c*ea;b=b-l*g-d* -ea;n.save();n.transform(Y,l,c,d,a,b);n.clip();n.drawImage(H,0,0);n.restore()}function P(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),ea=~~(b.g*255),b=~~(b.b*255),h=~~(c.r*255),l=~~(c.g*255),c=~~(c.b*255),i=~~(d.r*255),k=~~(d.g*255),d=~~(d.b*255);Ca[0]=e<0?0:e>255?255:e;Ca[1]=f<0?0:f>255?255:f;Ca[2]=a<0?0:a>255?255:a;Ca[4]=g<0?0:g>255?255:g;Ca[5]=ea<0?0:ea>255?255:ea;Ca[6]=b<0?0:b>255?255:b;Ca[8]=h<0?0:h>255?255:h;Ca[9]=l<0?0:l>255?255:l;Ca[10]=c<0?0:c>255?255:c;Ca[12]=i<0? -0:i>255?255:i;Ca[13]=k<0?0:k>255?255:k;Ca[14]=d<0?0:d>255?255:d;La.putImageData(Oa,0,0);C.drawImage(Ka,0,0);return Ma}function M(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function N(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Fa(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;e!=0&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}var Na,Qa,ua,Da;this.autoClear?this.clear():n.setTransform(1,0,0,-1,m,q);f.info.render.vertices=0;f.info.render.faces=0;g=k.projectScene(a,j,this.sortElements);h=g.elements; +aa.b,1)),ca.r=Math.max(0,Math.min(k.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(k.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(k.color.b*ca.b,1)),ga.r=Math.max(0,Math.min(k.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(k.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(k.color.b*ga.b,1)),sa=P(O,aa,ca,ga),z(Y,S,R,l,X,L),Ja(Y,S,R,l,X,L,0,0,1,0,0,1,sa),z(Z,da,W,v,ba,T),Ja(Z,da,W,v,ba,T,1,0,1,1,0,1,sa)):(U.r=ea.r,U.g=ea.g,U.b=ea.b,p(i,H.centroidWorld,H.normalWorld,U),U.r=Math.max(0,Math.min(k.color.r*U.r,1)),U.g=Math.max(0, +Math.min(k.color.g*U.g,1)),U.b=Math.max(0,Math.min(k.color.b*U.b,1)),A(Y,S,R,l,W,v,X,L),k.wireframe?J(U,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(U)):(A(Y,S,R,l,W,v,X,L),k.wireframe?J(k.color,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(k.color));else if(k instanceof THREE.MeshNormalMaterial)U.r=N(H.normalWorld.x),U.g=N(H.normalWorld.y),U.b=N(H.normalWorld.z),A(Y,S,R,l,W,v,X,L),k.wireframe?J(U,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):Ea(U); +else if(k instanceof THREE.MeshDepthMaterial)na=j.near,ja=j.far,O.r=O.g=O.b=1-M(a.positionScreen.z,na,ja),aa.r=aa.g=aa.b=1-M(d.positionScreen.z,na,ja),ca.r=ca.g=ca.b=1-M(g.positionScreen.z,na,ja),ga.r=ga.g=ga.b=1-M(e.positionScreen.z,na,ja),sa=P(O,aa,ca,ga),z(Y,S,R,l,X,L),Ja(Y,S,R,l,X,L,0,0,1,0,0,1,sa),z(Z,da,W,v,ba,T),Ja(Z,da,W,v,ba,T,1,0,1,1,0,1,sa)}function z(a,b,c,d,e,f){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(a,b);n.closePath()}function A(a,b,c,d,e,f,g,ea){n.beginPath(); +n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(g,ea);n.lineTo(a,b);n.closePath()}function J(a,b,c,e){if(E!=b)n.lineWidth=E=b;if(D!=c)n.lineCap=D=c;if(B!=e)n.lineJoin=B=e;d(a.getContextStyle());n.stroke();pa.inflate(b*2)}function Ea(a){e(a.getContextStyle());n.fill()}function Pa(a,b,c,d,f,g,ea,h,l,i,k,j,V){if(V.image.width!=0){if(V.needsUpdate==!0||va[V.id]==void 0){var H=V.wrapS==THREE.RepeatWrapping,m=V.wrapT==THREE.RepeatWrapping;va[V.id]=n.createPattern(V.image,H&&m?"repeat":H&&!m?"repeat-x": +!H&&m?"repeat-y":"no-repeat");V.needsUpdate=!1}e(va[V.id]);var H=V.offset.x/V.repeat.x,m=V.offset.y/V.repeat.y,o=V.image.width*V.repeat.x,p=V.image.height*V.repeat.y,ea=(ea+H)*o,h=(h+m)*p,l=(l+H)*o,i=(i+m)*p,k=(k+H)*o,j=(j+m)*p;c-=a;d-=b;f-=a;g-=b;l-=ea;i-=h;k-=ea;j-=h;H=l*j-k*i;if(H==0){if(fa[V.id]==void 0)b=document.createElement("canvas"),b.width=V.image.width,b.height=V.image.height,a=b.getContext("2d"),a.drawImage(V.image,0,0),fa[V.id]=a.getImageData(0,0,V.image.width,V.image.height).data,delete b; +b=fa[V.id];ea=(Math.floor(ea)+Math.floor(h)*V.image.width)*4;U.setRGB(b[ea]/255,b[ea+1]/255,b[ea+2]/255);Ea(U)}else H=1/H,V=(j*c-i*f)*H,i=(j*d-i*g)*H,c=(l*f-k*c)*H,d=(l*g-k*d)*H,a=a-V*ea-c*h,ea=b-i*ea-d*h,n.save(),n.transform(V,i,c,d,a,ea),n.fill(),n.restore()}}function Ja(a,b,c,d,e,f,g,ea,h,l,i,V,k){var j,H;j=k.width-1;H=k.height-1;g*=j;ea*=H;h*=j;l*=H;i*=j;V*=H;c-=a;d-=b;e-=a;f-=b;h-=g;l-=ea;i-=g;V-=ea;H=1/(h*V-i*l);j=(V*c-l*e)*H;l=(V*d-l*f)*H;c=(h*e-i*c)*H;d=(h*f-i*d)*H;a=a-j*g-c*ea;b=b-l*g-d* +ea;n.save();n.transform(j,l,c,d,a,b);n.clip();n.drawImage(k,0,0);n.restore()}function P(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),ea=~~(b.g*255),b=~~(b.b*255),h=~~(c.r*255),l=~~(c.g*255),c=~~(c.b*255),i=~~(d.r*255),V=~~(d.g*255),d=~~(d.b*255);Ca[0]=e<0?0:e>255?255:e;Ca[1]=f<0?0:f>255?255:f;Ca[2]=a<0?0:a>255?255:a;Ca[4]=g<0?0:g>255?255:g;Ca[5]=ea<0?0:ea>255?255:ea;Ca[6]=b<0?0:b>255?255:b;Ca[8]=h<0?0:h>255?255:h;Ca[9]=l<0?0:l>255?255:l;Ca[10]=c<0?0:c>255?255:c;Ca[12]=i<0? +0:i>255?255:i;Ca[13]=V<0?0:V>255?255:V;Ca[14]=d<0?0:d>255?255:d;La.putImageData(Oa,0,0);C.drawImage(Ka,0,0);return Ma}function M(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function N(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Fa(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;e!=0&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}var Na,Qa,ua,Da;this.autoClear?this.clear():n.setTransform(1,0,0,-1,m,q);f.info.render.vertices=0;f.info.render.faces=0;g=k.projectScene(a,j,this.sortElements);h=g.elements; i=g.lights;(Ia=i.length>0)&&o(i);Na=0;for(Qa=h.length;Na1?1:a}var d=this,e,f,g,h=new THREE.Projector,i=document.createElementNS("http://www.w3.org/2000/svg","svg"),k,j,o,p,m,q,n,s,r=new THREE.Rectangle,u=new THREE.Rectangle,t=!1,z=new THREE.Color,A=new THREE.Color,E=new THREE.Color,D=new THREE.Color,B,w=new THREE.Vector3,G=[],y=[],K,$,Q,X=1;this.domElement=i;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, -faces:0}};this.setQuality=function(a){switch(a){case "high":X=1;break;case "low":X=0}};this.setSize=function(a,b){k=a;j=b;o=k/2;p=j/2;i.setAttribute("viewBox",-o+" "+-p+" "+k+" "+j);i.setAttribute("width",k);i.setAttribute("height",j);r.set(-o,-p,o,p)};this.clear=function(){for(;i.childNodes.length>0;)i.removeChild(i.childNodes[0])};this.render=function(k,j){var l,G,v,w;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;e=h.projectScene(k,j,this.sortElements);f=e.elements; +"path"),Y==0&&G[a].setAttribute("shape-rendering","crispEdges"));return G[a]}function c(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}var d=this,e,f,g,h=new THREE.Projector,i=document.createElementNS("http://www.w3.org/2000/svg","svg"),k,j,o,p,m,q,n,s,r=new THREE.Rectangle,u=new THREE.Rectangle,t=!1,z=new THREE.Color,A=new THREE.Color,E=new THREE.Color,D=new THREE.Color,B,w=new THREE.Vector3,G=[],y=[],K,$,Q,Y=1;this.domElement=i;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, +faces:0}};this.setQuality=function(a){switch(a){case "high":Y=1;break;case "low":Y=0}};this.setSize=function(a,b){k=a;j=b;o=k/2;p=j/2;i.setAttribute("viewBox",-o+" "+-p+" "+k+" "+j);i.setAttribute("width",k);i.setAttribute("height",j);r.set(-o,-p,o,p)};this.clear=function(){for(;i.childNodes.length>0;)i.removeChild(i.childNodes[0])};this.render=function(k,j){var l,G,v,w;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;e=h.projectScene(k,j,this.sortElements);f=e.elements; g=e.lights;Q=$=0;if(t=g.length>0){A.setRGB(0,0,0);E.setRGB(0,0,0);D.setRGB(0,0,0);l=0;for(G=g.length;l0;this.getContext=function(){return l};this.supportsVertexTextures=function(){return qa};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){na=a;la=b;sa=c;ja=d;l.viewport(na,la,sa,ja)};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){Q.setHex(a); -X=b;l.clearColor(Q.r,Q.g,Q.b,X)};this.setClearColor=function(a,b){Q.copy(a);X=b;l.clearColor(Q.r,Q.g,Q.b,X)};this.getClearColor=function(){return Q};this.getClearAlpha=function(){return X};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=l.COLOR_BUFFER_BIT;if(b===void 0||b)d|=l.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=l.STENCIL_BUFFER_BIT;l.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)}; +vertices:0,faces:0,points:0}};var R=this,l,W=[],v=null,X=null,L=-1,Z=null,da=0,ba=null,T=null,U=null,O=null,aa=null,ca=null,ga=null,va=null,fa=null,na=0,ja=0,sa=0,qa=0,Ba=0,wa=0,xa=new THREE.Frustum,ya=new THREE.Matrix4,za=new THREE.Vector4,Aa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}};l=function(){var a;try{if(!(a=w.getContext("experimental-webgl",{antialias:y,stencil:K,preserveDrawingBuffer:$})))throw"Error creating WebGL context."; +console.log(navigator.userAgent+" | "+a.getParameter(a.VERSION)+" | "+a.getParameter(a.VENDOR)+" | "+a.getParameter(a.RENDERER)+" | "+a.getParameter(a.SHADING_LANGUAGE_VERSION))}catch(b){console.error(b)}return a}();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(Q.r,Q.g,Q.b,Y);this.context= +l;var la=l.getParameter(l.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;this.getContext=function(){return l};this.supportsVertexTextures=function(){return la};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){na=a;ja=b;sa=c;qa=d;l.viewport(na,ja,sa,qa)};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){Q.setHex(a); +Y=b;l.clearColor(Q.r,Q.g,Q.b,Y)};this.setClearColor=function(a,b){Q.copy(a);Y=b;l.clearColor(Q.r,Q.g,Q.b,Y)};this.getClearColor=function(){return Q};this.getClearAlpha=function(){return Y};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=l.COLOR_BUFFER_BIT;if(b===void 0||b)d|=l.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=l.STENCIL_BUFFER_BIT;l.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)}; this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];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.__webglSkinVertexABuffer);l.deleteBuffer(c.__webglSkinVertexBBuffer);l.deleteBuffer(c.__webglSkinIndicesBuffer);l.deleteBuffer(c.__webglSkinWeightsBuffer);l.deleteBuffer(c.__webglFaceBuffer);l.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d=0,e=c.numMorphTargets;d0&&(l.bindBuffer(l.ARRAY_BUFFER,r.__webglSkinVertexABuffer),l.bufferData(l.ARRAY_BUFFER,W,y),l.bindBuffer(l.ARRAY_BUFFER, -r.__webglSkinVertexBBuffer),l.bufferData(l.ARRAY_BUFFER,V,y),l.bindBuffer(l.ARRAY_BUFFER,r.__webglSkinIndicesBuffer),l.bufferData(l.ARRAY_BUFFER,D,y),l.bindBuffer(l.ARRAY_BUFFER,r.__webglSkinWeightsBuffer),l.bufferData(l.ARRAY_BUFFER,oa,y))}if(za&&w){C=0;for(v=G.length;C0&&(l.bindBuffer(l.ARRAY_BUFFER,r.__webglColorBuffer),l.bufferData(l.ARRAY_BUFFER,U,y))}if($&&X.hasTangents){C=0;for(v=G.length;C0&&(l.bindBuffer(l.ARRAY_BUFFER,r.__webglSkinVertexABuffer),l.bufferData(l.ARRAY_BUFFER,X,y),l.bindBuffer(l.ARRAY_BUFFER, +r.__webglSkinVertexBBuffer),l.bufferData(l.ARRAY_BUFFER,W,y),l.bindBuffer(l.ARRAY_BUFFER,r.__webglSkinIndicesBuffer),l.bufferData(l.ARRAY_BUFFER,D,y),l.bindBuffer(l.ARRAY_BUFFER,r.__webglSkinWeightsBuffer),l.bufferData(l.ARRAY_BUFFER,oa,y))}if(za&&w){C=0;for(v=G.length;C0&&(l.bindBuffer(l.ARRAY_BUFFER,r.__webglColorBuffer),l.bufferData(l.ARRAY_BUFFER,U,y))}if($&&Y.hasTangents){C=0;for(v=G.length;C0&&(l.bindBuffer(l.ARRAY_BUFFER,r.__webglUVBuffer),l.bufferData(l.ARRAY_BUFFER,ga,y))}if(sa&&Ba&&B){C=0;for(v=G.length;C 0&&(l.bindBuffer(l.ARRAY_BUFFER,r.__webglUV2Buffer),l.bufferData(l.ARRAY_BUFFER,F,y))}if(qa){C=0;for(v=G.length;C=0&&l.enableVertexAttribArray(o.position);o.color>=0&&l.enableVertexAttribArray(o.color);o.normal>=0&&l.enableVertexAttribArray(o.normal); +j);d=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];for(q=0;q=0&&l.enableVertexAttribArray(o.position);o.color>=0&&l.enableVertexAttribArray(o.color);o.normal>=0&&l.enableVertexAttribArray(o.normal); o.tangent>=0&&l.enableVertexAttribArray(o.tangent);a.skinning&&o.skinVertexA>=0&&o.skinVertexB>=0&&o.skinIndex>=0&&o.skinWeight>=0&&(l.enableVertexAttribArray(o.skinVertexA),l.enableVertexAttribArray(o.skinVertexB),l.enableVertexAttribArray(o.skinIndex),l.enableVertexAttribArray(o.skinWeight));if(a.attributes)for(f in a.attributes)o[f]!==void 0&&o[f]>=0&&l.enableVertexAttribArray(o[f]);if(a.morphTargets)for(f=a.numSupportedMorphTargets=0;f=0&&(l.enableVertexAttribArray(o[q]), a.numSupportedMorphTargets++);a.uniformsList=[];for(e in a.uniforms)a.uniformsList.push([a.uniforms[e],e])};this.setFaceCulling=function(a,b){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)):l.disable(l.CULL_FACE)};this.setObjectFaces=function(a){if(ba!==a.doubleSided)a.doubleSided?l.disable(l.CULL_FACE):l.enable(l.CULL_FACE),ba=a.doubleSided;if(T!==a.flipSided)a.flipSided?l.frontFace(l.CW): l.frontFace(l.CCW),T=a.flipSided};this.setDepthTest=function(a){O!==a&&(a?l.enable(l.DEPTH_TEST):l.disable(l.DEPTH_TEST),O=a)};this.setBlending=function(a){if(a!==U){switch(a){case THREE.AdditiveBlending:l.blendEquation(l.FUNC_ADD);l.blendFunc(l.SRC_ALPHA,l.ONE);break;case THREE.SubtractiveBlending:l.blendEquation(l.FUNC_ADD);l.blendFunc(l.ZERO,l.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:l.blendEquation(l.FUNC_ADD);l.blendFunc(l.ZERO,l.SRC_COLOR);break;default:l.blendEquationSeparate(l.FUNC_ADD, @@ -334,7 +334,7 @@ l.FUNC_ADD),l.blendFuncSeparate(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA,l.ONE,l.ONE_MI 0,l.RGBA,l.RGBA,l.UNSIGNED_BYTE,a.image);c&&l.generateMipmap(l.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}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=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=l.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];l.bindTexture(l.TEXTURE_CUBE_MAP, a.__webglTexture);A(l.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=l.createFramebuffer();a.__webglRenderbuffer[c]=l.createRenderbuffer();l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,B(a.format),a.width,a.height,0,B(a.format),B(a.type),null);var d=a,e=l.TEXTURE_CUBE_MAP_POSITIVE_X+c;l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer[c]);l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,e,d.__webglTexture,0);E(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=l.createFramebuffer(), a.__webglRenderbuffer=l.createRenderbuffer(),l.bindTexture(l.TEXTURE_2D,a.__webglTexture),A(l.TEXTURE_2D,a,a),l.texImage2D(l.TEXTURE_2D,0,B(a.format),a.width,a.height,0,B(a.format),B(a.type),null),c=l.TEXTURE_2D,l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,c,a.__webglTexture,0),E(a.__webglRenderbuffer,a);b?l.bindTexture(l.TEXTURE_CUBE_MAP,null):l.bindTexture(l.TEXTURE_2D,null);l.bindRenderbuffer(l.RENDERBUFFER,null);l.bindFramebuffer(l.FRAMEBUFFER, -null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=sa,a=ja,d=na,e=la);b!==W&&(l.bindFramebuffer(l.FRAMEBUFFER,b),l.viewport(d,e,c,a),W=b);Ba=c;wa=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; +null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=sa,a=qa,d=na,e=ja);b!==X&&(l.bindFramebuffer(l.FRAMEBUFFER,b),l.viewport(d,e,c,a),X=b);Ba=c;wa=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.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:!0;this.stencilBuffer=c.stencilBuffer!==void 0?c.stencilBuffer:!0}; THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.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;return a};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0}; @@ -352,8 +352,8 @@ g;d++)i.push(new THREE.UV(e[d].u,e[d].v));b.faceVertexUvs[0].push(i)}return b},r f=b.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(d,e,f);else if(a instanceof THREE.Face4){d=b.vertices[a.a].position;e=b.vertices[a.b].position;f=b.vertices[a.c].position;var b=b.vertices[a.d].position,g;c?a._area1&&a._area2?(c=a._area1,g=a._area2):(c=THREE.GeometryUtils.triangleArea(d,e,b),g=THREE.GeometryUtils.triangleArea(e,f,b),a._area1=c,a._area2=g):(c=THREE.GeometryUtils.triangleArea(d,e,b),g=THREE.GeometryUtils.triangleArea(e,f,b));return THREE.GeometryUtils.random()*(c+ g)a?b(c,e-1):k[e]=0;$--){Q=$/j;X=i*(1-Q);Q=k*Math.sin(Q*Math.PI/2);y=0;for(K=u.length;y=0;$--){Q=$/j;Y=i*(1-Q);Q=k*Math.sin(Q*Math.PI/2);y=0;for(K=u.length;y0)for(k=0;k2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return f}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);j=k+1;e<=j&&(j=0);var p;a:{p=a;var m=i,q=k,n=j,s=e,r=g,u=void 0,t=void 0,z=void 0, -A=void 0,E=void 0,D=void 0,B=void 0,w=void 0,G=void 0,t=p[r[m]].x,z=p[r[m]].y,A=p[r[q]].x,E=p[r[q]].y,D=p[r[n]].x,B=p[r[n]].y;if(1.0E-10>(A-t)*(B-z)-(E-z)*(D-t))p=!1;else{for(u=0;u=0&&$>=0&&X>=0){p=!1;break a}}p=!0}}if(p){f.push([a[g[i]], +A=void 0,E=void 0,D=void 0,B=void 0,w=void 0,G=void 0,t=p[r[m]].x,z=p[r[m]].y,A=p[r[q]].x,E=p[r[q]].y,D=p[r[n]].x,B=p[r[n]].y;if(1.0E-10>(A-t)*(B-z)-(E-z)*(D-t))p=!1;else{for(u=0;u=0&&$>=0&&Y>=0){p=!1;break a}}p=!0}}if(p){f.push([a[g[i]], a[g[k]],a[g[j]]]);h.push([g[i],g[k],g[j]]);i=k;for(j=k+1;j=0){o=k.invBindMatrices[n];l.invBindMatrix=o;l.skinningMatrix=new THREE.Matrix4;l.skinningMatrix.multiply(l.world,o);l.weights=[];for(o=0;o1){j=new THREE.MeshFaceMaterial;i.materials= -l;for(h=0;h1?b.add(j):b=j}}b.name=a.id||"";b.matrix=a.matrix;c=a.matrix.decompose();b.position=c[0];b.quaternion=c[1];b.useQuaternion=!0;b.scale=c[2];for(g=0;g=0,g=e.indexOf("(")>=0,h;if(f)d=e.split("."), -e=d.shift(),d.shift();else if(g){h=e.split("(");e=h.shift();for(d=0;dq)break}if(!r){r=new l(q);t=-1;u=0;for(v=d.length;u=q&&(t=u);q=t;d.splice(q==-1?d.length:q,0,r)}r.addTarget(f,j,g,s)}}else console.log('Could not find transform "'+b.sid+'" in node '+this.id)}for(c=0;c=0?i:i+h.length;i>=0;i--)if(k=h[i],k.hasTarget(g)){i=k;break a}i=null}k=void 0;a:{for(j+=1;j4&&qa.subdivideFaces){r=r.length?r:new THREE.Color;for(e=1;e4?[r[0],r[n+1],r[n+2]]:m===4?[r[0],r[1],r[2],r[3]]:[r[0],r[1],r[2]],b.faceVertexUvs[e]||(b.faceVertexUvs[e]=[]),b.faceVertexUvs[e].push(r)}}else console.log("dropped face with vcount "+m+" for geometry with id: "+b.id);c+=g.length*m}};u.prototype=new t;u.prototype.constructor=u;t.prototype.setVertices=function(a){for(var b=0;b0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};G.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c]; -if(d instanceof w)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid){var e=va[this.effect.surface.init_from];if(e)e=THREE.ImageUtils.loadTexture(xa+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else c== -"diffuse"?a.color=d.color.getHex():b||(a[c]=d.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=Aa;return this.material=new THREE.MeshLambertMaterial(a)};y.prototype.parse=function(a){for(var b=0;b=0,d=a.indexOf("(")>=0;if(c)b=a.split("."),this.sid=b.shift(),this.member=b.shift();else if(d){b=a.split("(");this.sid=b.shift();for(var e= -0;e1){c=[];b*=this.strideOut;for(var d=0;d -1)console.log("Key.interpolate: Warning! Scale out of bounds:"+f),f=f<0?0:1;if(h.length)for(var e=[],i=0;i1){j=new THREE.MeshFaceMaterial;i.materials= +l;for(h=0;h1?b.add(j):b=j}}b.name=a.id||"";b.matrix=a.matrix;c=a.matrix.decompose();b.position=c[0];b.quaternion=c[1];b.useQuaternion=!0;b.scale=c[2];la.centerGeometry&&b.geometry&&(c=THREE.GeometryUtils.center(b.geometry),b.quaternion.multiplyVector3(c.multiplySelf(b.scale)), +b.position.subSelf(c));for(g=0;g=0,g=e.indexOf("(")>=0,h;if(f)d=e.split("."),e=d.shift(),d.shift();else if(g){h=e.split("(");e=h.shift();for(d=0;dq)break}if(!r){r=new l(q);t=-1;u=0;for(v=d.length;u=q&&(t=u);q=t;d.splice(q==-1?d.length:q,0,r)}r.addTarget(f,j,g,s)}}else console.log('Could not find transform "'+b.sid+'" in node '+ +this.id)}for(c=0;c=0?i:i+h.length;i>=0;i--)if(k=h[i],k.hasTarget(g)){i=k;break a}i=null}k=void 0;a:{for(j+=1;j4&&la.subdivideFaces){r=r.length?r:new THREE.Color;for(e=1;e4?[r[0],r[n+1],r[n+2]]:m===4?[r[0],r[1],r[2],r[3]]:[r[0],r[1],r[2]],b.faceVertexUvs[e]||(b.faceVertexUvs[e]=[]),b.faceVertexUvs[e].push(r)}}else console.log("dropped face with vcount "+m+" for geometry with id: "+b.id);c+=g.length*m}};u.prototype=new t;u.prototype.constructor=u;t.prototype.setVertices=function(a){for(var b=0;b0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create(); +return this};G.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c];if(d instanceof w)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid){var e=va[this.effect.surface.init_from];if(e)e=THREE.ImageUtils.loadTexture(xa+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping, +e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else c=="diffuse"?a.color=d.color.getHex():b||(a[c]=d.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=Aa;return this.material=new THREE.MeshLambertMaterial(a)};y.prototype.parse=function(a){for(var b= +0;b=0,d=a.indexOf("(")>=0;if(c)b=a.split("."),this.sid=b.shift(),this.member=b.shift();else if(d){b=a.split("(");this.sid=b.shift();for(var e=0;e1){c=[];b*=this.strideOut;for(var d=0;d1)console.log("Key.interpolate: Warning! Scale out of bounds:"+f),f=f<0?0:1;if(h.length)for(var e=[],i=0;i1&&($=new THREE.MeshFaceMaterial); +THREE.SceneLoader.prototype.createScene=function(a,b,c){function d(a,b){return b=="relativeToHTML"?a:k+"/"+a}function e(){var a;for(p in Q.objects)if(!v.objects[p])if(r=Q.objects[p],r.geometry!==void 0){if(G=v.geometries[r.geometry]){a=!1;for(X=0;X1&&($=new THREE.MeshFaceMaterial); a=new THREE.Mesh(G,$);a.name=p;a.position.set(z[0],z[1],z[2]);E?(a.quaternion.set(E[0],E[1],E[2],E[3]),a.useQuaternion=!0):a.rotation.set(A[0],A[1],A[2]);a.scale.set(D[0],D[1],D[2]);a.visible=r.visible;v.scene.add(a);v.objects[p]=a;if(r.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);v.scene.collisions.colliders.push(b)}if(r.castsShadow)b=new THREE.ShadowVolume(G),v.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;r.trigger&&r.trigger.toLowerCase()!="none"&&(b= {type:r.trigger,object:r},v.triggers[a.name]=b)}}else z=r.position,A=r.rotation,E=r.quaternion,D=r.scale,E=0,a=new THREE.Object3D,a.name=p,a.position.set(z[0],z[1],z[2]),E?(a.quaternion.set(E[0],E[1],E[2],E[3]),a.useQuaternion=!0):a.rotation.set(A[0],A[1],A[2]),a.scale.set(D[0],D[1],D[2]),a.visible=r.visible!==void 0?r.visible:!1,v.scene.add(a),v.objects[p]=a,v.empties[p]=a,r.trigger&&r.trigger.toLowerCase()!="none"&&(b={type:r.trigger,object:r},v.triggers[a.name]=b)}function f(a){return function(b){v.geometries[a]= -b;e();S-=1;i.onLoadComplete();h()}}function g(a){return function(b){v.geometries[a]=b}}function h(){i.callbackProgress({totalModels:l,totalTextures:V,loadedModels:l-S,loadedTextures:V-R},v);i.onLoadProgress();S==0&&R==0&&b(v)}var i=this,k=THREE.Loader.prototype.extractUrlbase(c),j,o,p,m,q,n,s,r,u,t,z,A,E,D,B,w,G,y,K,$,Q,X,S,R,l,V,v;Q=a;c=new THREE.BinaryLoader;X=new THREE.JSONLoader;R=S=0;v={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, +b;e();S-=1;i.onLoadComplete();h()}}function g(a){return function(b){v.geometries[a]=b}}function h(){i.callbackProgress({totalModels:l,totalTextures:W,loadedModels:l-S,loadedTextures:W-R},v);i.onLoadProgress();S==0&&R==0&&b(v)}var i=this,k=THREE.Loader.prototype.extractUrlbase(c),j,o,p,m,q,n,s,r,u,t,z,A,E,D,B,w,G,y,K,$,Q,Y,S,R,l,W,v;Q=a;c=new THREE.BinaryLoader;Y=new THREE.JSONLoader;R=S=0;v={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, empties:{}};a=!1;for(p in Q.objects)if(r=Q.objects[p],r.meshCollider){a=!0;break}if(a)v.scene.collisions=new THREE.CollisionSystem;if(Q.transform)a=Q.transform.position,u=Q.transform.rotation,B=Q.transform.scale,a&&v.scene.position.set(a[0],a[1],a[2]),u&&v.scene.rotation.set(u[0],u[1],u[2]),B&&v.scene.scale.set(B[0],B[1],B[2]),(a||u||B)&&v.scene.updateMatrix();a=function(){R-=1;h();i.onLoadComplete()};for(q in Q.cameras)B=Q.cameras[q],B.type=="perspective"?y=new THREE.PerspectiveCamera(B.fov,B.aspect, B.near,B.far):B.type=="ortho"&&(y=new THREE.OrthographicCamera(B.left,B.right,B.top,B.bottom,B.near,B.far)),z=B.position,u=B.target,B=B.up,y.position.set(z[0],z[1],z[2]),y.target=new THREE.Vector3(u[0],u[1],u[2]),B&&y.up.set(B[0],B[1],B[2]),v.cameras[q]=y;for(m in Q.lights)u=Q.lights[m],q=u.color!==void 0?u.color:16777215,y=u.intensity!==void 0?u.intensity:1,u.type=="directional"?(z=u.direction,t=new THREE.DirectionalLight(q,y),t.position.set(z[0],z[1],z[2]),t.position.normalize()):u.type=="point"? (z=u.position,t=u.distance,t=new THREE.PointLight(q,y,t),t.position.set(z[0],z[1],z[2])):u.type=="ambient"&&(t=new THREE.AmbientLight(q)),v.scene.add(t),v.lights[m]=t;for(n in Q.fogs)m=Q.fogs[n],m.type=="linear"?K=new THREE.Fog(0,m.near,m.far):m.type=="exp2"&&(K=new THREE.FogExp2(0,m.density)),B=m.color,K.color.setRGB(B[0],B[1],B[2]),v.fogs[n]=K;if(v.cameras&&Q.defaults.camera)v.currentCamera=v.cameras[Q.defaults.camera];if(v.fogs&&Q.defaults.fog)v.scene.fog=v.fogs[Q.defaults.fog];B=Q.defaults.bgcolor; v.bgColor=new THREE.Color;v.bgColor.setRGB(B[0],B[1],B[2]);v.bgColorAlpha=Q.defaults.bgalpha;for(j in Q.geometries)if(n=Q.geometries[j],n.type=="bin_mesh"||n.type=="ascii_mesh")S+=1,i.onLoadStart();l=S;for(j in Q.geometries)n=Q.geometries[j],n.type=="cube"?(G=new THREE.CubeGeometry(n.width,n.height,n.depth,n.segmentsWidth,n.segmentsHeight,n.segmentsDepth,null,n.flipped,n.sides),v.geometries[j]=G):n.type=="plane"?(G=new THREE.PlaneGeometry(n.width,n.height,n.segmentsWidth,n.segmentsHeight),v.geometries[j]= -G):n.type=="sphere"?(G=new THREE.SphereGeometry(n.radius,n.segmentsWidth,n.segmentsHeight),v.geometries[j]=G):n.type=="cylinder"?(G=new THREE.CylinderGeometry(n.topRad,n.botRad,n.height,n.radSegs,n.heightSegs),v.geometries[j]=G):n.type=="torus"?(G=new THREE.TorusGeometry(n.radius,n.tube,n.segmentsR,n.segmentsT),v.geometries[j]=G):n.type=="icosahedron"?(G=new THREE.IcosahedronGeometry(n.subdivisions),v.geometries[j]=G):n.type=="bin_mesh"?c.load(d(n.url,Q.urlBaseType),f(j)):n.type=="ascii_mesh"?X.load(d(n.url, -Q.urlBaseType),f(j)):n.type=="embedded_mesh"&&(n=Q.embeds[n.id])&&X.createModel(n,g(j),"");for(s in Q.textures)if(j=Q.textures[s],j.url instanceof Array){R+=j.url.length;for(n=0;n=57344&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;e<8;e++){for(var f=0,g=0;g>1^-(h&1);c[8*g+e]=f}d+=b}b=a.length-d;f=new Uint16Array(b);for(e=g=0;ea?b(d,e-1):k[e]1){j=new THREE.MeshFaceMaterial;i.materials=l;for(h=0;h1?b.add(j):b=j}}b.name=a.id||"";b.matrix=a.matrix;c=a.matrix.decompose();b.position=c[0];b.quaternion=c[1];b.useQuaternion=!0;b.scale=c[2];for(f=0;f=0,g=e.indexOf("(")>=0,h;if(f)d=e.split("."),e=d.shift(),d.shift();else if(g){h=e.split("(");e=h.shift(); -for(d=0;dl)break}if(!r){r= -new O(l);s=-1;t=0;for(u=d.length;t=l&&(s=t);l=s;d.splice(l==-1?d.length:l,0,r)}r.addTarget(f,j,g,o)}}else console.log('Could not find transform "'+b.sid+'" in node '+this.id)}for(c=0;c=0?i:i+h.length;i>=0;i--)if(k=h[i],k.hasTarget(g)){i=k;break a}i=null}k=void 0;a:{for(j+=1;j4&&Q.subdivideFaces){q=q.length?q:new THREE.Color;for(e=1;e4?[q[0],q[n+1],q[n+2]]:l===4?[q[0],q[1],q[2],q[3]]:[q[0],q[1],q[2]],b.faceVertexUvs[e]||(b.faceVertexUvs[e]= -[]),b.faceVertexUvs[e].push(q)}}else console.log("dropped face with vcount "+l+" for geometry with id: "+b.id);c+=g.length*l}};s.prototype=new t;s.prototype.constructor=s;t.prototype.setVertices=function(a){for(var b=0;b0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};D.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c];if(d instanceof A)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source== -this.effect.surface.sid){var e=ca[this.effect.surface.init_from];if(e)e=THREE.ImageUtils.loadTexture(ja+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else c=="diffuse"?a.color=d.color.getHex():b||(a[c]=d.color.getHex());break;case "shininess":case "reflectivity":a[c]= -this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=ka;return this.material=new THREE.MeshLambertMaterial(a)};v.prototype.parse=function(a){for(var b=0;b=0,d=a.indexOf("(")>=0;if(c)b=a.split("."),this.sid=b.shift(),this.member=b.shift();else if(d){b=a.split("(");this.sid=b.shift();for(var e=0;e1){c=[];b*=this.strideOut;for(var d=0;d1)console.log("Key.interpolate: Warning! Scale out of bounds:"+ -f),f=f<0?0:1;if(h.length)for(var e=[],i=0;i1?b.add(j):b=j}}b.name=a.id||"";b.matrix=a.matrix;c=a.matrix.decompose();b.position=c[0];b.quaternion=c[1];b.useQuaternion=!0;b.scale=c[2];Q.centerGeometry&&b.geometry&&(c=THREE.GeometryUtils.center(b.geometry),b.quaternion.multiplyVector3(c.multiplySelf(b.scale)), +b.position.subSelf(c));for(f=0;f=0,g=e.indexOf("(")>=0,h;if(f)d=e.split("."),e=d.shift(),d.shift();else if(g){h=e.split("(");e=h.shift();for(d=0;dl)break}if(!r){r=new O(l);s=-1;t=0;for(u=d.length;t=l&&(s=t);l=s;d.splice(l==-1?d.length:l,0,r)}r.addTarget(f,j,g,o)}}else console.log('Could not find transform "'+ +b.sid+'" in node '+this.id)}for(c=0;c=0?i:i+h.length;i>=0;i--)if(k=h[i],k.hasTarget(g)){i=k;break a}i=null}k=void 0;a:{for(j+=1;j4&&Q.subdivideFaces){q=q.length?q:new THREE.Color; +for(e=1;e4?[q[0],q[n+1],q[n+2]]:l===4?[q[0],q[1],q[2],q[3]]:[q[0],q[1],q[2]],b.faceVertexUvs[e]||(b.faceVertexUvs[e]=[]),b.faceVertexUvs[e].push(q)}}else console.log("dropped face with vcount "+l+" for geometry with id: "+b.id);c+=g.length*l}};s.prototype=new t;s.prototype.constructor=s;t.prototype.setVertices= +function(a){for(var b=0;b0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};D.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c];if(d instanceof A)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid){var e=ca[this.effect.surface.init_from]; +if(e)e=THREE.ImageUtils.loadTexture(ja+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else c=="diffuse"?a.color=d.color.getHex():b||(a[c]=d.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity= +this[c],b=!0}a.shading=ka;return this.material=new THREE.MeshLambertMaterial(a)};v.prototype.parse=function(a){for(var b=0;b=0,d=a.indexOf("(")>=0;if(c)b=a.split("."),this.sid=b.shift(),this.member=b.shift();else if(d){b=a.split("(");this.sid=b.shift();for(var e=0;e1){c=[];b*=this.strideOut;for(var d=0;d1)console.log("Key.interpolate: Warning! Scale out of bounds:"+f),f=f<0?0:1;if(h.length)for(var e=[],i=0;i diff --git a/src/extras/loaders/ColladaLoader.js b/src/extras/loaders/ColladaLoader.js index a0d28fdb..da0baf5a 100644 --- a/src/extras/loaders/ColladaLoader.js +++ b/src/extras/loaders/ColladaLoader.js @@ -28,6 +28,10 @@ THREE.ColladaLoader = function () { var preferredShading = THREE.SmoothShading; var options = { + // Force Geometry to always be centered at the local origin of the + // containing Mesh. + centerGeometry: false, + // Axis conversion is done for geometries, animations, and controllers. // If we ever pull cameras or lights out of the COLLADA file, they'll // need extra work. @@ -45,7 +49,9 @@ THREE.ColladaLoader = function () { var TO_RADIANS = Math.PI / 180; - function load ( url, readyCallback ) { + function load ( url, readyCallback, progressCallback ) { + + var length = 0; if ( document.implementation && document.implementation.createDocument ) { @@ -79,6 +85,20 @@ THREE.ColladaLoader = function () { } + } else if ( req.readyState == 3 ) { + + if ( progressCallback ) { + + if ( length == 0 ) { + + length = req.getResponseHeader( "Content-Length" ); + + } + + progressCallback( { total: length, loaded: req.responseText.length } ); + + } + } } @@ -795,6 +815,14 @@ THREE.ColladaLoader = function () { obj.useQuaternion = true; obj.scale = props[ 2 ]; + if ( options.centerGeometry && obj.geometry ) { + + var delta = THREE.GeometryUtils.center( obj.geometry ); + obj.quaternion.multiplyVector3( delta.multiplySelf( obj.scale ) ); + obj.position.subSelf( delta ); + + } + for ( i = 0; i < node.nodes.length; i ++ ) { obj.add( createSceneGraph( node.nodes[i], node ) );