diff --git a/build/Three.js b/build/Three.js index 7f5131d6..8f865155 100644 --- a/build/Three.js +++ b/build/Three.js @@ -15,11 +15,11 @@ this.y=Math.asin(a.n13);Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b), THREE.Vector4.prototype={constructor:THREE.Vector4,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!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}}; -THREE.Ray=function(a,b){function c(a,b,c){o.sub(c,a);q=o.dot(b);if(q<=0)return null;n=p.add(a,m.copy(b).multiplyScalar(q));return r=c.distanceTo(n)}function d(a,b,c,d){o.sub(d,b);p.sub(c,b);m.sub(a,b);t=o.dot(o);u=o.dot(p);y=o.dot(m);v=p.dot(p);A=p.dot(m);z=1/(t*v-u*u);w=(v*y-u*A)*z;I=(t*A-u*y)*z;return w>=0&&I>=0&&w+I<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, +THREE.Ray=function(a,b){function c(a,b,c){o.sub(c,a);q=o.dot(b);if(q<=0)return null;n=p.add(a,m.copy(b).multiplyScalar(q));return r=c.distanceTo(n)}function d(a,b,c,d){o.sub(d,b);p.sub(c,b);m.sub(a,b);t=o.dot(o);u=o.dot(p);y=o.dot(m);w=p.dot(p);z=p.dot(m);A=1/(t*w-u*u);v=(w*y-u*z)*A;G=(t*z-u*y)*A;return v>=0&&G>=0&&v+G<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, c,d=[];b=0;for(c=a.length;bm.scale.x)return[];n={distance:p,point:m.position,face:null,object:m};o.push(n)}else if(m instanceof THREE.Mesh){p=c(this.origin,this.direction,m.matrixWorld.getPosition());if(p===null||p>m.geometry.boundingSphere.radius*Math.max(m.scale.x,Math.max(m.scale.y,m.scale.z)))return o;var r,t=m.geometry,u=t.vertices,y;m.matrixRotationWorld.extractRotation(m.matrixWorld);p=0;for(q=t.faces.length;p0:r<0)))if(r=j.dot(i.sub(e,a))/r,k.add(a,b.multiplyScalar(r)),n instanceof THREE.Face3)d(k, -e,g,f)&&(n={distance:a.distanceTo(k),point:k.clone(),face:n,object:m},o.push(n));else if(n instanceof THREE.Face4&&(d(k,e,g,h)||d(k,g,f,h)))n={distance:a.distanceTo(k),point:k.clone(),face:n,object:m},o.push(n)}return o};var o=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector3,q,n,r,t,u,y,v,A,z,w,I}; +e,g,f)&&(n={distance:a.distanceTo(k),point:k.clone(),face:n,object:m},o.push(n));else if(n instanceof THREE.Face4&&(d(k,e,g,h)||d(k,g,f,h)))n={distance:a.distanceTo(k),point:k.clone(),face:n,object:m},o.push(n)}return o};var o=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector3,q,n,r,t,u,y,w,z,A,v,G}; THREE.Rectangle=function(){function a(){g=d-b;f=e-c}var b,c,d,e,g,f,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return g};this.getHeight=function(){return f};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(g,f,k,o){h=!1;b=g;c=f;d=k;e=o;a()};this.addPoint=function(g,f){h?(h=!1,b=g,c=f,d=g,e=f):(b=bg?d:g,e=e>f?e:f);a()};this.add3Points= function(g,f,k,o,p,m){h?(h=!1,b=gk?g>p?g:p:k>p?k:p,e=f>o?f>m?f:m:o>m?o:m):(b=gk?g>p?g>d?g:d:p>d?p:d:k>p?k>d?k:d:p>d?p:d,e=f>o?f>m?f>e?f:e:m>e?m:e:o>m?o>e?o:e:m>e?m:e);a()};this.addRectangle=function(g){h?(h=!1,b=g.getLeft(),c=g.getTop(),d=g.getRight(),e=g.getBottom()):(b=bg.getRight()?d:g.getRight(),e=e> g.getBottom()?e:g.getBottom());a()};this.inflate=function(g){b-=g;c-=g;d+=g;e+=g;a()};this.minSelf=function(g){b=b>g.getLeft()?b:g.getLeft();c=c>g.getTop()?c:g.getTop();d=d=0&&Math.min(e,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}}; @@ -28,16 +28,16 @@ THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b= THREE.Matrix4=function(a,b,c,d,e,g,f,h,i,j,k,o,p,m,q,n){this.set(a!==void 0?a:1,b||0,c||0,d||0,e||0,g!==void 0?g:1,f||0,h||0,i||0,j||0,k!==void 0?k: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,g,f,h,i,j,k,o,p,m,q,n){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=e;this.n22=g;this.n23=f;this.n24=h;this.n31=i;this.n32=j;this.n33=k;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,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();if(g.length()===0)g.z=1;d.cross(c,g).normalize();d.length()===0&&(g.x+=1.0E-4,d.cross(c,g).normalize());e.cross(g,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=g.x;this.n21=d.y;this.n22=e.y;this.n23=g.y;this.n31=d.z;this.n32=e.z;this.n33=g.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,e=a.n13,g=a.n14,f=a.n21,h=a.n22,i=a.n23,j=a.n24,k=a.n31,o=a.n32,p=a.n33,m=a.n34,q=a.n41,n=a.n42,r=a.n43, -t=a.n44,u=b.n11,y=b.n12,v=b.n13,A=b.n14,z=b.n21,w=b.n22,I=b.n23,F=b.n24,G=b.n31,s=b.n32,E=b.n33,T=b.n34,Z=b.n41,Q=b.n42,U=b.n43,$=b.n44;this.n11=c*u+d*z+e*G+g*Z;this.n12=c*y+d*w+e*s+g*Q;this.n13=c*v+d*I+e*E+g*U;this.n14=c*A+d*F+e*T+g*$;this.n21=f*u+h*z+i*G+j*Z;this.n22=f*y+h*w+i*s+j*Q;this.n23=f*v+h*I+i*E+j*U;this.n24=f*A+h*F+i*T+j*$;this.n31=k*u+o*z+p*G+m*Z;this.n32=k*y+o*w+p*s+m*Q;this.n33=k*v+o*I+p*E+m*U;this.n34=k*A+o*F+p*T+m*$;this.n41=q*u+n*z+r*G+t*Z;this.n42=q*y+n*w+r*s+t*Q;this.n43=q*v+n* -I+r*E+t*U;this.n44=q*A+n*F+r*T+t*$;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* -a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,e=this.n21,g=this.n22,f=this.n23,h=this.n24,i=this.n31,j=this.n32,k=this.n33,o=this.n34,p=this.n41,m=this.n42,q=this.n43,n=this.n44;return d*f*j*p-c*h*j*p-d*g*k*p+b*h*k*p+c*g*o*p-b*f*o*p-d*f*i*m+c*h*i*m+d*e*k*m-a*h*k*m-c*e*o*m+a*f*o*m+d*g*i*q-b*h*i*q-d*e*j*q+a*h*j*q+b*e*o*q-a*g*o*q-c*g*i*n+b*f*i*n+c*e*j*n-a*f*j*n-b*e*k*n+a*g*k*n},transpose:function(){var a; -a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42; -a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31; -a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34;a[b+15]=this.n44;return a}, -setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this}, -setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,g=a.x,f=a.y,h=a.z,i=e*g,j=e*f;this.set(i*g+c,i*f-d*h,i*h+d*f,0,i*f+d*h,j*f+c,j*h-d*g,0,i*h-d*f,j*h+d*g,e*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, +t=a.n44,u=b.n11,y=b.n12,w=b.n13,z=b.n14,A=b.n21,v=b.n22,G=b.n23,F=b.n24,K=b.n31,s=b.n32,N=b.n33,U=b.n34,$=b.n41,R=b.n42,V=b.n43,aa=b.n44;this.n11=c*u+d*A+e*K+g*$;this.n12=c*y+d*v+e*s+g*R;this.n13=c*w+d*G+e*N+g*V;this.n14=c*z+d*F+e*U+g*aa;this.n21=f*u+h*A+i*K+j*$;this.n22=f*y+h*v+i*s+j*R;this.n23=f*w+h*G+i*N+j*V;this.n24=f*z+h*F+i*U+j*aa;this.n31=k*u+o*A+p*K+m*$;this.n32=k*y+o*v+p*s+m*R;this.n33=k*w+o*G+p*N+m*V;this.n34=k*z+o*F+p*U+m*aa;this.n41=q*u+n*A+r*K+t*$;this.n42=q*y+n*v+r*s+t*R;this.n43=q* +w+n*G+r*N+t*V;this.n44=q*z+n*F+r*U+t*aa;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*a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,e=this.n21,g=this.n22,f=this.n23,h=this.n24,i=this.n31,j=this.n32,k=this.n33,o=this.n34,p=this.n41,m=this.n42,q=this.n43,n=this.n44;return d*f*j*p-c*h*j*p-d*g*k*p+b*h*k*p+c*g*o*p-b*f*o*p-d*f*i*m+c*h*i*m+d*e*k*m-a*h*k*m-c*e*o*m+a*f*o*m+d*g*i*q-b*h*i*q-d*e*j*q+a*h*j*q+b*e*o*q-a*g*o*q-c*g*i*n+b*f*i*n+c*e*j*n-a*f*j*n-b*e*k*n+a*g*k* +n},transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34; +a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11; +a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34; +a[b+15]=this.n44;return a},setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0, +0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,g=a.x,f=a.y,h=a.z,i=e*g,j=e*f;this.set(i*g+c,i*f-d*h,i*h+d*f,0,i*f+d*h,j*f+c,j*h-d*g,0,i*h-d*f,j*h+d*g,e*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(a){var b=a.n11,c=a.n12,d=a.n13,e=a.n14,g=a.n21,f=a.n22,h=a.n23,i=a.n24,j=a.n31,k=a.n32,o=a.n33,p=a.n34,m=a.n41,q=a.n42,n=a.n43,r=a.n44;this.n11=h*p*q-i*o*q+i*k*n-f*p*n-h*k*r+f*o*r;this.n12=e*o*q-d*p*q-e*k*n+c*p*n+d*k*r-c*o*r;this.n13=d*i*q-e*h*q+e*f*n-c*i*n-d*f*r+c*h*r;this.n14=e*h*k-d*i*k-e*f*o+c*i*o+d*f*p-c*h*p;this.n21=i*o*m-h*p*m-i*j*n+g*p*n+h*j*r-g*o*r;this.n22=d*p*m-e*o*m+ e*j*n-b*p*n-d*j*r+b*o*r;this.n23=e*h*m-d*i*m-e*g*n+b*i*n+d*g*r-b*h*r;this.n24=d*i*j-e*h*j+e*g*o-b*i*o-d*g*p+b*h*p;this.n31=f*p*m-i*k*m+i*j*q-g*p*q-f*j*r+g*k*r;this.n32=e*k*m-c*p*m-e*j*q+b*p*q+c*j*r-b*k*r;this.n33=d*i*m-e*f*m+e*g*q-b*i*q-c*g*r+b*f*r;this.n34=e*f*j-c*i*j-e*g*k+b*i*k+c*g*p-b*f*p;this.n41=h*k*m-f*o*m-h*j*q+g*o*q+f*j*n-g*k*n;this.n42=c*o*m-d*k*m+d*j*q-b*o*q-c*j*n+b*k*n;this.n43=d*f*m-c*h*m-d*g*q+b*h*q+c*g*n-b*f*n;this.n44=c*h*j-d*f*j+d*g*k-b*h*k-c*g*o+b*f*o;this.multiplyScalar(1/a.determinant()); return this},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,e=a.z,g=Math.cos(c),c=Math.sin(c),f=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);switch(b){case "YXZ":var i=f*h,j=f*e,k=d*h,o=d*e;this.n11=i+o*c;this.n12=k*c-j;this.n13=g*d;this.n21=g*e;this.n22=g*h;this.n23=-c;this.n31=j*c-k;this.n32=o+i*c;this.n33=g*f;break;case "ZXY":i=f*h;j=f*e;k=d*h;o=d*e;this.n11=i-o*c;this.n12=-g*e;this.n13=k+j*c;this.n21=j+k*c;this.n22=g*h;this.n23=o-i*c;this.n31=-g*d;this.n32=c;this.n33=g*f;break;case "ZYX":i= @@ -56,18 +56,18 @@ THREE.Object3D.prototype={constructor:THREE.Object3D,translate:function(a,b){thi if(b&&(e=e.getChildByName(a,b),e!==void 0))return e}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation,this.eulerOrder);if(this.scale.x!==1||this.scale.y!==1||this.scale.z!==1)this.matrix.scale(this.scale),this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z));this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){this.matrixAutoUpdate&& this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)this.parent?this.matrixWorld.multiply(this.parent.matrixWorld,this.matrix):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=0,c=this.children.length;b=0&&g>=0&&f>=0&&h>=0?!0:e<0&&g<0||f<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-g)):g<0&&(d=Math.min(d,e/(e-g))),f<0?c=Math.max(c,f/(f-h)):h<0&&(d=Math.min(d,f/(f-h))),df&&h.positionScreen.z0&&w.z<1))f=v[y]=v[y]||new THREE.RenderableParticle,y++,u=f,u.x=w.x/w.w,u.y=w.y/w.w,u.z=w.z,u.rotation=ca.rotation.z,u.scale.x=ca.scale.x*Math.abs(u.x-(w.x+e.projectionMatrix.n11)/(w.w+e.projectionMatrix.n14)),u.scale.y=ca.scale.y*Math.abs(u.y-(w.y+e.projectionMatrix.n22)/(w.w+e.projectionMatrix.n24)),u.material=ca.material,A.elements.push(u); -g&&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)}; +k,o,p=[],m,q=[],n,r,t=[],u,y,w=[],z={objects:[],sprites:[],lights:[],elements:[]},A=new THREE.Vector3,v=new THREE.Vector4,G=new THREE.Matrix4,F=new THREE.Matrix4,K=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],s=new THREE.Vector4,N=new THREE.Vector4;this.computeFrustum=function(a){K[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);K[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);K[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+ +a.n23,a.n44+a.n24);K[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);K[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);K[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(a=0;a<6;a++){var b=K[a];b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}};this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);G.multiply(b.projectionMatrix,b.matrixWorldInverse);G.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix); +G.multiply(b.matrixWorld,b.projectionMatrixInverse);G.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.projectGraph=function(b,d){g=0;z.objects.length=0;z.sprites.length=0;z.lights.length=0;var f=function(b){if(b.visible!==!1){var c;if(c=b instanceof THREE.Mesh||b instanceof THREE.Line)if(!(c=b.frustumCulled===!1))a:{for(var d=b.matrixWorld, +g=-b.geometry.boundingSphere.radius*Math.max(b.scale.x,Math.max(b.scale.y,b.scale.z)),h=0;h<6;h++)if(c=K[h].x*d.n14+K[h].y*d.n24+K[h].z*d.n34+K[h].w,c<=g){c=!1;break a}c=!0}c?(G.multiplyVector3(A.copy(b.position)),e=a(),e.object=b,e.z=A.z,z.objects.push(e)):b instanceof THREE.Sprite||b instanceof THREE.Particle?(G.multiplyVector3(A.copy(b.position)),e=a(),e.object=b,e.z=A.z,z.sprites.push(e)):b instanceof THREE.Light&&z.lights.push(b);c=0;for(d=b.children.length;cf&&h.positionScreen.z0&&v.z<1))f=w[y]=w[y]||new THREE.RenderableParticle,y++,u=f,u.x=v.x/v.w,u.y=v.y/v.w,u.z=v.z,u.rotation=da.rotation.z,u.scale.x=da.scale.x*Math.abs(u.x-(v.x+e.projectionMatrix.n11)/(v.w+e.projectionMatrix.n14)),u.scale.y=da.scale.y*Math.abs(u.y-(v.y+e.projectionMatrix.n22)/(v.w+e.projectionMatrix.n24)),u.material=da.material,z.elements.push(u); +g&&z.elements.sort(c);return z}};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),g=Math.cos(c),c=Math.sin(c),f=a*b,h=d*e;this.w=f*g-h*c;this.x=f*c+h*g;this.y=d*b*g+a*e*c;this.z=a*e*g-d*b*c;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=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= @@ -83,9 +83,9 @@ b;a++)c=this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid b,c,d,e,g,f=new THREE.Vector3,h=new THREE.Vector3;a=0;for(b=this.faces.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(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b*255)+","+t+")"),n.fillRect(Math.floor(ha.getX()), -Math.floor(ha.getY()),Math.floor(ha.getWidth()),Math.floor(ha.getHeight()))),ha.empty())};this.render=function(a,k){function o(a){var b,c,d,e;aa.setRGB(0,0,0);Y.setRGB(0,0,0);sa.setRGB(0,0,0);b=0;for(c=a.length;b>1,ga=k.height>> -1,f=g.scale.x*m,i=g.scale.y*q,h=f*j,l=i*ga,J.set(a.x-h,a.y-l,a.x+h,a.y+l),S.intersects(J)&&(n.save(),n.translate(a.x,a.y),n.rotate(-g.rotation),n.scale(f,-i),n.translate(-j,-ga),n.drawImage(k,0,0),n.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(h=g.scale.x*m,l=g.scale.y*q,J.set(a.x-h,a.y-l,a.x+h,a.y+l),S.intersects(J)&&(d(f.color.getContextStyle()),e(f.color.getContextStyle()),n.save(),n.translate(a.x,a.y),n.rotate(-g.rotation),n.scale(h,l),f.program(n),n.restore()))}function t(a,e, -g,f){b(f.opacity);c(f.blending);n.beginPath();n.moveTo(a.positionScreen.x,a.positionScreen.y);n.lineTo(e.positionScreen.x,e.positionScreen.y);n.closePath();if(f instanceof THREE.LineBasicMaterial){a=f.linewidth;if(z!=a)n.lineWidth=z=a;a=f.linecap;if(w!=a)n.lineCap=w=a;a=f.linejoin;if(I!=a)n.lineJoin=I=a;d(f.color.getContextStyle());n.stroke();J.inflate(f.linewidth*2)}}function u(a,d,e,f,h,l,m,n){g.info.render.vertices+=3;g.info.render.faces++;b(n.opacity);c(n.blending);Q=a.positionScreen.x;U=a.positionScreen.y; -$=d.positionScreen.x;ja=d.positionScreen.y;K=e.positionScreen.x;L=e.positionScreen.y;Ha(Q,U,$,ja,K,L);if(n instanceof THREE.MeshBasicMaterial)if(n.map)n.map.mapping instanceof THREE.UVMapping&&(pa=m.uvs[0],A(Q,U,$,ja,K,L,pa[f].u,pa[f].v,pa[h].u,pa[h].v,pa[l].u,pa[l].v,n.map));else if(n.envMap){if(n.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,X.copy(m.vertexNormalsWorld[f]),Ba=(X.x*a.n11+X.y*a.n12+X.z*a.n13)*0.5+0.5,wa=-(X.x*a.n21+X.y*a.n22+X.z*a.n23)*0.5+0.5, -X.copy(m.vertexNormalsWorld[h]),va=(X.x*a.n11+X.y*a.n12+X.z*a.n13)*0.5+0.5,xa=-(X.x*a.n21+X.y*a.n22+X.z*a.n23)*0.5+0.5,X.copy(m.vertexNormalsWorld[l]),M=(X.x*a.n11+X.y*a.n12+X.z*a.n13)*0.5+0.5,ea=-(X.x*a.n21+X.y*a.n22+X.z*a.n23)*0.5+0.5,A(Q,U,$,ja,K,L,Ba,wa,va,xa,M,ea,n.envMap)}else n.wireframe?Ca(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(n.color);else if(n instanceof THREE.MeshLambertMaterial)n.map&&!n.wireframe&&(n.map.mapping instanceof THREE.UVMapping&&(pa=m.uvs[0], -A(Q,U,$,ja,K,L,pa[f].u,pa[f].v,pa[h].u,pa[h].v,pa[l].u,pa[l].v,n.map)),c(THREE.SubtractiveBlending)),P?!n.wireframe&&n.shading==THREE.SmoothShading&&m.vertexNormalsWorld.length==3?(fa.r=W.r=ba.r=aa.r,fa.g=W.g=ba.g=aa.g,fa.b=W.b=ba.b=aa.b,p(i,m.v1.positionWorld,m.vertexNormalsWorld[0],fa),p(i,m.v2.positionWorld,m.vertexNormalsWorld[1],W),p(i,m.v3.positionWorld,m.vertexNormalsWorld[2],ba),fa.r=Math.max(0,Math.min(n.color.r*fa.r,1)),fa.g=Math.max(0,Math.min(n.color.g*fa.g,1)),fa.b=Math.max(0,Math.min(n.color.b* -fa.b,1)),W.r=Math.max(0,Math.min(n.color.r*W.r,1)),W.g=Math.max(0,Math.min(n.color.g*W.g,1)),W.b=Math.max(0,Math.min(n.color.b*W.b,1)),ba.r=Math.max(0,Math.min(n.color.r*ba.r,1)),ba.g=Math.max(0,Math.min(n.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(n.color.b*ba.b,1)),na.r=(W.r+ba.r)*0.5,na.g=(W.g+ba.g)*0.5,na.b=(W.b+ba.b)*0.5,ta=Ja(fa,W,ba,na),Fa(Q,U,$,ja,K,L,0,0,1,0,0,1,ta)):(N.r=aa.r,N.g=aa.g,N.b=aa.b,p(i,m.centroidWorld,m.normalWorld,N),N.r=Math.max(0,Math.min(n.color.r*N.r,1)),N.g=Math.max(0,Math.min(n.color.g* -N.g,1)),N.b=Math.max(0,Math.min(n.color.b*N.b,1)),n.wireframe?Ca(N,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(N)):n.wireframe?Ca(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(n.color);else if(n instanceof THREE.MeshDepthMaterial)ra=k.near,oa=k.far,fa.r=fa.g=fa.b=1-Ea(a.positionScreen.z,ra,oa),W.r=W.g=W.b=1-Ea(d.positionScreen.z,ra,oa),ba.r=ba.g=ba.b=1-Ea(e.positionScreen.z,ra,oa),na.r=(W.r+ba.r)*0.5,na.g=(W.g+ba.g)*0.5,na.b=(W.b+ba.b)*0.5,ta=Ja(fa,W, -ba,na),Fa(Q,U,$,ja,K,L,0,0,1,0,0,1,ta);else if(n instanceof THREE.MeshNormalMaterial)N.r=Ga(m.normalWorld.x),N.g=Ga(m.normalWorld.y),N.b=Ga(m.normalWorld.z),n.wireframe?Ca(N,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(N)}function y(a,d,e,f,h,m,n,j,ga){g.info.render.vertices+=4;g.info.render.faces++;b(j.opacity);c(j.blending);if(j.map||j.envMap)u(a,d,f,0,1,3,n,j,ga),u(h,e,m,1,2,3,n,j,ga);else if(Q=a.positionScreen.x,U=a.positionScreen.y,$=d.positionScreen.x,ja=d.positionScreen.y, -K=e.positionScreen.x,L=e.positionScreen.y,H=f.positionScreen.x,O=f.positionScreen.y,V=h.positionScreen.x,R=h.positionScreen.y,l=m.positionScreen.x,ca=m.positionScreen.y,j instanceof THREE.MeshBasicMaterial)v(Q,U,$,ja,K,L,H,O),j.wireframe?Ca(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(j.color);else if(j instanceof THREE.MeshLambertMaterial)P?!j.wireframe&&j.shading==THREE.SmoothShading&&n.vertexNormalsWorld.length==4?(fa.r=W.r=ba.r=na.r=aa.r,fa.g=W.g=ba.g=na.g=aa.g,fa.b= -W.b=ba.b=na.b=aa.b,p(i,n.v1.positionWorld,n.vertexNormalsWorld[0],fa),p(i,n.v2.positionWorld,n.vertexNormalsWorld[1],W),p(i,n.v4.positionWorld,n.vertexNormalsWorld[3],ba),p(i,n.v3.positionWorld,n.vertexNormalsWorld[2],na),fa.r=Math.max(0,Math.min(j.color.r*fa.r,1)),fa.g=Math.max(0,Math.min(j.color.g*fa.g,1)),fa.b=Math.max(0,Math.min(j.color.b*fa.b,1)),W.r=Math.max(0,Math.min(j.color.r*W.r,1)),W.g=Math.max(0,Math.min(j.color.g*W.g,1)),W.b=Math.max(0,Math.min(j.color.b*W.b,1)),ba.r=Math.max(0,Math.min(j.color.r* -ba.r,1)),ba.g=Math.max(0,Math.min(j.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(j.color.b*ba.b,1)),na.r=Math.max(0,Math.min(j.color.r*na.r,1)),na.g=Math.max(0,Math.min(j.color.g*na.g,1)),na.b=Math.max(0,Math.min(j.color.b*na.b,1)),ta=Ja(fa,W,ba,na),Ha(Q,U,$,ja,H,O),Fa(Q,U,$,ja,H,O,0,0,1,0,0,1,ta),Ha(V,R,K,L,l,ca),Fa(V,R,K,L,l,ca,1,0,1,1,0,1,ta)):(N.r=aa.r,N.g=aa.g,N.b=aa.b,p(i,n.centroidWorld,n.normalWorld,N),N.r=Math.max(0,Math.min(j.color.r*N.r,1)),N.g=Math.max(0,Math.min(j.color.g*N.g,1)),N.b=Math.max(0, -Math.min(j.color.b*N.b,1)),v(Q,U,$,ja,K,L,H,O),j.wireframe?Ca(N,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(N)):(v(Q,U,$,ja,K,L,H,O),j.wireframe?Ca(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(j.color));else if(j instanceof THREE.MeshNormalMaterial)N.r=Ga(n.normalWorld.x),N.g=Ga(n.normalWorld.y),N.b=Ga(n.normalWorld.z),v(Q,U,$,ja,K,L,H,O),j.wireframe?Ca(N,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(N);else if(j instanceof THREE.MeshDepthMaterial)ra= -k.near,oa=k.far,fa.r=fa.g=fa.b=1-Ea(a.positionScreen.z,ra,oa),W.r=W.g=W.b=1-Ea(d.positionScreen.z,ra,oa),ba.r=ba.g=ba.b=1-Ea(f.positionScreen.z,ra,oa),na.r=na.g=na.b=1-Ea(e.positionScreen.z,ra,oa),ta=Ja(fa,W,ba,na),Ha(Q,U,$,ja,H,O),Fa(Q,U,$,ja,H,O,0,0,1,0,0,1,ta),Ha(V,R,K,L,l,ca),Fa(V,R,K,L,l,ca,1,0,1,1,0,1,ta)}function Ha(a,b,c,d,e,g){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,g);n.lineTo(a,b);n.closePath()}function v(a,b,c,d,e,g,f,h){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e, -g);n.lineTo(f,h);n.lineTo(a,b);n.closePath()}function Ca(a,b,c,e){if(z!=b)n.lineWidth=z=b;if(w!=c)n.lineCap=w=c;if(I!=e)n.lineJoin=I=e;d(a.getContextStyle());n.stroke();J.inflate(b*2)}function Aa(a){e(a.getContextStyle());n.fill()}function A(a,b,c,d,g,f,h,l,i,k,m,j,ga){if(ga.image.width!=0){if(ga.needsUpdate==!0||ia[ga.id]==void 0){var o=ga.wrapS==THREE.RepeatWrapping,p=ga.wrapT==THREE.RepeatWrapping;ia[ga.id]=n.createPattern(ga.image,o&&p?"repeat":o&&!p?"repeat-x":!o&&p?"repeat-y":"no-repeat");ga.needsUpdate= -!1}e(ia[ga.id]);var o=ga.offset.x/ga.repeat.x,p=ga.offset.y/ga.repeat.y,M=ga.image.width*ga.repeat.x,r=ga.image.height*ga.repeat.y,h=(h+o)*M,l=(l+p)*r,i=(i+o)*M,k=(k+p)*r,m=(m+o)*M,j=(j+p)*r;c-=a;d-=b;g-=a;f-=b;i-=h;k-=l;m-=h;j-=l;o=i*j-m*k;if(o==0){if(qa[ga.id]==void 0)b=document.createElement("canvas"),b.width=ga.image.width,b.height=ga.image.height,a=b.getContext("2d"),a.drawImage(ga.image,0,0),qa[ga.id]=a.getImageData(0,0,ga.image.width,ga.image.height).data,delete b;b=qa[ga.id];h=(Math.floor(h)+ -Math.floor(l)*ga.image.width)*4;N.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);Aa(N)}else o=1/o,ga=(j*c-k*g)*o,k=(j*d-k*f)*o,c=(i*g-m*c)*o,d=(i*f-m*d)*o,a=a-ga*h-c*l,h=b-k*h-d*l,n.save(),n.transform(ga,k,c,d,a,h),n.fill(),n.restore()}}function Fa(a,b,c,d,e,g,f,h,l,i,k,m,j){var ga,o;ga=j.width-1;o=j.height-1;f*=ga;h*=o;l*=ga;i*=o;k*=ga;m*=o;c-=a;d-=b;e-=a;g-=b;l-=f;i-=h;k-=f;m-=h;o=1/(l*m-k*i);ga=(m*c-i*e)*o;i=(m*d-i*g)*o;c=(l*e-k*c)*o;d=(l*g-k*d)*o;a=a-ga*f-c*h;b=b-i*f-d*h;n.save();n.transform(ga,i,c,d, -a,b);n.clip();n.drawImage(j,0,0);n.restore()}function Ja(a,b,c,d){var e=~~(a.r*255),g=~~(a.g*255),a=~~(a.b*255),f=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),l=~~(c.r*255),i=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),m=~~(d.g*255),d=~~(d.b*255);ya[0]=e<0?0:e>255?255:e;ya[1]=g<0?0:g>255?255:g;ya[2]=a<0?0:a>255?255:a;ya[4]=f<0?0:f>255?255:f;ya[5]=h<0?0:h>255?255:h;ya[6]=b<0?0:b>255?255:b;ya[8]=l<0?0:l>255?255:l;ya[9]=i<0?0:i>255?255:i;ya[10]=c<0?0:c>255?255:c;ya[12]=k<0?0:k>255?255:k;ya[13]=m<0?0:m>255?255: -m;ya[14]=d<0?0:d>255?255:d;da.putImageData(za,0,0);Ia.drawImage(ka,0,0);return ga}function Ea(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Ga(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Da(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 C,Ka,ua,D;this.autoClear?this.clear():n.setTransform(1,0,0,-1,m,q);g.info.render.vertices=0;g.info.render.faces=0;f=j.projectScene(a,k,this.sortElements);h=f.elements;i=f.lights;(P=i.length>0)&&o(i);C= -0;for(Ka=h.length;C1?1:a}var d=this,e,g,f,h=new THREE.Projector,i=document.createElementNS("http://www.w3.org/2000/svg","svg"),j,k,o,p,m,q,n,r,t=new THREE.Rectangle,u=new THREE.Rectangle,y=!1,v=new THREE.Color,A=new THREE.Color,z=new THREE.Color,w=new THREE.Color,I,F=new THREE.Vector3,G=[],s=[],E,T,Z,Q=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":Q=1;break;case "low":Q=0}};this.setSize=function(a,b){j=a;k=b;o=j/2;p=k/2;i.setAttribute("viewBox",-o+" "+-p+" "+j+" "+k);i.setAttribute("width",j);i.setAttribute("height",k);t.set(-o,-p,o,p)};this.clear=function(){for(;i.childNodes.length>0;)i.removeChild(i.childNodes[0])};this.render=function(k,j){var G,F,L,H;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;e=h.projectScene(k,j,this.sortElements);g=e.elements; -f=e.lights;Z=T=0;if(y=f.length>0){A.setRGB(0,0,0);z.setRGB(0,0,0);w.setRGB(0,0,0);G=0;for(F=f.length;G0&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b*255)+","+t+")"),n.fillRect(Math.floor(J.getX()), +Math.floor(J.getY()),Math.floor(J.getWidth()),Math.floor(J.getHeight()))),J.empty())};this.render=function(a,k){function o(a){var b,c,d,e;ba.setRGB(0,0,0);Z.setRGB(0,0,0);sa.setRGB(0,0,0);b=0;for(c=a.length;b>1,ha=k.height>> +1,f=g.scale.x*m,l=g.scale.y*q,h=f*j,i=l*ha,H.set(a.x-h,a.y-i,a.x+h,a.y+i),T.intersects(H)&&(n.save(),n.translate(a.x,a.y),n.rotate(-g.rotation),n.scale(f,-l),n.translate(-j,-ha),n.drawImage(k,0,0),n.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(h=g.scale.x*m,i=g.scale.y*q,H.set(a.x-h,a.y-i,a.x+h,a.y+i),T.intersects(H)&&(d(f.color.getContextStyle()),e(f.color.getContextStyle()),n.save(),n.translate(a.x,a.y),n.rotate(-g.rotation),n.scale(h,i),f.program(n),n.restore()))}function t(a,e, +g,f){b(f.opacity);c(f.blending);n.beginPath();n.moveTo(a.positionScreen.x,a.positionScreen.y);n.lineTo(e.positionScreen.x,e.positionScreen.y);n.closePath();if(f instanceof THREE.LineBasicMaterial){a=f.linewidth;if(A!=a)n.lineWidth=A=a;a=f.linecap;if(v!=a)n.lineCap=v=a;a=f.linejoin;if(G!=a)n.lineJoin=G=a;d(f.color.getContextStyle());n.stroke();H.inflate(f.linewidth*2)}}function u(a,d,e,f,h,l,m,n){g.info.render.vertices+=3;g.info.render.faces++;b(n.opacity);c(n.blending);R=a.positionScreen.x;V=a.positionScreen.y; +aa=d.positionScreen.x;ja=d.positionScreen.y;I=e.positionScreen.x;L=e.positionScreen.y;Ha(R,V,aa,ja,I,L);if(n instanceof THREE.MeshBasicMaterial)if(n.map)n.map.mapping instanceof THREE.UVMapping&&(pa=m.uvs[0],z(R,V,aa,ja,I,L,pa[f].u,pa[f].v,pa[h].u,pa[h].v,pa[l].u,pa[l].v,n.map));else if(n.envMap){if(n.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,Y.copy(m.vertexNormalsWorld[f]),Ba=(Y.x*a.n11+Y.y*a.n12+Y.z*a.n13)*0.5+0.5,wa=-(Y.x*a.n21+Y.y*a.n22+Y.z*a.n23)*0.5+0.5, +Y.copy(m.vertexNormalsWorld[h]),va=(Y.x*a.n11+Y.y*a.n12+Y.z*a.n13)*0.5+0.5,xa=-(Y.x*a.n21+Y.y*a.n22+Y.z*a.n23)*0.5+0.5,Y.copy(m.vertexNormalsWorld[l]),M=(Y.x*a.n11+Y.y*a.n12+Y.z*a.n13)*0.5+0.5,fa=-(Y.x*a.n21+Y.y*a.n22+Y.z*a.n23)*0.5+0.5,z(R,V,aa,ja,I,L,Ba,wa,va,xa,M,fa,n.envMap)}else n.wireframe?Ca(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(n.color);else if(n instanceof THREE.MeshLambertMaterial)n.map&&!n.wireframe&&(n.map.mapping instanceof THREE.UVMapping&&(pa=m.uvs[0], +z(R,V,aa,ja,I,L,pa[f].u,pa[f].v,pa[h].u,pa[h].v,pa[l].u,pa[l].v,n.map)),c(THREE.SubtractiveBlending)),Q?!n.wireframe&&n.shading==THREE.SmoothShading&&m.vertexNormalsWorld.length==3?(ga.r=X.r=ca.r=ba.r,ga.g=X.g=ca.g=ba.g,ga.b=X.b=ca.b=ba.b,p(i,m.v1.positionWorld,m.vertexNormalsWorld[0],ga),p(i,m.v2.positionWorld,m.vertexNormalsWorld[1],X),p(i,m.v3.positionWorld,m.vertexNormalsWorld[2],ca),ga.r=Math.max(0,Math.min(n.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(n.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(n.color.b* +ga.b,1)),X.r=Math.max(0,Math.min(n.color.r*X.r,1)),X.g=Math.max(0,Math.min(n.color.g*X.g,1)),X.b=Math.max(0,Math.min(n.color.b*X.b,1)),ca.r=Math.max(0,Math.min(n.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(n.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(n.color.b*ca.b,1)),na.r=(X.r+ca.r)*0.5,na.g=(X.g+ca.g)*0.5,na.b=(X.b+ca.b)*0.5,ta=Ja(ga,X,ca,na),Fa(R,V,aa,ja,I,L,0,0,1,0,0,1,ta)):(O.r=ba.r,O.g=ba.g,O.b=ba.b,p(i,m.centroidWorld,m.normalWorld,O),O.r=Math.max(0,Math.min(n.color.r*O.r,1)),O.g=Math.max(0, +Math.min(n.color.g*O.g,1)),O.b=Math.max(0,Math.min(n.color.b*O.b,1)),n.wireframe?Ca(O,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(O)):n.wireframe?Ca(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(n.color);else if(n instanceof THREE.MeshDepthMaterial)ra=k.near,oa=k.far,ga.r=ga.g=ga.b=1-Ea(a.positionScreen.z,ra,oa),X.r=X.g=X.b=1-Ea(d.positionScreen.z,ra,oa),ca.r=ca.g=ca.b=1-Ea(e.positionScreen.z,ra,oa),na.r=(X.r+ca.r)*0.5,na.g=(X.g+ca.g)*0.5,na.b=(X.b+ca.b)* +0.5,ta=Ja(ga,X,ca,na),Fa(R,V,aa,ja,I,L,0,0,1,0,0,1,ta);else if(n instanceof THREE.MeshNormalMaterial)O.r=Ga(m.normalWorld.x),O.g=Ga(m.normalWorld.y),O.b=Ga(m.normalWorld.z),n.wireframe?Ca(O,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Aa(O)}function y(a,d,e,f,h,n,m,j,ha){g.info.render.vertices+=4;g.info.render.faces++;b(j.opacity);c(j.blending);if(j.map||j.envMap)u(a,d,f,0,1,3,m,j,ha),u(h,e,n,1,2,3,m,j,ha);else if(R=a.positionScreen.x,V=a.positionScreen.y,aa=d.positionScreen.x,ja= +d.positionScreen.y,I=e.positionScreen.x,L=e.positionScreen.y,C=f.positionScreen.x,P=f.positionScreen.y,W=h.positionScreen.x,S=h.positionScreen.y,l=n.positionScreen.x,da=n.positionScreen.y,j instanceof THREE.MeshBasicMaterial)w(R,V,aa,ja,I,L,C,P),j.wireframe?Ca(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(j.color);else if(j instanceof THREE.MeshLambertMaterial)Q?!j.wireframe&&j.shading==THREE.SmoothShading&&m.vertexNormalsWorld.length==4?(ga.r=X.r=ca.r=na.r=ba.r,ga.g=X.g= +ca.g=na.g=ba.g,ga.b=X.b=ca.b=na.b=ba.b,p(i,m.v1.positionWorld,m.vertexNormalsWorld[0],ga),p(i,m.v2.positionWorld,m.vertexNormalsWorld[1],X),p(i,m.v4.positionWorld,m.vertexNormalsWorld[3],ca),p(i,m.v3.positionWorld,m.vertexNormalsWorld[2],na),ga.r=Math.max(0,Math.min(j.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(j.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(j.color.b*ga.b,1)),X.r=Math.max(0,Math.min(j.color.r*X.r,1)),X.g=Math.max(0,Math.min(j.color.g*X.g,1)),X.b=Math.max(0,Math.min(j.color.b*X.b,1)),ca.r= +Math.max(0,Math.min(j.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(j.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(j.color.b*ca.b,1)),na.r=Math.max(0,Math.min(j.color.r*na.r,1)),na.g=Math.max(0,Math.min(j.color.g*na.g,1)),na.b=Math.max(0,Math.min(j.color.b*na.b,1)),ta=Ja(ga,X,ca,na),Ha(R,V,aa,ja,C,P),Fa(R,V,aa,ja,C,P,0,0,1,0,0,1,ta),Ha(W,S,I,L,l,da),Fa(W,S,I,L,l,da,1,0,1,1,0,1,ta)):(O.r=ba.r,O.g=ba.g,O.b=ba.b,p(i,m.centroidWorld,m.normalWorld,O),O.r=Math.max(0,Math.min(j.color.r*O.r,1)),O.g=Math.max(0,Math.min(j.color.g* +O.g,1)),O.b=Math.max(0,Math.min(j.color.b*O.b,1)),w(R,V,aa,ja,I,L,C,P),j.wireframe?Ca(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(O)):(w(R,V,aa,ja,I,L,C,P),j.wireframe?Ca(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(j.color));else if(j instanceof THREE.MeshNormalMaterial)O.r=Ga(m.normalWorld.x),O.g=Ga(m.normalWorld.y),O.b=Ga(m.normalWorld.z),w(R,V,aa,ja,I,L,C,P),j.wireframe?Ca(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Aa(O);else if(j instanceof +THREE.MeshDepthMaterial)ra=k.near,oa=k.far,ga.r=ga.g=ga.b=1-Ea(a.positionScreen.z,ra,oa),X.r=X.g=X.b=1-Ea(d.positionScreen.z,ra,oa),ca.r=ca.g=ca.b=1-Ea(f.positionScreen.z,ra,oa),na.r=na.g=na.b=1-Ea(e.positionScreen.z,ra,oa),ta=Ja(ga,X,ca,na),Ha(R,V,aa,ja,C,P),Fa(R,V,aa,ja,C,P,0,0,1,0,0,1,ta),Ha(W,S,I,L,l,da),Fa(W,S,I,L,l,da,1,0,1,1,0,1,ta)}function Ha(a,b,c,d,e,g){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,g);n.lineTo(a,b);n.closePath()}function w(a,b,c,d,e,g,f,h){n.beginPath();n.moveTo(a, +b);n.lineTo(c,d);n.lineTo(e,g);n.lineTo(f,h);n.lineTo(a,b);n.closePath()}function Ca(a,b,c,e){if(A!=b)n.lineWidth=A=b;if(v!=c)n.lineCap=v=c;if(G!=e)n.lineJoin=G=e;d(a.getContextStyle());n.stroke();H.inflate(b*2)}function Aa(a){e(a.getContextStyle());n.fill()}function z(a,b,c,d,g,f,h,i,l,k,m,j,ha){if(ha.image.width!=0){if(ha.needsUpdate==!0||ia[ha.id]==void 0){var o=ha.wrapS==THREE.RepeatWrapping,p=ha.wrapT==THREE.RepeatWrapping;ia[ha.id]=n.createPattern(ha.image,o&&p?"repeat":o&&!p?"repeat-x":!o&& +p?"repeat-y":"no-repeat");ha.needsUpdate=!1}e(ia[ha.id]);var o=ha.offset.x/ha.repeat.x,p=ha.offset.y/ha.repeat.y,M=ha.image.width*ha.repeat.x,r=ha.image.height*ha.repeat.y,h=(h+o)*M,i=(i+p)*r,l=(l+o)*M,k=(k+p)*r,m=(m+o)*M,j=(j+p)*r;c-=a;d-=b;g-=a;f-=b;l-=h;k-=i;m-=h;j-=i;o=l*j-m*k;if(o==0){if(qa[ha.id]==void 0)b=document.createElement("canvas"),b.width=ha.image.width,b.height=ha.image.height,a=b.getContext("2d"),a.drawImage(ha.image,0,0),qa[ha.id]=a.getImageData(0,0,ha.image.width,ha.image.height).data, +delete b;b=qa[ha.id];h=(Math.floor(h)+Math.floor(i)*ha.image.width)*4;O.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);Aa(O)}else o=1/o,ha=(j*c-k*g)*o,k=(j*d-k*f)*o,c=(l*g-m*c)*o,d=(l*f-m*d)*o,a=a-ha*h-c*i,h=b-k*h-d*i,n.save(),n.transform(ha,k,c,d,a,h),n.fill(),n.restore()}}function Fa(a,b,c,d,e,g,f,h,i,l,k,m,j){var ha,o;ha=j.width-1;o=j.height-1;f*=ha;h*=o;i*=ha;l*=o;k*=ha;m*=o;c-=a;d-=b;e-=a;g-=b;i-=f;l-=h;k-=f;m-=h;o=1/(i*m-k*l);ha=(m*c-l*e)*o;l=(m*d-l*g)*o;c=(i*e-k*c)*o;d=(i*g-k*d)*o;a=a-ha*f-c*h;b=b- +l*f-d*h;n.save();n.transform(ha,l,c,d,a,b);n.clip();n.drawImage(j,0,0);n.restore()}function Ja(a,b,c,d){var e=~~(a.r*255),g=~~(a.g*255),a=~~(a.b*255),f=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),l=~~(c.r*255),i=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),m=~~(d.g*255),d=~~(d.b*255);ya[0]=e<0?0:e>255?255:e;ya[1]=g<0?0:g>255?255:g;ya[2]=a<0?0:a>255?255:a;ya[4]=f<0?0:f>255?255:f;ya[5]=h<0?0:h>255?255:h;ya[6]=b<0?0:b>255?255:b;ya[8]=l<0?0:l>255?255:l;ya[9]=i<0?0:i>255?255:i;ya[10]=c<0?0:c>255?255:c;ya[12]=k< +0?0:k>255?255:k;ya[13]=m<0?0:m>255?255:m;ya[14]=d<0?0:d>255?255:d;ea.putImageData(za,0,0);Ia.drawImage(ka,0,0);return ha}function Ea(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Ga(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Da(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 D,Ka,ua,E;this.autoClear?this.clear():n.setTransform(1,0,0,-1,m,q);g.info.render.vertices=0;g.info.render.faces=0;f=j.projectScene(a,k,this.sortElements);h=f.elements; +i=f.lights;(Q=i.length>0)&&o(i);D=0;for(Ka=h.length;D1?1:a}var d=this,e,g,f,h=new THREE.Projector,i=document.createElementNS("http://www.w3.org/2000/svg","svg"),j,k,o,p,m,q,n,r,t=new THREE.Rectangle,u=new THREE.Rectangle,y=!1,w=new THREE.Color,z=new THREE.Color,A=new THREE.Color,v=new THREE.Color,G,F=new THREE.Vector3,K=[],s=[],N,U,$,R=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":R=1;break;case "low":R=0}};this.setSize=function(a,b){j=a;k=b;o=j/2;p=k/2;i.setAttribute("viewBox",-o+" "+-p+" "+j+" "+k);i.setAttribute("width",j);i.setAttribute("height",k);t.set(-o,-p,o,p)};this.clear=function(){for(;i.childNodes.length>0;)i.removeChild(i.childNodes[0])};this.render=function(k,j){var K,F,L,C;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;e=h.projectScene(k,j,this.sortElements);g=e.elements; +f=e.lights;$=U=0;if(y=f.length>0){z.setRGB(0,0,0);A.setRGB(0,0,0);v.setRGB(0,0,0);K=0;for(F=f.length;K=0)return a.geometry.materials[b.materialIndex]}function d(a){if(a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial)return!1;return a&&a.shading!==void 0&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function e(a){if(a.vertexColors)return a.vertexColors;return!1}function g(a){if(a.map||a.lightMap||a instanceof THREE.ShaderMaterial)return!0; -return!1}function f(a,b,c){var d,e,f,g,h=a.vertices;g=h.length;var i=a.colors,k=i.length,m=a.__vertexArray,n=a.__colorArray,j=a.__sortArray,o=a.__dirtyVertices,p=a.__dirtyColors,M=a.__webglCustomAttributesList;if(c.sortParticles){J.multiplySelf(c.matrixWorld);for(d=0;d=0)a&&(l.bindBuffer(l.ARRAY_BUFFER,e.__webglVertexBuffer),l.vertexAttribPointer(b.position,3,l.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;f.morphTargetBase!==-1?(l.bindBuffer(l.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]), +l.vertexAttribPointer(b.attributes.normal,3,l.FLOAT,!1,0,0)}l.drawArrays(l.TRIANGLES,0,a.count);a.count=0}function i(a,b,c,d,e,f){if(d.opacity!==0){var g,h,c=w(a,b,c,d,f),b=c.attributes,a=!1,c=e.id*16777215+c.id*2+(d.wireframe?1:0);c!==ca&&(ca=c,a=!0);if(!d.morphTargets&&b.position>=0)a&&(l.bindBuffer(l.ARRAY_BUFFER,e.__webglVertexBuffer),l.vertexAttribPointer(b.position,3,l.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;f.morphTargetBase!==-1?(l.bindBuffer(l.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]), l.vertexAttribPointer(c.position,3,l.FLOAT,!1,0,0)):c.position>=0&&(l.bindBuffer(l.ARRAY_BUFFER,e.__webglVertexBuffer),l.vertexAttribPointer(c.position,3,l.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){g=0;var i=f.morphTargetForcedOrder;for(h=f.morphTargetInfluences;gk&&(j=m,k=h[j]);l.bindBuffer(l.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[j]);l.vertexAttribPointer(c["morphTarget"+g],3,l.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=k;i[j]=1;k=-1;g++}}d.program.uniforms.morphTargetInfluences!==null&&l.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g= +m=0;h=f.morphTargetInfluences;var j,n=h.length;g=0;for(f.morphTargetBase!==-1&&(i[f.morphTargetBase]=!0);gk&&(m=j,k=h[m]);l.bindBuffer(l.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[m]);l.vertexAttribPointer(c["morphTarget"+g],3,l.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=k;i[m]=1;k=-1;g++}}d.program.uniforms.morphTargetInfluences!==null&&l.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g= 0;for(h=e.__webglCustomAttributesList.length;g=0&&(l.bindBuffer(l.ARRAY_BUFFER,c.buffer),l.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,l.FLOAT,!1,0,0))}b.color>=0&&(l.bindBuffer(l.ARRAY_BUFFER,e.__webglColorBuffer),l.vertexAttribPointer(b.color,3,l.FLOAT,!1,0,0));b.normal>=0&&(l.bindBuffer(l.ARRAY_BUFFER,e.__webglNormalBuffer),l.vertexAttribPointer(b.normal,3,l.FLOAT,!1,0,0));b.tangent>=0&&(l.bindBuffer(l.ARRAY_BUFFER, e.__webglTangentBuffer),l.vertexAttribPointer(b.tangent,4,l.FLOAT,!1,0,0));b.uv>=0&&(e.__webglUVBuffer?(l.bindBuffer(l.ARRAY_BUFFER,e.__webglUVBuffer),l.vertexAttribPointer(b.uv,2,l.FLOAT,!1,0,0),l.enableVertexAttribArray(b.uv)):l.disableVertexAttribArray(b.uv));b.uv2>=0&&(e.__webglUV2Buffer?(l.bindBuffer(l.ARRAY_BUFFER,e.__webglUV2Buffer),l.vertexAttribPointer(b.uv2,2,l.FLOAT,!1,0,0),l.enableVertexAttribArray(b.uv2)):l.disableVertexAttribArray(b.uv2));d.skinning&&b.skinVertexA>=0&&b.skinVertexB>= 0&&b.skinIndex>=0&&b.skinWeight>=0&&(l.bindBuffer(l.ARRAY_BUFFER,e.__webglSkinVertexABuffer),l.vertexAttribPointer(b.skinVertexA,4,l.FLOAT,!1,0,0),l.bindBuffer(l.ARRAY_BUFFER,e.__webglSkinVertexBBuffer),l.vertexAttribPointer(b.skinVertexB,4,l.FLOAT,!1,0,0),l.bindBuffer(l.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),l.vertexAttribPointer(b.skinIndex,4,l.FLOAT,!1,0,0),l.bindBuffer(l.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),l.vertexAttribPointer(b.skinWeight,4,l.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe? -(d=d.wireframeLinewidth,d!==va&&(l.lineWidth(d),va=d),a&&l.bindBuffer(l.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),l.drawElements(l.LINES,e.__webglLineCount,l.UNSIGNED_SHORT,0)):(a&&l.bindBuffer(l.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),l.drawElements(l.TRIANGLES,e.__webglFaceCount,l.UNSIGNED_SHORT,0)),R.info.render.calls++,R.info.render.vertices+=e.__webglFaceCount,R.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?l.LINE_STRIP:l.LINES,d=d.linewidth,d!== -va&&(l.lineWidth(d),va=d),l.drawArrays(f,0,e.__webglLineCount),R.info.render.calls++):f instanceof THREE.ParticleSystem?(l.drawArrays(l.POINTS,0,e.__webglParticleCount),R.info.render.calls++):f instanceof THREE.Ribbon&&(l.drawArrays(l.TRIANGLE_STRIP,0,e.__webglVertexCount),R.info.render.calls++)}}function j(a){ha[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);ha[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);ha[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);ha[3].set(a.n41- -a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);ha[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);ha[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(var b,a=0;a<6;a++)b=ha[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}function k(a){for(var b=a.matrixWorld,c=-a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)),d=0;d<6;d++)if(a=ha[d].x*b.n14+ha[d].y*b.n24+ha[d].z*b.n34+ha[d].w,a<=c)return!1;return!0}function o(a,b){return b.z-a.z}function p(a){var b, -c,d,e,f,g,m,n,o=0,p=a.lights;X||(X=new THREE.PerspectiveCamera(R.shadowCameraFov,R.shadowMapWidth/R.shadowMapHeight,R.shadowCameraNear,R.shadowCameraFar));b=0;for(c=p.length;b=0;c--)a[c].object===b&&a.splice(c,1)}function y(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function v(a,b,c,d,e){d.program||R.initMaterial(d,b,c,e);if(d.morphTargets&&!e.__webglMorphTargetInfluences){e.__webglMorphTargetInfluences=new Float32Array(R.maxMorphTargets); -for(var f=0,g=R.maxMorphTargets;f=0;c--)a[c].object===b&&a.splice(c,1)}function y(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function w(a,b,c,d,e){d.program||S.initMaterial(d,b,c,e);if(d.morphTargets&&!e.__webglMorphTargetInfluences){e.__webglMorphTargetInfluences=new Float32Array(S.maxMorphTargets); +for(var f=0,g=S.maxMorphTargets;f0;this.getContext=function(){return l};this.supportsVertexTextures=function(){return ya};this.setSize=function(a,b){U.width=a;U.height=b;this.setViewport(0,0,U.width,U.height)};this.setViewport=function(a,b,c,d){xa=a;M=b;ea=c;S=d;l.viewport(xa,M,ea,S)};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){H.setHex(a);O=b;l.clearColor(H.r,H.g,H.b,O)};this.setClearColor=function(a,b){H.copy(a);O=b;l.clearColor(H.r,H.g,H.b,O)};this.getClearColor=function(){return H};this.getClearAlpha=function(){return O};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){T(a);this.clear(b, +case THREE.RGBFormat:return l.RGB;case THREE.RGBAFormat:return l.RGBA;case THREE.LuminanceFormat:return l.LUMINANCE;case THREE.LuminanceAlphaFormat:return l.LUMINANCE_ALPHA}return 0}var a=a||{},V=a.canvas!==void 0?a.canvas:document.createElement("canvas"),aa=a.precision!==void 0?a.precision:"highp",ja=a.antialias!==void 0?a.antialias:!1,I=a.stencil!==void 0?a.stencil:!0,L=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,C=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0), +P=a.clearAlpha!==void 0?a.clearAlpha:0,W=a.maxLights!==void 0?a.maxLights:4;this.domElement=V;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap= +[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.maxMorphTargets=8;this.renderPlugins=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};var S=this,l,da=[],O=null,ga=null,X=-1,ca=null,na=0,ia=null,qa=null,ra=null,oa=null,ta=null,pa=null,Ba=null,wa=null,va=null,xa=0,M=0,fa=0,T=0,J=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],H=new THREE.Matrix4,Q=new Float32Array(16), +ba=new Float32Array(16),Z=new THREE.Vector4,sa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},Y,ka=[],ea,za;l=function(){var a;try{if(!(a=V.getContext("experimental-webgl",{antialias:ja,stencil:I,preserveDrawingBuffer:L})))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(C.r,C.g,C.b,P);(function(){var a=THREE.ShaderLib.depthRGBA,b=THREE.UniformsUtils.clone(a.uniforms);ea=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:b});za=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader, +vertexShader:a.vertexShader,uniforms:b,morphTargets:!0});ea._shadowPass=!0;za._shadowPass=!0})();this.context=l;var ya=l.getParameter(l.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;this.getContext=function(){return l};this.supportsVertexTextures=function(){return ya};this.setSize=function(a,b){V.width=a;V.height=b;this.setViewport(0,0,V.width,V.height)};this.setViewport=function(a,b,c,d){xa=a;M=b;fa=c;T=d;l.viewport(xa,M,fa,T)};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){C.setHex(a);P=b;l.clearColor(C.r,C.g,C.b,P)};this.setClearColor=function(a,b){C.copy(a);P=b;l.clearColor(C.r,C.g,C.b,P)};this.getClearColor=function(){return C};this.getClearAlpha=function(){return P};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){U(a);this.clear(b, c,d)};this.addPlugin=function(a){a.init(this);this.renderPlugins.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;d=0)u=r.geometry.materials[u],u.transparent?(M.transparent=u,M.opaque=null):(M.opaque=u,M.transparent=null)}else if(u)u.transparent?(M.transparent=u,M.opaque=null):(M.opaque=u,M.transparent=null);f.render=!0;if(this.sortObjects)g.renderDepth?f.z=g.renderDepth:(Y.copy(g.position),J.multiplyVector3(Y),f.z=Y.z)}this.sortObjects&&h.sort(o);h=a.__webglObjectsImmediate;d=0; -for(e=h.length;d=0)u=r.geometry.materials[u],u.transparent?(M.transparent=u,M.opaque=null):(M.opaque=u,M.transparent=null)}else if(u)u.transparent?(M.transparent=u,M.opaque=null):(M.opaque=u,M.transparent=null);f.render=!0;if(this.sortObjects)g.renderDepth?f.z=g.renderDepth:(Z.copy(g.position),H.multiplyVector3(Z),f.z=Z.z)}this.sortObjects&&h.sort(o);h=a.__webglObjectsImmediate;d=0; +for(e=h.length;d65535&&(v[ea].counter+=1,s=v[ea].hash+"_"+v[ea].counter,j.geometryGroups[s]===void 0&&(j.geometryGroups[s]={faces3:[],faces4:[],materialIndex:q,vertices:0,numMorphTargets:ha})),M instanceof -THREE.Face3?j.geometryGroups[s].faces3.push(o):j.geometryGroups[s].faces4.push(o),j.geometryGroups[s].vertices+=S;j.geometryGroupsList=[];o=void 0;for(o in j.geometryGroups)j.geometryGroups[o].id=na++,j.geometryGroupsList.push(j.geometryGroups[o])}for(k in m.geometryGroups)if(j=m.geometryGroups[k],!j.__webglVertexBuffer){o=j;o.__webglVertexBuffer=l.createBuffer();o.__webglNormalBuffer=l.createBuffer();o.__webglTangentBuffer=l.createBuffer();o.__webglColorBuffer=l.createBuffer();o.__webglUVBuffer= -l.createBuffer();o.__webglUV2Buffer=l.createBuffer();o.__webglSkinVertexABuffer=l.createBuffer();o.__webglSkinVertexBBuffer=l.createBuffer();o.__webglSkinIndicesBuffer=l.createBuffer();o.__webglSkinWeightsBuffer=l.createBuffer();o.__webglFaceBuffer=l.createBuffer();o.__webglLineBuffer=l.createBuffer();if(o.numMorphTargets){M=p=void 0;o.__webglMorphTargetsBuffers=[];p=0;for(M=o.numMorphTargets;p0||S.faceVertexUvs.length>0)j.__uvArray=new Float32Array(o*2);if(S.faceUvs.length>1||S.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(o*2)}if(q.geometry.skinWeights.length&& -q.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(o*4),j.__skinVertexBArray=new Float32Array(o*4),j.__skinIndexArray=new Float32Array(o*4),j.__skinWeightArray=new Float32Array(o*4);j.__faceArray=new Uint16Array(M*3);j.__lineArray=new Uint16Array(ea*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];q=0;for(S=j.numMorphTargets;q0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinVertexABuffer),l.bufferData(l.ARRAY_BUFFER, -Q,M),l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinVertexBBuffer),l.bufferData(l.ARRAY_BUFFER,aa,M),l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinIndicesBuffer),l.bufferData(l.ARRAY_BUFFER,O,M),l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinWeightsBuffer),l.bufferData(l.ARRAY_BUFFER,ia,M))}if(ra&&ea){s=0;for(v=E.length;s0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglColorBuffer),l.bufferData(l.ARRAY_BUFFER,U,M))}if(F&&V.hasTangents){s=0;for(v=E.length;s0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglUVBuffer),l.bufferData(l.ARRAY_BUFFER,ca,M))}if(qa&&ta&&T){s=0;for(v=E.length;s0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglUV2Buffer),l.bufferData(l.ARRAY_BUFFER,B,M))}if(ya){s=0;for(v=E.length;s=0&&l.enableVertexAttribArray(o.position);o.color>=0&&l.enableVertexAttribArray(o.color);o.normal>=0&&l.enableVertexAttribArray(o.normal); +i=a,k=void 0,m=void 0,j=void 0;if(!h.__webglInit)if(h.__webglInit=!0,h._modelViewMatrix=new THREE.Matrix4,h._normalMatrixArray=new Float32Array(9),h._modelViewMatrixArray=new Float32Array(16),h._objectMatrixArray=new Float32Array(16),h.matrixWorld.flattenToArray(h._objectMatrixArray),h instanceof THREE.Mesh){m=h.geometry;if(m.geometryGroups===void 0){var j=m,o=void 0,p=void 0,M=void 0,q=void 0,T=void 0,fa=void 0,s=void 0,J={},K=j.morphTargets.length;j.geometryGroups={};o=0;for(p=j.faces.length;o< +p;o++)M=j.faces[o],q=M.materialIndex,fa=q!==void 0?q:-1,J[fa]===void 0&&(J[fa]={hash:fa,counter:0}),s=J[fa].hash+"_"+J[fa].counter,j.geometryGroups[s]===void 0&&(j.geometryGroups[s]={faces3:[],faces4:[],materialIndex:q,vertices:0,numMorphTargets:K}),T=M instanceof THREE.Face3?3:4,j.geometryGroups[s].vertices+T>65535&&(J[fa].counter+=1,s=J[fa].hash+"_"+J[fa].counter,j.geometryGroups[s]===void 0&&(j.geometryGroups[s]={faces3:[],faces4:[],materialIndex:q,vertices:0,numMorphTargets:K})),M instanceof THREE.Face3? +j.geometryGroups[s].faces3.push(o):j.geometryGroups[s].faces4.push(o),j.geometryGroups[s].vertices+=T;j.geometryGroupsList=[];o=void 0;for(o in j.geometryGroups)j.geometryGroups[o].id=na++,j.geometryGroupsList.push(j.geometryGroups[o])}for(k in m.geometryGroups)if(j=m.geometryGroups[k],!j.__webglVertexBuffer){o=j;o.__webglVertexBuffer=l.createBuffer();o.__webglNormalBuffer=l.createBuffer();o.__webglTangentBuffer=l.createBuffer();o.__webglColorBuffer=l.createBuffer();o.__webglUVBuffer=l.createBuffer(); +o.__webglUV2Buffer=l.createBuffer();o.__webglSkinVertexABuffer=l.createBuffer();o.__webglSkinVertexBBuffer=l.createBuffer();o.__webglSkinIndicesBuffer=l.createBuffer();o.__webglSkinWeightsBuffer=l.createBuffer();o.__webglFaceBuffer=l.createBuffer();o.__webglLineBuffer=l.createBuffer();if(o.numMorphTargets){M=p=void 0;o.__webglMorphTargetsBuffers=[];p=0;for(M=o.numMorphTargets;p0||T.faceVertexUvs.length>0)j.__uvArray=new Float32Array(o*2);if(T.faceUvs.length>1||T.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(o*2)}if(q.geometry.skinWeights.length&&q.geometry.skinIndices.length)j.__skinVertexAArray= +new Float32Array(o*4),j.__skinVertexBArray=new Float32Array(o*4),j.__skinIndexArray=new Float32Array(o*4),j.__skinWeightArray=new Float32Array(o*4);j.__faceArray=new Uint16Array(M*3);j.__lineArray=new Uint16Array(fa*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];q=0;for(T=j.numMorphTargets;q0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinVertexABuffer),l.bufferData(l.ARRAY_BUFFER,R,M),l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinVertexBBuffer), +l.bufferData(l.ARRAY_BUFFER,ba,M),l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinIndicesBuffer),l.bufferData(l.ARRAY_BUFFER,P,M),l.bindBuffer(l.ARRAY_BUFFER,p.__webglSkinWeightsBuffer),l.bufferData(l.ARRAY_BUFFER,ia,M))}if(ra&&fa){s=0;for(J=w.length;s0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglColorBuffer),l.bufferData(l.ARRAY_BUFFER,V,M))}if(F&&W.hasTangents){s=0;for(J=w.length;s0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglUVBuffer),l.bufferData(l.ARRAY_BUFFER,da,M))}if(qa&&ta&&U){s=0;for(J=w.length;s +0&&(l.bindBuffer(l.ARRAY_BUFFER,p.__webglUV2Buffer),l.bufferData(l.ARRAY_BUFFER,B,M))}if(ya){s=0;for(J=w.length;s=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[M]), 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.setBlending=function(a){if(a!==ra){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,l.FUNC_ADD),l.blendFuncSeparate(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA,l.ONE,l.ONE_MINUS_SRC_ALPHA)}ra=a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=l.createTexture(),R.info.memory.textures++;l.activeTexture(l.TEXTURE0+b);l.bindTexture(l.TEXTURE_2D,a.__webglTexture); -var c=s(l.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?l.texImage2D(l.TEXTURE_2D,0,Q(a.format),a.image.width,a.image.height,0,Q(a.format),l.UNSIGNED_BYTE,a.image.data):l.texImage2D(l.TEXTURE_2D,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)}}; +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,l.FUNC_ADD),l.blendFuncSeparate(l.SRC_ALPHA,l.ONE_MINUS_SRC_ALPHA,l.ONE,l.ONE_MINUS_SRC_ALPHA)}ra=a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=l.createTexture(),S.info.memory.textures++;l.activeTexture(l.TEXTURE0+b);l.bindTexture(l.TEXTURE_2D,a.__webglTexture); +var c=s(l.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?l.texImage2D(l.TEXTURE_2D,0,R(a.format),a.image.width,a.image.height,0,R(a.format),l.UNSIGNED_BYTE,a.image.data):l.texImage2D(l.TEXTURE_2D,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.addPlugin(new THREE.SpritePlugin);this.addPlugin(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}; @@ -485,23 +485,23 @@ c.object.position.addSelf(b);c.target.addSelf(b);c.staticMoving?o=p:o.addSelf(a. c.noPan||c.panCamera();c.object.position.add(c.target,f);c.checkDistances();c.object.lookAt(c.target)};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},!1);this.domElement.addEventListener("mousemove",function(a){c.enabled&&(e&&(h=i=c.getMouseProjectionOnBall(a.clientX,a.clientY),j=k=c.getMouseOnScreen(a.clientX,a.clientY),o=p=c.getMouseOnScreen(a.clientX,a.clientY),e=!1),g!==d.NONE&&(g===d.ROTATE&&!c.noRotate?i=c.getMouseProjectionOnBall(a.clientX,a.clientY):g===d.ZOOM&& !c.noZoom?k=c.getMouseOnScreen(a.clientX,a.clientY):g===d.PAN&&!c.noPan&&(p=c.getMouseOnScreen(a.clientX,a.clientY))))},!1);this.domElement.addEventListener("mousedown",function(a){if(c.enabled&&(a.preventDefault(),a.stopPropagation(),g===d.NONE))g=a.button,g===d.ROTATE&&!c.noRotate?h=i=c.getMouseProjectionOnBall(a.clientX,a.clientY):g===d.ZOOM&&!c.noZoom?j=k=c.getMouseOnScreen(a.clientX,a.clientY):this.noPan||(o=p=c.getMouseOnScreen(a.clientX,a.clientY))},!1);this.domElement.addEventListener("mouseup", function(a){if(c.enabled)a.preventDefault(),a.stopPropagation(),g=d.NONE},!1);window.addEventListener("keydown",function(a){if(c.enabled&&g===d.NONE){if(a.keyCode===c.keys[d.ROTATE]&&!c.noRotate)g=d.ROTATE;else if(a.keyCode===c.keys[d.ZOOM]&&!c.noZoom)g=d.ZOOM;else if(a.keyCode===c.keys[d.PAN]&&!c.noPan)g=d.PAN;g!==d.NONE&&(e=!0)}},!1);window.addEventListener("keyup",function(){if(c.enabled&&g!==d.NONE)g=d.NONE},!1)}; -THREE.CubeGeometry=function(a,b,c,d,e,g,f,h){function i(a,b,c,f,h,i,k,m){var n,o=d||1,p=e||1,q=h/2,r=i/2,t=j.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=g||1;else if(a==="z"&&b==="y"||a==="y"&&b==="z")n="x",o=g||1;var u=o+1,y=p+1,L=h/o,H=i/p,O=new THREE.Vector3;O[n]=k>0?1:-1;for(h=0;h0?1:-1;for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;ha&&(a+=Math.PI*2),a=(b+a)/2,new THREE.Vector2(-Math.cos(a),-Math.sin(a));return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(s=a.length;--s>=0;){V=s;R=s-1;R<0&&(R=a.length-1);for(var b= -0,c=m+k*2,b=0;b=0;T--){Z=T/k;Q=i*(1-Z);Z=j*Math.sin(Z*Math.PI/2);s=0;for(E=u.length;sa&&(a+=Math.PI*2),a=(b+a)/2,new THREE.Vector2(-Math.cos(a),-Math.sin(a));return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(s=a.length;--s>=0;){W=s;S=s-1;S<0&&(S=a.length-1);for(var b= +0,c=m+k*2,b=0;b=0;U--){$=U/k;R=i*(1-$);$=j*Math.sin($*Math.PI/2);s=0;for(N=u.length;s0)for(j=0;j2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);k=j+1;e<=k&&(k=0);var p;a:{p=a;var m=i,q=j,n=k,r=e,t=f,u=void 0,y=void 0,v=void 0, -A=void 0,z=void 0,w=void 0,I=void 0,F=void 0,G=void 0,y=p[t[m]].x,v=p[t[m]].y,A=p[t[q]].x,z=p[t[q]].y,w=p[t[n]].x,I=p[t[n]].y;if(1.0E-10>(A-y)*(I-v)-(z-v)*(w-y))p=!1;else{for(u=0;u=0&&T>=0&&Q>=0){p=!1;break a}}p= +(function(a){var b=function(a){for(var b=a.length,e=0,g=b-1,f=0;f0)for(j=0;j2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);k=j+1;e<=k&&(k=0);var p;a:{p=a;var m=i,q=j,n=k,r=e,t=f,u=void 0,y=void 0,w=void 0, +z=void 0,A=void 0,v=void 0,G=void 0,F=void 0,K=void 0,y=p[t[m]].x,w=p[t[m]].y,z=p[t[q]].x,A=p[t[q]].y,v=p[t[n]].x,G=p[t[n]].y;if(1.0E-10>(z-y)*(G-w)-(A-w)*(v-y))p=!1;else{for(u=0;u=0&&U>=0&&R>=0){p=!1;break a}}p= !0}}if(p){g.push([a[f[i]],a[f[j]],a[f[k]]]);h.push([f[i],f[j],f[k]]);i=j;for(k=j+1;k0;)this.smooth(a)}; THREE.SubdivisionModifier.prototype.smooth=function(a){function b(a,b,c,d,h,i){var j=new THREE.Face4(a,b,c,d,null,h.color,h.material);if(f.useOldVertexColors){j.vertexColors=[];for(var k,m,l,n=0;n<4;n++){l=i[n];k=new THREE.Color;k.setRGB(0,0,0);for(var o=0;o=0){p=i.invBindMatrices[m];j.invBindMatrix=p;j.skinningMatrix=new THREE.Matrix4;j.skinningMatrix.multiply(j.world,p);j.weights=[];for(p=0;p1?b.add(j):b=j}}b.name=a.id||"";a.matrix.decompose(b.position,b.rotation, b.scale);for(f=0;f1?c[1].substr(0,b):"0";c[1].length1?c[1].substr(0,b):"0";c[1].length=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;db){k=j.output[i];break}g=k!==void 0?k instanceof THREE.Matrix4? g.multiply(g,k):g.multiply(g,h.matrix):g.multiply(g,h.matrix)}else g=g.multiply(g,h.matrix);b=g;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};o.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};G.prototype.create=function(){var a= +a.input.POSITION.source};y.prototype.parse=function(a){this.inputs=[];this.material=a.getAttribute("material");this.count=W(a,"count",0);for(var b=0;b0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};K.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 F)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(d=na[this.effect.surface.init_from]))a.map=THREE.ImageUtils.loadTexture(Ba+d.init_from),a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}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=xa;return this.material=new THREE.MeshLambertMaterial(a)};s.prototype.parse=function(a){for(var b=0;b=0,d=a.indexOf("(")>=0,e,f;if(c)b=a.split("."),a=b.shift(),f=b.shift();else if(d){e=a.split("(");a=e.shift();for(b=0;b=0,d=a.indexOf("(")>=0,e,f;if(c)b=a.split("."),a=b.shift(),f=b.shift();else if(d){e=a.split("(");a=e.shift();for(b=0;b1&&(E=new THREE.MeshFaceMaterial); -a=new THREE.Mesh(F,E);a.name=p;a.position.set(v[0],v[1],v[2]);z?(a.quaternion.set(z[0],z[1],z[2],z[3]),a.useQuaternion=!0):a.rotation.set(A[0],A[1],A[2]);a.scale.set(w[0],w[1],w[2]);a.visible=t.visible;K.scene.add(a);K.objects[p]=a;if(t.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);K.scene.collisions.colliders.push(b)}if(t.castsShadow)b=new THREE.ShadowVolume(F),K.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;t.trigger&&t.trigger.toLowerCase()!="none"&&(b= -{type:t.trigger,object:t},K.triggers[a.name]=b)}}else v=t.position,A=t.rotation,z=t.quaternion,w=t.scale,z=0,a=new THREE.Object3D,a.name=p,a.position.set(v[0],v[1],v[2]),z?(a.quaternion.set(z[0],z[1],z[2],z[3]),a.useQuaternion=!0):a.rotation.set(A[0],A[1],A[2]),a.scale.set(w[0],w[1],w[2]),a.visible=t.visible!==void 0?t.visible:!1,K.scene.add(a),K.objects[p]=a,K.empties[p]=a,t.trigger&&t.trigger.toLowerCase()!="none"&&(b={type:t.trigger,object:t},K.triggers[a.name]=b)}function g(a){return function(b){K.geometries[a]= -b;e();Q-=1;i.onLoadComplete();h()}}function f(a){return function(b){K.geometries[a]=b}}function h(){i.callbackProgress({totalModels:$,totalTextures:ja,loadedModels:$-Q,loadedTextures:ja-U},K);i.onLoadProgress();Q==0&&U==0&&b(K)}var i=this,j=THREE.Loader.prototype.extractUrlbase(c),k,o,p,m,q,n,r,t,u,y,v,A,z,w,I,F,G,s,E,T,Z,Q,U,$,ja,K;T=a;c=new THREE.BinaryLoader;Z=new THREE.JSONLoader;U=Q=0;K={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, -empties:{}};a=!1;for(p in T.objects)if(t=T.objects[p],t.meshCollider){a=!0;break}if(a)K.scene.collisions=new THREE.CollisionSystem;if(T.transform){a=T.transform.position;u=T.transform.rotation;var L=T.transform.scale;a&&K.scene.position.set(a[0],a[1],a[2]);u&&K.scene.rotation.set(u[0],u[1],u[2]);L&&K.scene.scale.set(L[0],L[1],L[2]);(a||u||L)&&K.scene.updateMatrix()}a=function(){U-=1;h();i.onLoadComplete()};for(q in T.cameras)u=T.cameras[q],u.type=="perspective"?G=new THREE.PerspectiveCamera(u.fov, -u.aspect,u.near,u.far):u.type=="ortho"&&(G=new THREE.OrthographicCamera(u.left,u.right,u.top,u.bottom,u.near,u.far)),v=u.position,u=u.target,G.position.set(v[0],v[1],v[2]),G.target=new THREE.Vector3(u[0],u[1],u[2]),K.cameras[q]=G;for(m in T.lights)u=T.lights[m],q=u.color!==void 0?u.color:16777215,G=u.intensity!==void 0?u.intensity:1,u.type=="directional"?(v=u.direction,y=new THREE.DirectionalLight(q,G),y.position.set(v[0],v[1],v[2]),y.position.normalize()):u.type=="point"?(v=u.position,y=u.distance, -y=new THREE.PointLight(q,G,y),y.position.set(v[0],v[1],v[2])):u.type=="ambient"&&(y=new THREE.AmbientLight(q)),K.scene.add(y),K.lights[m]=y;for(n in T.fogs)m=T.fogs[n],m.type=="linear"?s=new THREE.Fog(0,m.near,m.far):m.type=="exp2"&&(s=new THREE.FogExp2(0,m.density)),u=m.color,s.color.setRGB(u[0],u[1],u[2]),K.fogs[n]=s;if(K.cameras&&T.defaults.camera)K.currentCamera=K.cameras[T.defaults.camera];if(K.fogs&&T.defaults.fog)K.scene.fog=K.fogs[T.defaults.fog];u=T.defaults.bgcolor;K.bgColor=new THREE.Color; -K.bgColor.setRGB(u[0],u[1],u[2]);K.bgColorAlpha=T.defaults.bgalpha;for(k in T.geometries)if(n=T.geometries[k],n.type=="bin_mesh"||n.type=="ascii_mesh")Q+=1,i.onLoadStart();$=Q;for(k in T.geometries)n=T.geometries[k],n.type=="cube"?(F=new THREE.CubeGeometry(n.width,n.height,n.depth,n.segmentsWidth,n.segmentsHeight,n.segmentsDepth,null,n.flipped,n.sides),K.geometries[k]=F):n.type=="plane"?(F=new THREE.PlaneGeometry(n.width,n.height,n.segmentsWidth,n.segmentsHeight),K.geometries[k]=F):n.type=="sphere"? -(F=new THREE.SphereGeometry(n.radius,n.segmentsWidth,n.segmentsHeight),K.geometries[k]=F):n.type=="cylinder"?(F=new THREE.CylinderGeometry(n.topRad,n.botRad,n.height,n.radSegs,n.heightSegs),K.geometries[k]=F):n.type=="torus"?(F=new THREE.TorusGeometry(n.radius,n.tube,n.segmentsR,n.segmentsT),K.geometries[k]=F):n.type=="icosahedron"?(F=new THREE.IcosahedronGeometry(n.subdivisions),K.geometries[k]=F):n.type=="bin_mesh"?c.load(d(n.url,T.urlBaseType),g(k)):n.type=="ascii_mesh"?Z.load(d(n.url,T.urlBaseType), -g(k)):n.type=="embedded_mesh"&&(n=T.embeds[n.id])&&Z.createModel(n,f(k),"");for(r in T.textures)if(k=T.textures[r],k.url instanceof Array){U+=k.url.length;for(n=0;n1&&(N=new THREE.MeshFaceMaterial); +a=new THREE.Mesh(F,N);a.name=p;a.position.set(w[0],w[1],w[2]);A?(a.quaternion.set(A[0],A[1],A[2],A[3]),a.useQuaternion=!0):a.rotation.set(z[0],z[1],z[2]);a.scale.set(v[0],v[1],v[2]);a.visible=t.visible;I.scene.add(a);I.objects[p]=a;if(t.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);I.scene.collisions.colliders.push(b)}if(t.castsShadow)b=new THREE.ShadowVolume(F),I.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;t.trigger&&t.trigger.toLowerCase()!="none"&&(b= +{type:t.trigger,object:t},I.triggers[a.name]=b)}}else w=t.position,z=t.rotation,A=t.quaternion,v=t.scale,A=0,a=new THREE.Object3D,a.name=p,a.position.set(w[0],w[1],w[2]),A?(a.quaternion.set(A[0],A[1],A[2],A[3]),a.useQuaternion=!0):a.rotation.set(z[0],z[1],z[2]),a.scale.set(v[0],v[1],v[2]),a.visible=t.visible!==void 0?t.visible:!1,I.scene.add(a),I.objects[p]=a,I.empties[p]=a,t.trigger&&t.trigger.toLowerCase()!="none"&&(b={type:t.trigger,object:t},I.triggers[a.name]=b)}function g(a){return function(b){I.geometries[a]= +b;e();R-=1;i.onLoadComplete();h()}}function f(a){return function(b){I.geometries[a]=b}}function h(){i.callbackProgress({totalModels:aa,totalTextures:ja,loadedModels:aa-R,loadedTextures:ja-V},I);i.onLoadProgress();R==0&&V==0&&b(I)}var i=this,j=THREE.Loader.prototype.extractUrlbase(c),k,o,p,m,q,n,r,t,u,y,w,z,A,v,G,F,K,s,N,U,$,R,V,aa,ja,I;U=a;c=new THREE.BinaryLoader;$=new THREE.JSONLoader;V=R=0;I={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, +empties:{}};a=!1;for(p in U.objects)if(t=U.objects[p],t.meshCollider){a=!0;break}if(a)I.scene.collisions=new THREE.CollisionSystem;if(U.transform){a=U.transform.position;u=U.transform.rotation;var L=U.transform.scale;a&&I.scene.position.set(a[0],a[1],a[2]);u&&I.scene.rotation.set(u[0],u[1],u[2]);L&&I.scene.scale.set(L[0],L[1],L[2]);(a||u||L)&&I.scene.updateMatrix()}a=function(){V-=1;h();i.onLoadComplete()};for(q in U.cameras)u=U.cameras[q],u.type=="perspective"?K=new THREE.PerspectiveCamera(u.fov, +u.aspect,u.near,u.far):u.type=="ortho"&&(K=new THREE.OrthographicCamera(u.left,u.right,u.top,u.bottom,u.near,u.far)),w=u.position,u=u.target,K.position.set(w[0],w[1],w[2]),K.target=new THREE.Vector3(u[0],u[1],u[2]),I.cameras[q]=K;for(m in U.lights)u=U.lights[m],q=u.color!==void 0?u.color:16777215,K=u.intensity!==void 0?u.intensity:1,u.type=="directional"?(w=u.direction,y=new THREE.DirectionalLight(q,K),y.position.set(w[0],w[1],w[2]),y.position.normalize()):u.type=="point"?(w=u.position,y=u.distance, +y=new THREE.PointLight(q,K,y),y.position.set(w[0],w[1],w[2])):u.type=="ambient"&&(y=new THREE.AmbientLight(q)),I.scene.add(y),I.lights[m]=y;for(n in U.fogs)m=U.fogs[n],m.type=="linear"?s=new THREE.Fog(0,m.near,m.far):m.type=="exp2"&&(s=new THREE.FogExp2(0,m.density)),u=m.color,s.color.setRGB(u[0],u[1],u[2]),I.fogs[n]=s;if(I.cameras&&U.defaults.camera)I.currentCamera=I.cameras[U.defaults.camera];if(I.fogs&&U.defaults.fog)I.scene.fog=I.fogs[U.defaults.fog];u=U.defaults.bgcolor;I.bgColor=new THREE.Color; +I.bgColor.setRGB(u[0],u[1],u[2]);I.bgColorAlpha=U.defaults.bgalpha;for(k in U.geometries)if(n=U.geometries[k],n.type=="bin_mesh"||n.type=="ascii_mesh")R+=1,i.onLoadStart();aa=R;for(k in U.geometries)n=U.geometries[k],n.type=="cube"?(F=new THREE.CubeGeometry(n.width,n.height,n.depth,n.segmentsWidth,n.segmentsHeight,n.segmentsDepth,null,n.flipped,n.sides),I.geometries[k]=F):n.type=="plane"?(F=new THREE.PlaneGeometry(n.width,n.height,n.segmentsWidth,n.segmentsHeight),I.geometries[k]=F):n.type=="sphere"? +(F=new THREE.SphereGeometry(n.radius,n.segmentsWidth,n.segmentsHeight),I.geometries[k]=F):n.type=="cylinder"?(F=new THREE.CylinderGeometry(n.topRad,n.botRad,n.height,n.radSegs,n.heightSegs),I.geometries[k]=F):n.type=="torus"?(F=new THREE.TorusGeometry(n.radius,n.tube,n.segmentsR,n.segmentsT),I.geometries[k]=F):n.type=="icosahedron"?(F=new THREE.IcosahedronGeometry(n.subdivisions),I.geometries[k]=F):n.type=="bin_mesh"?c.load(d(n.url,U.urlBaseType),g(k)):n.type=="ascii_mesh"?$.load(d(n.url,U.urlBaseType), +g(k)):n.type=="embedded_mesh"&&(n=U.embeds[n.id])&&$.createModel(n,f(k),"");for(r in U.textures)if(k=U.textures[r],k.url instanceof Array){V+=k.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 g=0,f=0;f>1^-(h&1);c[8*f+e]=g}d+=b}b=a.length-d;g=new Uint16Array(b);for(e=f=0;e=this.maxCount-3&&h(this)};this.begin=function(){this.count=0; this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var b=this.count*3;bthis.size-1&&(i=this.size-1);var p=Math.floor(j-h);p<1&&(p=1);j=Math.floor(j+h);j>this.size-1&&(j=this.size-1);var m=Math.floor(k-h);m<1&&(m=1);h=Math.floor(k+h);h>this.size-1&&(h=this.size- 1);for(var q,n,r,t,u,y;o0&&(this.field[r+q]+=t)}}};this.addPlaneX=function(a,b){var e,g,f,h,i,j=this.size,k=this.yd,o=this.zd,p=this.field,m=j*Math.sqrt(a/b);m>j&&(m=j);for(e=0;e0)for(g=0;g0&&A.x0&&A.y0.0010&&m.scale>0.0010)v.x=m.x,v.y=m.y,v.z=m.z,u=m.size*m.scale/h,y.x=u*n,y.y=u,b.uniform3f(z.screenPosition, -v.x,v.y,v.z),b.uniform2f(z.scale,y.x,y.y),b.uniform1f(z.rotation,m.rotation),b.uniform1f(z.opacity,m.opacity),b.uniform3f(z.color,m.color.r,m.color.g,m.color.b),c.setBlending(m.blending),c.setTexture(m.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}; +"color");d.uniforms.scale=b.getUniformLocation(d.program,"scale");d.uniforms.rotation=b.getUniformLocation(d.program,"rotation");d.uniforms.screenPosition=b.getUniformLocation(d.program,"screenPosition");d.attributesEnabled=!1};this.render=function(a,g,f,h){var a=a.__webglFlares,i=a.length;if(i){var j=new THREE.Vector3,k=h/f,o=f*0.5,p=h*0.5,m=16/h,q=new THREE.Vector2(m*k,m),n=new THREE.Vector3(1,1,0),r=new THREE.Vector2(1,1),t=d.uniforms,m=d.attributes;b.useProgram(d.program);if(!d.attributesEnabled)b.enableVertexAttribArray(d.attributes.vertex), +b.enableVertexAttribArray(d.attributes.uv),d.attributesEnabled=!0;b.uniform1i(t.occlusionMap,0);b.uniform1i(t.map,1);b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.vertexAttribPointer(m.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(m.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.disable(b.CULL_FACE);b.depthMask(!1);var u,y,w,z,A;for(u=0;u0&&r.x0&&r.y0.0010&&A.scale>0.0010)n.x=A.x,n.y=A.y,n.z=A.z,m=A.size*A.scale/ +h,q.x=m*k,q.y=m,b.uniform3f(t.screenPosition,n.x,n.y,n.z),b.uniform2f(t.scale,q.x,q.y),b.uniform1f(t.rotation,A.rotation),b.uniform1f(t.opacity,A.opacity),b.uniform3f(t.color,A.color.r,A.color.g,A.color.b),c.setBlending(A.blending),c.setTexture(A.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}}; THREE.SpritePlugin=function(){function a(a,b){return b.z-a.z}var b,c,d={};this.init=function(a){b=a.context;c=a;d.vertices=new Float32Array(16);d.faces=new Uint16Array(6);a=0;d.vertices[a++]=-1;d.vertices[a++]=-1;d.vertices[a++]=0;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=-1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=0;d.vertices[a++]=-1;d.vertices[a++]=1;d.vertices[a++]=0;a=d.vertices[a++]=0;d.faces[a++]=0;d.faces[a++]=1;d.faces[a++]= 2;d.faces[a++]=0;d.faces[a++]=2;d.faces[a++]=3;d.vertexBuffer=b.createBuffer();d.elementBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.bufferData(b.ARRAY_BUFFER,d.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,d.faces,b.STATIC_DRAW);var a=THREE.ShaderSprite.sprite,g=b.createProgram(),f=b.createShader(b.FRAGMENT_SHADER),h=b.createShader(b.VERTEX_SHADER);b.shaderSource(f,a.fragmentShader);b.shaderSource(h,a.vertexShader); b.compileShader(f);b.compileShader(h);b.attachShader(g,f);b.attachShader(g,h);b.linkProgram(g);d.program=g;d.attributes={};d.uniforms={};d.attributes.position=b.getAttribLocation(d.program,"position");d.attributes.uv=b.getAttribLocation(d.program,"uv");d.uniforms.uvOffset=b.getUniformLocation(d.program,"uvOffset");d.uniforms.uvScale=b.getUniformLocation(d.program,"uvScale");d.uniforms.rotation=b.getUniformLocation(d.program,"rotation");d.uniforms.scale=b.getUniformLocation(d.program,"scale");d.uniforms.alignment= b.getUniformLocation(d.program,"alignment");d.uniforms.color=b.getUniformLocation(d.program,"color");d.uniforms.map=b.getUniformLocation(d.program,"map");d.uniforms.opacity=b.getUniformLocation(d.program,"opacity");d.uniforms.useScreenCoordinates=b.getUniformLocation(d.program,"useScreenCoordinates");d.uniforms.affectedByDistance=b.getUniformLocation(d.program,"affectedByDistance");d.uniforms.screenPosition=b.getUniformLocation(d.program,"screenPosition");d.uniforms.modelViewMatrix=b.getUniformLocation(d.program, -"modelViewMatrix");d.uniforms.projectionMatrix=b.getUniformLocation(d.program,"projectionMatrix");d.attributesEnabled=!1};this.render=function(e,g,f,h,i){var j,k;j=d.attributes;var o=d.uniforms,p=h/f,m=[];f*=0.5;var q=h*0.5,n=!0;b.useProgram(d.program);_currentProgram=d.program;if(!d.attributesEnabled)b.enableVertexAttribArray(j.position),b.enableVertexAttribArray(j.uv),d.attributesEnabled=!0;b.disable(b.CULL_FACE);b.enable(b.BLEND);b.depthMask(!0);b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.vertexAttribPointer(j.position, -2,b.FLOAT,!1,16,0);b.vertexAttribPointer(j.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.uniformMatrix4fv(o.projectionMatrix,!1,i);b.activeTexture(b.TEXTURE0);b.uniform1i(o.map,0);i=0;for(j=e.__webglSprites.length;i1&&(c-=1)}b===void 0&&(b={h:0,s:0,v:0});b.h=c;b.s=f;b.v=g;return b}}; THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(a,b){for(var c,d,e=a.vertices.length,g=b instanceof THREE.Mesh?b.geometry:b,f=a.vertices,h=g.vertices,i=a.faces,k=g.faces,j=a.faceVertexUvs[0],p=g.faceVertexUvs[0],o={},l=0;l1&&(d=1-d,e=1-e);g=1-d-e;f.copy(a);f.multiplyScalar(d);h.copy(b);h.multiplyScalar(e);f.addSelf(h);h.copy(c);h.multiplyScalar(g);f.addSelf(h);return f},randomPointInFace:function(a,b,c){var d,e,g;if(a instanceof THREE.Face3)return d=b.vertices[a.a].position,e=b.vertices[a.b].position, g=b.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(d,e,g);else if(a instanceof THREE.Face4){d=b.vertices[a.a].position;e=b.vertices[a.b].position;g=b.vertices[a.c].position;var b=b.vertices[a.d].position,f;c?a._area1&&a._area2?(c=a._area1,f=a._area2):(c=THREE.GeometryUtils.triangleArea(d,e,b),f=THREE.GeometryUtils.triangleArea(e,g,b),a._area1=c,a._area2=f):(c=THREE.GeometryUtils.triangleArea(d,e,b),f=THREE.GeometryUtils.triangleArea(e,g,b));return THREE.GeometryUtils.random()*(c+ -f)a?b(d,e-1):k[e]a?b(d,e-1):k[e]0?(f=c[c.length-1],l=f.x,s=f.y):(f=this.actions[d-1].args,l=f[f.length-2],s=f[f.length-1]);for(f=1;f<=a;f++)m=f/a,g=THREE.Shape.Utils.b2(m,l,p,h),m=THREE.Shape.Utils.b2(m,s,o, -i),c.push(new THREE.Vector2(g,m));break;case THREE.PathActions.BEZIER_CURVE_TO:h=g[4];i=g[5];p=g[0];o=g[1];k=g[2];j=g[3];c.length>0?(f=c[c.length-1],l=f.x,s=f.y):(f=this.actions[d-1].args,l=f[f.length-2],s=f[f.length-1]);for(f=1;f<=a;f++)m=f/a,g=THREE.Shape.Utils.b3(m,l,p,k,h),m=THREE.Shape.Utils.b3(m,s,o,j,i),c.push(new THREE.Vector2(g,m));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[d-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];m=a*g[0].length;f=f.concat(g[0]);g=new THREE.SplineCurve(f); -for(f=1;f<=m;f++)c.push(g.getPointAt(f/m));break;case THREE.PathActions.ARC:f=this.actions[d-1].args;h=g[0];i=g[1];k=g[2];p=g[3];m=g[4];o=!!g[5];j=f[f.length-2];l=f[f.length-1];f.length==0&&(j=l=0);s=m-p;var q=a*2;for(f=1;f<=q;f++)m=f/q,o||(m=1-m),m=p+m*s,g=j+h+k*Math.cos(m),m=l+i+k*Math.sin(m),c.push(new THREE.Vector2(g,m))}b&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(a,b){this.getBoundingBox();return this.getWrapPoints(this.getPoints(b),a)}; -THREE.Path.prototype.nltransform=function(a,b,c,d,e,g){var f=this.getPoints(),h,i,k,j,p;h=0;for(i=f.length;h0?(f=c[c.length-1],n=f.x,s=f.y):(f=this.actions[d-1].args,n=f[f.length-2],s=f[f.length-1]);for(f=1;f<=a;f++)m=f/a,g=THREE.Shape.Utils.b2(m,n,q,h),m=THREE.Shape.Utils.b2(m,s,o, +i),c.push(new THREE.Vector2(g,m));break;case THREE.PathActions.BEZIER_CURVE_TO:h=g[4];i=g[5];q=g[0];o=g[1];k=g[2];j=g[3];c.length>0?(f=c[c.length-1],n=f.x,s=f.y):(f=this.actions[d-1].args,n=f[f.length-2],s=f[f.length-1]);for(f=1;f<=a;f++)m=f/a,g=THREE.Shape.Utils.b3(m,n,q,k,h),m=THREE.Shape.Utils.b3(m,s,o,j,i),c.push(new THREE.Vector2(g,m));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[d-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];m=a*g[0].length;f=f.concat(g[0]);g=new THREE.SplineCurve(f); +for(f=1;f<=m;f++)c.push(g.getPointAt(f/m));break;case THREE.PathActions.ARC:f=this.actions[d-1].args;h=g[0];i=g[1];k=g[2];q=g[3];m=g[4];o=!!g[5];j=f[f.length-2];n=f[f.length-1];f.length==0&&(j=n=0);s=m-q;var p=a*2;for(f=1;f<=p;f++)m=f/p,o||(m=1-m),m=q+m*s,g=j+h+k*Math.cos(m),m=n+i+k*Math.sin(m),c.push(new THREE.Vector2(g,m))}b&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(a,b){this.getBoundingBox();return this.getWrapPoints(this.getPoints(b),a)}; +THREE.Path.prototype.nltransform=function(a,b,c,d,e,g){var f=this.getPoints(),h,i,k,j,q;h=0;for(i=f.length;h=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;var m=[k[f],c[h],c[e]];p=THREE.FontUtils.Triangulate.area(m);var q=[k[f],k[g],c[h]];o=THREE.FontUtils.Triangulate.area(q);l=h;j=f;h+=1;f+=-1;h< -0&&(h+=c.length);h%=c.length;f<0&&(f+=k.length);f%=k.length;e=h-1>=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;m=[k[f],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);q=[k[f],k[g],c[h]];q=THREE.FontUtils.Triangulate.area(q);p+o>m+q&&(h=l,f=j,h<0&&(h+=c.length),h%=c.length,f<0&&(f+=k.length),f%=k.length,e=h-1>=0?h-1:c.length-1,g=f-1>=0?f-1:k.length-1);p=c.slice(0,h);o=c.slice(h);l=k.slice(f);j=k.slice(0,f);g=[k[f],k[g],c[h]];s.push([k[f],c[h],c[e]]);s.push(g);c=p.concat(l).concat(j).concat(o)}return{shape:c, +THREE.Shape.Utils={removeHoles:function(a,b){var c=a.concat(),d=c.concat(),e,g,f,h,i,k,j,q,o,n,s=[];for(i=0;i=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;var m=[k[f],c[h],c[e]];q=THREE.FontUtils.Triangulate.area(m);var p=[k[f],k[g],c[h]];o=THREE.FontUtils.Triangulate.area(p);n=h;j=f;h+=1;f+=-1;h< +0&&(h+=c.length);h%=c.length;f<0&&(f+=k.length);f%=k.length;e=h-1>=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;m=[k[f],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);p=[k[f],k[g],c[h]];p=THREE.FontUtils.Triangulate.area(p);q+o>m+p&&(h=n,f=j,h<0&&(h+=c.length),h%=c.length,f<0&&(f+=k.length),f%=k.length,e=h-1>=0?h-1:c.length-1,g=f-1>=0?f-1:k.length-1);q=c.slice(0,h);o=c.slice(h);n=k.slice(f);j=k.slice(0,f);g=[k[f],k[g],c[h]];s.push([k[f],c[h],c[e]]);s.push(g);c=q.concat(n).concat(j).concat(o)}return{shape:c, isolatedPts:s,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),g,f,h,i,k={};g=0;for(f=d.length;g1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+l),d=d<0?0:1;if(c==="pos")if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= -this.getPrevKeyWith("pos",l,f.index-1).pos,this.points[1]=e,this.points[2]=g,this.points[3]=this.getNextKeyWith("pos",l,h.index+1).pos,d=d*0.33+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=this.interpolateCatmullRom(this.points,d*1.01),this.target.set(d[0],d[1],d[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0)}else if(c=== -"rot")THREE.Quaternion.slerp(e,g,a.quaternion,d);else if(c==="scl")c=a.scale,c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d}}if(this.JITCompile&&j[0][k]===void 0){this.hierarchy[0].update(null,!0);for(l=0;l1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+n),d=d<0?0:1;if(c==="pos")if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= +this.getPrevKeyWith("pos",n,f.index-1).pos,this.points[1]=e,this.points[2]=g,this.points[3]=this.getNextKeyWith("pos",n,h.index+1).pos,d=d*0.33+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=this.interpolateCatmullRom(this.points,d*1.01),this.target.set(d[0],d[1],d[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0)}else if(c=== +"rot")THREE.Quaternion.slerp(e,g,a.quaternion,d);else if(c==="scl")c=a.scale,c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d}}if(this.JITCompile&&j[0][k]===void 0){this.hierarchy[0].update(null,!0);for(n=0;na.length-2?g:g+1;c[3]=g>a.length-3?g:g+2;g=a[c[0]];h=a[c[1]];i=a[c[2]];k=a[c[3]];c=e*e;f=e*c;d[0]=this.interpolate(g[0],h[0],i[0],k[0],e,c,f);d[1]=this.interpolate(g[1],h[1],i[1],k[1],e,c,f);d[2]=this.interpolate(g[2],h[2],i[2],k[2],e,c,f);return d}; THREE.Animation.prototype.interpolate=function(a,b,c,d,e,g,f){a=(c-a)*0.5;d=(d-b)*0.5;return(2*(b-c)+a+d)*f+(-3*(b-c)-2*a-d)*g+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){var d=this.data.hierarchy[b].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c=c0?c:0:c>=0?c:c+d.length;c>=0;c--)if(d[c][a]!==void 0)return d[c];return this.data.hierarchy[b].keys[d.length-1]}; @@ -110,14 +110,14 @@ function(a){switch(a.keyCode){case 38:case 87:this.moveForward=!0;break;case 37: this.object.translateX(b);this.moveUp&&this.object.translateY(b);this.moveDown&&this.object.translateY(-b);c=a*this.lookSpeed;this.activeLook||(c=0);this.lon+=this.mouseX*c;this.lookVertical&&(this.lat-=this.mouseY*c);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;a=this.target;b=this.object.position;a.x=b.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=b.y+100*Math.cos(this.phi);a.z=b.z+100*Math.sin(this.phi)*Math.sin(this.theta)}a= 1;this.constrainVertical&&(a=Math.PI/(this.verticalMax-this.verticalMin));this.lon+=this.mouseX*c;this.lookVertical&&(this.lat-=this.mouseY*c*a);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;if(this.constrainVertical)this.phi=THREE.Math.mapLinear(this.phi,0,Math.PI,this.verticalMin,this.verticalMax);a=this.target;b=this.object.position;a.x=b.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=b.y+100*Math.cos(this.phi);a.z=b.z+100*Math.sin(this.phi)* Math.sin(this.theta);this.object.lookAt(a)};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},!1);this.domElement.addEventListener("mousemove",c(this,this.onMouseMove),!1);this.domElement.addEventListener("mousedown",c(this,this.onMouseDown),!1);this.domElement.addEventListener("mouseup",c(this,this.onMouseUp),!1);this.domElement.addEventListener("keydown",c(this,this.onKeyDown),!1);this.domElement.addEventListener("keyup",c(this,this.onKeyUp),!1)}; -THREE.PathControls=function(a,b){function c(a){if((a*=2)<1)return 0.5*a*a;return-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function e(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),q=g.length,n=0;f=q-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:g[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[f]={time:d,pos:g[f],rot:[0,0,0,1],scl:[1,1,1]};for(f=1;f=0?a:a+f;b=this.verticalAngleMap.srcRange; a=this.verticalAngleMap.dstRange;b=THREE.Math.mapLinear(this.phi,b[0],b[1],a[0],a[1]);var d=a[1]-a[0];this.phi=c((b-a[0])/d)*d+a[0];b=this.horizontalAngleMap.srcRange;a=this.horizontalAngleMap.dstRange;b=THREE.Math.mapLinear(this.theta,b[0],b[1],a[0],a[1]);d=a[1]-a[0];this.theta=c((b-a[0])/d)*d+a[0];a=this.target.position;a.x=100*Math.sin(this.phi)*Math.cos(this.theta);a.y=100*Math.cos(this.phi);a.z=100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(this.target.position)};this.onMouseMove= function(a){this.domElement===document?(this.mouseX=a.pageX-this.viewHalfX,this.mouseY=a.pageY-this.viewHalfY):(this.mouseX=a.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY=a.pageY-this.domElement.offsetTop-this.viewHalfY)};this.init=function(){this.spline=new THREE.Spline;this.spline.initFromArray(this.waypoints);this.useConstantSpeed&&this.spline.reparametrizeByArcLength(this.resamplingCoef);if(this.createDebugDummy){var a=new THREE.MeshLambertMaterial({color:30719}),b=new THREE.MeshLambertMaterial({color:65280}), c=new THREE.CubeGeometry(10,10,20),f=new THREE.CubeGeometry(2,2,10);this.animationParent=new THREE.Mesh(c,a);a=new THREE.Mesh(f,b);a.position.set(0,10,0);this.animation=e(this.animationParent,this.spline,this.id,this.duration);this.animationParent.add(this.object);this.animationParent.add(this.target);this.animationParent.add(a)}else this.animation=e(this.animationParent,this.spline,this.id,this.duration),this.animationParent.add(this.target),this.animationParent.add(this.object);if(this.createDebugPath){var a= -this.debugPath,b=this.spline,f=g(b,10),c=g(b,10),h=new THREE.LineBasicMaterial({color:16711680,linewidth:3}),f=new THREE.Line(f,h),c=new THREE.ParticleSystem(c,new THREE.ParticleBasicMaterial({color:16755200,size:3}));f.scale.set(1,1,1);a.add(f);c.scale.set(1,1,1);a.add(c);for(var f=new THREE.SphereGeometry(1,16,8),h=new THREE.MeshBasicMaterial({color:65280}),l=0;l0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*k);this.object.translateY(b*j);f&&(this.roll+=this.rollSpeed*a*h);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*k);this.object.translateY(b*j);f&&(this.roll+=this.rollSpeed*a*h);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y1?d.normalize():d.z=Math.sqrt(1-e*e);f.copy(c.object.position).subSelf(c.target);e=c.object.up.clone().setLength(d.y);e.addSelf(c.object.up.clone().crossSelf(f).setLength(d.x));e.addSelf(f.setLength(d.z));return e};this.rotateCamera=function(){var a=Math.acos(h.dot(i)/h.length()/i.length());if(a){var b=(new THREE.Vector3).cross(h,i).normalize(),d=new THREE.Quaternion;a*=c.rotateSpeed;d.setFromAxisAngle(b, --a);d.multiplyVector3(f);d.multiplyVector3(c.object.up);d.multiplyVector3(i);c.staticMoving?h=i:(d.setFromAxisAngle(b,a*(c.dynamicDampingFactor-1)),d.multiplyVector3(h))}};this.zoomCamera=function(){var a=1+(j.y-k.y)*c.zoomSpeed;a!==1&&a>0&&(f.multiplyScalar(a),c.staticMoving?k=j:k.y+=(j.y-k.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=o.clone().subSelf(p);if(a.lengthSq()){a.multiplyScalar(f.length()*c.panSpeed);var b=f.clone().crossSelf(c.object.up).setLength(a.x);b.addSelf(c.object.up.clone().setLength(a.y)); -c.object.position.addSelf(b);c.target.addSelf(b);c.staticMoving?p=o:p.addSelf(a.sub(o,p).multiplyScalar(c.dynamicDampingFactor))}};this.checkDistances=function(){if(!c.noZoom||!c.noPan)c.object.position.lengthSq()>c.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()0&&(f.multiplyScalar(a),c.staticMoving?k=j:k.y+=(j.y-k.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=o.clone().subSelf(q);if(a.lengthSq()){a.multiplyScalar(f.length()*c.panSpeed);var b=f.clone().crossSelf(c.object.up).setLength(a.x);b.addSelf(c.object.up.clone().setLength(a.y)); +c.object.position.addSelf(b);c.target.addSelf(b);c.staticMoving?q=o:q.addSelf(a.sub(o,q).multiplyScalar(c.dynamicDampingFactor))}};this.checkDistances=function(){if(!c.noZoom||!c.noPan)c.object.position.lengthSq()>c.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()0?1:-1;for(h=0;h0?1:-1;for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;ha&&(a+=Math.PI*2),a=(b+a)/2,new THREE.Vector2(-Math.cos(a),-Math.sin(a));return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(w=a.length;--w>=0;){J=w;N=w-1;N<0&&(N=a.length-1);for(var b= -0,c=l+j*2,b=0;b=0;B--){G=B/j;I=i*(1-G);G=k*Math.sin(G*Math.PI/2);w=0;for(D=r.length;wa&&(a+=Math.PI*2),a=(b+a)/2,new THREE.Vector2(-Math.cos(a),-Math.sin(a));return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(v=a.length;--v>=0;){J=v;N=v-1;N<0&&(N=a.length-1);for(var b= +0,c=n+j*2,b=0;b=0;B--){G=B/j;I=i*(1-G);G=k*Math.sin(G*Math.PI/2);v=0;for(D=r.length;v0)for(k=0;k2;){if(p--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);j=k+1;e<=j&&(j=0);var o;a:{o=a;var l=i,s=k,m=j,q=e,n=f,r=void 0,t=void 0,v=void 0, -y=void 0,u=void 0,x=void 0,z=void 0,A=void 0,F=void 0,t=o[n[l]].x,v=o[n[l]].y,y=o[n[s]].x,u=o[n[s]].y,x=o[n[m]].x,z=o[n[m]].y;if(1.0E-10>(y-t)*(z-v)-(u-v)*(x-t))o=!1;else{for(r=0;r=0&&B>=0&&I>=0){o=!1;break a}}o=!0}}if(o){g.push([a[f[i]], -a[f[k]],a[f[j]]]);h.push([f[i],f[k],f[j]]);i=k;for(j=k+1;j0)for(k=0;k2;){if(q--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);j=k+1;e<=j&&(j=0);var o;a:{o=a;var n=i,s=k,m=j,p=e,l=f,r=void 0,t=void 0,w=void 0, +y=void 0,u=void 0,x=void 0,z=void 0,A=void 0,F=void 0,t=o[l[n]].x,w=o[l[n]].y,y=o[l[s]].x,u=o[l[s]].y,x=o[l[m]].x,z=o[l[m]].y;if(1.0E-10>(y-t)*(z-w)-(u-w)*(x-t))o=!1;else{for(r=0;r=0&&B>=0&&I>=0){o=!1;break a}}o=!0}}if(o){g.push([a[f[i]], +a[f[k]],a[f[j]]]);h.push([f[i],f[k],f[j]]);i=k;for(j=k+1;j0;)this.smooth(a)}; -THREE.SubdivisionModifier.prototype.smooth=function(a){function b(a,b,c,d,h,i){var j=new THREE.Face4(a,b,c,d,null,h.color,h.material);if(f.useOldVertexColors){j.vertexColors=[];for(var k,l,m,n=0;n<4;n++){m=i[n];k=new THREE.Color;k.setRGB(0,0,0);for(var q=0;q=0){p=i.invBindMatrices[m];j.invBindMatrix=p;j.skinningMatrix=new THREE.Matrix4;j.skinningMatrix.multiply(j.world,p);j.weights=[];for(p=0;p=0){p=i.invBindMatrices[m];j.invBindMatrix=p;j.skinningMatrix=new THREE.Matrix4;j.skinningMatrix.multiply(j.world,p);j.weights=[];for(p=0;p1){j=new THREE.MeshFaceMaterial;for(h=0;h1){j=new THREE.MeshFaceMaterial;for(h=0;h1?b.add(j):b=j}}b.name=a.id||"";a.matrix.decompose(b.position,b.rotation,b.scale);for(f=0;f1?c[1].substr(0,b):"0";c[1].length=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;d=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;db){k=j.output[i];break}g=k!==void 0?k instanceof THREE.Matrix4?g.multiply(g,k):g.multiply(g,h.matrix):g.multiply(g,h.matrix)}else g=g.multiply(g,h.matrix);b=g;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};p.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;ab){k=j.output[i];break}g=k!==void 0?k instanceof THREE.Matrix4?g.multiply(g,k):g.multiply(g,h.matrix):g.multiply(g,h.matrix)}else g=g.multiply(g,h.matrix);b=g;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};q.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};F.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&&(d=Z[this.effect.surface.init_from]))a.map= -THREE.ImageUtils.loadTexture(da+d.init_from),a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}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=ea;return this.material=new THREE.MeshLambertMaterial(a)};w.prototype.parse=function(a){for(var b=0;b=0,d=a.indexOf("(")>=0,e,f;if(c)b=a.split("."),a=b.shift(),f=b.shift();else if(d){e=a.split("(");a=e.shift();for(b=0;b1&&(D=new THREE.MeshFaceMaterial); -a=new THREE.Mesh(A,D);a.name=o;a.position.set(v[0],v[1],v[2]);u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]);a.scale.set(x[0],x[1],x[2]);a.visible=n.visible;C.scene.add(a);C.objects[o]=a;if(n.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);C.scene.collisions.colliders.push(b)}if(n.castsShadow)b=new THREE.ShadowVolume(A),C.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;n.trigger&&n.trigger.toLowerCase()!="none"&&(b= -{type:n.trigger,object:n},C.triggers[a.name]=b)}}else v=n.position,y=n.rotation,u=n.quaternion,x=n.scale,u=0,a=new THREE.Object3D,a.name=o,a.position.set(v[0],v[1],v[2]),u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]),a.scale.set(x[0],x[1],x[2]),a.visible=n.visible!==void 0?n.visible:!1,C.scene.add(a),C.objects[o]=a,C.empties[o]=a,n.trigger&&n.trigger.toLowerCase()!="none"&&(b={type:n.trigger,object:n},C.triggers[a.name]=b)}function g(a){return function(b){C.geometries[a]= -b;e();I-=1;i.onLoadComplete();h()}}function f(a){return function(b){C.geometries[a]=b}}function h(){i.callbackProgress({totalModels:K,totalTextures:O,loadedModels:K-I,loadedTextures:O-E},C);i.onLoadProgress();I==0&&E==0&&b(C)}var i=this,k=THREE.Loader.prototype.extractUrlbase(c),j,p,o,l,s,m,q,n,r,t,v,y,u,x,z,A,F,w,D,B,G,I,E,K,O,C;B=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;E=I=0;C={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, -empties:{}};a=!1;for(o in B.objects)if(n=B.objects[o],n.meshCollider){a=!0;break}if(a)C.scene.collisions=new THREE.CollisionSystem;if(B.transform){a=B.transform.position;r=B.transform.rotation;var L=B.transform.scale;a&&C.scene.position.set(a[0],a[1],a[2]);r&&C.scene.rotation.set(r[0],r[1],r[2]);L&&C.scene.scale.set(L[0],L[1],L[2]);(a||r||L)&&C.scene.updateMatrix()}a=function(){E-=1;h();i.onLoadComplete()};for(s in B.cameras)r=B.cameras[s],r.type=="perspective"?F=new THREE.PerspectiveCamera(r.fov, -r.aspect,r.near,r.far):r.type=="ortho"&&(F=new THREE.OrthographicCamera(r.left,r.right,r.top,r.bottom,r.near,r.far)),v=r.position,r=r.target,F.position.set(v[0],v[1],v[2]),F.target=new THREE.Vector3(r[0],r[1],r[2]),C.cameras[s]=F;for(l in B.lights)r=B.lights[l],s=r.color!==void 0?r.color:16777215,F=r.intensity!==void 0?r.intensity:1,r.type=="directional"?(v=r.direction,t=new THREE.DirectionalLight(s,F),t.position.set(v[0],v[1],v[2]),t.position.normalize()):r.type=="point"?(v=r.position,t=r.distance, -t=new THREE.PointLight(s,F,t),t.position.set(v[0],v[1],v[2])):r.type=="ambient"&&(t=new THREE.AmbientLight(s)),C.scene.add(t),C.lights[l]=t;for(m in B.fogs)l=B.fogs[m],l.type=="linear"?w=new THREE.Fog(0,l.near,l.far):l.type=="exp2"&&(w=new THREE.FogExp2(0,l.density)),r=l.color,w.color.setRGB(r[0],r[1],r[2]),C.fogs[m]=w;if(C.cameras&&B.defaults.camera)C.currentCamera=C.cameras[B.defaults.camera];if(C.fogs&&B.defaults.fog)C.scene.fog=C.fogs[B.defaults.fog];r=B.defaults.bgcolor;C.bgColor=new THREE.Color; +THREE.SceneLoader.prototype.createScene=function(a,b,c){function d(a,b){return b=="relativeToHTML"?a:k+"/"+a}function e(){var a;for(o in B.objects)if(!C.objects[o])if(l=B.objects[o],l.geometry!==void 0){if(A=C.geometries[l.geometry]){a=!1;for(H=0;H1&&(D=new THREE.MeshFaceMaterial); +a=new THREE.Mesh(A,D);a.name=o;a.position.set(w[0],w[1],w[2]);u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]);a.scale.set(x[0],x[1],x[2]);a.visible=l.visible;C.scene.add(a);C.objects[o]=a;if(l.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);C.scene.collisions.colliders.push(b)}if(l.castsShadow)b=new THREE.ShadowVolume(A),C.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;l.trigger&&l.trigger.toLowerCase()!="none"&&(b= +{type:l.trigger,object:l},C.triggers[a.name]=b)}}else w=l.position,y=l.rotation,u=l.quaternion,x=l.scale,u=0,a=new THREE.Object3D,a.name=o,a.position.set(w[0],w[1],w[2]),u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]),a.scale.set(x[0],x[1],x[2]),a.visible=l.visible!==void 0?l.visible:!1,C.scene.add(a),C.objects[o]=a,C.empties[o]=a,l.trigger&&l.trigger.toLowerCase()!="none"&&(b={type:l.trigger,object:l},C.triggers[a.name]=b)}function g(a){return function(b){C.geometries[a]= +b;e();I-=1;i.onLoadComplete();h()}}function f(a){return function(b){C.geometries[a]=b}}function h(){i.callbackProgress({totalModels:K,totalTextures:O,loadedModels:K-I,loadedTextures:O-E},C);i.onLoadProgress();I==0&&E==0&&b(C)}var i=this,k=THREE.Loader.prototype.extractUrlbase(c),j,q,o,n,s,m,p,l,r,t,w,y,u,x,z,A,F,v,D,B,G,I,E,K,O,C;B=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;E=I=0;C={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, +empties:{}};a=!1;for(o in B.objects)if(l=B.objects[o],l.meshCollider){a=!0;break}if(a)C.scene.collisions=new THREE.CollisionSystem;if(B.transform){a=B.transform.position;r=B.transform.rotation;var L=B.transform.scale;a&&C.scene.position.set(a[0],a[1],a[2]);r&&C.scene.rotation.set(r[0],r[1],r[2]);L&&C.scene.scale.set(L[0],L[1],L[2]);(a||r||L)&&C.scene.updateMatrix()}a=function(){E-=1;h();i.onLoadComplete()};for(s in B.cameras)r=B.cameras[s],r.type=="perspective"?F=new THREE.PerspectiveCamera(r.fov, +r.aspect,r.near,r.far):r.type=="ortho"&&(F=new THREE.OrthographicCamera(r.left,r.right,r.top,r.bottom,r.near,r.far)),w=r.position,r=r.target,F.position.set(w[0],w[1],w[2]),F.target=new THREE.Vector3(r[0],r[1],r[2]),C.cameras[s]=F;for(n in B.lights)r=B.lights[n],s=r.color!==void 0?r.color:16777215,F=r.intensity!==void 0?r.intensity:1,r.type=="directional"?(w=r.direction,t=new THREE.DirectionalLight(s,F),t.position.set(w[0],w[1],w[2]),t.position.normalize()):r.type=="point"?(w=r.position,t=r.distance, +t=new THREE.PointLight(s,F,t),t.position.set(w[0],w[1],w[2])):r.type=="ambient"&&(t=new THREE.AmbientLight(s)),C.scene.add(t),C.lights[n]=t;for(m in B.fogs)n=B.fogs[m],n.type=="linear"?v=new THREE.Fog(0,n.near,n.far):n.type=="exp2"&&(v=new THREE.FogExp2(0,n.density)),r=n.color,v.color.setRGB(r[0],r[1],r[2]),C.fogs[m]=v;if(C.cameras&&B.defaults.camera)C.currentCamera=C.cameras[B.defaults.camera];if(C.fogs&&B.defaults.fog)C.scene.fog=C.fogs[B.defaults.fog];r=B.defaults.bgcolor;C.bgColor=new THREE.Color; C.bgColor.setRGB(r[0],r[1],r[2]);C.bgColorAlpha=B.defaults.bgalpha;for(j in B.geometries)if(m=B.geometries[j],m.type=="bin_mesh"||m.type=="ascii_mesh")I+=1,i.onLoadStart();K=I;for(j in B.geometries)m=B.geometries[j],m.type=="cube"?(A=new THREE.CubeGeometry(m.width,m.height,m.depth,m.segmentsWidth,m.segmentsHeight,m.segmentsDepth,null,m.flipped,m.sides),C.geometries[j]=A):m.type=="plane"?(A=new THREE.PlaneGeometry(m.width,m.height,m.segmentsWidth,m.segmentsHeight),C.geometries[j]=A):m.type=="sphere"? (A=new THREE.SphereGeometry(m.radius,m.segmentsWidth,m.segmentsHeight),C.geometries[j]=A):m.type=="cylinder"?(A=new THREE.CylinderGeometry(m.topRad,m.botRad,m.height,m.radSegs,m.heightSegs),C.geometries[j]=A):m.type=="torus"?(A=new THREE.TorusGeometry(m.radius,m.tube,m.segmentsR,m.segmentsT),C.geometries[j]=A):m.type=="icosahedron"?(A=new THREE.IcosahedronGeometry(m.subdivisions),C.geometries[j]=A):m.type=="bin_mesh"?c.load(d(m.url,B.urlBaseType),g(j)):m.type=="ascii_mesh"?G.load(d(m.url,B.urlBaseType), -g(j)):m.type=="embedded_mesh"&&(m=B.embeds[m.id])&&G.createModel(m,f(j),"");for(q in B.textures)if(j=B.textures[q],j.url instanceof Array){E+=j.url.length;for(m=0;m=57344&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;e<8;e++){for(var g=0,f=0;f>1^-(h&1);c[8*f+e]=g}d+=b}b=a.length-d;g=new Uint16Array(b);for(e=f=0;e=this.maxCount-3&&h(this)};this.begin=function(){this.count=0; -this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var b=this.count*3;bthis.size-1&&(i=this.size-1);var o=Math.floor(k-h);o<1&&(o=1);k=Math.floor(k+h);k>this.size-1&&(k=this.size-1);var l=Math.floor(j-h);l<1&&(l=1);h=Math.floor(j+h);h>this.size-1&&(h=this.size- -1);for(var s,m,q,n,r,t;p0&&(this.field[q+s]+=n)}}};this.addPlaneX=function(a,b){var e,g,f,h,i,k=this.size,j=this.yd,p=this.zd,o=this.field,l=k*Math.sqrt(a/b);l>k&&(l=k);for(e=0;e0)for(g=0;gj&&(s=j);for(g=0;g0){i=g*p;for(e=0;ej&&(s=j);for(f=0;f0){i=o*f;for(g=0;gthis.size-1&&(i=this.size-1);var o=Math.floor(k-h);o<1&&(o=1);k=Math.floor(k+h);k>this.size-1&&(k=this.size-1);var n=Math.floor(j-h);n<1&&(n=1);h=Math.floor(j+h);h>this.size-1&&(h=this.size- +1);for(var s,m,p,l,r,t;q0&&(this.field[p+s]+=l)}}};this.addPlaneX=function(a,b){var e,g,f,h,i,k=this.size,j=this.yd,q=this.zd,o=this.field,n=k*Math.sqrt(a/b);n>k&&(n=k);for(e=0;e0)for(g=0;gj&&(s=j);for(g=0;g0){i=g*q;for(e=0;ej&&(s=j);for(f=0;f0){i=o*f;for(g=0;g0&&y.x0&&y.y0.0010&&l.scale>0.0010)v.x=l.x,v.y=l.y,v.z=l.z,r=l.size*l.scale/h,t.x=r*m,t.y=r,b.uniform3f(u.screenPosition, -v.x,v.y,v.z),b.uniform2f(u.scale,t.x,t.y),b.uniform1f(u.rotation,l.rotation),b.uniform1f(u.opacity,l.opacity),b.uniform3f(u.color,l.color.r,l.color.g,l.color.b),c.setBlending(l.blending),c.setTexture(l.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}; +"color");d.uniforms.scale=b.getUniformLocation(d.program,"scale");d.uniforms.rotation=b.getUniformLocation(d.program,"rotation");d.uniforms.screenPosition=b.getUniformLocation(d.program,"screenPosition");d.attributesEnabled=!1};this.render=function(a,g,f,h){var a=a.__webglFlares,i=a.length;if(i){var k=new THREE.Vector3,j=h/f,q=f*0.5,o=h*0.5,n=16/h,s=new THREE.Vector2(n*j,n),m=new THREE.Vector3(1,1,0),p=new THREE.Vector2(1,1),l=d.uniforms,n=d.attributes;b.useProgram(d.program);if(!d.attributesEnabled)b.enableVertexAttribArray(d.attributes.vertex), +b.enableVertexAttribArray(d.attributes.uv),d.attributesEnabled=!0;b.uniform1i(l.occlusionMap,0);b.uniform1i(l.map,1);b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.vertexAttribPointer(n.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(n.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.disable(b.CULL_FACE);b.depthMask(!1);var r,t,w,y,u;for(r=0;r0&&p.x0&&p.y0.0010&&u.scale>0.0010)m.x=u.x,m.y=u.y,m.z=u.z,n=u.size*u.scale/ +h,s.x=n*j,s.y=n,b.uniform3f(l.screenPosition,m.x,m.y,m.z),b.uniform2f(l.scale,s.x,s.y),b.uniform1f(l.rotation,u.rotation),b.uniform1f(l.opacity,u.opacity),b.uniform3f(l.color,u.color.r,u.color.g,u.color.b),c.setBlending(u.blending),c.setTexture(u.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}}; THREE.SpritePlugin=function(){function a(a,b){return b.z-a.z}var b,c,d={};this.init=function(a){b=a.context;c=a;d.vertices=new Float32Array(16);d.faces=new Uint16Array(6);a=0;d.vertices[a++]=-1;d.vertices[a++]=-1;d.vertices[a++]=0;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=-1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=1;d.vertices[a++]=0;d.vertices[a++]=-1;d.vertices[a++]=1;d.vertices[a++]=0;a=d.vertices[a++]=0;d.faces[a++]=0;d.faces[a++]=1;d.faces[a++]= 2;d.faces[a++]=0;d.faces[a++]=2;d.faces[a++]=3;d.vertexBuffer=b.createBuffer();d.elementBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.bufferData(b.ARRAY_BUFFER,d.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,d.faces,b.STATIC_DRAW);var a=THREE.ShaderSprite.sprite,g=b.createProgram(),f=b.createShader(b.FRAGMENT_SHADER),h=b.createShader(b.VERTEX_SHADER);b.shaderSource(f,a.fragmentShader);b.shaderSource(h,a.vertexShader); b.compileShader(f);b.compileShader(h);b.attachShader(g,f);b.attachShader(g,h);b.linkProgram(g);d.program=g;d.attributes={};d.uniforms={};d.attributes.position=b.getAttribLocation(d.program,"position");d.attributes.uv=b.getAttribLocation(d.program,"uv");d.uniforms.uvOffset=b.getUniformLocation(d.program,"uvOffset");d.uniforms.uvScale=b.getUniformLocation(d.program,"uvScale");d.uniforms.rotation=b.getUniformLocation(d.program,"rotation");d.uniforms.scale=b.getUniformLocation(d.program,"scale");d.uniforms.alignment= b.getUniformLocation(d.program,"alignment");d.uniforms.color=b.getUniformLocation(d.program,"color");d.uniforms.map=b.getUniformLocation(d.program,"map");d.uniforms.opacity=b.getUniformLocation(d.program,"opacity");d.uniforms.useScreenCoordinates=b.getUniformLocation(d.program,"useScreenCoordinates");d.uniforms.affectedByDistance=b.getUniformLocation(d.program,"affectedByDistance");d.uniforms.screenPosition=b.getUniformLocation(d.program,"screenPosition");d.uniforms.modelViewMatrix=b.getUniformLocation(d.program, -"modelViewMatrix");d.uniforms.projectionMatrix=b.getUniformLocation(d.program,"projectionMatrix");d.attributesEnabled=!1};this.render=function(e,g,f,h,i){var k,j;k=d.attributes;var p=d.uniforms,o=h/f,l=[];f*=0.5;var s=h*0.5,m=!0;b.useProgram(d.program);_currentProgram=d.program;if(!d.attributesEnabled)b.enableVertexAttribArray(k.position),b.enableVertexAttribArray(k.uv),d.attributesEnabled=!0;b.disable(b.CULL_FACE);b.enable(b.BLEND);b.depthMask(!0);b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.vertexAttribPointer(k.position, -2,b.FLOAT,!1,16,0);b.vertexAttribPointer(k.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.uniformMatrix4fv(p.projectionMatrix,!1,i);b.activeTexture(b.TEXTURE0);b.uniform1i(p.map,0);i=0;for(k=e.__webglSprites.length;i=0&&e.enableVertexAttribArray(m.tangent);a.skinning&&m.skinVertexA>=0&&m.skinVertexB>=0&&m.skinIndex>=0&&m.skinWeight>=0&&(e.enableVertexAttribArray(m.skinVertexA),e.enableVertexAttribArray(m.skinVertexB),e.enableVertexAttribArray(m.skinIndex),e.enableVertexAttribArray(m.skinWeight));if(a.attributes)for(g in a.attributes)m[g]!==void 0&&m[g]>=0&&e.enableVertexAttribArray(m[g]);if(a.morphTargets)for(g=a.numSupportedMorphTargets=0;g=0&&(e.enableVertexAttribArray(m[y]), a.numSupportedMorphTargets++);a.uniformsList=[];for(f in a.uniforms)a.uniformsList.push([a.uniforms[f],f])};this.setFaceCulling=function(a,b){a?(!b||b==="ccw"?e.frontFace(e.CCW):e.frontFace(e.CW),a==="back"?e.cullFace(e.BACK):a==="front"?e.cullFace(e.FRONT):e.cullFace(e.FRONT_AND_BACK),e.enable(e.CULL_FACE)):e.disable(e.CULL_FACE)};this.setBlending=function(a){if(a!==Qa){switch(a){case THREE.AdditiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE);break;case THREE.SubtractiveBlending:e.blendEquation(e.FUNC_ADD); e.blendFunc(e.ZERO,e.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.SRC_COLOR);break;default:e.blendEquationSeparate(e.FUNC_ADD,e.FUNC_ADD),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA)}Qa=a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=e.createTexture(),C.info.memory.textures++;e.activeTexture(e.TEXTURE0+b);e.bindTexture(e.TEXTURE_2D,a.__webglTexture); -var c=$(e.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?e.texImage2D(e.TEXTURE_2D,0,ga(a.format),a.image.width,a.image.height,0,ga(a.format),e.UNSIGNED_BYTE,a.image.data):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,a.image);c&&e.generateMipmap(e.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else e.activeTexture(e.TEXTURE0+b),e.bindTexture(e.TEXTURE_2D,a.__webglTexture)}}; +var c=$(e.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?e.texImage2D(e.TEXTURE_2D,0,ga(a.format),a.image.width,a.image.height,0,ga(a.format),e.UNSIGNED_BYTE,a.image.data):e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,a.image);c&&e.generateMipmap(e.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else e.activeTexture(e.TEXTURE0+b),e.bindTexture(e.TEXTURE_2D,a.__webglTexture)};this.addPlugin(new THREE.SpritePlugin);this.addPlugin(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}; diff --git a/examples/webgl_lensflares.html b/examples/webgl_lensflares.html index 018ee496..ac0663ac 100644 --- a/examples/webgl_lensflares.html +++ b/examples/webgl_lensflares.html @@ -180,10 +180,6 @@ renderer.gammaOutput = true; renderer.physicallyBasedShading = true; - // lens flares plugin - - renderer.addPlugin( new THREE.LensFlarePlugin() ); - // stats stats = new Stats(); diff --git a/examples/webgl_sprites.html b/examples/webgl_sprites.html index f5773a64..71afdbb5 100644 --- a/examples/webgl_sprites.html +++ b/examples/webgl_sprites.html @@ -113,8 +113,6 @@ container.appendChild( renderer.domElement ); - renderer.addPlugin( new THREE.SpritePlugin() ); - // stats stats = new Stats(); diff --git a/src/extras/plugins/LensFlarePlugin.js b/src/extras/plugins/LensFlarePlugin.js index 5610695d..26e6b543 100644 --- a/src/extras/plugins/LensFlarePlugin.js +++ b/src/extras/plugins/LensFlarePlugin.js @@ -105,28 +105,25 @@ THREE.LensFlarePlugin = function ( ) { this.render = function ( scene, camera, viewportWidth, viewportHeight ) { - var _flaresList = scene.__webglFlares; + var flares = scene.__webglFlares, + nFlares = flares.length; - var object; - - var o, ol = _flaresList.length; - var f, fl, flare; + if ( ! nFlares ) return; var tempPosition = new THREE.Vector3(); - var invAspect = viewportHeight / viewportWidth; - var halfViewportWidth = viewportWidth * 0.5; - var halfViewportHeight = viewportHeight * 0.5; + var invAspect = viewportHeight / viewportWidth, + halfViewportWidth = viewportWidth * 0.5, + halfViewportHeight = viewportHeight * 0.5; - var size = 16 / viewportHeight; + var size = 16 / viewportHeight, + scale = new THREE.Vector2( size * invAspect, size ); - var scale = new THREE.Vector2( size * invAspect, size ); + var screenPosition = new THREE.Vector3( 1, 1, 0 ), + screenPositionPixels = new THREE.Vector2( 1, 1 ); - var screenPosition = new THREE.Vector3( 1, 1, 0 ); - var screenPositionPixels = new THREE.Vector2( 1, 1 ); - - var uniforms = _lensFlare.uniforms; - var attributes = _lensFlare.attributes; + var uniforms = _lensFlare.uniforms, + attributes = _lensFlare.attributes; // set _lensFlare program and reset blending @@ -156,21 +153,22 @@ THREE.LensFlarePlugin = function ( ) { _gl.disable( _gl.CULL_FACE ); _gl.depthMask( false ); - for ( o = 0; o < ol; o ++ ) { + var i, j, jl, flare, sprite; + + for ( i = 0; i < nFlares; i ++ ) { size = 16 / viewportHeight; scale.set( size * invAspect, size ); // calc object screen position - object = _flaresList[ o ]; + flare = flares[ i ]; - tempPosition.set( object.matrixWorld.n14, object.matrixWorld.n24, object.matrixWorld.n34 ); + tempPosition.set( flare.matrixWorld.n14, flare.matrixWorld.n24, flare.matrixWorld.n34 ); camera.matrixWorldInverse.multiplyVector3( tempPosition ); camera.projectionMatrix.multiplyVector3( tempPosition ); - // setup arrays for gl programs screenPosition.copy( tempPosition ) @@ -178,7 +176,6 @@ THREE.LensFlarePlugin = function ( ) { screenPositionPixels.x = screenPosition.x * halfViewportWidth + halfViewportWidth; screenPositionPixels.y = screenPosition.y * halfViewportHeight + halfViewportHeight; - // screen cull if ( _lensFlare.hasVertexTexture || ( @@ -225,15 +222,15 @@ THREE.LensFlarePlugin = function ( ) { // update object positions - object.positionScreen.copy( screenPosition ) + flare.positionScreen.copy( screenPosition ) - if ( object.customUpdateCallback ) { + if ( flare.customUpdateCallback ) { - object.customUpdateCallback( object ); + flare.customUpdateCallback( flare ); } else { - object.updateLensFlares(); + flare.updateLensFlares(); } @@ -242,30 +239,30 @@ THREE.LensFlarePlugin = function ( ) { _gl.uniform1i( uniforms.renderType, 2 ); _gl.enable( _gl.BLEND ); - for ( f = 0, fl = object.lensFlares.length; f < fl; f ++ ) { + for ( j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) { - flare = object.lensFlares[ f ]; + sprite = flare.lensFlares[ j ]; - if ( flare.opacity > 0.001 && flare.scale > 0.001 ) { + if ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) { - screenPosition.x = flare.x; - screenPosition.y = flare.y; - screenPosition.z = flare.z; + screenPosition.x = sprite.x; + screenPosition.y = sprite.y; + screenPosition.z = sprite.z; - size = flare.size * flare.scale / viewportHeight; + size = sprite.size * sprite.scale / viewportHeight; scale.x = size * invAspect; scale.y = size; _gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); _gl.uniform2f( uniforms.scale, scale.x, scale.y ); - _gl.uniform1f( uniforms.rotation, flare.rotation ); + _gl.uniform1f( uniforms.rotation, sprite.rotation ); - _gl.uniform1f( uniforms.opacity, flare.opacity ); - _gl.uniform3f( uniforms.color, flare.color.r, flare.color.g, flare.color.b ); + _gl.uniform1f( uniforms.opacity, sprite.opacity ); + _gl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b ); - _renderer.setBlending( flare.blending ); - _renderer.setTexture( flare.texture, 1 ); + _renderer.setBlending( sprite.blending ); + _renderer.setTexture( sprite.texture, 1 ); _gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 ); diff --git a/src/extras/plugins/SpritePlugin.js b/src/extras/plugins/SpritePlugin.js index d34ef73d..504aee21 100644 --- a/src/extras/plugins/SpritePlugin.js +++ b/src/extras/plugins/SpritePlugin.js @@ -74,17 +74,18 @@ THREE.SpritePlugin = function ( ) { this.render = function ( scene, camera, viewportWidth, viewportHeight, projectionMatrixArray ) { - var o, ol, object; + var sprites = scene.__webglSprites, + nSprites = sprites.length; - var attributes = _sprite.attributes; - var uniforms = _sprite.uniforms; + if ( ! nSprites ) return; + + var attributes = _sprite.attributes, + uniforms = _sprite.uniforms; var invAspect = viewportHeight / viewportWidth; - var size, scale = []; - var screenPosition; - var halfViewportWidth = viewportWidth * 0.5; - var halfViewportHeight = viewportHeight * 0.5; + var halfViewportWidth = viewportWidth * 0.5, + halfViewportHeight = viewportHeight * 0.5; var mergeWith3D = true; @@ -119,81 +120,83 @@ THREE.SpritePlugin = function ( ) { // update positions and sort - for( o = 0, ol = scene.__webglSprites.length; o < ol; o ++ ) { + var i, sprite, screenPosition, size, scale = []; - object = scene.__webglSprites[ o ]; + for( i = 0; i < nSprites; i ++ ) { - if ( !object.visible || object.opacity === 0 ) continue; + sprite = sprites[ i ]; - if( !object.useScreenCoordinates ) { + if ( ! sprite.visible || sprite.opacity === 0 ) continue; - object._modelViewMatrix.multiplyToArray( camera.matrixWorldInverse, object.matrixWorld, object._modelViewMatrixArray ); - object.z = -object._modelViewMatrix.n34; + if( ! sprite.useScreenCoordinates ) { + + sprite._modelViewMatrix.multiplyToArray( camera.matrixWorldInverse, sprite.matrixWorld, sprite._modelViewMatrixArray ); + sprite.z = - sprite._modelViewMatrix.n34; } else { - object.z = -object.position.z; + sprite.z = - sprite.position.z; } } - scene.__webglSprites.sort( painterSort ); + sprites.sort( painterSort ); // render all sprites - for ( o = 0, ol = scene.__webglSprites.length; o < ol; o ++ ) { + for( i = 0; i < nSprites; i ++ ) { - object = scene.__webglSprites[ o ]; + sprite = sprites[ i ]; - if ( !object.visible || object.opacity === 0 ) continue; + if ( ! sprite.visible || sprite.opacity === 0 ) continue; - if ( object.map && object.map.image && object.map.image.width ) { + if ( sprite.map && sprite.map.image && sprite.map.image.width ) { - if ( object.useScreenCoordinates ) { + if ( sprite.useScreenCoordinates ) { _gl.uniform1i( uniforms.useScreenCoordinates, 1 ); - _gl.uniform3f( uniforms.screenPosition, ( object.position.x - halfViewportWidth ) / halfViewportWidth, - ( halfViewportHeight - object.position.y ) / halfViewportHeight, - Math.max( 0, Math.min( 1, object.position.z ))); + _gl.uniform3f( uniforms.screenPosition, ( sprite.position.x - halfViewportWidth ) / halfViewportWidth, + ( halfViewportHeight - sprite.position.y ) / halfViewportHeight, + Math.max( 0, Math.min( 1, sprite.position.z ) ) ); } else { _gl.uniform1i( uniforms.useScreenCoordinates, 0 ); - _gl.uniform1i( uniforms.affectedByDistance, object.affectedByDistance ? 1 : 0 ); - _gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, object._modelViewMatrixArray ); + _gl.uniform1i( uniforms.affectedByDistance, sprite.affectedByDistance ? 1 : 0 ); + _gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite._modelViewMatrixArray ); } - size = object.map.image.width / ( object.scaleByViewport ? viewportHeight : 1 ); + size = sprite.map.image.width / ( sprite.scaleByViewport ? viewportHeight : 1 ); - scale[ 0 ] = size * invAspect * object.scale.x; - scale[ 1 ] = size * object.scale.y; + scale[ 0 ] = size * invAspect * sprite.scale.x; + scale[ 1 ] = size * sprite.scale.y; - _gl.uniform2f( uniforms.uvScale, object.uvScale.x, object.uvScale.y ); - _gl.uniform2f( uniforms.uvOffset, object.uvOffset.x, object.uvOffset.y ); - _gl.uniform2f( uniforms.alignment, object.alignment.x, object.alignment.y ); + _gl.uniform2f( uniforms.uvScale, sprite.uvScale.x, sprite.uvScale.y ); + _gl.uniform2f( uniforms.uvOffset, sprite.uvOffset.x, sprite.uvOffset.y ); + _gl.uniform2f( uniforms.alignment, sprite.alignment.x, sprite.alignment.y ); - _gl.uniform1f( uniforms.opacity, object.opacity ); - _gl.uniform3f( uniforms.color, object.color.r, object.color.g, object.color.b ); + _gl.uniform1f( uniforms.opacity, sprite.opacity ); + _gl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b ); - _gl.uniform1f( uniforms.rotation, object.rotation ); + _gl.uniform1f( uniforms.rotation, sprite.rotation ); _gl.uniform2fv( uniforms.scale, scale ); - if ( object.mergeWith3D && !mergeWith3D ) { + if ( sprite.mergeWith3D && !mergeWith3D ) { _gl.enable( _gl.DEPTH_TEST ); mergeWith3D = true; - } else if ( !object.mergeWith3D && mergeWith3D ) { + } else if ( ! sprite.mergeWith3D && mergeWith3D ) { _gl.disable( _gl.DEPTH_TEST ); mergeWith3D = false; } - _renderer.setBlending( object.blending ); - _renderer.setTexture( object.map, 0 ); + _renderer.setBlending( sprite.blending ); + _renderer.setTexture( sprite.map, 0 ); _gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 ); diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 95593c73..0236e4a4 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -5830,4 +5830,9 @@ THREE.WebGLRenderer = function ( parameters ) { }; + // default plugins (order is important) + + this.addPlugin( new THREE.SpritePlugin() ); + this.addPlugin( new THREE.LensFlarePlugin() ); + };