From c35cca9ecf67f5f8579f9f8fda63dce2a0e5d9d1 Mon Sep 17 00:00:00 2001 From: alteredq Date: Thu, 21 Jul 2011 17:34:28 +0200 Subject: [PATCH] Changed canvas_geometry_shape => webgl_geometry_shapes. Also cleaned up ExtrudeGeometry. --- build/Three.js | 566 +++++++++--------- ..._shape.html => webgl_geometry_shapes.html} | 30 +- src/extras/geometries/ExtrudeGeometry.js | 334 ++++++----- src/extras/geometries/Path.js | 4 +- 4 files changed, 480 insertions(+), 454 deletions(-) rename examples/{canvas_geometry_shape.html => webgl_geometry_shapes.html} (94%) diff --git a/build/Three.js b/build/Three.js index 2f13610ab3..caff94a9ba 100755 --- a/build/Three.js +++ b/build/Three.js @@ -14,33 +14,33 @@ THREE.Vector4.prototype={set:function(b,c,e,f){this.x=b;this.y=c;this.z=e;this.w b.x;this.y-=b.y;this.z-=b.z;this.w-=b.w;return this},multiplyScalar:function(b){this.x*=b;this.y*=b;this.z*=b;this.w*=b;return this},divideScalar:function(b){b?(this.x/=b,this.y/=b,this.z/=b,this.w/=b):this.set(0,0,0,1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(b){return this.x*b.x+this.y*b.y+this.z*b.z+this.w*b.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())}, setLength:function(b){return this.normalize().multiplyScalar(b)},lerpSelf:function(b,c){this.x+=(b.x-this.x)*c;this.y+=(b.y-this.y)*c;this.z+=(b.z-this.z)*c;this.w+=(b.w-this.w)*c;return this}};THREE.Ray=function(b,c){this.origin=b||new THREE.Vector3;this.direction=c||new THREE.Vector3}; THREE.Ray.prototype={intersectScene:function(b){return this.intersectObjects(b.objects)},intersectObjects:function(b){var c,e,f=[];c=0;for(e=b.length;c0&&b>0&&h+b<1}if(b instanceof THREE.Particle){var f=c(this.origin,this.direction,b);if(!f||f>b.scale.x)return[];return[{distance:f,point:b.position,face:null,object:b}]}else if(b instanceof THREE.Mesh){f=c(this.origin,this.direction,b);if(!f||f>b.geometry.boundingSphere.radius*Math.max(b.scale.x,Math.max(b.scale.y,b.scale.z)))return[];var g,h,j,m,n,p,o,u,v,w,x=b.geometry, -y=x.vertices,D=[],f=0;for(g=x.faces.length;f0:u<0))if(o=o.dot((new THREE.Vector3).sub(j,v))/u,v=v.addSelf(w.multiplyScalar(o)), -h instanceof THREE.Face3)e(v,j,m,n)&&(h={distance:this.origin.distanceTo(v),point:v,face:h,object:b},D.push(h));else if(h instanceof THREE.Face4&&(e(v,j,m,p)||e(v,m,n,p)))h={distance:this.origin.distanceTo(v),point:v,face:h,object:b},D.push(h);return D}else return[]}}; -THREE.Rectangle=function(){function b(){h=f-c;j=g-e}var c,e,f,g,h,j,m=!0;this.getX=function(){return c};this.getY=function(){return e};this.getWidth=function(){return h};this.getHeight=function(){return j};this.getLeft=function(){return c};this.getTop=function(){return e};this.getRight=function(){return f};this.getBottom=function(){return g};this.set=function(h,j,o,u){m=!1;c=h;e=j;f=o;g=u;b()};this.addPoint=function(h,j){m?(m=!1,c=h,e=j,f=h,g=j):(c=ch?f:h,g=g>j?g:j);b()};this.add3Points= -function(h,j,o,u,v,w){m?(m=!1,c=ho?h>v?h:v:o>v?o:v,g=j>u?j>w?j:w:u>w?u:w):(c=ho?h>v?h>f?h:f:v>f?v:f:o>v?o>f?o:f:v>f?v:f,g=j>u?j>w?j>g?j:g:w>g?w:g:u>w?u>g?u:g:w>g?w:g);b()};this.addRectangle=function(h){m?(m=!1,c=h.getLeft(),e=h.getTop(),f=h.getRight(),g=h.getBottom()):(c=ch.getRight()?f:h.getRight(),g=g> +g=b.clone().subSelf(e),b=f.dot(f),e=f.dot(c),f=f.dot(g),h=c.dot(c),c=c.dot(g),g=1/(b*h-e*e),h=(h*f-e*c)*g,b=(b*c-e*f)*g;return h>0&&b>0&&h+b<1}if(b instanceof THREE.Particle){var f=c(this.origin,this.direction,b);if(!f||f>b.scale.x)return[];return[{distance:f,point:b.position,face:null,object:b}]}else if(b instanceof THREE.Mesh){f=c(this.origin,this.direction,b);if(!f||f>b.geometry.boundingSphere.radius*Math.max(b.scale.x,Math.max(b.scale.y,b.scale.z)))return[];var g,h,j,m,n,p,o,t,u,v,w=b.geometry, +z=w.vertices,x=[],f=0;for(g=w.faces.length;f0:t<0))if(o=o.dot((new THREE.Vector3).sub(j,u))/t,u=u.addSelf(v.multiplyScalar(o)), +h instanceof THREE.Face3)e(u,j,m,n)&&(h={distance:this.origin.distanceTo(u),point:u,face:h,object:b},x.push(h));else if(h instanceof THREE.Face4&&(e(u,j,m,p)||e(u,m,n,p)))h={distance:this.origin.distanceTo(u),point:u,face:h,object:b},x.push(h);return x}else return[]}}; +THREE.Rectangle=function(){function b(){h=f-c;j=g-e}var c,e,f,g,h,j,m=!0;this.getX=function(){return c};this.getY=function(){return e};this.getWidth=function(){return h};this.getHeight=function(){return j};this.getLeft=function(){return c};this.getTop=function(){return e};this.getRight=function(){return f};this.getBottom=function(){return g};this.set=function(h,j,o,t){m=!1;c=h;e=j;f=o;g=t;b()};this.addPoint=function(h,j){m?(m=!1,c=h,e=j,f=h,g=j):(c=ch?f:h,g=g>j?g:j);b()};this.add3Points= +function(h,j,o,t,u,v){m?(m=!1,c=ho?h>u?h:u:o>u?o:u,g=j>t?j>v?j:v:t>v?t:v):(c=ho?h>u?h>f?h:f:u>f?u:f:o>u?o>f?o:f:u>f?u:f,g=j>t?j>v?j>g?j:g:v>g?v:g:t>v?t>g?t:g:v>g?v:g);b()};this.addRectangle=function(h){m?(m=!1,c=h.getLeft(),e=h.getTop(),f=h.getRight(),g=h.getBottom()):(c=ch.getRight()?f:h.getRight(),g=g> h.getBottom()?g:h.getBottom());b()};this.inflate=function(h){c-=h;e-=h;f+=h;g+=h;b()};this.minSelf=function(h){c=c>h.getLeft()?c:h.getLeft();e=e>h.getTop()?e:h.getTop();f=f=0&&Math.min(g,b.getBottom())-Math.max(e,b.getTop())>=0};this.empty=function(){m=!0;g=f=e=c=0;b()};this.isEmpty=function(){return m}};THREE.Matrix3=function(){this.m=[]}; -THREE.Matrix3.prototype={transpose:function(){var b,c=this.m;b=c[1];c[1]=c[3];c[3]=b;b=c[2];c[2]=c[6];c[6]=b;b=c[5];c[5]=c[7];c[7]=b;return this},transposeIntoArray:function(b){var c=this.m;b[0]=c[0];b[1]=c[3];b[2]=c[6];b[3]=c[1];b[4]=c[4];b[5]=c[7];b[6]=c[2];b[7]=c[5];b[8]=c[8];return this}};THREE.Matrix4=function(b,c,e,f,g,h,j,m,n,p,o,u,v,w,x,y){this.set(b||1,c||0,e||0,f||0,g||0,h||1,j||0,m||0,n||0,p||0,o||1,u||0,v||0,w||0,x||0,y||1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={set:function(b,c,e,f,g,h,j,m,n,p,o,u,v,w,x,y){this.n11=b;this.n12=c;this.n13=e;this.n14=f;this.n21=g;this.n22=h;this.n23=j;this.n24=m;this.n31=n;this.n32=p;this.n33=o;this.n34=u;this.n41=v;this.n42=w;this.n43=x;this.n44=y;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(b){this.set(b.n11,b.n12,b.n13,b.n14,b.n21,b.n22,b.n23,b.n24,b.n31,b.n32,b.n33,b.n34,b.n41,b.n42,b.n43,b.n44);return this},lookAt:function(b,c,e){var f=THREE.Matrix4.__v1, +THREE.Matrix3.prototype={transpose:function(){var b,c=this.m;b=c[1];c[1]=c[3];c[3]=b;b=c[2];c[2]=c[6];c[6]=b;b=c[5];c[5]=c[7];c[7]=b;return this},transposeIntoArray:function(b){var c=this.m;b[0]=c[0];b[1]=c[3];b[2]=c[6];b[3]=c[1];b[4]=c[4];b[5]=c[7];b[6]=c[2];b[7]=c[5];b[8]=c[8];return this}};THREE.Matrix4=function(b,c,e,f,g,h,j,m,n,p,o,t,u,v,w,z){this.set(b||1,c||0,e||0,f||0,g||0,h||1,j||0,m||0,n||0,p||0,o||1,t||0,u||0,v||0,w||0,z||1);this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={set:function(b,c,e,f,g,h,j,m,n,p,o,t,u,v,w,z){this.n11=b;this.n12=c;this.n13=e;this.n14=f;this.n21=g;this.n22=h;this.n23=j;this.n24=m;this.n31=n;this.n32=p;this.n33=o;this.n34=t;this.n41=u;this.n42=v;this.n43=w;this.n44=z;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(b){this.set(b.n11,b.n12,b.n13,b.n14,b.n21,b.n22,b.n23,b.n24,b.n31,b.n32,b.n33,b.n34,b.n41,b.n42,b.n43,b.n44);return this},lookAt:function(b,c,e){var f=THREE.Matrix4.__v1, g=THREE.Matrix4.__v2,h=THREE.Matrix4.__v3;h.sub(b,c).normalize();if(h.length()===0)h.z=1;f.cross(e,h).normalize();f.length()===0&&(h.x+=1.0E-4,f.cross(e,h).normalize());g.cross(h,f).normalize();this.n11=f.x;this.n12=g.x;this.n13=h.x;this.n21=f.y;this.n22=g.y;this.n23=h.y;this.n31=f.z;this.n32=g.z;this.n33=h.z;return this},multiplyVector3:function(b){var c=b.x,e=b.y,f=b.z,g=1/(this.n41*c+this.n42*e+this.n43*f+this.n44);b.x=(this.n11*c+this.n12*e+this.n13*f+this.n14)*g;b.y=(this.n21*c+this.n22*e+this.n23* f+this.n24)*g;b.z=(this.n31*c+this.n32*e+this.n33*f+this.n34)*g;return b},multiplyVector4:function(b){var c=b.x,e=b.y,f=b.z,g=b.w;b.x=this.n11*c+this.n12*e+this.n13*f+this.n14*g;b.y=this.n21*c+this.n22*e+this.n23*f+this.n24*g;b.z=this.n31*c+this.n32*e+this.n33*f+this.n34*g;b.w=this.n41*c+this.n42*e+this.n43*f+this.n44*g;return b},rotateAxis:function(b){var c=b.x,e=b.y,f=b.z;b.x=c*this.n11+e*this.n12+f*this.n13;b.y=c*this.n21+e*this.n22+f*this.n23;b.z=c*this.n31+e*this.n32+f*this.n33;b.normalize(); -return b},crossVector:function(b){var c=new THREE.Vector4;c.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;c.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24*b.w;c.z=this.n31*b.x+this.n32*b.y+this.n33*b.z+this.n34*b.w;c.w=b.w?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return c},multiply:function(b,c){var e=b.n11,f=b.n12,g=b.n13,h=b.n14,j=b.n21,m=b.n22,n=b.n23,p=b.n24,o=b.n31,u=b.n32,v=b.n33,w=b.n34,x=b.n41,y=b.n42,D=b.n43,A=b.n44,H=c.n11,C=c.n12,E=c.n13,I=c.n14,J=c.n21,S=c.n22, -R=c.n23,N=c.n24,F=c.n31,W=c.n32,K=c.n33,X=c.n34,Q=c.n41,U=c.n42,k=c.n43,ia=c.n44;this.n11=e*H+f*J+g*F+h*Q;this.n12=e*C+f*S+g*W+h*U;this.n13=e*E+f*R+g*K+h*k;this.n14=e*I+f*N+g*X+h*ia;this.n21=j*H+m*J+n*F+p*Q;this.n22=j*C+m*S+n*W+p*U;this.n23=j*E+m*R+n*K+p*k;this.n24=j*I+m*N+n*X+p*ia;this.n31=o*H+u*J+v*F+w*Q;this.n32=o*C+u*S+v*W+w*U;this.n33=o*E+u*R+v*K+w*k;this.n34=o*I+u*N+v*X+w*ia;this.n41=x*H+y*J+D*F+A*Q;this.n42=x*C+y*S+D*W+A*U;this.n43=x*E+y*R+D*K+A*k;this.n44=x*I+y*N+D*X+A*ia;return this},multiplyToArray:function(b, +return b},crossVector:function(b){var c=new THREE.Vector4;c.x=this.n11*b.x+this.n12*b.y+this.n13*b.z+this.n14*b.w;c.y=this.n21*b.x+this.n22*b.y+this.n23*b.z+this.n24*b.w;c.z=this.n31*b.x+this.n32*b.y+this.n33*b.z+this.n34*b.w;c.w=b.w?this.n41*b.x+this.n42*b.y+this.n43*b.z+this.n44*b.w:1;return c},multiply:function(b,c){var e=b.n11,f=b.n12,g=b.n13,h=b.n14,j=b.n21,m=b.n22,n=b.n23,p=b.n24,o=b.n31,t=b.n32,u=b.n33,v=b.n34,w=b.n41,z=b.n42,x=b.n43,y=b.n44,F=c.n11,C=c.n12,E=c.n13,G=c.n14,B=c.n21,P=c.n22, +I=c.n23,H=c.n24,T=c.n31,U=c.n32,J=c.n33,Y=c.n34,K=c.n41,S=c.n42,k=c.n43,V=c.n44;this.n11=e*F+f*B+g*T+h*K;this.n12=e*C+f*P+g*U+h*S;this.n13=e*E+f*I+g*J+h*k;this.n14=e*G+f*H+g*Y+h*V;this.n21=j*F+m*B+n*T+p*K;this.n22=j*C+m*P+n*U+p*S;this.n23=j*E+m*I+n*J+p*k;this.n24=j*G+m*H+n*Y+p*V;this.n31=o*F+t*B+u*T+v*K;this.n32=o*C+t*P+u*U+v*S;this.n33=o*E+t*I+u*J+v*k;this.n34=o*G+t*H+u*Y+v*V;this.n41=w*F+z*B+x*T+y*K;this.n42=w*C+z*P+x*U+y*S;this.n43=w*E+z*I+x*J+y*k;this.n44=w*G+z*H+x*Y+y*V;return this},multiplyToArray:function(b, c,e){this.multiply(b,c);e[0]=this.n11;e[1]=this.n21;e[2]=this.n31;e[3]=this.n41;e[4]=this.n12;e[5]=this.n22;e[6]=this.n32;e[7]=this.n42;e[8]=this.n13;e[9]=this.n23;e[10]=this.n33;e[11]=this.n43;e[12]=this.n14;e[13]=this.n24;e[14]=this.n34;e[15]=this.n44;return this},multiplySelf:function(b){this.multiply(this,b);return this},multiplyScalar:function(b){this.n11*=b;this.n12*=b;this.n13*=b;this.n14*=b;this.n21*=b;this.n22*=b;this.n23*=b;this.n24*=b;this.n31*=b;this.n32*=b;this.n33*=b;this.n34*=b;this.n41*= -b;this.n42*=b;this.n43*=b;this.n44*=b;return this},determinant:function(){var b=this.n11,c=this.n12,e=this.n13,f=this.n14,g=this.n21,h=this.n22,j=this.n23,m=this.n24,n=this.n31,p=this.n32,o=this.n33,u=this.n34,v=this.n41,w=this.n42,x=this.n43,y=this.n44;return f*j*p*v-e*m*p*v-f*h*o*v+c*m*o*v+e*h*u*v-c*j*u*v-f*j*n*w+e*m*n*w+f*g*o*w-b*m*o*w-e*g*u*w+b*j*u*w+f*h*n*x-c*m*n*x-f*g*p*x+b*m*p*x+c*g*u*x-b*h*u*x-e*h*n*y+c*j*n*y+e*g*p*y-b*j*p*y-c*g*o*y+b*h*o*y},transpose:function(){var b;b=this.n21;this.n21= +b;this.n42*=b;this.n43*=b;this.n44*=b;return this},determinant:function(){var b=this.n11,c=this.n12,e=this.n13,f=this.n14,g=this.n21,h=this.n22,j=this.n23,m=this.n24,n=this.n31,p=this.n32,o=this.n33,t=this.n34,u=this.n41,v=this.n42,w=this.n43,z=this.n44;return f*j*p*u-e*m*p*u-f*h*o*u+c*m*o*u+e*h*t*u-c*j*t*u-f*j*n*v+e*m*n*v+f*g*o*v-b*m*o*v-e*g*t*v+b*j*t*v+f*h*n*w-c*m*n*w-f*g*p*w+b*m*p*w+c*g*t*w-b*h*t*w-e*h*n*z+c*j*n*z+e*g*p*z-b*j*p*z-c*g*o*z+b*h*o*z},transpose:function(){var b;b=this.n21;this.n21= this.n12;this.n12=b;b=this.n31;this.n31=this.n13;this.n13=b;b=this.n32;this.n32=this.n23;this.n23=b;b=this.n41;this.n41=this.n14;this.n14=b;b=this.n42;this.n42=this.n24;this.n24=b;b=this.n43;this.n43=this.n34;this.n43=b;return this},clone:function(){var b=new THREE.Matrix4;b.n11=this.n11;b.n12=this.n12;b.n13=this.n13;b.n14=this.n14;b.n21=this.n21;b.n22=this.n22;b.n23=this.n23;b.n24=this.n24;b.n31=this.n31;b.n32=this.n32;b.n33=this.n33;b.n34=this.n34;b.n41=this.n41;b.n42=this.n42;b.n43=this.n43;b.n44= this.n44;return b},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(b){b[0]=this.n11;b[1]=this.n21;b[2]=this.n31;b[3]=this.n41;b[4]= this.n12;b[5]=this.n22;b[6]=this.n32;b[7]=this.n42;b[8]=this.n13;b[9]=this.n23;b[10]=this.n33;b[11]=this.n43;b[12]=this.n14;b[13]=this.n24;b[14]=this.n34;b[15]=this.n44;return b},flattenToArrayOffset:function(b,c){b[c]=this.n11;b[c+1]=this.n21;b[c+2]=this.n31;b[c+3]=this.n41;b[c+4]=this.n12;b[c+5]=this.n22;b[c+6]=this.n32;b[c+7]=this.n42;b[c+8]=this.n13;b[c+9]=this.n23;b[c+10]=this.n33;b[c+11]=this.n43;b[c+12]=this.n14;b[c+13]=this.n24;b[c+14]=this.n34;b[c+15]=this.n44;return b},setTranslation:function(b, c,e){this.set(1,0,0,b,0,1,0,c,0,0,1,e,0,0,0,1);return this},setScale:function(b,c,e){this.set(b,0,0,0,0,c,0,0,0,0,e,0,0,0,0,1);return this},setRotationX:function(b){var c=Math.cos(b),b=Math.sin(b);this.set(1,0,0,0,0,c,-b,0,0,b,c,0,0,0,0,1);return this},setRotationY:function(b){var c=Math.cos(b),b=Math.sin(b);this.set(c,0,b,0,0,1,0,0,-b,0,c,0,0,0,0,1);return this},setRotationZ:function(b){var c=Math.cos(b),b=Math.sin(b);this.set(c,-b,0,0,b,c,0,0,0,0,1,0,0,0,0,1);return this},setRotationAxis:function(b, c){var e=Math.cos(c),f=Math.sin(c),g=1-e,h=b.x,j=b.y,m=b.z,n=g*h,p=g*j;this.set(n*h+e,n*j-f*m,n*m+f*j,0,n*j+f*m,p*j+e,p*m-f*h,0,n*m-f*j,p*m+f*h,g*m*m+e,0,0,0,0,1);return this},setPosition:function(b){this.n14=b.x;this.n24=b.y;this.n34=b.z;return this},getPosition:function(){if(!this.position)this.position=new THREE.Vector3;this.position.set(this.n14,this.n24,this.n34);return this.position},getColumnX:function(){if(!this.columnX)this.columnX=new THREE.Vector3;this.columnX.set(this.n11,this.n21,this.n31); -return this.columnX},getColumnY:function(){if(!this.columnY)this.columnY=new THREE.Vector3;this.columnY.set(this.n12,this.n22,this.n32);return this.columnY},getColumnZ:function(){if(!this.columnZ)this.columnZ=new THREE.Vector3;this.columnZ.set(this.n13,this.n23,this.n33);return this.columnZ},setRotationFromEuler:function(b,c){var e=b.x,f=b.y,g=b.z,h=Math.cos(e),e=Math.sin(e),j=Math.cos(f),f=Math.sin(f),m=Math.cos(g),g=Math.sin(g);switch(c){case "YXZ":var n=j*m,p=j*g,o=f*m,u=f*g;this.n11=n+u*e;this.n12= -o*e-p;this.n13=h*f;this.n21=h*g;this.n22=h*m;this.n23=-e;this.n31=p*e-o;this.n32=u+n*e;this.n33=h*j;break;case "ZXY":n=j*m;p=j*g;o=f*m;u=f*g;this.n11=n-u*e;this.n12=-h*g;this.n13=o+p*e;this.n21=p+o*e;this.n22=h*m;this.n23=u-n*e;this.n31=-h*f;this.n32=e;this.n33=h*j;break;case "ZYX":n=h*m;p=h*g;o=e*m;u=e*g;this.n11=j*m;this.n12=o*f-p;this.n13=n*f+u;this.n21=j*g;this.n22=u*f+n;this.n23=p*f-o;this.n31=-f;this.n32=e*j;this.n33=h*j;break;case "YZX":n=h*j;p=h*f;o=e*j;u=e*f;this.n11=j*m;this.n12=u-n*g;this.n13= -o*g+p;this.n21=g;this.n22=h*m;this.n23=-e*m;this.n31=-f*m;this.n32=p*g+o;this.n33=n-u*g;break;case "XZY":n=h*j;p=h*f;o=e*j;u=e*f;this.n11=j*m;this.n12=-g;this.n13=f*m;this.n21=n*g+u;this.n22=h*m;this.n23=p*g-o;this.n31=o*g-p;this.n32=e*m;this.n33=u*g+n;break;default:n=h*m,p=h*g,o=e*m,u=e*g,this.n11=j*m,this.n12=-j*g,this.n13=f,this.n21=p+o*f,this.n22=n-u*f,this.n23=-e*j,this.n31=u-n*f,this.n32=o+p*f,this.n33=h*j}return this},setRotationFromQuaternion:function(b){var c=b.x,e=b.y,f=b.z,g=b.w,h=c+c, +return this.columnX},getColumnY:function(){if(!this.columnY)this.columnY=new THREE.Vector3;this.columnY.set(this.n12,this.n22,this.n32);return this.columnY},getColumnZ:function(){if(!this.columnZ)this.columnZ=new THREE.Vector3;this.columnZ.set(this.n13,this.n23,this.n33);return this.columnZ},setRotationFromEuler:function(b,c){var e=b.x,f=b.y,g=b.z,h=Math.cos(e),e=Math.sin(e),j=Math.cos(f),f=Math.sin(f),m=Math.cos(g),g=Math.sin(g);switch(c){case "YXZ":var n=j*m,p=j*g,o=f*m,t=f*g;this.n11=n+t*e;this.n12= +o*e-p;this.n13=h*f;this.n21=h*g;this.n22=h*m;this.n23=-e;this.n31=p*e-o;this.n32=t+n*e;this.n33=h*j;break;case "ZXY":n=j*m;p=j*g;o=f*m;t=f*g;this.n11=n-t*e;this.n12=-h*g;this.n13=o+p*e;this.n21=p+o*e;this.n22=h*m;this.n23=t-n*e;this.n31=-h*f;this.n32=e;this.n33=h*j;break;case "ZYX":n=h*m;p=h*g;o=e*m;t=e*g;this.n11=j*m;this.n12=o*f-p;this.n13=n*f+t;this.n21=j*g;this.n22=t*f+n;this.n23=p*f-o;this.n31=-f;this.n32=e*j;this.n33=h*j;break;case "YZX":n=h*j;p=h*f;o=e*j;t=e*f;this.n11=j*m;this.n12=t-n*g;this.n13= +o*g+p;this.n21=g;this.n22=h*m;this.n23=-e*m;this.n31=-f*m;this.n32=p*g+o;this.n33=n-t*g;break;case "XZY":n=h*j;p=h*f;o=e*j;t=e*f;this.n11=j*m;this.n12=-g;this.n13=f*m;this.n21=n*g+t;this.n22=h*m;this.n23=p*g-o;this.n31=o*g-p;this.n32=e*m;this.n33=t*g+n;break;default:n=h*m,p=h*g,o=e*m,t=e*g,this.n11=j*m,this.n12=-j*g,this.n13=f,this.n21=p+o*f,this.n22=n-t*f,this.n23=-e*j,this.n31=t-n*f,this.n32=o+p*f,this.n33=h*j}return this},setRotationFromQuaternion:function(b){var c=b.x,e=b.y,f=b.z,g=b.w,h=c+c, j=e+e,m=f+f,b=c*h,n=c*j;c*=m;var p=e*j;e*=m;f*=m;h*=g;j*=g;g*=m;this.n11=1-(p+f);this.n12=n-g;this.n13=c+j;this.n21=n+g;this.n22=1-(b+f);this.n23=e-h;this.n31=c-j;this.n32=e+h;this.n33=1-(b+p);return this},scale:function(b){var c=b.x,e=b.y,b=b.z;this.n11*=c;this.n12*=e;this.n13*=b;this.n21*=c;this.n22*=e;this.n23*=b;this.n31*=c;this.n32*=e;this.n33*=b;this.n41*=c;this.n42*=e;this.n43*=b;return this},extractPosition:function(b){this.n14=b.n14;this.n24=b.n24;this.n34=b.n34},extractRotation:function(b, c){var e=1/c.x,f=1/c.y,g=1/c.z;this.n11=b.n11*e;this.n21=b.n21*e;this.n31=b.n31*e;this.n12=b.n12*f;this.n22=b.n22*f;this.n32=b.n32*f;this.n13=b.n13*g;this.n23=b.n23*g;this.n33=b.n33*g}}; -THREE.Matrix4.makeInvert=function(b,c){var e=b.n11,f=b.n12,g=b.n13,h=b.n14,j=b.n21,m=b.n22,n=b.n23,p=b.n24,o=b.n31,u=b.n32,v=b.n33,w=b.n34,x=b.n41,y=b.n42,D=b.n43,A=b.n44;c===void 0&&(c=new THREE.Matrix4);c.n11=n*w*y-p*v*y+p*u*D-m*w*D-n*u*A+m*v*A;c.n12=h*v*y-g*w*y-h*u*D+f*w*D+g*u*A-f*v*A;c.n13=g*p*y-h*n*y+h*m*D-f*p*D-g*m*A+f*n*A;c.n14=h*n*u-g*p*u-h*m*v+f*p*v+g*m*w-f*n*w;c.n21=p*v*x-n*w*x-p*o*D+j*w*D+n*o*A-j*v*A;c.n22=g*w*x-h*v*x+h*o*D-e*w*D-g*o*A+e*v*A;c.n23=h*n*x-g*p*x-h*j*D+e*p*D+g*j*A-e*n*A;c.n24= -g*p*o-h*n*o+h*j*v-e*p*v-g*j*w+e*n*w;c.n31=m*w*x-p*u*x+p*o*y-j*w*y-m*o*A+j*u*A;c.n32=h*u*x-f*w*x-h*o*y+e*w*y+f*o*A-e*u*A;c.n33=g*p*x-h*m*x+h*j*y-e*p*y-f*j*A+e*m*A;c.n34=h*m*o-f*p*o-h*j*u+e*p*u+f*j*w-e*m*w;c.n41=n*u*x-m*v*x-n*o*y+j*v*y+m*o*D-j*u*D;c.n42=f*v*x-g*u*x+g*o*y-e*v*y-f*o*D+e*u*D;c.n43=g*m*x-f*n*x-g*j*y+e*n*y+f*j*D-e*m*D;c.n44=f*n*o-g*m*o+g*j*u-e*n*u-f*j*v+e*m*v;c.multiplyScalar(1/b.determinant());return c}; -THREE.Matrix4.makeInvert3x3=function(b){var c=b.m33,e=c.m,f=b.n33*b.n22-b.n32*b.n23,g=-b.n33*b.n21+b.n31*b.n23,h=b.n32*b.n21-b.n31*b.n22,j=-b.n33*b.n12+b.n32*b.n13,m=b.n33*b.n11-b.n31*b.n13,n=-b.n32*b.n11+b.n31*b.n12,p=b.n23*b.n12-b.n22*b.n13,o=-b.n23*b.n11+b.n21*b.n13,u=b.n22*b.n11-b.n21*b.n12,b=b.n11*f+b.n21*j+b.n31*p;b==0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");b=1/b;e[0]=b*f;e[1]=b*g;e[2]=b*h;e[3]=b*j;e[4]=b*m;e[5]=b*n;e[6]=b*p;e[7]=b*o;e[8]=b*u;return c}; +THREE.Matrix4.makeInvert=function(b,c){var e=b.n11,f=b.n12,g=b.n13,h=b.n14,j=b.n21,m=b.n22,n=b.n23,p=b.n24,o=b.n31,t=b.n32,u=b.n33,v=b.n34,w=b.n41,z=b.n42,x=b.n43,y=b.n44;c===void 0&&(c=new THREE.Matrix4);c.n11=n*v*z-p*u*z+p*t*x-m*v*x-n*t*y+m*u*y;c.n12=h*u*z-g*v*z-h*t*x+f*v*x+g*t*y-f*u*y;c.n13=g*p*z-h*n*z+h*m*x-f*p*x-g*m*y+f*n*y;c.n14=h*n*t-g*p*t-h*m*u+f*p*u+g*m*v-f*n*v;c.n21=p*u*w-n*v*w-p*o*x+j*v*x+n*o*y-j*u*y;c.n22=g*v*w-h*u*w+h*o*x-e*v*x-g*o*y+e*u*y;c.n23=h*n*w-g*p*w-h*j*x+e*p*x+g*j*y-e*n*y;c.n24= +g*p*o-h*n*o+h*j*u-e*p*u-g*j*v+e*n*v;c.n31=m*v*w-p*t*w+p*o*z-j*v*z-m*o*y+j*t*y;c.n32=h*t*w-f*v*w-h*o*z+e*v*z+f*o*y-e*t*y;c.n33=g*p*w-h*m*w+h*j*z-e*p*z-f*j*y+e*m*y;c.n34=h*m*o-f*p*o-h*j*t+e*p*t+f*j*v-e*m*v;c.n41=n*t*w-m*u*w-n*o*z+j*u*z+m*o*x-j*t*x;c.n42=f*u*w-g*t*w+g*o*z-e*u*z-f*o*x+e*t*x;c.n43=g*m*w-f*n*w-g*j*z+e*n*z+f*j*x-e*m*x;c.n44=f*n*o-g*m*o+g*j*t-e*n*t-f*j*u+e*m*u;c.multiplyScalar(1/b.determinant());return c}; +THREE.Matrix4.makeInvert3x3=function(b){var c=b.m33,e=c.m,f=b.n33*b.n22-b.n32*b.n23,g=-b.n33*b.n21+b.n31*b.n23,h=b.n32*b.n21-b.n31*b.n22,j=-b.n33*b.n12+b.n32*b.n13,m=b.n33*b.n11-b.n31*b.n13,n=-b.n32*b.n11+b.n31*b.n12,p=b.n23*b.n12-b.n22*b.n13,o=-b.n23*b.n11+b.n21*b.n13,t=b.n22*b.n11-b.n21*b.n12,b=b.n11*f+b.n21*j+b.n31*p;b==0&&console.error("THREE.Matrix4.makeInvert3x3: Matrix not invertible.");b=1/b;e[0]=b*f;e[1]=b*g;e[2]=b*h;e[3]=b*j;e[4]=b*m;e[5]=b*n;e[6]=b*p;e[7]=b*o;e[8]=b*t;return c}; THREE.Matrix4.makeFrustum=function(b,c,e,f,g,h){var j;j=new THREE.Matrix4;j.n11=2*g/(c-b);j.n12=0;j.n13=(c+b)/(c-b);j.n14=0;j.n21=0;j.n22=2*g/(f-e);j.n23=(f+e)/(f-e);j.n24=0;j.n31=0;j.n32=0;j.n33=-(h+g)/(h-g);j.n34=-2*h*g/(h-g);j.n41=0;j.n42=0;j.n43=-1;j.n44=0;return j};THREE.Matrix4.makePerspective=function(b,c,e,f){var g,b=e*Math.tan(b*Math.PI/360);g=-b;return THREE.Matrix4.makeFrustum(g*c,b*c,g,b,e,f)}; THREE.Matrix4.makeOrtho=function(b,c,e,f,g,h){var j,m,n,p;j=new THREE.Matrix4;m=c-b;n=e-f;p=h-g;j.n11=2/m;j.n12=0;j.n13=0;j.n14=-((c+b)/m);j.n21=0;j.n22=2/n;j.n23=0;j.n24=-((e+f)/n);j.n31=0;j.n32=0;j.n33=-2/p;j.n34=-((h+g)/p);j.n41=0;j.n42=0;j.n43=0;j.n44=1;return j};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3; THREE.Object3D=function(){this.parent=void 0;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.eulerOrder="XYZ";this.scale=new THREE.Vector3(1,1,1);this.flipSided=this.doubleSided=this.dynamic=!1;this.renderDepth=null;this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixWorldNeedsUpdate=this.matrixAutoUpdate=!0;this.quaternion=new THREE.Quaternion; @@ -52,7 +52,7 @@ this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale),this.matri THREE.Quaternion.prototype={set:function(b,c,e,f){this.x=b;this.y=c;this.z=e;this.w=f;return this},copy:function(b){this.x=b.x;this.y=b.y;this.z=b.z;this.w=b.w;return this},setFromEuler:function(b){var c=0.5*Math.PI/360,e=b.x*c,f=b.y*c,g=b.z*c,b=Math.cos(f),f=Math.sin(f),c=Math.cos(-g),g=Math.sin(-g),h=Math.cos(e),e=Math.sin(e),j=b*c,m=f*g;this.w=j*h-m*e;this.x=j*e+m*h;this.y=f*c*h+b*g*e;this.z=b*g*h-f*c*e;return this},setFromAxisAngle:function(b,c){var e=c/2,f=Math.sin(e);this.x=b.x*f;this.y=b.y* f;this.z=b.z*f;this.w=Math.cos(e);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 b=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);b==0?this.w=this.z=this.y=this.x=0:(b=1/b,this.x*=b,this.y*=b,this.z*=b,this.w*=b);return this}, multiplySelf:function(b){var c=this.x,e=this.y,f=this.z,g=this.w,h=b.x,j=b.y,m=b.z,b=b.w;this.x=c*b+g*h+e*m-f*j;this.y=e*b+g*j+f*h-c*m;this.z=f*b+g*m+c*j-e*h;this.w=g*b-c*h-e*j-f*m;return this},multiply:function(b,c){this.x=b.x*c.w+b.y*c.z-b.z*c.y+b.w*c.x;this.y=-b.x*c.z+b.y*c.w+b.z*c.x+b.w*c.y;this.z=b.x*c.y-b.y*c.x+b.z*c.w+b.w*c.z;this.w=-b.x*c.x-b.y*c.y-b.z*c.z+b.w*c.w;return this},multiplyVector3:function(b,c){c||(c=b);var e=b.x,f=b.y,g=b.z,h=this.x,j=this.y,m=this.z,n=this.w,p=n*e+j*g-m*f,o= -n*f+m*e-h*g,u=n*g+h*f-j*e,e=-h*e-j*f-m*g;c.x=p*n+e*-h+o*-m-u*-j;c.y=o*n+e*-j+u*-h-p*-m;c.z=u*n+e*-m+p*-j-o*-h;return c}}; +n*f+m*e-h*g,t=n*g+h*f-j*e,e=-h*e-j*f-m*g;c.x=p*n+e*-h+o*-m-t*-j;c.y=o*n+e*-j+t*-h-p*-m;c.z=t*n+e*-m+p*-j-o*-h;return c}}; THREE.Quaternion.slerp=function(b,c,e,f){var g=b.w*c.w+b.x*c.x+b.y*c.y+b.z*c.z;if(Math.abs(g)>=1)return e.w=b.w,e.x=b.x,e.y=b.y,e.z=b.z,e;var h=Math.acos(g),j=Math.sqrt(1-g*g);if(Math.abs(j)<0.0010)return e.w=0.5*(b.w+c.w),e.x=0.5*(b.x+c.x),e.y=0.5*(b.y+c.y),e.z=0.5*(b.z+c.z),e;g=Math.sin((1-f)*h)/j;f=Math.sin(f*h)/j;e.w=b.w*g+c.w*f;e.x=b.x*g+c.x*f;e.y=b.y*g+c.y*f;e.z=b.z*g+c.z*f;return e};THREE.Vertex=function(b){this.position=b||new THREE.Vector3}; THREE.Face3=function(b,c,e,f,g,h){this.a=b;this.b=c;this.c=e;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materials=h instanceof Array?h:[h];this.centroid=new THREE.Vector3}; THREE.Face4=function(b,c,e,f,g,h,j){this.a=b;this.b=c;this.c=e;this.d=f;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materials=j instanceof Array?j:[j];this.centroid=new THREE.Vector3};THREE.UV=function(b,c){this.set(b||0,c||0)}; @@ -61,15 +61,15 @@ THREE.Geometry.prototype={computeCentroids:function(){var b,c,e;b=0;for(c=this.f e.centroid.addSelf(this.vertices[e.d].position),e.centroid.divideScalar(4))},computeFaceNormals:function(b){var c,e,f,g,h,j,m=new THREE.Vector3,n=new THREE.Vector3;f=0;for(g=this.faces.length;f0){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 c=1,e=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=b.position.x;if(b.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=b.position.y;if(b.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=b.position.z}}},computeBoundingSphere:function(){for(var b=0,c=0,e=this.vertices.length;cthis.points.length-2?h:h+1;e[3]=h>this.points.length-3?h:h+2;p=this.points[e[0]];o=this.points[e[1]]; -u=this.points[e[2]];v=this.points[e[3]];m=j*j;n=j*m;f.x=c(p.x,o.x,u.x,v.x,j,m,n);f.y=c(p.y,o.y,u.y,v.y,j,m,n);f.z=c(p.z,o.z,u.z,v.z,j,m,n);return f};this.getControlPointsArray=function(){var b,e,c=this.points.length,f=[];for(b=0;bthis.points.length-2?h:h+1;e[3]=h>this.points.length-3?h:h+2;p=this.points[e[0]];o=this.points[e[1]]; +t=this.points[e[2]];u=this.points[e[3]];m=j*j;n=j*m;f.x=c(p.x,o.x,t.x,u.x,j,m,n);f.y=c(p.y,o.y,t.y,u.y,j,m,n);f.z=c(p.z,o.z,t.z,u.z,j,m,n);return f};this.getControlPointsArray=function(){var b,e,c=this.points.length,f=[];for(b=0;b1){b=e.matrixWorldInverse;b=-(b.n31*this.position.x+b.n32*this.position.y+b.n33*this.position.z+b.n34);this.LODs[0].object3D.visible=!0;for(var f=1;f=this.LODs[f].visibleAtDistance)this.LODs[f-1].object3D.visible=!1, this.LODs[f].object3D.visible=!0;else break;for(;fu&&(e=o,o=u,u=e):ow&&(e=v,v=w,w=e):vt&&(e=o,o=t,t=e):ov&&(e=u,u=v,v=e):u=0&&h>=0&&j>=0&&m>=0?!0:g<0&&h<0||j<0&&m<0?!1:(g<0?c=Math.max(c,g/(g-h)):h<0&&(f=Math.min(f,g/(g-h))),j<0?c=Math.max(c,j/(j-m)):m<0&&(f=Math.min(f,j/(j-m))),fU&&j.positionScreen.z0&&I.z<1))ka=C[H]=C[H]||new THREE.RenderableParticle,H++,A=ka,A.x=I.x/I.w,A.y=I.y/I.w,A.z=I.z,A.rotation=T.rotation.z,A.scale.x= -T.scale.x*Math.abs(A.x-(I.x+g.projectionMatrix.n11)/(I.w+g.projectionMatrix.n14)),A.scale.y=T.scale.y*Math.abs(A.y-(I.y+g.projectionMatrix.n22)/(I.w+g.projectionMatrix.n24)),A.materials=T.materials,E.push(A);h&&E.sort(c);return E}}; -THREE.DOMRenderer=function(){THREE.Renderer.call(this);var b=null,c=new THREE.Projector,e,f,g,h;this.domElement=document.createElement("div");this.setSize=function(b,c){e=b;f=c;g=e/2;h=f/2};this.render=function(e,f){var n,p,o,u,v,w,x,y;b=c.projectScene(e,f);n=0;for(p=b.length;n>1,aa=n.height>>1,k=h.scale.x*v,p=h.scale.y*w,j=k*o,m=p*aa,sa.set(b.x-j,b.y-m,b.x+j,b.y+m),ua.instersects(sa)&&(x.save(),x.translate(b.x,b.y),x.rotate(-h.rotation),x.scale(k,-p),x.translate(-o,-aa),x.drawImage(n,0,0),x.restore())}else k instanceof THREE.ParticleCanvasMaterial&&(j=h.scale.x*v,m=h.scale.y*w,sa.set(b.x-j,b.y-m,b.x+j,b.y+m),ua.instersects(sa)&&(f(k.color),g(k.color),x.save(),x.translate(b.x,b.y),x.rotate(-h.rotation),x.scale(j,m),k.program(x),x.restore()))}function A(b, -g,h,k){c(k.opacity);e(k.blending);x.beginPath();x.moveTo(b.positionScreen.x,b.positionScreen.y);x.lineTo(g.positionScreen.x,g.positionScreen.y);x.closePath();if(k instanceof THREE.LineBasicMaterial){b=k.linewidth;if(I!=b)x.lineWidth=I=b;b=k.linecap;if(J!=b)x.lineCap=J=b;b=k.linejoin;if(S!=b)x.lineJoin=S=b;f(k.color);x.stroke();sa.inflate(k.linewidth*2)}}function D(b,f,g,m,p,n,aa,u,v){j.data.vertices+=3;j.data.faces++;c(u.opacity);e(u.blending);Q=b.positionScreen.x;U=b.positionScreen.y;k=f.positionScreen.x; -ia=f.positionScreen.y;L=g.positionScreen.x;ga=g.positionScreen.y;C(Q,U,k,ia,L,ga);if(u instanceof THREE.MeshBasicMaterial)if(u.map)u.map.mapping instanceof THREE.UVMapping&&(na=aa.uvs[0],Ea(Q,U,k,ia,L,ga,u.map.image,na[m].u,na[m].v,na[p].u,na[p].v,na[n].u,na[n].v));else if(u.envMap){if(u.envMap.mapping instanceof THREE.SphericalReflectionMapping)b=h.matrixWorldInverse,la.copy(aa.vertexNormalsWorld[0]),qa=(la.x*b.n11+la.y*b.n12+la.z*b.n13)*0.5+0.5,ya=-(la.x*b.n21+la.y*b.n22+la.z*b.n23)*0.5+0.5,la.copy(aa.vertexNormalsWorld[1]), -Ca=(la.x*b.n11+la.y*b.n12+la.z*b.n13)*0.5+0.5,xa=-(la.x*b.n21+la.y*b.n22+la.z*b.n23)*0.5+0.5,la.copy(aa.vertexNormalsWorld[2]),Aa=(la.x*b.n11+la.y*b.n12+la.z*b.n13)*0.5+0.5,Oa=-(la.x*b.n21+la.y*b.n22+la.z*b.n23)*0.5+0.5,Ea(Q,U,k,ia,L,ga,u.envMap.image,qa,ya,Ca,xa,Aa,Oa)}else u.wireframe?E(u.color,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Ga(u.color);else if(u instanceof THREE.MeshLambertMaterial)u.map&&!u.wireframe&&(u.map.mapping instanceof THREE.UVMapping&&(na=aa.uvs[0],Ea(Q, -U,k,ia,L,ga,u.map.image,na[m].u,na[m].v,na[p].u,na[p].v,na[n].u,na[n].v)),e(THREE.SubtractiveBlending)),Da?!u.wireframe&&u.shading==THREE.SmoothShading&&aa.vertexNormalsWorld.length==3?(ka.r=ca.r=oa.r=O.r,ka.g=ca.g=oa.g=O.g,ka.b=ca.b=oa.b=O.b,o(v,aa.v1.positionWorld,aa.vertexNormalsWorld[0],ka),o(v,aa.v2.positionWorld,aa.vertexNormalsWorld[1],ca),o(v,aa.v3.positionWorld,aa.vertexNormalsWorld[2],oa),da.r=(ca.r+oa.r)*0.5,da.g=(ca.g+oa.g)*0.5,da.b=(ca.b+oa.b)*0.5,pa=Ua(ka,ca,oa,da),Ea(Q,U,k,ia,L,ga, -pa,0,0,1,0,0,1)):(ea.r=O.r,ea.g=O.g,ea.b=O.b,o(v,aa.centroidWorld,aa.normalWorld,ea),T.r=Math.max(0,Math.min(u.color.r*ea.r,1)),T.g=Math.max(0,Math.min(u.color.g*ea.g,1)),T.b=Math.max(0,Math.min(u.color.b*ea.b,1)),T.updateHex(),u.wireframe?E(T,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Ga(T)):u.wireframe?E(u.color,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Ga(u.color);else if(u instanceof THREE.MeshDepthMaterial)Y=h.near,Z=h.far,ka.r=ka.g=ka.b=1-Ka(b.positionScreen.z, -Y,Z),ca.r=ca.g=ca.b=1-Ka(f.positionScreen.z,Y,Z),oa.r=oa.g=oa.b=1-Ka(g.positionScreen.z,Y,Z),da.r=(ca.r+oa.r)*0.5,da.g=(ca.g+oa.g)*0.5,da.b=(ca.b+oa.b)*0.5,pa=Ua(ka,ca,oa,da),Ea(Q,U,k,ia,L,ga,pa,0,0,1,0,0,1);else if(u instanceof THREE.MeshNormalMaterial)T.r=Pa(aa.normalWorld.x),T.g=Pa(aa.normalWorld.y),T.b=Pa(aa.normalWorld.z),T.updateHex(),u.wireframe?E(T,u.wireframeLinewidth,u.wireframeLinecap,u.wireframeLinejoin):Ga(T)}function y(b,f,g,m,p,n,u,aa,v){j.data.vertices+=4;j.data.faces++;c(aa.opacity); -e(aa.blending);if(aa.map||aa.envMap)D(b,f,m,0,1,3,u,aa,v),D(p,g,n,1,2,3,u,aa,v);else if(Q=b.positionScreen.x,U=b.positionScreen.y,k=f.positionScreen.x,ia=f.positionScreen.y,L=g.positionScreen.x,ga=g.positionScreen.y,fa=m.positionScreen.x,$=m.positionScreen.y,ha=p.positionScreen.x,ja=p.positionScreen.y,ma=n.positionScreen.x,ra=n.positionScreen.y,aa instanceof THREE.MeshBasicMaterial)H(Q,U,k,ia,L,ga,fa,$),aa.wireframe?E(aa.color,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):Ga(aa.color); -else if(aa instanceof THREE.MeshLambertMaterial)Da?!aa.wireframe&&aa.shading==THREE.SmoothShading&&u.vertexNormalsWorld.length==4?(ka.r=ca.r=oa.r=da.r=O.r,ka.g=ca.g=oa.g=da.g=O.g,ka.b=ca.b=oa.b=da.b=O.b,o(v,u.v1.positionWorld,u.vertexNormalsWorld[0],ka),o(v,u.v2.positionWorld,u.vertexNormalsWorld[1],ca),o(v,u.v4.positionWorld,u.vertexNormalsWorld[3],oa),o(v,u.v3.positionWorld,u.vertexNormalsWorld[2],da),pa=Ua(ka,ca,oa,da),C(Q,U,k,ia,fa,$),Ea(Q,U,k,ia,fa,$,pa,0,0,1,0,0,1),C(ha,ja,L,ga,ma,ra),Ea(ha, -ja,L,ga,ma,ra,pa,1,0,1,1,0,1)):(ea.r=O.r,ea.g=O.g,ea.b=O.b,o(v,u.centroidWorld,u.normalWorld,ea),T.r=Math.max(0,Math.min(aa.color.r*ea.r,1)),T.g=Math.max(0,Math.min(aa.color.g*ea.g,1)),T.b=Math.max(0,Math.min(aa.color.b*ea.b,1)),T.updateHex(),H(Q,U,k,ia,L,ga,fa,$),aa.wireframe?E(T,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):Ga(T)):(H(Q,U,k,ia,L,ga,fa,$),aa.wireframe?E(aa.color,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):Ga(aa.color));else if(aa instanceof THREE.MeshNormalMaterial)T.r= -Pa(u.normalWorld.x),T.g=Pa(u.normalWorld.y),T.b=Pa(u.normalWorld.z),T.updateHex(),H(Q,U,k,ia,L,ga,fa,$),aa.wireframe?E(T,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):Ga(T);else if(aa instanceof THREE.MeshDepthMaterial)Y=h.near,Z=h.far,ka.r=ka.g=ka.b=1-Ka(b.positionScreen.z,Y,Z),ca.r=ca.g=ca.b=1-Ka(f.positionScreen.z,Y,Z),oa.r=oa.g=oa.b=1-Ka(m.positionScreen.z,Y,Z),da.r=da.g=da.b=1-Ka(g.positionScreen.z,Y,Z),pa=Ua(ka,ca,oa,da),C(Q,U,k,ia,fa,$),Ea(Q,U,k,ia,fa,$,pa,0,0,1,0,0,1),C(ha, -ja,L,ga,ma,ra),Ea(ha,ja,L,ga,ma,ra,pa,1,0,1,1,0,1)}function C(b,e,c,f,g,h){x.beginPath();x.moveTo(b,e);x.lineTo(c,f);x.lineTo(g,h);x.lineTo(b,e);x.closePath()}function H(b,e,c,f,g,h,k,j){x.beginPath();x.moveTo(b,e);x.lineTo(c,f);x.lineTo(g,h);x.lineTo(k,j);x.lineTo(b,e);x.closePath()}function E(b,e,c,g){if(I!=e)x.lineWidth=I=e;if(J!=c)x.lineCap=J=c;if(S!=g)x.lineJoin=S=g;f(b);x.stroke();sa.inflate(e*2)}function Ga(b){g(b);x.fill()}function Ea(b,e,c,f,g,h,k,j,m,p,n,aa,u){var o,v;o=k.width-1;v=k.height- -1;j*=o;m*=v;p*=o;n*=v;aa*=o;u*=v;c-=b;f-=e;g-=b;h-=e;p-=j;n-=m;aa-=j;u-=m;o=p*u-aa*n;if(!((o<0?-o:o)<1))v=1/o,o=(u*c-n*g)*v,n=(u*f-n*h)*v,c=(p*g-aa*c)*v,f=(p*h-aa*f)*v,b=b-o*j-c*m,e=e-n*j-f*m,x.save(),x.transform(o,n,c,f,b,e),x.clip(),x.drawImage(k,0,0),x.restore()}function Ua(b,e,c,f){var g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),k=~~(e.r*255),j=~~(e.g*255),e=~~(e.b*255),m=~~(c.r*255),p=~~(c.g*255),c=~~(c.b*255),n=~~(f.r*255),u=~~(f.g*255),f=~~(f.b*255);za[0]=g<0?0:g>255?255:g;za[1]=h<0?0:h>255? -255:h;za[2]=b<0?0:b>255?255:b;za[4]=k<0?0:k>255?255:k;za[5]=j<0?0:j>255?255:j;za[6]=e<0?0:e>255?255:e;za[8]=m<0?0:m>255?255:m;za[9]=p<0?0:p>255?255:p;za[10]=c<0?0:c>255?255:c;za[12]=n<0?0:n>255?255:n;za[13]=u<0?0:u>255?255:u;za[14]=f<0?0:f>255?255:f;Ra.putImageData(Xa,0,0);Ta.drawImage(aa,0,0);return Sa}function Ka(b,e,c){b=(b-e)/(c-e);return b*b*(3-2*b)}function Pa(b){b=(b+1)*0.5;return b<0?0:b>1?1:b}function Ha(b,e){var c=e.x-b.x,f=e.y-b.y,g=c*c+f*f;g!=0&&(g=1/Math.sqrt(g),c*=g,f*=g,e.x+=c,e.y+= -f,b.x-=c,b.y-=f)}var Va,G,M,B,Ia,Qa,Wa,va;this.autoClear?this.clear():x.setTransform(1,0,0,-1,v,w);j.data.vertices=0;j.data.faces=0;m=n.projectScene(b,h,this.sortElements);(Da=b.lights.length>0)&&p(b);Va=0;for(G=m.length;Va0&&(c.r+=h.color.r*k,c.g+=h.color.g*k,c.b+=h.color.b*k)):h instanceof THREE.PointLight&&(W.sub(h.position,e.centroidWorld),W.normalize(),k=e.normalWorld.dot(W)*h.intensity,k>0&&(c.r+=h.color.r*k,c.g+=h.color.g*k,c.b+=h.color.b*k))}function c(e,c,k,m,n,u){j.data.vertices+=3;j.data.faces++;Q=f(U++);Q.setAttribute("d", -"M "+e.positionScreen.x+" "+e.positionScreen.y+" L "+c.positionScreen.x+" "+c.positionScreen.y+" L "+k.positionScreen.x+","+k.positionScreen.y+"z");n instanceof THREE.MeshBasicMaterial?I.hex=n.color.hex:n instanceof THREE.MeshLambertMaterial?E?(J.r=S.r,J.g=S.g,J.b=S.b,b(u,m,J),I.r=Math.max(0,Math.min(n.color.r*J.r,1)),I.g=Math.max(0,Math.min(n.color.g*J.g,1)),I.b=Math.max(0,Math.min(n.color.b*J.b,1)),I.updateHex()):I.hex=n.color.hex:n instanceof THREE.MeshDepthMaterial?(F=1-n.__2near/(n.__farPlusNear- -m.z*n.__farMinusNear),I.setRGB(F,F,F)):n instanceof THREE.MeshNormalMaterial&&I.setRGB(g(m.normalWorld.x),g(m.normalWorld.y),g(m.normalWorld.z));n.wireframe?Q.setAttribute("style","fill: none; stroke: #"+h(I.hex.toString(16))+"; stroke-width: "+n.wireframeLinewidth+"; stroke-opacity: "+n.opacity+"; stroke-linecap: "+n.wireframeLinecap+"; stroke-linejoin: "+n.wireframeLinejoin):Q.setAttribute("style","fill: #"+h(I.hex.toString(16))+"; fill-opacity: "+n.opacity);p.appendChild(Q)}function e(e,c,k,m, -n,u,o){j.data.vertices+=4;j.data.faces++;Q=f(U++);Q.setAttribute("d","M "+e.positionScreen.x+" "+e.positionScreen.y+" L "+c.positionScreen.x+" "+c.positionScreen.y+" L "+k.positionScreen.x+","+k.positionScreen.y+" L "+m.positionScreen.x+","+m.positionScreen.y+"z");u instanceof THREE.MeshBasicMaterial?I.hex=u.color.hex:u instanceof THREE.MeshLambertMaterial?E?(J.r=S.r,J.g=S.g,J.b=S.b,b(o,n,J),I.r=Math.max(0,Math.min(u.color.r*J.r,1)),I.g=Math.max(0,Math.min(u.color.g*J.g,1)),I.b=Math.max(0,Math.min(u.color.b* -J.b,1)),I.updateHex()):I.hex=u.color.hex:u instanceof THREE.MeshDepthMaterial?(F=1-u.__2near/(u.__farPlusNear-n.z*u.__farMinusNear),I.setRGB(F,F,F)):u instanceof THREE.MeshNormalMaterial&&I.setRGB(g(n.normalWorld.x),g(n.normalWorld.y),g(n.normalWorld.z));u.wireframe?Q.setAttribute("style","fill: none; stroke: #"+h(I.hex.toString(16))+"; stroke-width: "+u.wireframeLinewidth+"; stroke-opacity: "+u.opacity+"; stroke-linecap: "+u.wireframeLinecap+"; stroke-linejoin: "+u.wireframeLinejoin):Q.setAttribute("style", -"fill: #"+h(I.hex.toString(16))+"; fill-opacity: "+u.opacity);p.appendChild(Q)}function f(b){K[b]==null&&(K[b]=document.createElementNS("http://www.w3.org/2000/svg","path"),ia==0&&K[b].setAttribute("shape-rendering","crispEdges"));return K[b]}function g(b){b=(b+1)*0.5;return b<0?0:b>1?1:b}function h(b){for(;b.length<6;)b="0"+b;return b}var j=this,m=null,n=new THREE.Projector,p=document.createElementNS("http://www.w3.org/2000/svg","svg"),o,u,v,w,x,y,D,A,H=new THREE.Rectangle,C=new THREE.Rectangle, -E=!1,I=new THREE.Color(16777215),J=new THREE.Color(16777215),S=new THREE.Color(0),R=new THREE.Color(0),N=new THREE.Color(0),F,W=new THREE.Vector3,K=[],X=[],Q,U,k,ia=1;this.domElement=p;this.sortElements=this.sortObjects=this.autoClear=!0;this.data={vertices:0,faces:0};this.setQuality=function(b){switch(b){case "high":ia=1;break;case "low":ia=0}};this.setSize=function(b,e){o=b;u=e;v=o/2;w=u/2;p.setAttribute("viewBox",-v+" "+-w+" "+o+" "+u);p.setAttribute("width",o);p.setAttribute("height",u);H.set(-v, --w,v,w)};this.clear=function(){for(;p.childNodes.length>0;)p.removeChild(p.childNodes[0])};this.render=function(b,f){var g,u,o,I,J,F,T,K;this.autoClear&&this.clear();j.data.vertices=0;j.data.faces=0;m=n.projectScene(b,f,this.sortElements);k=U=0;if(E=b.lights.length>0){T=b.lights;S.setRGB(0,0,0);R.setRGB(0,0,0);N.setRGB(0,0,0);g=0;for(u=T.length;g=0&&h>=0&&j>=0&&m>=0?!0:g<0&&h<0||j<0&&m<0?!1:(g<0?c=Math.max(c,g/(g-h)):h<0&&(f=Math.min(f,g/(g-h))),j<0?c=Math.max(c,j/(j-m)):m<0&&(f=Math.min(f,j/(j-m))),fS&&j.positionScreen.z0&&G.z<1))ha=C[F]=C[F]||new THREE.RenderableParticle,F++,y=ha,y.x=G.x/G.w,y.y=G.y/G.w,y.z=G.z,y.rotation=R.rotation.z,y.scale.x= +R.scale.x*Math.abs(y.x-(G.x+g.projectionMatrix.n11)/(G.w+g.projectionMatrix.n14)),y.scale.y=R.scale.y*Math.abs(y.y-(G.y+g.projectionMatrix.n22)/(G.w+g.projectionMatrix.n24)),y.materials=R.materials,E.push(y);h&&E.sort(c);return E}}; +THREE.DOMRenderer=function(){THREE.Renderer.call(this);var b=null,c=new THREE.Projector,e,f,g,h;this.domElement=document.createElement("div");this.setSize=function(b,c){e=b;f=c;g=e/2;h=f/2};this.render=function(e,f){var n,p,o,t,u,v,w,z;b=c.projectScene(e,f);n=0;for(p=b.length;n>1,Z=n.height>>1,k=h.scale.x*u,p=h.scale.y*v,j=k*o,m=p*Z,qa.set(b.x-j,b.y-m,b.x+j,b.y+m),sa.instersects(qa)&&(w.save(),w.translate(b.x,b.y),w.rotate(-h.rotation),w.scale(k,-p),w.translate(-o,-Z),w.drawImage(n,0,0),w.restore())}else k instanceof THREE.ParticleCanvasMaterial&&(j=h.scale.x*u,m=h.scale.y*v,qa.set(b.x-j,b.y-m,b.x+j,b.y+m),sa.instersects(qa)&&(f(k.color),g(k.color),w.save(),w.translate(b.x,b.y),w.rotate(-h.rotation),w.scale(j,m),k.program(w),w.restore()))}function y(b,g,h,k){c(k.opacity); +e(k.blending);w.beginPath();w.moveTo(b.positionScreen.x,b.positionScreen.y);w.lineTo(g.positionScreen.x,g.positionScreen.y);w.closePath();if(k instanceof THREE.LineBasicMaterial){b=k.linewidth;if(G!=b)w.lineWidth=G=b;b=k.linecap;if(B!=b)w.lineCap=B=b;b=k.linejoin;if(P!=b)w.lineJoin=P=b;f(k.color);w.stroke();qa.inflate(k.linewidth*2)}}function z(b,f,g,m,p,n,Z,t,u){j.data.vertices+=3;j.data.faces++;c(t.opacity);e(t.blending);K=b.positionScreen.x;S=b.positionScreen.y;k=f.positionScreen.x;V=f.positionScreen.y; +O=g.positionScreen.x;fa=g.positionScreen.y;C(K,S,k,V,O,fa);if(t instanceof THREE.MeshBasicMaterial)if(t.map)t.map.mapping instanceof THREE.UVMapping&&(la=Z.uvs[0],Ca(K,S,k,V,O,fa,t.map.image,la[m].u,la[m].v,la[p].u,la[p].v,la[n].u,la[n].v));else if(t.envMap){if(t.envMap.mapping instanceof THREE.SphericalReflectionMapping)b=h.matrixWorldInverse,ja.copy(Z.vertexNormalsWorld[0]),oa=(ja.x*b.n11+ja.y*b.n12+ja.z*b.n13)*0.5+0.5,wa=-(ja.x*b.n21+ja.y*b.n22+ja.z*b.n23)*0.5+0.5,ja.copy(Z.vertexNormalsWorld[1]), +Aa=(ja.x*b.n11+ja.y*b.n12+ja.z*b.n13)*0.5+0.5,va=-(ja.x*b.n21+ja.y*b.n22+ja.z*b.n23)*0.5+0.5,ja.copy(Z.vertexNormalsWorld[2]),ya=(ja.x*b.n11+ja.y*b.n12+ja.z*b.n13)*0.5+0.5,Ma=-(ja.x*b.n21+ja.y*b.n22+ja.z*b.n23)*0.5+0.5,Ca(K,S,k,V,O,fa,t.envMap.image,oa,wa,Aa,va,ya,Ma)}else t.wireframe?E(t.color,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):Ea(t.color);else if(t instanceof THREE.MeshLambertMaterial)t.map&&!t.wireframe&&(t.map.mapping instanceof THREE.UVMapping&&(la=Z.uvs[0],Ca(K,S,k, +V,O,fa,t.map.image,la[m].u,la[m].v,la[p].u,la[p].v,la[n].u,la[n].v)),e(THREE.SubtractiveBlending)),Ba?!t.wireframe&&t.shading==THREE.SmoothShading&&Z.vertexNormalsWorld.length==3?(ha.r=$.r=ma.r=M.r,ha.g=$.g=ma.g=M.g,ha.b=$.b=ma.b=M.b,o(u,Z.v1.positionWorld,Z.vertexNormalsWorld[0],ha),o(u,Z.v2.positionWorld,Z.vertexNormalsWorld[1],$),o(u,Z.v3.positionWorld,Z.vertexNormalsWorld[2],ma),aa.r=($.r+ma.r)*0.5,aa.g=($.g+ma.g)*0.5,aa.b=($.b+ma.b)*0.5,na=Sa(ha,$,ma,aa),Ca(K,S,k,V,O,fa,na,0,0,1,0,0,1)):(ca.r= +M.r,ca.g=M.g,ca.b=M.b,o(u,Z.centroidWorld,Z.normalWorld,ca),R.r=Math.max(0,Math.min(t.color.r*ca.r,1)),R.g=Math.max(0,Math.min(t.color.g*ca.g,1)),R.b=Math.max(0,Math.min(t.color.b*ca.b,1)),R.updateHex(),t.wireframe?E(R,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):Ea(R)):t.wireframe?E(t.color,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):Ea(t.color);else if(t instanceof THREE.MeshDepthMaterial)ia=h.near,X=h.far,ha.r=ha.g=ha.b=1-Ia(b.positionScreen.z,ia,X),$.r=$.g=$.b= +1-Ia(f.positionScreen.z,ia,X),ma.r=ma.g=ma.b=1-Ia(g.positionScreen.z,ia,X),aa.r=($.r+ma.r)*0.5,aa.g=($.g+ma.g)*0.5,aa.b=($.b+ma.b)*0.5,na=Sa(ha,$,ma,aa),Ca(K,S,k,V,O,fa,na,0,0,1,0,0,1);else if(t instanceof THREE.MeshNormalMaterial)R.r=Na(Z.normalWorld.x),R.g=Na(Z.normalWorld.y),R.b=Na(Z.normalWorld.z),R.updateHex(),t.wireframe?E(R,t.wireframeLinewidth,t.wireframeLinecap,t.wireframeLinejoin):Ea(R)}function x(b,f,g,m,p,n,t,Z,u){j.data.vertices+=4;j.data.faces++;c(Z.opacity);e(Z.blending);if(Z.map|| +Z.envMap)z(b,f,m,0,1,3,t,Z,u),z(p,g,n,1,2,3,t,Z,u);else if(K=b.positionScreen.x,S=b.positionScreen.y,k=f.positionScreen.x,V=f.positionScreen.y,O=g.positionScreen.x,fa=g.positionScreen.y,ea=m.positionScreen.x,W=m.positionScreen.y,da=p.positionScreen.x,ga=p.positionScreen.y,ka=n.positionScreen.x,pa=n.positionScreen.y,Z instanceof THREE.MeshBasicMaterial)F(K,S,k,V,O,fa,ea,W),Z.wireframe?E(Z.color,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):Ea(Z.color);else if(Z instanceof THREE.MeshLambertMaterial)Ba? +!Z.wireframe&&Z.shading==THREE.SmoothShading&&t.vertexNormalsWorld.length==4?(ha.r=$.r=ma.r=aa.r=M.r,ha.g=$.g=ma.g=aa.g=M.g,ha.b=$.b=ma.b=aa.b=M.b,o(u,t.v1.positionWorld,t.vertexNormalsWorld[0],ha),o(u,t.v2.positionWorld,t.vertexNormalsWorld[1],$),o(u,t.v4.positionWorld,t.vertexNormalsWorld[3],ma),o(u,t.v3.positionWorld,t.vertexNormalsWorld[2],aa),na=Sa(ha,$,ma,aa),C(K,S,k,V,ea,W),Ca(K,S,k,V,ea,W,na,0,0,1,0,0,1),C(da,ga,O,fa,ka,pa),Ca(da,ga,O,fa,ka,pa,na,1,0,1,1,0,1)):(ca.r=M.r,ca.g=M.g,ca.b=M.b, +o(u,t.centroidWorld,t.normalWorld,ca),R.r=Math.max(0,Math.min(Z.color.r*ca.r,1)),R.g=Math.max(0,Math.min(Z.color.g*ca.g,1)),R.b=Math.max(0,Math.min(Z.color.b*ca.b,1)),R.updateHex(),F(K,S,k,V,O,fa,ea,W),Z.wireframe?E(R,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):Ea(R)):(F(K,S,k,V,O,fa,ea,W),Z.wireframe?E(Z.color,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):Ea(Z.color));else if(Z instanceof THREE.MeshNormalMaterial)R.r=Na(t.normalWorld.x),R.g=Na(t.normalWorld.y),R.b= +Na(t.normalWorld.z),R.updateHex(),F(K,S,k,V,O,fa,ea,W),Z.wireframe?E(R,Z.wireframeLinewidth,Z.wireframeLinecap,Z.wireframeLinejoin):Ea(R);else if(Z instanceof THREE.MeshDepthMaterial)ia=h.near,X=h.far,ha.r=ha.g=ha.b=1-Ia(b.positionScreen.z,ia,X),$.r=$.g=$.b=1-Ia(f.positionScreen.z,ia,X),ma.r=ma.g=ma.b=1-Ia(m.positionScreen.z,ia,X),aa.r=aa.g=aa.b=1-Ia(g.positionScreen.z,ia,X),na=Sa(ha,$,ma,aa),C(K,S,k,V,ea,W),Ca(K,S,k,V,ea,W,na,0,0,1,0,0,1),C(da,ga,O,fa,ka,pa),Ca(da,ga,O,fa,ka,pa,na,1,0,1,1,0,1)}function C(b, +e,c,f,g,h){w.beginPath();w.moveTo(b,e);w.lineTo(c,f);w.lineTo(g,h);w.lineTo(b,e);w.closePath()}function F(b,e,c,f,g,h,k,j){w.beginPath();w.moveTo(b,e);w.lineTo(c,f);w.lineTo(g,h);w.lineTo(k,j);w.lineTo(b,e);w.closePath()}function E(b,e,c,g){if(G!=e)w.lineWidth=G=e;if(B!=c)w.lineCap=B=c;if(P!=g)w.lineJoin=P=g;f(b);w.stroke();qa.inflate(e*2)}function Ea(b){g(b);w.fill()}function Ca(b,e,c,f,g,h,k,j,m,p,n,Z,t){var o,u;o=k.width-1;u=k.height-1;j*=o;m*=u;p*=o;n*=u;Z*=o;t*=u;c-=b;f-=e;g-=b;h-=e;p-=j;n-= +m;Z-=j;t-=m;o=p*t-Z*n;if(!((o<0?-o:o)<1))u=1/o,o=(t*c-n*g)*u,n=(t*f-n*h)*u,c=(p*g-Z*c)*u,f=(p*h-Z*f)*u,b=b-o*j-c*m,e=e-n*j-f*m,w.save(),w.transform(o,n,c,f,b,e),w.clip(),w.drawImage(k,0,0),w.restore()}function Sa(b,e,c,f){var g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),k=~~(e.r*255),j=~~(e.g*255),e=~~(e.b*255),m=~~(c.r*255),p=~~(c.g*255),c=~~(c.b*255),n=~~(f.r*255),t=~~(f.g*255),f=~~(f.b*255);xa[0]=g<0?0:g>255?255:g;xa[1]=h<0?0:h>255?255:h;xa[2]=b<0?0:b>255?255:b;xa[4]=k<0?0:k>255?255:k;xa[5]=j<0?0: +j>255?255:j;xa[6]=e<0?0:e>255?255:e;xa[8]=m<0?0:m>255?255:m;xa[9]=p<0?0:p>255?255:p;xa[10]=c<0?0:c>255?255:c;xa[12]=n<0?0:n>255?255:n;xa[13]=t<0?0:t>255?255:t;xa[14]=f<0?0:f>255?255:f;Pa.putImageData(Va,0,0);Ra.drawImage(Z,0,0);return Qa}function Ia(b,e,c){b=(b-e)/(c-e);return b*b*(3-2*b)}function Na(b){b=(b+1)*0.5;return b<0?0:b>1?1:b}function Fa(b,e){var c=e.x-b.x,f=e.y-b.y,g=c*c+f*f;g!=0&&(g=1/Math.sqrt(g),c*=g,f*=g,e.x+=c,e.y+=f,b.x-=c,b.y-=f)}var Ta,D,L,A,Ga,Oa,Ua,ta;this.autoClear?this.clear(): +w.setTransform(1,0,0,-1,u,v);j.data.vertices=0;j.data.faces=0;m=n.projectScene(b,h,this.sortElements);(Ba=b.lights.length>0)&&p(b);Ta=0;for(D=m.length;Ta0&&(c.r+=h.color.r*k,c.g+=h.color.g*k,c.b+=h.color.b*k)):h instanceof THREE.PointLight&&(U.sub(h.position,e.centroidWorld),U.normalize(),k=e.normalWorld.dot(U)*h.intensity,k>0&&(c.r+=h.color.r*k,c.g+=h.color.g*k,c.b+=h.color.b*k))}function c(e,c,k,m,n,t){j.data.vertices+=3;j.data.faces++;K=f(S++);K.setAttribute("d", +"M "+e.positionScreen.x+" "+e.positionScreen.y+" L "+c.positionScreen.x+" "+c.positionScreen.y+" L "+k.positionScreen.x+","+k.positionScreen.y+"z");n instanceof THREE.MeshBasicMaterial?G.hex=n.color.hex:n instanceof THREE.MeshLambertMaterial?E?(B.r=P.r,B.g=P.g,B.b=P.b,b(t,m,B),G.r=Math.max(0,Math.min(n.color.r*B.r,1)),G.g=Math.max(0,Math.min(n.color.g*B.g,1)),G.b=Math.max(0,Math.min(n.color.b*B.b,1)),G.updateHex()):G.hex=n.color.hex:n instanceof THREE.MeshDepthMaterial?(T=1-n.__2near/(n.__farPlusNear- +m.z*n.__farMinusNear),G.setRGB(T,T,T)):n instanceof THREE.MeshNormalMaterial&&G.setRGB(g(m.normalWorld.x),g(m.normalWorld.y),g(m.normalWorld.z));n.wireframe?K.setAttribute("style","fill: none; stroke: #"+h(G.hex.toString(16))+"; stroke-width: "+n.wireframeLinewidth+"; stroke-opacity: "+n.opacity+"; stroke-linecap: "+n.wireframeLinecap+"; stroke-linejoin: "+n.wireframeLinejoin):K.setAttribute("style","fill: #"+h(G.hex.toString(16))+"; fill-opacity: "+n.opacity);p.appendChild(K)}function e(e,c,k,m, +n,t,o){j.data.vertices+=4;j.data.faces++;K=f(S++);K.setAttribute("d","M "+e.positionScreen.x+" "+e.positionScreen.y+" L "+c.positionScreen.x+" "+c.positionScreen.y+" L "+k.positionScreen.x+","+k.positionScreen.y+" L "+m.positionScreen.x+","+m.positionScreen.y+"z");t instanceof THREE.MeshBasicMaterial?G.hex=t.color.hex:t instanceof THREE.MeshLambertMaterial?E?(B.r=P.r,B.g=P.g,B.b=P.b,b(o,n,B),G.r=Math.max(0,Math.min(t.color.r*B.r,1)),G.g=Math.max(0,Math.min(t.color.g*B.g,1)),G.b=Math.max(0,Math.min(t.color.b* +B.b,1)),G.updateHex()):G.hex=t.color.hex:t instanceof THREE.MeshDepthMaterial?(T=1-t.__2near/(t.__farPlusNear-n.z*t.__farMinusNear),G.setRGB(T,T,T)):t instanceof THREE.MeshNormalMaterial&&G.setRGB(g(n.normalWorld.x),g(n.normalWorld.y),g(n.normalWorld.z));t.wireframe?K.setAttribute("style","fill: none; stroke: #"+h(G.hex.toString(16))+"; stroke-width: "+t.wireframeLinewidth+"; stroke-opacity: "+t.opacity+"; stroke-linecap: "+t.wireframeLinecap+"; stroke-linejoin: "+t.wireframeLinejoin):K.setAttribute("style", +"fill: #"+h(G.hex.toString(16))+"; fill-opacity: "+t.opacity);p.appendChild(K)}function f(b){J[b]==null&&(J[b]=document.createElementNS("http://www.w3.org/2000/svg","path"),V==0&&J[b].setAttribute("shape-rendering","crispEdges"));return J[b]}function g(b){b=(b+1)*0.5;return b<0?0:b>1?1:b}function h(b){for(;b.length<6;)b="0"+b;return b}var j=this,m=null,n=new THREE.Projector,p=document.createElementNS("http://www.w3.org/2000/svg","svg"),o,t,u,v,w,z,x,y,F=new THREE.Rectangle,C=new THREE.Rectangle,E= +!1,G=new THREE.Color(16777215),B=new THREE.Color(16777215),P=new THREE.Color(0),I=new THREE.Color(0),H=new THREE.Color(0),T,U=new THREE.Vector3,J=[],Y=[],K,S,k,V=1;this.domElement=p;this.sortElements=this.sortObjects=this.autoClear=!0;this.data={vertices:0,faces:0};this.setQuality=function(b){switch(b){case "high":V=1;break;case "low":V=0}};this.setSize=function(b,e){o=b;t=e;u=o/2;v=t/2;p.setAttribute("viewBox",-u+" "+-v+" "+o+" "+t);p.setAttribute("width",o);p.setAttribute("height",t);F.set(-u,-v, +u,v)};this.clear=function(){for(;p.childNodes.length>0;)p.removeChild(p.childNodes[0])};this.render=function(b,f){var g,t,o,B,G,T,R,J;this.autoClear&&this.clear();j.data.vertices=0;j.data.faces=0;m=n.projectScene(b,f,this.sortElements);k=S=0;if(E=b.lights.length>0){R=b.lights;P.setRGB(0,0,0);I.setRGB(0,0,0);H.setRGB(0,0,0);g=0;for(t=R.length;g=0)k.bindBuffer(k.ARRAY_BUFFER, -h.__webglVertexBuffer),k.vertexAttribPointer(b.position,3,k.FLOAT,!1,0,0);else{c=g.program.attributes;j.morphTargetBase!==-1?(k.bindBuffer(k.ARRAY_BUFFER,h.__webglMorphTargetsBuffers[j.morphTargetBase]),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0)):c.position>=0&&(k.bindBuffer(k.ARRAY_BUFFER,h.__webglVertexBuffer),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0));if(j.morphTargetForcedOrder.length)for(var f=0,u=j.morphTargetForcedOrder,n=j.morphTargetInfluences;fp&&(o=v,p=n[o]);k.bindBuffer(k.ARRAY_BUFFER,h.__webglMorphTargetsBuffers[o]);k.vertexAttribPointer(c["morphTarget"+f],3,k.FLOAT,!1,0,0);j.__webglMorphTargetInfluences[f]= -p;u[o]=1;p=-1;f++}}g.program.uniforms.morphTargetInfluences!==null&&k.uniform1fv(g.program.uniforms.morphTargetInfluences,j.__webglMorphTargetInfluences)}if(h.__webglCustomAttributes)for(m in h.__webglCustomAttributes)b[m]>=0&&(c=h.__webglCustomAttributes[m],k.bindBuffer(k.ARRAY_BUFFER,c.buffer),k.vertexAttribPointer(b[m],c.size,k.FLOAT,!1,0,0));b.color>=0&&(k.bindBuffer(k.ARRAY_BUFFER,h.__webglColorBuffer),k.vertexAttribPointer(b.color,3,k.FLOAT,!1,0,0));b.normal>=0&&(k.bindBuffer(k.ARRAY_BUFFER, +f.envMap,m.reflectivity.value=f.reflectivity,m.refractionRatio.value=f.refractionRatio,m.combine.value=f.combine,m.useRefract.value=f.envMap&&f.envMap.mapping instanceof THREE.CubeRefractionMapping;if(f instanceof THREE.LineBasicMaterial)m.diffuse.value=f.color,m.opacity.value=f.opacity;else if(f instanceof THREE.ParticleBasicMaterial)m.psColor.value=f.color,m.opacity.value=f.opacity,m.size.value=f.size,m.scale.value=va.height/2,m.map.texture=f.map;else if(f instanceof THREE.MeshPhongMaterial)m.ambient.value= +f.ambient,m.specular.value=f.specular,m.shininess.value=f.shininess;else if(f instanceof THREE.MeshDepthMaterial)m.mNear.value=b.near,m.mFar.value=b.far,m.opacity.value=f.opacity;else if(f instanceof THREE.MeshNormalMaterial)m.opacity.value=f.opacity;for(var L in m)if(o=h.uniforms[L])if(t=m[L],p=t.type,c=t.value,p=="i")k.uniform1i(o,c);else if(p=="f")k.uniform1f(o,c);else if(p=="fv1")k.uniform1fv(o,c);else if(p=="fv")k.uniform3fv(o,c);else if(p=="v2")k.uniform2f(o,c.x,c.y);else if(p=="v3")k.uniform3f(o, +c.x,c.y,c.z);else if(p=="v4")k.uniform4f(o,c.x,c.y,c.z,c.w);else if(p=="c")k.uniform3f(o,c.r,c.g,c.b);else if(p=="t"&&(k.uniform1i(o,c),t=t.texture))if(t.image instanceof Array&&t.image.length==6){if(t.image.length==6){if(t.needsUpdate){if(t.__webglInit){k.bindTexture(k.TEXTURE_CUBE_MAP,t.image.__webglTextureCube);for(p=0;p<6;++p)k.texSubImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+p,0,0,0,k.RGBA,k.UNSIGNED_BYTE,t.image[p])}else{t.image.__webglTextureCube=k.createTexture();k.bindTexture(k.TEXTURE_CUBE_MAP, +t.image.__webglTextureCube);for(p=0;p<6;++p)k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+p,0,k.RGBA,k.RGBA,k.UNSIGNED_BYTE,t.image[p]);t.__webglInit=!0}H(k.TEXTURE_CUBE_MAP,t,t.image[0]);k.bindTexture(k.TEXTURE_CUBE_MAP,null);t.needsUpdate=!1}k.activeTexture(k.TEXTURE0+c);k.bindTexture(k.TEXTURE_CUBE_MAP,t.image.__webglTextureCube)}}else T(t,c);k.uniformMatrix4fv(j.modelViewMatrix,!1,g._modelViewMatrixArray);k.uniformMatrix3fv(j.normalMatrix,!1,g._normalMatrixArray);(f instanceof THREE.MeshShaderMaterial|| +f instanceof THREE.MeshPhongMaterial||f.envMap)&&j.cameraPosition!==null&&k.uniform3f(j.cameraPosition,b.position.x,b.position.y,b.position.z);(f instanceof THREE.MeshShaderMaterial||f.envMap||f.skinning)&&j.objectMatrix!==null&&k.uniformMatrix4fv(j.objectMatrix,!1,g._objectMatrixArray);(f instanceof THREE.MeshPhongMaterial||f instanceof THREE.MeshLambertMaterial||f instanceof THREE.MeshShaderMaterial||f.skinning)&&j.viewMatrix!==null&&k.uniformMatrix4fv(j.viewMatrix,!1,oa);if(f instanceof THREE.ShadowVolumeDynamicMaterial)b= +m.directionalLightDirection.value,b[0]=-e[1].position.x,b[1]=-e[1].position.y,b[2]=-e[1].position.z,k.uniform3fv(j.directionalLightDirection,b),k.uniformMatrix4fv(j.objectMatrix,!1,g._objectMatrixArray),k.uniformMatrix4fv(j.viewMatrix,!1,oa);f.skinning&&(k.uniformMatrix4fv(j.cameraInverseMatrix,!1,oa),k.uniformMatrix4fv(j.boneGlobalMatrices,!1,g.boneMatrices));return h}function f(b,c,f,g,h,j){if(g.opacity!=0){var m,b=e(b,c,f,g,j).attributes;if(!g.morphTargets&&b.position>=0)k.bindBuffer(k.ARRAY_BUFFER, +h.__webglVertexBuffer),k.vertexAttribPointer(b.position,3,k.FLOAT,!1,0,0);else{c=g.program.attributes;j.morphTargetBase!==-1?(k.bindBuffer(k.ARRAY_BUFFER,h.__webglMorphTargetsBuffers[j.morphTargetBase]),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0)):c.position>=0&&(k.bindBuffer(k.ARRAY_BUFFER,h.__webglVertexBuffer),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0));if(j.morphTargetForcedOrder.length)for(var f=0,t=j.morphTargetForcedOrder,n=j.morphTargetInfluences;fp&&(o=u,p=n[o]);k.bindBuffer(k.ARRAY_BUFFER,h.__webglMorphTargetsBuffers[o]);k.vertexAttribPointer(c["morphTarget"+f],3,k.FLOAT,!1,0,0);j.__webglMorphTargetInfluences[f]= +p;t[o]=1;p=-1;f++}}g.program.uniforms.morphTargetInfluences!==null&&k.uniform1fv(g.program.uniforms.morphTargetInfluences,j.__webglMorphTargetInfluences)}if(h.__webglCustomAttributes)for(m in h.__webglCustomAttributes)b[m]>=0&&(c=h.__webglCustomAttributes[m],k.bindBuffer(k.ARRAY_BUFFER,c.buffer),k.vertexAttribPointer(b[m],c.size,k.FLOAT,!1,0,0));b.color>=0&&(k.bindBuffer(k.ARRAY_BUFFER,h.__webglColorBuffer),k.vertexAttribPointer(b.color,3,k.FLOAT,!1,0,0));b.normal>=0&&(k.bindBuffer(k.ARRAY_BUFFER, h.__webglNormalBuffer),k.vertexAttribPointer(b.normal,3,k.FLOAT,!1,0,0));b.tangent>=0&&(k.bindBuffer(k.ARRAY_BUFFER,h.__webglTangentBuffer),k.vertexAttribPointer(b.tangent,4,k.FLOAT,!1,0,0));b.uv>=0&&(h.__webglUVBuffer?(k.bindBuffer(k.ARRAY_BUFFER,h.__webglUVBuffer),k.vertexAttribPointer(b.uv,2,k.FLOAT,!1,0,0),k.enableVertexAttribArray(b.uv)):k.disableVertexAttribArray(b.uv));b.uv2>=0&&(h.__webglUV2Buffer?(k.bindBuffer(k.ARRAY_BUFFER,h.__webglUV2Buffer),k.vertexAttribPointer(b.uv2,2,k.FLOAT,!1,0, 0),k.enableVertexAttribArray(b.uv2)):k.disableVertexAttribArray(b.uv2));g.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0&&(k.bindBuffer(k.ARRAY_BUFFER,h.__webglSkinVertexABuffer),k.vertexAttribPointer(b.skinVertexA,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,h.__webglSkinVertexBBuffer),k.vertexAttribPointer(b.skinVertexB,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,h.__webglSkinIndicesBuffer),k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER, -h.__webglSkinWeightsBuffer),k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,!1,0,0));j instanceof THREE.Mesh?(g.wireframe?(k.lineWidth(g.wireframeLinewidth),k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,h.__webglLineBuffer),k.drawElements(k.LINES,h.__webglLineCount,k.UNSIGNED_SHORT,0)):(k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,h.__webglFaceBuffer),k.drawElements(k.TRIANGLES,h.__webglFaceCount,k.UNSIGNED_SHORT,0)),U.data.vertices+=h.__webglFaceCount,U.data.faces+=h.__webglFaceCount/3,U.data.drawCalls++):j instanceof -THREE.Line?(j=j.type==THREE.LineStrip?k.LINE_STRIP:k.LINES,k.lineWidth(g.linewidth),k.drawArrays(j,0,h.__webglLineCount),U.data.drawCalls++):j instanceof THREE.ParticleSystem?(k.drawArrays(k.POINTS,0,h.__webglParticleCount),U.data.drawCalls++):j instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,h.__webglVertexCount),U.data.drawCalls++)}}function g(b,e,c){if(!b.__webglVertexBuffer)b.__webglVertexBuffer=k.createBuffer();if(!b.__webglNormalBuffer)b.__webglNormalBuffer=k.createBuffer();b.hasPos&& -(k.bindBuffer(k.ARRAY_BUFFER,b.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,b.positionArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(e.attributes.position),k.vertexAttribPointer(e.attributes.position,3,k.FLOAT,!1,0,0));if(b.hasNormal){k.bindBuffer(k.ARRAY_BUFFER,b.__webglNormalBuffer);if(c==THREE.FlatShading){var f,h,g,j,m,u,n,p,o,v,w=b.count*3;for(v=0;v0&&A[0]0&&A[1]0.0010&&m.scale>0.0010)x[0]=m.x,x[1]=m.y, -x[2]=m.z,v=m.size*m.scale/Y,w[0]=v*n,w[1]=v,k.uniform3fv(y.screenPosition,x),k.uniform2fv(y.scale,w),k.uniform1f(y.rotation,m.rotation),k.uniform1f(y.opacity,m.opacity),R(m.blending),F(m.texture,1),k.drawElements(k.TRIANGLES,6,k.UNSIGNED_SHORT,0)}k.enable(k.CULL_FACE);k.enable(k.DEPTH_TEST);k.depthMask(fa)}function A(b,e){b._modelViewMatrix.multiplyToArray(e.matrixWorldInverse,b.matrixWorld,b._modelViewMatrixArray);THREE.Matrix4.makeInvert3x3(b._modelViewMatrix).transposeIntoArray(b._normalMatrixArray)} -function H(b){var e,c,f,h;h=b.__materials;b=0;for(c=h.length;b0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,fa,m));ua&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglNormalBuffer), -k.bufferData(k.ARRAY_BUFFER,ga,m));Ca&&la.hasTangents&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglTangentBuffer),k.bufferData(k.ARRAY_BUFFER,X,m));sa&&T>0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,ea,m));sa&&W>0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,ia,m));ta&&(k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,g.__webglFaceBuffer),k.bufferData(k.ELEMENT_ARRAY_BUFFER,ja,m),k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,g.__webglLineBuffer),k.bufferData(k.ELEMENT_ARRAY_BUFFER, -ma,m));P>0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinVertexABuffer),k.bufferData(k.ARRAY_BUFFER,qa,m),k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinVertexBBuffer),k.bufferData(k.ARRAY_BUFFER,ha,m),k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,ca,m),k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,da,m));j.dynamic||(delete g.__inittedArrays,delete g.__colorArray,delete g.__normalArray,delete g.__tangentArray,delete g.__uvArray,delete g.__uv2Array, -delete g.__faceArray,delete g.__vertexArray,delete g.__lineArray,delete g.__skinVertexAArray,delete g.__skinVertexBArray,delete g.__skinIndexArray,delete g.__skinWeightArray)}}f.__dirtyVertices=!1;f.__dirtyMorphTargets=!1;f.__dirtyElements=!1;f.__dirtyUvs=!1;f.__dirtyNormals=!1;f.__dirtyTangents=!1;f.__dirtyColors=!1;C(h)}else if(b instanceof THREE.Ribbon){f=b.geometry;if(f.__dirtyVertices||f.__dirtyColors){b=f;e=k.DYNAMIC_DRAW;y=b.vertices;g=b.colors;D=y.length;j=g.length;I=b.__vertexArray;m=b.__colorArray; -J=b.__dirtyColors;if(b.__dirtyVertices){for(u=0;u=0;c--)b[c].object==e&&b.splice(c,1)}function J(b){function e(b){var h=[];c=0;for(f=b.length;c65535&&(o[m].counter+=1,u=o[m].hash+"_"+o[m].counter,b.geometryGroups[u]==void 0&&(b.geometryGroups[u]={faces:[],materials:k,vertices:0,numMorphTargets:n})),b.geometryGroups[u].faces.push(h),b.geometryGroups[u].vertices+=j}function S(b,e,c){b.push({buffer:e,object:c, -opaque:{list:[],count:0},transparent:{list:[],count:0}})}function R(b){if(b!=ja){switch(b){case THREE.AdditiveBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE);break;case THREE.SubtractiveBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.SRC_COLOR);break;default:k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD),k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)}ja= -b}}function N(b,e,c){(c.width&c.width-1)==0&&(c.height&c.height-1)==0?(k.texParameteri(b,k.TEXTURE_WRAP_S,Q(e.wrapS)),k.texParameteri(b,k.TEXTURE_WRAP_T,Q(e.wrapT)),k.texParameteri(b,k.TEXTURE_MAG_FILTER,Q(e.magFilter)),k.texParameteri(b,k.TEXTURE_MIN_FILTER,Q(e.minFilter)),k.generateMipmap(b)):(k.texParameteri(b,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE),k.texParameteri(b,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE),k.texParameteri(b,k.TEXTURE_MAG_FILTER,X(e.magFilter)),k.texParameteri(b,k.TEXTURE_MIN_FILTER,X(e.minFilter)))} -function F(b,e){if(b.needsUpdate)b.__webglInit?(k.bindTexture(k.TEXTURE_2D,b.__webglTexture),k.texImage2D(k.TEXTURE_2D,0,k.RGBA,k.RGBA,k.UNSIGNED_BYTE,b.image)):(b.__webglTexture=k.createTexture(),k.bindTexture(k.TEXTURE_2D,b.__webglTexture),k.texImage2D(k.TEXTURE_2D,0,k.RGBA,k.RGBA,k.UNSIGNED_BYTE,b.image),b.__webglInit=!0),N(k.TEXTURE_2D,b,b.image),k.bindTexture(k.TEXTURE_2D,null),b.needsUpdate=!1;k.activeTexture(k.TEXTURE0+e);k.bindTexture(k.TEXTURE_2D,b.__webglTexture)}function W(b){if(b&&!b.__webglFramebuffer){if(b.depthBuffer=== -void 0)b.depthBuffer=!0;if(b.stencilBuffer===void 0)b.stencilBuffer=!0;b.__webglFramebuffer=k.createFramebuffer();b.__webglRenderbuffer=k.createRenderbuffer();b.__webglTexture=k.createTexture();k.bindTexture(k.TEXTURE_2D,b.__webglTexture);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,Q(b.wrapS));k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,Q(b.wrapT));k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,Q(b.magFilter));k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,Q(b.minFilter));k.texImage2D(k.TEXTURE_2D, -0,Q(b.format),b.width,b.height,0,Q(b.format),Q(b.type),null);k.bindRenderbuffer(k.RENDERBUFFER,b.__webglRenderbuffer);k.bindFramebuffer(k.FRAMEBUFFER,b.__webglFramebuffer);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,k.TEXTURE_2D,b.__webglTexture,0);b.depthBuffer&&!b.stencilBuffer?(k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,b.height),k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,b.__webglRenderbuffer)):b.depthBuffer&&b.stencilBuffer?(k.renderbufferStorage(k.RENDERBUFFER, -k.DEPTH_STENCIL,b.width,b.height),k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,b.__webglRenderbuffer)):k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height);k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}var e,c;b?(e=b.__webglFramebuffer,c=b.width,b=b.height):(e=null,c=da,b=Y);e!=ga&&(k.bindFramebuffer(k.FRAMEBUFFER,e),k.viewport(ca,oa,c,b),ga=e)}function K(b,e){var c;b=="fragment"?c=k.createShader(k.FRAGMENT_SHADER): -b=="vertex"&&(c=k.createShader(k.VERTEX_SHADER));k.shaderSource(c,e);k.compileShader(c);if(!k.getShaderParameter(c,k.COMPILE_STATUS))return console.error(k.getShaderInfoLog(c)),console.error(e),null;return c}function X(b){switch(b){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return k.NEAREST;default:return k.LINEAR}}function Q(b){switch(b){case THREE.RepeatWrapping:return k.REPEAT;case THREE.ClampToEdgeWrapping:return k.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return k.MIRRORED_REPEAT; +h.__webglSkinWeightsBuffer),k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,!1,0,0));j instanceof THREE.Mesh?(g.wireframe?(k.lineWidth(g.wireframeLinewidth),k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,h.__webglLineBuffer),k.drawElements(k.LINES,h.__webglLineCount,k.UNSIGNED_SHORT,0)):(k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,h.__webglFaceBuffer),k.drawElements(k.TRIANGLES,h.__webglFaceCount,k.UNSIGNED_SHORT,0)),S.data.vertices+=h.__webglFaceCount,S.data.faces+=h.__webglFaceCount/3,S.data.drawCalls++):j instanceof +THREE.Line?(j=j.type==THREE.LineStrip?k.LINE_STRIP:k.LINES,k.lineWidth(g.linewidth),k.drawArrays(j,0,h.__webglLineCount),S.data.drawCalls++):j instanceof THREE.ParticleSystem?(k.drawArrays(k.POINTS,0,h.__webglParticleCount),S.data.drawCalls++):j instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,h.__webglVertexCount),S.data.drawCalls++)}}function g(b,e,c){if(!b.__webglVertexBuffer)b.__webglVertexBuffer=k.createBuffer();if(!b.__webglNormalBuffer)b.__webglNormalBuffer=k.createBuffer();b.hasPos&& +(k.bindBuffer(k.ARRAY_BUFFER,b.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,b.positionArray,k.DYNAMIC_DRAW),k.enableVertexAttribArray(e.attributes.position),k.vertexAttribPointer(e.attributes.position,3,k.FLOAT,!1,0,0));if(b.hasNormal){k.bindBuffer(k.ARRAY_BUFFER,b.__webglNormalBuffer);if(c==THREE.FlatShading){var f,h,g,j,m,t,n,p,o,u,v=b.count*3;for(u=0;u0&&y[0]0&&y[1]0.0010&&m.scale>0.0010)w[0]=m.x,w[1]=m.y, +w[2]=m.z,u=m.size*m.scale/ia,v[0]=u*n,v[1]=u,k.uniform3fv(x.screenPosition,w),k.uniform2fv(x.scale,v),k.uniform1f(x.rotation,m.rotation),k.uniform1f(x.opacity,m.opacity),I(m.blending),T(m.texture,1),k.drawElements(k.TRIANGLES,6,k.UNSIGNED_SHORT,0)}k.enable(k.CULL_FACE);k.enable(k.DEPTH_TEST);k.depthMask(ea)}function y(b,e){b._modelViewMatrix.multiplyToArray(e.matrixWorldInverse,b.matrixWorld,b._modelViewMatrixArray);THREE.Matrix4.makeInvert3x3(b._modelViewMatrix).transposeIntoArray(b._normalMatrixArray)} +function F(b){var e,c,f,h;h=b.__materials;b=0;for(c=h.length;b0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Y,m));sa&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglNormalBuffer),k.bufferData(k.ARRAY_BUFFER,ea, +m));Aa&&ja.hasTangents&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglTangentBuffer),k.bufferData(k.ARRAY_BUFFER,V,m));qa&&T>0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,fa,m));qa&&R>0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,ca,m));ra&&(k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,g.__webglFaceBuffer),k.bufferData(k.ELEMENT_ARRAY_BUFFER,ga,m),k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,g.__webglLineBuffer),k.bufferData(k.ELEMENT_ARRAY_BUFFER,ka,m));N> +0&&(k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinVertexABuffer),k.bufferData(k.ARRAY_BUFFER,da,m),k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinVertexBBuffer),k.bufferData(k.ARRAY_BUFFER,oa,m),k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,$,m),k.bindBuffer(k.ARRAY_BUFFER,g.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,aa,m));j.dynamic||(delete g.__inittedArrays,delete g.__colorArray,delete g.__normalArray,delete g.__tangentArray,delete g.__uvArray,delete g.__uv2Array, +delete g.__faceArray,delete g.__vertexArray,delete g.__lineArray,delete g.__skinVertexAArray,delete g.__skinVertexBArray,delete g.__skinIndexArray,delete g.__skinWeightArray)}}f.__dirtyVertices=!1;f.__dirtyMorphTargets=!1;f.__dirtyElements=!1;f.__dirtyUvs=!1;f.__dirtyNormals=!1;f.__dirtyTangents=!1;f.__dirtyColors=!1;C(h)}else if(b instanceof THREE.Ribbon){f=b.geometry;if(f.__dirtyVertices||f.__dirtyColors){b=f;e=k.DYNAMIC_DRAW;x=b.vertices;g=b.colors;z=x.length;j=g.length;B=b.__vertexArray;m=b.__colorArray; +G=b.__dirtyColors;if(b.__dirtyVertices){for(t=0;t=0;c--)b[c].object==e&&b.splice(c,1)}function B(b){function e(b){var h=[];c=0;for(f=b.length;c65535&&(o[m].counter+=1,t=o[m].hash+"_"+o[m].counter,b.geometryGroups[t]==void 0&&(b.geometryGroups[t]={faces:[],materials:k,vertices:0,numMorphTargets:n})),b.geometryGroups[t].faces.push(h),b.geometryGroups[t].vertices+=j}function P(b,e,c){b.push({buffer:e,object:c, +opaque:{list:[],count:0},transparent:{list:[],count:0}})}function I(b){if(b!=ga){switch(b){case THREE.AdditiveBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE);break;case THREE.SubtractiveBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.SRC_COLOR);break;default:k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD),k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)}ga= +b}}function H(b,e,c){(c.width&c.width-1)==0&&(c.height&c.height-1)==0?(k.texParameteri(b,k.TEXTURE_WRAP_S,K(e.wrapS)),k.texParameteri(b,k.TEXTURE_WRAP_T,K(e.wrapT)),k.texParameteri(b,k.TEXTURE_MAG_FILTER,K(e.magFilter)),k.texParameteri(b,k.TEXTURE_MIN_FILTER,K(e.minFilter)),k.generateMipmap(b)):(k.texParameteri(b,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE),k.texParameteri(b,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE),k.texParameteri(b,k.TEXTURE_MAG_FILTER,Y(e.magFilter)),k.texParameteri(b,k.TEXTURE_MIN_FILTER,Y(e.minFilter)))} +function T(b,e){if(b.needsUpdate)b.__webglInit?(k.bindTexture(k.TEXTURE_2D,b.__webglTexture),k.texImage2D(k.TEXTURE_2D,0,k.RGBA,k.RGBA,k.UNSIGNED_BYTE,b.image)):(b.__webglTexture=k.createTexture(),k.bindTexture(k.TEXTURE_2D,b.__webglTexture),k.texImage2D(k.TEXTURE_2D,0,k.RGBA,k.RGBA,k.UNSIGNED_BYTE,b.image),b.__webglInit=!0),H(k.TEXTURE_2D,b,b.image),k.bindTexture(k.TEXTURE_2D,null),b.needsUpdate=!1;k.activeTexture(k.TEXTURE0+e);k.bindTexture(k.TEXTURE_2D,b.__webglTexture)}function U(b){if(b&&!b.__webglFramebuffer){if(b.depthBuffer=== +void 0)b.depthBuffer=!0;if(b.stencilBuffer===void 0)b.stencilBuffer=!0;b.__webglFramebuffer=k.createFramebuffer();b.__webglRenderbuffer=k.createRenderbuffer();b.__webglTexture=k.createTexture();k.bindTexture(k.TEXTURE_2D,b.__webglTexture);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,K(b.wrapS));k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,K(b.wrapT));k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,K(b.magFilter));k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,K(b.minFilter));k.texImage2D(k.TEXTURE_2D, +0,K(b.format),b.width,b.height,0,K(b.format),K(b.type),null);k.bindRenderbuffer(k.RENDERBUFFER,b.__webglRenderbuffer);k.bindFramebuffer(k.FRAMEBUFFER,b.__webglFramebuffer);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,k.TEXTURE_2D,b.__webglTexture,0);b.depthBuffer&&!b.stencilBuffer?(k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,b.height),k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,b.__webglRenderbuffer)):b.depthBuffer&&b.stencilBuffer?(k.renderbufferStorage(k.RENDERBUFFER, +k.DEPTH_STENCIL,b.width,b.height),k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,b.__webglRenderbuffer)):k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height);k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}var e,c;b?(e=b.__webglFramebuffer,c=b.width,b=b.height):(e=null,c=aa,b=ia);e!=fa&&(k.bindFramebuffer(k.FRAMEBUFFER,e),k.viewport($,ma,c,b),fa=e)}function J(b,e){var c;b=="fragment"?c=k.createShader(k.FRAGMENT_SHADER): +b=="vertex"&&(c=k.createShader(k.VERTEX_SHADER));k.shaderSource(c,e);k.compileShader(c);if(!k.getShaderParameter(c,k.COMPILE_STATUS))return console.error(k.getShaderInfoLog(c)),console.error(e),null;return c}function Y(b){switch(b){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return k.NEAREST;default:return k.LINEAR}}function K(b){switch(b){case THREE.RepeatWrapping:return k.REPEAT;case THREE.ClampToEdgeWrapping:return k.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return k.MIRRORED_REPEAT; case THREE.NearestFilter:return k.NEAREST;case THREE.NearestMipMapNearestFilter:return k.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return k.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return k.LINEAR;case THREE.LinearMipMapNearestFilter:return k.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return k.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return k.BYTE;case THREE.UnsignedByteType:return k.UNSIGNED_BYTE;case THREE.ShortType:return k.SHORT;case THREE.UnsignedShortType:return k.UNSIGNED_SHORT; -case THREE.IntType:return k.INT;case THREE.UnsignedShortType:return k.UNSIGNED_INT;case THREE.FloatType:return k.FLOAT;case THREE.AlphaFormat:return k.ALPHA;case THREE.RGBFormat:return k.RGB;case THREE.RGBAFormat:return k.RGBA;case THREE.LuminanceFormat:return k.LUMINANCE;case THREE.LuminanceAlphaFormat:return k.LUMINANCE_ALPHA}return 0}var U=this,k,ia=[],L=null,ga=null,fa=!0,$=null,ha=null,ja=null,ma=null,ra=null,T=null,ka=null,ca=0,oa=0,da=0,Y=0,Z=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4, -new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],pa=new THREE.Matrix4,na=new Float32Array(16),qa=new Float32Array(16),ya=new THREE.Vector4,Ca={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},b=b||{},xa=b.canvas!==void 0?b.canvas:document.createElement("canvas"),Aa=b.stencil!==void 0?b.stencil:!0,Oa=b.antialias!==void 0?b.antialias:!1,ua=b.clearColor!==void 0?new THREE.Color(b.clearColor):new THREE.Color(0),ta=b.clearAlpha!== -void 0?b.clearAlpha:0;this.data={vertices:0,faces:0,drawCalls:0};this.maxMorphTargets=8;this.domElement=xa;this.sortObjects=this.autoClear=!0;try{if(!(k=xa.getContext("experimental-webgl",{antialias:Oa,stencil:Aa})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+k.getParameter(k.VERSION)+" | "+k.getParameter(k.VENDOR)+" | "+k.getParameter(k.RENDERER)+" | "+k.getParameter(k.SHADING_LANGUAGE_VERSION))}catch(sa){console.error(sa)}k.clearColor(0,0,0,1);k.clearDepth(1);k.enable(k.DEPTH_TEST); -k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(ua.r,ua.g,ua.b,ta);this.context=k;var Da=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;if(Aa){var ea={};ea.vertices=new Float32Array(12);ea.faces=new Uint16Array(6);ea.darkness=0.5;ea.vertices[0]=-20;ea.vertices[1]=-20;ea.vertices[2]=-1;ea.vertices[3]=20;ea.vertices[4]=-20;ea.vertices[5]=-1;ea.vertices[6]=20; -ea.vertices[7]=20;ea.vertices[8]=-1;ea.vertices[9]=-20;ea.vertices[10]=20;ea.vertices[11]=-1;ea.faces[0]=0;ea.faces[1]=1;ea.faces[2]=2;ea.faces[3]=0;ea.faces[4]=2;ea.faces[5]=3;ea.vertexBuffer=k.createBuffer();ea.elementBuffer=k.createBuffer();k.bindBuffer(k.ARRAY_BUFFER,ea.vertexBuffer);k.bufferData(k.ARRAY_BUFFER,ea.vertices,k.STATIC_DRAW);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,ea.elementBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,ea.faces,k.STATIC_DRAW);ea.program=k.createProgram();k.attachShader(ea.program, -K("fragment",THREE.ShaderLib.shadowPost.fragmentShader));k.attachShader(ea.program,K("vertex",THREE.ShaderLib.shadowPost.vertexShader));k.linkProgram(ea.program);ea.vertexLocation=k.getAttribLocation(ea.program,"position");ea.projectionLocation=k.getUniformLocation(ea.program,"projectionMatrix");ea.darknessLocation=k.getUniformLocation(ea.program,"darkness")}var O={};O.vertices=new Float32Array(16);O.faces=new Uint16Array(6);b=0;O.vertices[b++]=-1;O.vertices[b++]=-1;O.vertices[b++]=0;O.vertices[b++]= -0;O.vertices[b++]=1;O.vertices[b++]=-1;O.vertices[b++]=1;O.vertices[b++]=0;O.vertices[b++]=1;O.vertices[b++]=1;O.vertices[b++]=1;O.vertices[b++]=1;O.vertices[b++]=-1;O.vertices[b++]=1;O.vertices[b++]=0;O.vertices[b++]=1;b=0;O.faces[b++]=0;O.faces[b++]=1;O.faces[b++]=2;O.faces[b++]=0;O.faces[b++]=2;O.faces[b++]=3;O.vertexBuffer=k.createBuffer();O.elementBuffer=k.createBuffer();O.tempTexture=k.createTexture();O.occlusionTexture=k.createTexture();k.bindBuffer(k.ARRAY_BUFFER,O.vertexBuffer);k.bufferData(k.ARRAY_BUFFER, -O.vertices,k.STATIC_DRAW);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,O.elementBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,O.faces,k.STATIC_DRAW);k.bindTexture(k.TEXTURE_2D,O.tempTexture);k.texImage2D(k.TEXTURE_2D,0,k.RGB,16,16,0,k.RGB,k.UNSIGNED_BYTE,null);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,k.NEAREST);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,k.NEAREST);k.bindTexture(k.TEXTURE_2D, -O.occlusionTexture);k.texImage2D(k.TEXTURE_2D,0,k.RGBA,16,16,0,k.RGBA,k.UNSIGNED_BYTE,null);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,k.NEAREST);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,k.NEAREST);k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<=0?(O.hasVertexTexture=!1,O.program=k.createProgram(),k.attachShader(O.program,K("fragment",THREE.ShaderLib.lensFlare.fragmentShader)), -k.attachShader(O.program,K("vertex",THREE.ShaderLib.lensFlare.vertexShader))):(O.hasVertexTexture=!0,O.program=k.createProgram(),k.attachShader(O.program,K("fragment",THREE.ShaderLib.lensFlareVertexTexture.fragmentShader)),k.attachShader(O.program,K("vertex",THREE.ShaderLib.lensFlareVertexTexture.vertexShader)));k.linkProgram(O.program);O.attributes={};O.uniforms={};O.attributes.vertex=k.getAttribLocation(O.program,"position");O.attributes.uv=k.getAttribLocation(O.program,"UV");O.uniforms.renderType= -k.getUniformLocation(O.program,"renderType");O.uniforms.map=k.getUniformLocation(O.program,"map");O.uniforms.occlusionMap=k.getUniformLocation(O.program,"occlusionMap");O.uniforms.opacity=k.getUniformLocation(O.program,"opacity");O.uniforms.scale=k.getUniformLocation(O.program,"scale");O.uniforms.rotation=k.getUniformLocation(O.program,"rotation");O.uniforms.screenPosition=k.getUniformLocation(O.program,"screenPosition");var wa=!1,V={};V.vertices=new Float32Array(16);V.faces=new Uint16Array(6);b= -0;V.vertices[b++]=-1;V.vertices[b++]=-1;V.vertices[b++]=0;V.vertices[b++]=1;V.vertices[b++]=1;V.vertices[b++]=-1;V.vertices[b++]=1;V.vertices[b++]=1;V.vertices[b++]=1;V.vertices[b++]=1;V.vertices[b++]=1;V.vertices[b++]=0;V.vertices[b++]=-1;V.vertices[b++]=1;V.vertices[b++]=0;b=V.vertices[b++]=0;V.faces[b++]=0;V.faces[b++]=1;V.faces[b++]=2;V.faces[b++]=0;V.faces[b++]=2;V.faces[b++]=3;V.vertexBuffer=k.createBuffer();V.elementBuffer=k.createBuffer();k.bindBuffer(k.ARRAY_BUFFER,V.vertexBuffer);k.bufferData(k.ARRAY_BUFFER, -V.vertices,k.STATIC_DRAW);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,V.elementBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,V.faces,k.STATIC_DRAW);V.program=k.createProgram();k.attachShader(V.program,K("fragment",THREE.ShaderLib.sprite.fragmentShader));k.attachShader(V.program,K("vertex",THREE.ShaderLib.sprite.vertexShader));k.linkProgram(V.program);V.attributes={};V.uniforms={};V.attributes.position=k.getAttribLocation(V.program,"position");V.attributes.uv=k.getAttribLocation(V.program,"uv");V.uniforms.uvOffset= -k.getUniformLocation(V.program,"uvOffset");V.uniforms.uvScale=k.getUniformLocation(V.program,"uvScale");V.uniforms.rotation=k.getUniformLocation(V.program,"rotation");V.uniforms.scale=k.getUniformLocation(V.program,"scale");V.uniforms.alignment=k.getUniformLocation(V.program,"alignment");V.uniforms.map=k.getUniformLocation(V.program,"map");V.uniforms.opacity=k.getUniformLocation(V.program,"opacity");V.uniforms.useScreenCoordinates=k.getUniformLocation(V.program,"useScreenCoordinates");V.uniforms.affectedByDistance= -k.getUniformLocation(V.program,"affectedByDistance");V.uniforms.screenPosition=k.getUniformLocation(V.program,"screenPosition");V.uniforms.modelViewMatrix=k.getUniformLocation(V.program,"modelViewMatrix");V.uniforms.projectionMatrix=k.getUniformLocation(V.program,"projectionMatrix");var la=!1;this.setSize=function(b,e){xa.width=b;xa.height=e;this.setViewport(0,0,xa.width,xa.height)};this.setViewport=function(b,e,c,f){ca=b;oa=e;da=c;Y=f;k.viewport(ca,oa,da,Y)};this.setScissor=function(b,e,c,f){k.scissor(b, -e,c,f)};this.enableScissorTest=function(b){b?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.enableDepthBufferWrite=function(b){fa=b;k.depthMask(b)};this.setClearColorHex=function(b,e){ua.setHex(b);ta=e;k.clearColor(ua.r,ua.g,ua.b,ta)};this.setClearColor=function(b,e){ua.copy(b);ta=e;k.clearColor(ua.r,ua.g,ua.b,ta)};this.clear=function(){k.clear(k.COLOR_BUFFER_BIT|k.DEPTH_BUFFER_BIT|k.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(b){ea.darkness=b};this.getContext=function(){return k}; +case THREE.IntType:return k.INT;case THREE.UnsignedShortType:return k.UNSIGNED_INT;case THREE.FloatType:return k.FLOAT;case THREE.AlphaFormat:return k.ALPHA;case THREE.RGBFormat:return k.RGB;case THREE.RGBAFormat:return k.RGBA;case THREE.LuminanceFormat:return k.LUMINANCE;case THREE.LuminanceAlphaFormat:return k.LUMINANCE_ALPHA}return 0}var S=this,k,V=[],O=null,fa=null,ea=!0,W=null,da=null,ga=null,ka=null,pa=null,R=null,ha=null,$=0,ma=0,aa=0,ia=0,X=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4, +new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],na=new THREE.Matrix4,la=new Float32Array(16),oa=new Float32Array(16),wa=new THREE.Vector4,Aa={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},b=b||{},va=b.canvas!==void 0?b.canvas:document.createElement("canvas"),ya=b.stencil!==void 0?b.stencil:!0,Ma=b.antialias!==void 0?b.antialias:!1,sa=b.clearColor!==void 0?new THREE.Color(b.clearColor):new THREE.Color(0),ra=b.clearAlpha!== +void 0?b.clearAlpha:0;this.data={vertices:0,faces:0,drawCalls:0};this.maxMorphTargets=8;this.domElement=va;this.sortObjects=this.autoClear=!0;try{if(!(k=va.getContext("experimental-webgl",{antialias:Ma,stencil:ya})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+k.getParameter(k.VERSION)+" | "+k.getParameter(k.VENDOR)+" | "+k.getParameter(k.RENDERER)+" | "+k.getParameter(k.SHADING_LANGUAGE_VERSION))}catch(qa){console.error(qa)}k.clearColor(0,0,0,1);k.clearDepth(1);k.enable(k.DEPTH_TEST); +k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(sa.r,sa.g,sa.b,ra);this.context=k;var Ba=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0;if(ya){var ca={};ca.vertices=new Float32Array(12);ca.faces=new Uint16Array(6);ca.darkness=0.5;ca.vertices[0]=-20;ca.vertices[1]=-20;ca.vertices[2]=-1;ca.vertices[3]=20;ca.vertices[4]=-20;ca.vertices[5]=-1;ca.vertices[6]=20; +ca.vertices[7]=20;ca.vertices[8]=-1;ca.vertices[9]=-20;ca.vertices[10]=20;ca.vertices[11]=-1;ca.faces[0]=0;ca.faces[1]=1;ca.faces[2]=2;ca.faces[3]=0;ca.faces[4]=2;ca.faces[5]=3;ca.vertexBuffer=k.createBuffer();ca.elementBuffer=k.createBuffer();k.bindBuffer(k.ARRAY_BUFFER,ca.vertexBuffer);k.bufferData(k.ARRAY_BUFFER,ca.vertices,k.STATIC_DRAW);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,ca.elementBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,ca.faces,k.STATIC_DRAW);ca.program=k.createProgram();k.attachShader(ca.program, +J("fragment",THREE.ShaderLib.shadowPost.fragmentShader));k.attachShader(ca.program,J("vertex",THREE.ShaderLib.shadowPost.vertexShader));k.linkProgram(ca.program);ca.vertexLocation=k.getAttribLocation(ca.program,"position");ca.projectionLocation=k.getUniformLocation(ca.program,"projectionMatrix");ca.darknessLocation=k.getUniformLocation(ca.program,"darkness")}var M={};M.vertices=new Float32Array(16);M.faces=new Uint16Array(6);b=0;M.vertices[b++]=-1;M.vertices[b++]=-1;M.vertices[b++]=0;M.vertices[b++]= +0;M.vertices[b++]=1;M.vertices[b++]=-1;M.vertices[b++]=1;M.vertices[b++]=0;M.vertices[b++]=1;M.vertices[b++]=1;M.vertices[b++]=1;M.vertices[b++]=1;M.vertices[b++]=-1;M.vertices[b++]=1;M.vertices[b++]=0;M.vertices[b++]=1;b=0;M.faces[b++]=0;M.faces[b++]=1;M.faces[b++]=2;M.faces[b++]=0;M.faces[b++]=2;M.faces[b++]=3;M.vertexBuffer=k.createBuffer();M.elementBuffer=k.createBuffer();M.tempTexture=k.createTexture();M.occlusionTexture=k.createTexture();k.bindBuffer(k.ARRAY_BUFFER,M.vertexBuffer);k.bufferData(k.ARRAY_BUFFER, +M.vertices,k.STATIC_DRAW);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,M.elementBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,M.faces,k.STATIC_DRAW);k.bindTexture(k.TEXTURE_2D,M.tempTexture);k.texImage2D(k.TEXTURE_2D,0,k.RGB,16,16,0,k.RGB,k.UNSIGNED_BYTE,null);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,k.NEAREST);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,k.NEAREST);k.bindTexture(k.TEXTURE_2D, +M.occlusionTexture);k.texImage2D(k.TEXTURE_2D,0,k.RGBA,16,16,0,k.RGBA,k.UNSIGNED_BYTE,null);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MAG_FILTER,k.NEAREST);k.texParameteri(k.TEXTURE_2D,k.TEXTURE_MIN_FILTER,k.NEAREST);k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS)<=0?(M.hasVertexTexture=!1,M.program=k.createProgram(),k.attachShader(M.program,J("fragment",THREE.ShaderLib.lensFlare.fragmentShader)), +k.attachShader(M.program,J("vertex",THREE.ShaderLib.lensFlare.vertexShader))):(M.hasVertexTexture=!0,M.program=k.createProgram(),k.attachShader(M.program,J("fragment",THREE.ShaderLib.lensFlareVertexTexture.fragmentShader)),k.attachShader(M.program,J("vertex",THREE.ShaderLib.lensFlareVertexTexture.vertexShader)));k.linkProgram(M.program);M.attributes={};M.uniforms={};M.attributes.vertex=k.getAttribLocation(M.program,"position");M.attributes.uv=k.getAttribLocation(M.program,"UV");M.uniforms.renderType= +k.getUniformLocation(M.program,"renderType");M.uniforms.map=k.getUniformLocation(M.program,"map");M.uniforms.occlusionMap=k.getUniformLocation(M.program,"occlusionMap");M.uniforms.opacity=k.getUniformLocation(M.program,"opacity");M.uniforms.scale=k.getUniformLocation(M.program,"scale");M.uniforms.rotation=k.getUniformLocation(M.program,"rotation");M.uniforms.screenPosition=k.getUniformLocation(M.program,"screenPosition");var ua=!1,Q={};Q.vertices=new Float32Array(16);Q.faces=new Uint16Array(6);b= +0;Q.vertices[b++]=-1;Q.vertices[b++]=-1;Q.vertices[b++]=0;Q.vertices[b++]=1;Q.vertices[b++]=1;Q.vertices[b++]=-1;Q.vertices[b++]=1;Q.vertices[b++]=1;Q.vertices[b++]=1;Q.vertices[b++]=1;Q.vertices[b++]=1;Q.vertices[b++]=0;Q.vertices[b++]=-1;Q.vertices[b++]=1;Q.vertices[b++]=0;b=Q.vertices[b++]=0;Q.faces[b++]=0;Q.faces[b++]=1;Q.faces[b++]=2;Q.faces[b++]=0;Q.faces[b++]=2;Q.faces[b++]=3;Q.vertexBuffer=k.createBuffer();Q.elementBuffer=k.createBuffer();k.bindBuffer(k.ARRAY_BUFFER,Q.vertexBuffer);k.bufferData(k.ARRAY_BUFFER, +Q.vertices,k.STATIC_DRAW);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,Q.elementBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Q.faces,k.STATIC_DRAW);Q.program=k.createProgram();k.attachShader(Q.program,J("fragment",THREE.ShaderLib.sprite.fragmentShader));k.attachShader(Q.program,J("vertex",THREE.ShaderLib.sprite.vertexShader));k.linkProgram(Q.program);Q.attributes={};Q.uniforms={};Q.attributes.position=k.getAttribLocation(Q.program,"position");Q.attributes.uv=k.getAttribLocation(Q.program,"uv");Q.uniforms.uvOffset= +k.getUniformLocation(Q.program,"uvOffset");Q.uniforms.uvScale=k.getUniformLocation(Q.program,"uvScale");Q.uniforms.rotation=k.getUniformLocation(Q.program,"rotation");Q.uniforms.scale=k.getUniformLocation(Q.program,"scale");Q.uniforms.alignment=k.getUniformLocation(Q.program,"alignment");Q.uniforms.map=k.getUniformLocation(Q.program,"map");Q.uniforms.opacity=k.getUniformLocation(Q.program,"opacity");Q.uniforms.useScreenCoordinates=k.getUniformLocation(Q.program,"useScreenCoordinates");Q.uniforms.affectedByDistance= +k.getUniformLocation(Q.program,"affectedByDistance");Q.uniforms.screenPosition=k.getUniformLocation(Q.program,"screenPosition");Q.uniforms.modelViewMatrix=k.getUniformLocation(Q.program,"modelViewMatrix");Q.uniforms.projectionMatrix=k.getUniformLocation(Q.program,"projectionMatrix");var ja=!1;this.setSize=function(b,e){va.width=b;va.height=e;this.setViewport(0,0,va.width,va.height)};this.setViewport=function(b,e,c,f){$=b;ma=e;aa=c;ia=f;k.viewport($,ma,aa,ia)};this.setScissor=function(b,e,c,f){k.scissor(b, +e,c,f)};this.enableScissorTest=function(b){b?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.enableDepthBufferWrite=function(b){ea=b;k.depthMask(b)};this.setClearColorHex=function(b,e){sa.setHex(b);ra=e;k.clearColor(sa.r,sa.g,sa.b,ra)};this.setClearColor=function(b,e){sa.copy(b);ra=e;k.clearColor(sa.r,sa.g,sa.b,ra)};this.clear=function(){k.clear(k.COLOR_BUFFER_BIT|k.DEPTH_BUFFER_BIT|k.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(b){ca.darkness=b};this.getContext=function(){return k}; this.initMaterial=function(b,e,c,f){var h,g,j;b instanceof THREE.MeshDepthMaterial?j="depth":b instanceof THREE.ShadowVolumeDynamicMaterial?j="shadowVolumeDynamic":b instanceof THREE.MeshNormalMaterial?j="normal":b instanceof THREE.MeshBasicMaterial?j="basic":b instanceof THREE.MeshLambertMaterial?j="lambert":b instanceof THREE.MeshPhongMaterial?j="phong":b instanceof THREE.LineBasicMaterial?j="basic":b instanceof THREE.ParticleBasicMaterial&&(j="particle_basic");if(j){var m=THREE.ShaderLib[j];b.uniforms= -THREE.UniformsUtils.clone(m.uniforms);b.vertexShader=m.vertexShader;b.fragmentShader=m.fragmentShader}var u,o,n;u=n=m=0;for(o=e.length;u=0&&k.enableVertexAttribArray(p.position);p.color>=0&&k.enableVertexAttribArray(p.color);p.normal>=0&&k.enableVertexAttribArray(p.normal);p.tangent>=0&&k.enableVertexAttribArray(p.tangent); +n=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,c.fog?"#define USE_FOG":"",c.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");k.attachShader(u,J("fragment",n+t));k.attachShader(u,J("vertex",g+o));k.linkProgram(u); +k.getProgramParameter(u,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(u,k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");u.uniforms={};u.attributes={};var v;t=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(v in m)t.push(v);v=t;m=0;for(t=v.length;m=0&&k.enableVertexAttribArray(p.position);p.color>=0&&k.enableVertexAttribArray(p.color);p.normal>=0&&k.enableVertexAttribArray(p.normal);p.tangent>=0&&k.enableVertexAttribArray(p.tangent); b.skinning&&p.skinVertexA>=0&&p.skinVertexB>=0&&p.skinIndex>=0&&p.skinWeight>=0&&(k.enableVertexAttribArray(p.skinVertexA),k.enableVertexAttribArray(p.skinVertexB),k.enableVertexAttribArray(p.skinIndex),k.enableVertexAttribArray(p.skinWeight));if(b.attributes)for(h in b.attributes)p[h]!==void 0&&p[h]>=0&&k.enableVertexAttribArray(p[h]);if(b.morphTargets){b.numSupportedMorphTargets=0;p.morphTarget0>=0&&(k.enableVertexAttribArray(p.morphTarget0),b.numSupportedMorphTargets++);p.morphTarget1>=0&&(k.enableVertexAttribArray(p.morphTarget1), b.numSupportedMorphTargets++);p.morphTarget2>=0&&(k.enableVertexAttribArray(p.morphTarget2),b.numSupportedMorphTargets++);p.morphTarget3>=0&&(k.enableVertexAttribArray(p.morphTarget3),b.numSupportedMorphTargets++);p.morphTarget4>=0&&(k.enableVertexAttribArray(p.morphTarget4),b.numSupportedMorphTargets++);p.morphTarget5>=0&&(k.enableVertexAttribArray(p.morphTarget5),b.numSupportedMorphTargets++);p.morphTarget6>=0&&(k.enableVertexAttribArray(p.morphTarget6),b.numSupportedMorphTargets++);p.morphTarget7>= -0&&(k.enableVertexAttribArray(p.morphTarget7),b.numSupportedMorphTargets++);f.__webglMorphTargetInfluences=new Float32Array(this.maxMorphTargets);b=0;for(h=this.maxMorphTargets;b0||v.faceVertexUvs.length>0)j.__uvArray=new Float32Array(u*2);if(v.faceUvs.length>1||v.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(u*2)}if(m.geometry.skinWeights.length&&m.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(u*4), -j.__skinVertexBArray=new Float32Array(u*4),j.__skinIndexArray=new Float32Array(u*4),j.__skinWeightArray=new Float32Array(u*4);j.__faceArray=new Uint16Array(x*3+(m.geometry.edgeFaces?m.geometry.edgeFaces.length*6:0));j.__lineArray=new Uint16Array(A*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];v=0;for(w=j.numMorphTargets;v=0;g--)e[g]==c&&e.splice(g,1)}else c instanceof THREE.LensFlare?I(e.__webglLensFlares,c):c instanceof THREE.MarchingCubes&&I(e.__webglObjectsImmediate,c);b.__objectsRemoved.splice(0,1)}e=0;for(c=b.__webglObjects.length;e0||u.faceVertexUvs.length>0)j.__uvArray=new Float32Array(t*2);if(u.faceUvs.length>1||u.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(t*2)}if(m.geometry.skinWeights.length&&m.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(t*4), +j.__skinVertexBArray=new Float32Array(t*4),j.__skinIndexArray=new Float32Array(t*4),j.__skinWeightArray=new Float32Array(t*4);j.__faceArray=new Uint16Array(w*3+(m.geometry.edgeFaces?m.geometry.edgeFaces.length*6:0));j.__lineArray=new Uint16Array(y*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];u=0;for(v=j.numMorphTargets;u=0;g--)e[g]==c&&e.splice(g,1)}else c instanceof THREE.LensFlare?G(e.__webglLensFlares,c):c instanceof THREE.MarchingCubes&&G(e.__webglObjectsImmediate,c);b.__objectsRemoved.splice(0,1)}e=0;for(c=b.__webglObjects.length;e1&&(e-=1)}c===void 0&&(c={h:0,s:0,v:0});c.h=e;c.s=j;c.v=h;return c}, clamp:function(b,c,e){return be?e:b}};THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(b,c){var e=c instanceof THREE.Mesh,f=b.vertices.length,g=e?c.geometry:c,h=b.vertices,j=g.vertices,m=b.faces,n=g.faces,p=b.faceVertexUvs[0],g=g.faceVertexUvs[0];e&&c.matrixAutoUpdate&&c.updateMatrix();for(var o=0,u=j.length;o1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+f+" on bone "+w),f=f<0?0:1;if(e==="pos")if(e=b.position,this.interpolationType===THREE.AnimationHandler.LINEAR)e.x=g[0]+(h[0]-g[0])*f,e.y=g[1]+(h[1]-g[1])*f,e.z=g[2]+(h[2]-g[2])*f;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= -this.getPrevKeyWith("pos",w,j.index-1).pos,this.points[1]=g,this.points[2]=h,this.points[3]=this.getNextKeyWith("pos",w,m.index+1).pos,f=f*0.33+0.33,g=this.interpolateCatmullRom(this.points,f),e.x=g[0],e.y=g[1],e.z=g[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)f=this.interpolateCatmullRom(this.points,f*1.01),this.target.set(f[0],f[1],f[2]),this.target.subSelf(e),this.target.y=0,this.target.normalize(),f=Math.atan2(this.target.x,this.target.z),b.rotation.set(0,f,0)}else if(e=== -"rot")THREE.Quaternion.slerp(g,h,b.quaternion,f);else if(e==="scl")e=b.scale,e.x=g[0]+(h[0]-g[0])*f,e.y=g[1]+(h[1]-g[1])*f,e.z=g[2]+(h[2]-g[2])*f}}if(this.JITCompile&&o[0][p]===void 0){this.hierarchy[0].update(void 0,!0);for(w=0;w1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+f+" on bone "+v),f=f<0?0:1;if(e==="pos")if(e=b.position,this.interpolationType===THREE.AnimationHandler.LINEAR)e.x=g[0]+(h[0]-g[0])*f,e.y=g[1]+(h[1]-g[1])*f,e.z=g[2]+(h[2]-g[2])*f;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= +this.getPrevKeyWith("pos",v,j.index-1).pos,this.points[1]=g,this.points[2]=h,this.points[3]=this.getNextKeyWith("pos",v,m.index+1).pos,f=f*0.33+0.33,g=this.interpolateCatmullRom(this.points,f),e.x=g[0],e.y=g[1],e.z=g[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)f=this.interpolateCatmullRom(this.points,f*1.01),this.target.set(f[0],f[1],f[2]),this.target.subSelf(e),this.target.y=0,this.target.normalize(),f=Math.atan2(this.target.x,this.target.z),b.rotation.set(0,f,0)}else if(e=== +"rot")THREE.Quaternion.slerp(g,h,b.quaternion,f);else if(e==="scl")e=b.scale,e.x=g[0]+(h[0]-g[0])*f,e.y=g[1]+(h[1]-g[1])*f,e.z=g[2]+(h[2]-g[2])*f}}if(this.JITCompile&&o[0][p]===void 0){this.hierarchy[0].update(void 0,!0);for(v=0;vb.length-2?h:h+1;e[3]=h>b.length-3?h:h+2;h=b[e[0]];m=b[e[1]];n=b[e[2]];p=b[e[3]];e=g*g;j=g*e;f[0]=this.interpolate(h[0],m[0],n[0],p[0],g,e,j);f[1]=this.interpolate(h[1],m[1],n[1],p[1],g,e,j);f[2]=this.interpolate(h[2],m[2],n[2],p[2],g,e,j);return f}; THREE.Animation.prototype.interpolate=function(b,c,e,f,g,h,j){b=(e-b)*0.5;f=(f-c)*0.5;return(2*(c-e)+b+f)*j+(-3*(c-e)-2*b-f)*h+b*g+c};THREE.Animation.prototype.getNextKeyWith=function(b,c,e){var f=this.data.hierarchy[c].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?e=e0?e:0:e>=0?e:e+f.length;e>=0;e--)if(f[e][b]!==void 0)return f[e];return this.data.hierarchy[c].keys[f.length-1]}; @@ -384,7 +384,7 @@ this.heightSpeed?this.tdiff*((this.position.y0||this.autoForward&&!(o<0)?1:o));this.translateX(b*u);this.translateY(b*v);n&&(this.roll+=this.rollSpeed*this.delta*p);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize(); +THREE.RollCamera=function(b,c,e,f){THREE.Camera.call(this,b,c,e,f);this.mouseLook=!0;this.autoForward=!1;this.rollSpeed=this.movementSpeed=this.lookSpeed=1;this.constrainVertical=[-0.9,0.9];this.domElement=document;this.matrixAutoUpdate=this.useTarget=!1;this.forward=new THREE.Vector3(0,0,1);this.roll=0;this.lastUpdate=-1;this.delta=0;var g=new THREE.Vector3,h=new THREE.Vector3,j=new THREE.Vector3,m=new THREE.Matrix4,n=!1,p=1,o=0,t=0,u=0,v=0,w=0,z=window.innerWidth/2,x=window.innerHeight/2;this.update= +function(){var b=(new Date).getTime();if(this.lastUpdate==-1)this.lastUpdate=b;this.delta=(b-this.lastUpdate)/1E3;this.lastUpdate=b;this.mouseLook&&(b=this.delta*this.lookSpeed,this.rotateHorizontally(b*v),this.rotateVertically(b*w));b=this.delta*this.movementSpeed;this.translateZ(b*(o>0||this.autoForward&&!(o<0)?1:o));this.translateX(b*t);this.translateY(b*u);n&&(this.roll+=this.rollSpeed*this.delta*p);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize(); else if(this.forward.y0?(h=c[c.length-1],v=h.x,w=h.y):(h=this.actions[e-1].args,v=h[h.length-2],w=h[h.length-1]);for(h=1;h<=b;h++)x=h/b,g=THREE.FontUtils.b2(x,v,o,j),x=THREE.FontUtils.b2(x,w,u,m),c.push(new THREE.Vector2(g, -x));break;case THREE.PathActions.BEZIER_CURVE_TO:j=g[4];m=g[5];o=g[0];u=g[1];n=g[2];p=g[3];c.length>0?(h=c[c.length-1],v=h.x,w=h.y):(h=this.actions[e-1].args,v=h[h.length-2],w=h[h.length-1]);for(h=1;h<=b;h++)x=h/b,g=THREE.FontUtils.b3(x,v,o,n,j),x=THREE.FontUtils.b3(x,w,u,p,m),c.push(new THREE.Vector2(g,x));break;case THREE.PathActions.CSPLINE_THRU:h=this.actions[e-1].args;h=[new THREE.Vector2(h[h.length-2],h[h.length-1])];x=b*g[0].length;h=h.concat(g[0]);g=new THREE.SplineCurve(h);for(h=1;h<=x;h++)c.push(g.getPointAt(h/ -x));break;case THREE.PathActions.ARC:h=this.actions[e-1].args;j=g[0];m=g[1];n=g[2];o=g[3];x=g[4];u=!!g[5];p=h[h.length-2];v=h[h.length-1];h.length==0&&(p=v=0);w=x-o;var y=b*2;for(h=1;h<=y;h++)x=h/y,u||(x=1-x),x=o+x*w,g=p+j+n*Math.cos(x),x=v+m+n*Math.sin(x),c.push(new THREE.Vector2(g,x))}return c}; +THREE.Path.prototype.getPoints=function(b){var b=b||12,c=[],e,f,g,h,j,m,n,p,o,t,u,v,w;e=0;for(f=this.actions.length;e0?(h=c[c.length-1],u=h.x,v=h.y):(h=this.actions[e-1].args,u=h[h.length-2],v=h[h.length-1]);for(h=1;h<=b;h++)w=h/b,g=THREE.FontUtils.b2(w,u,o,j),w=THREE.FontUtils.b2(w,v,t,m),c.push(new THREE.Vector2(g, +w));break;case THREE.PathActions.BEZIER_CURVE_TO:j=g[4];m=g[5];o=g[0];t=g[1];n=g[2];p=g[3];c.length>0?(h=c[c.length-1],u=h.x,v=h.y):(h=this.actions[e-1].args,u=h[h.length-2],v=h[h.length-1]);for(h=1;h<=b;h++)w=h/b,g=THREE.FontUtils.b3(w,u,o,n,j),w=THREE.FontUtils.b3(w,v,t,p,m),c.push(new THREE.Vector2(g,w));break;case THREE.PathActions.CSPLINE_THRU:h=this.actions[e-1].args;h=[new THREE.Vector2(h[h.length-2],h[h.length-1])];w=b*g[0].length;h=h.concat(g[0]);g=new THREE.SplineCurve(h);for(h=1;h<=w;h++)c.push(g.getPointAt(h/ +w));break;case THREE.PathActions.ARC:h=this.actions[e-1].args;j=g[0];m=g[1];n=g[2];o=g[3];w=g[4];t=!!g[5];p=h[h.length-2];u=h[h.length-1];h.length==0&&(p=u=0);v=w-o;var z=b*2;for(h=1;h<=z;h++)w=h/z,t||(w=1-w),w=o+w*v,g=p+j+n*Math.cos(w),w=u+m+n*Math.sin(w),c.push(new THREE.Vector2(g,w))}return c}; THREE.Path.prototype.getMinAndMax=function(){var b=this.getPoints(),c,e,f,g;c=e=Number.NEGATIVE_INFINITY;f=g=Number.POSITIVE_INFINITY;var h,j,m;j=0;for(m=b.length;jc)c=h.x;else if(h.xe)e=h.y;else if(h.y=c)return c=e[b]-c,b=this.curves[b],c=1-c/b.getLength(),b.getPointAt(c);b++}return null}; THREE.Path.prototype.getLength=function(){var b=[],c=0,e,f=this.curves.length;for(e=0;e=0?m-1:e.length-1;h=j-1>=0?j-1:p.length-1;var y=[p[j],e[m],e[g]];u=THREE.FontUtils.Triangulate.area(y);var D=[p[j],p[h],e[m]];v=THREE.FontUtils.Triangulate.area(D);w=m;o=j;m+=1;j+=-1;m<0&&(m+=e.length);m%=e.length; -j<0&&(j+=p.length);j%=p.length;g=m-1>=0?m-1:e.length-1;h=j-1>=0?j-1:p.length-1;y=[p[j],e[m],e[g]];y=THREE.FontUtils.Triangulate.area(y);D=[p[j],p[h],e[m]];D=THREE.FontUtils.Triangulate.area(D);u+v>y+D&&(m=w,j=o,m<0&&(m+=e.length),m%=e.length,j<0&&(j+=p.length),j%=p.length,g=m-1>=0?m-1:e.length-1,h=j-1>=0?j-1:p.length-1);u=e.slice(0,m);v=e.slice(m);w=p.slice(j);o=p.slice(0,j);h=[p[j],p[h],e[m]];x.push([p[j],e[m],e[g]]);x.push(h);e=u.concat(w).concat(o).concat(v)}return{shape:e,isolatedPts:x,allpoints:f}}, +THREE.Shape.Utils={removeHoles:function(b,c){var e=b.concat(),f=e.concat(),g,h,j,m,n,p,o,t,u,v,w=[];for(n=0;n=0?m-1:e.length-1;h=j-1>=0?j-1:p.length-1;var z=[p[j],e[m],e[g]];t=THREE.FontUtils.Triangulate.area(z);var x=[p[j],p[h],e[m]];u=THREE.FontUtils.Triangulate.area(x);v=m;o=j;m+=1;j+=-1;m<0&&(m+=e.length);m%=e.length; +j<0&&(j+=p.length);j%=p.length;g=m-1>=0?m-1:e.length-1;h=j-1>=0?j-1:p.length-1;z=[p[j],e[m],e[g]];z=THREE.FontUtils.Triangulate.area(z);x=[p[j],p[h],e[m]];x=THREE.FontUtils.Triangulate.area(x);t+u>z+x&&(m=v,j=o,m<0&&(m+=e.length),m%=e.length,j<0&&(j+=p.length),j%=p.length,g=m-1>=0?m-1:e.length-1,h=j-1>=0?j-1:p.length-1);t=e.slice(0,m);u=e.slice(m);v=p.slice(j);o=p.slice(0,j);h=[p[j],p[h],e[m]];w.push([p[j],e[m],e[g]]);w.push(h);e=t.concat(v).concat(o).concat(u)}return{shape:e,isolatedPts:w,allpoints:f}}, triangulateShape:function(b,c){var e=THREE.Shape.Utils.removeHoles(b,c),f=e.allpoints,g=e.isolatedPts,e=THREE.FontUtils.Triangulate(e.shape,!1),h,j,m,n;for(h=0;h0){j(0,0,-o-(h||0));for(n=b;n0){j(0,0,o+ -(g||0));for(n=b+b/2;n<2*b;n++)m.faces.push(new THREE.Face4(2*b+1,(2*n-2*b+2)%b+b,(2*n-2*b+1)%b+b,(2*n-2*b)%b+b))}n=0;for(b=this.faces.length;n=0;){Q=F;U=F-1;U<0&&(U=b.length-1);for(var e=0;e0;J--){t=J/o;z=m*t;X=n*(1-Math.sin((1-t)*Math.PI/2));F=0;for(il= -I.length;F=0;){k=B;V=B-1;V<0&&(V=b.length-1);for(var e=0,e=0;e0;U--){z=U/o;Y=m*z;J=n*(1-Math.sin((1-z)*Math.PI/2));B=0;for(P=G.length;B0||(o=this.vertices.push(new THREE.Vertex(new THREE.Vector3(u,m,v)))-1);p.push(o)}c.push(p)}for(var w,x,y,g=c.length,e=0;e0)for(f=0;f1&&(w= -this.vertices[j].position.clone(),x=this.vertices[n].position.clone(),y=this.vertices[p].position.clone(),w.normalize(),x.normalize(),y.normalize(),this.faces.push(new THREE.Face3(j,n,p,[new THREE.Vector3(w.x,w.y,w.z),new THREE.Vector3(x.x,x.y,x.z),new THREE.Vector3(y.x,y.y,y.z)])),this.faceVertexUvs[0].push([o,u,D]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:b}};THREE.SphereGeometry.prototype=new THREE.Geometry; +THREE.SphereGeometry=function(b,c,e){THREE.Geometry.call(this);for(var b=b||50,f,g=Math.PI,h=Math.max(3,c||8),j=Math.max(2,e||6),c=[],e=0;e0||(o=this.vertices.push(new THREE.Vertex(new THREE.Vector3(t,m,u)))-1);p.push(o)}c.push(p)}for(var v,w,z,g=c.length,e=0;e0)for(f=0;f1&&(v= +this.vertices[j].position.clone(),w=this.vertices[n].position.clone(),z=this.vertices[p].position.clone(),v.normalize(),w.normalize(),z.normalize(),this.faces.push(new THREE.Face3(j,n,p,[new THREE.Vector3(v.x,v.y,v.z),new THREE.Vector3(w.x,w.y,w.z),new THREE.Vector3(z.x,z.y,z.z)])),this.faceVertexUvs[0].push([o,t,x]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:b}};THREE.SphereGeometry.prototype=new THREE.Geometry; THREE.SphereGeometry.prototype.constructor=THREE.SphereGeometry;THREE.TextGeometry=function(b,c){THREE.Geometry.call(this);this.parameters=c||{};this.set(b)};THREE.TextGeometry.prototype=new THREE.Geometry;THREE.TextGeometry.prototype.constructor=THREE.TextGeometry; -THREE.TextGeometry.prototype.set=function(b,c){function e(b,e,c){x.vertices.push(new THREE.Vertex(new THREE.Vector3(b,e,c)))}function f(b,e,c,f){x.faces.push(new THREE.Face4(b,e,c,f))}this.text=b;var c=c||this.parameters,g=c.height!==void 0?c.height:50,h=c.curveSegments!==void 0?c.curveSegments:4,j=c.font!==void 0?c.font:"helvetiker",m=c.weight!==void 0?c.weight:"normal",n=c.style!==void 0?c.style:"normal",p=c.bezelThickness!==void 0?c.bezelThickness:10,o=c.bezelSize!==void 0?c.bezelSize:8,u=c.bezelEnabled!== -void 0?c.bezelEnabled:!1;THREE.FontUtils.size=c.size!==void 0?c.size:100;THREE.FontUtils.divisions=h;THREE.FontUtils.face=j;THREE.FontUtils.weight=m;THREE.FontUtils.style=n;THREE.FontUtils.bezelSize=o;var m=THREE.FontUtils.drawText(b),h=m.points,v=m.faces,j=m.contour,w=m.bezel,x=this;x.vertices=[];x.faces=[];for(var y,n=h.length,D=v.length,o=w.length,m=0;m0;){if(A){if(A.equals(j[m])){A=null;continue}}else A=j[m];p=n*2+m;v=p-1;f(p,v,v+o,p+o);for(u=0;u0;){if(A){if(A.equals(j[m])){A=null;continue}}else A=j[m];for(u=0;u0;){if(y){if(y.equals(j[m])){y=null;continue}}else y=j[m];p=n*2+m;u=p-1;f(p,u,u+o,p+o);for(t=0;t0;){if(y){if(y.equals(j[m])){y=null;continue}}else y=j[m];for(t=0;t0&&m.push({shape:g,holes:f}),g=u,f=[]):f.push(u):this.Triangulate.area(u)<0?(m.push({shape:u,holes:f}),f=[]):f.push(u);e++}o&&m.push({shape:g,holes:f})}var v,w,x, -y,D,A;h=[];for(j=0;j=0?w-1:g.length-1;var u=v-1>=0?v-1:o.length-1,H=[];H.push(o[v]);H.push(g[w]);H.push(g[e]);x=this.Triangulate.area(H);var C=[];C.push(o[v]);C.push(o[u]);C.push(g[w]);D=this.Triangulate.area(C);y=w;A=v;w+=1;v+=-1;w<0&&(w+=g.length);w%=g.length;v<0&&(v+=o.length);v%=g.length;e=w- -1>=0?w-1:g.length-1;u=v-1>=0?v-1:o.length-1;H=[];H.push(o[v]);H.push(g[w]);H.push(g[e]);H=this.Triangulate.area(H);C=[];C.push(o[v]);C.push(o[u]);C.push(g[w]);C=this.Triangulate.area(C);x+D>H+C&&(w=y,v=A,w<0&&(w+=g.length),w%=g.length,v<0&&(v+=o.length),v%=g.length,e=w-1>=0?w-1:g.length-1,u=v-1>=0?v-1:o.length-1);x=g.slice(0,w);D=g.slice(w);y=o.slice(v);A=o.slice(0,v);h.push(o[v]);h.push(g[w]);h.push(g[e]);h.push(o[v]);h.push(o[u]);h.push(g[w]);g=x.concat(y).concat(A).concat(D)}n.shape=g}v=[];w=[]; -for(j=p=0;j0&&m.push({shape:g,holes:f}),g=t,f=[]):f.push(t):this.Triangulate.area(t)<0?(m.push({shape:t,holes:f}),f=[]):f.push(t);e++}o&&m.push({shape:g,holes:f})}var u,v,w, +z,x,y;h=[];for(j=0;j=0?v-1:g.length-1;var t=u-1>=0?u-1:o.length-1,F=[];F.push(o[u]);F.push(g[v]);F.push(g[e]);w=this.Triangulate.area(F);var C=[];C.push(o[u]);C.push(o[t]);C.push(g[v]);x=this.Triangulate.area(C);z=v;y=u;v+=1;u+=-1;v<0&&(v+=g.length);v%=g.length;u<0&&(u+=o.length);u%=g.length;e=v- +1>=0?v-1:g.length-1;t=u-1>=0?u-1:o.length-1;F=[];F.push(o[u]);F.push(g[v]);F.push(g[e]);F=this.Triangulate.area(F);C=[];C.push(o[u]);C.push(o[t]);C.push(g[v]);C=this.Triangulate.area(C);w+x>F+C&&(v=z,u=y,v<0&&(v+=g.length),v%=g.length,u<0&&(u+=o.length),u%=g.length,e=v-1>=0?v-1:g.length-1,t=u-1>=0?u-1:o.length-1);w=g.slice(0,v);x=g.slice(v);z=o.slice(u);y=o.slice(0,u);h.push(o[u]);h.push(g[v]);h.push(g[e]);h.push(o[u]);h.push(o[t]);h.push(g[v]);g=w.concat(z).concat(y).concat(x)}n.shape=g}u=[];v=[]; +for(j=p=0;j=0;){if(o){if(o.equals(e[b])){o=null;n=this.Triangulate.area(f)>0;j.push(n);h.push(m.divideScalar(f.length));f=[];m=new THREE.Vector2;continue}}else o=e[b];m.addSelf(e[b]);f.push(e[b])}b=e.length;for(f= 0;--b>=0;)n=e[b],m=h[f],n=n.clone().subSelf(m),p=this.bezelSize/n.length(),j[f]?p+=1:p=1-p,p=n.multiplyScalar(p).addSelf(m),g.unshift(p),o?o.equals(e[b])&&(o=null,f++):o=e[b];c.bezel=g;return c},b2p0:function(b,c){var e=1-b;return e*e*c},b2p1:function(b,c){return 2*(1-b)*b*c},b2p2:function(b,c){return b*b*c},b2:function(b,c,e,f){return this.b2p0(b,c)+this.b2p1(b,e)+this.b2p2(b,f)},b3p0:function(b,c){var e=1-b;return e*e*e*c},b3p1:function(b,c){var e=1-b;return 3*e*e*b*c},b3p2:function(b,c){return 3* -(1-b)*b*b*c},b3p3:function(b,c){return b*b*b*c},b3:function(b,c,e,f,g){return this.b3p0(b,c)+this.b3p1(b,e)+this.b3p2(b,f)+this.b3p3(b,g)},extractGlyphPoints:function(b,c,e,f,g){var h=[],j,m,n,p,o,u,v,w,x,y,D=c.glyphs[b]||c.glyphs[ctxt.options.fallbackCharacter];if(D){if(D.o){c=D._cachedOutline||(D._cachedOutline=D.o.split(" "));n=c.length;for(b=0;b0)for(p=0;p2;){if(u--<=0){console.log("Warning, unable to triangulate polygon!");if(f)return m;return h}n=p;g<=n&&(n=0);p=n+1;g<=p&&(p=0);o=p+1;g<=o&&(o=0);var v;a:{v=b;var w=n,x=p,y=o,D=g,A=j,H=void 0,C=void 0,E=void 0, -I=void 0,J=void 0,S=void 0,R=void 0,N=void 0,F=void 0,C=v[A[w]].x,E=v[A[w]].y,I=v[A[x]].x,J=v[A[x]].y,S=v[A[y]].x,R=v[A[y]].y;if(1.0E-10>(I-C)*(R-E)-(J-E)*(S-C))v=!1;else{for(H=0;H=0&&X>=0&&U>=0){v=!1;break a}}v= -!0}}if(v){h.push([b[j[n]],b[j[p]],b[j[o]]]);m.push([j[n],j[p],j[o]]);n=p;for(o=p+1;o0)for(p=0;p2;){if(t--<=0){console.log("Warning, unable to triangulate polygon!");if(f)return m;return h}n=p;g<=n&&(n=0);p=n+1;g<=p&&(p=0);o=p+1;g<=o&&(o=0);var u;a:{u=b;var v=n,w=p,z=o,x=g,y=j,F=void 0,C=void 0,E=void 0, +G=void 0,B=void 0,P=void 0,I=void 0,H=void 0,T=void 0,C=u[y[v]].x,E=u[y[v]].y,G=u[y[w]].x,B=u[y[w]].y,P=u[y[z]].x,I=u[y[z]].y;if(1.0E-10>(G-C)*(I-E)-(B-E)*(P-C))u=!1;else{for(F=0;F=0&&Y>=0&&S>=0){u=!1;break a}}u= +!0}}if(u){h.push([b[j[n]],b[j[p]],b[j[o]]]);m.push([j[n],j[p],j[o]]);n=p;for(o=p+1;o>7)-127;f|=(h&127)<<16|g<<8;if(f==0&&k==-127)return 0;return(1-2*(j>>7))*(1+f*Math.pow(2,-23))*Math.pow(2,k)}function g(b,c){var e=o(b,c),f=o(b,c+1),h=o(b,c+2);return(o(b,c+3)<<24)+(h<<16)+(f<<8)+e}function n(b,c){var e=o(b,c);return(o(b,c+1)<<8)+e}function p(b,c){var e=o(b,c);return e>127?e-256:e}function o(b, -c){return b.charCodeAt(c)&255}function u(c){var e,f,h;e=g(b,c);f=g(b,c+J);h=g(b,c+S);c=n(b,c+R);THREE.BinaryLoader.prototype.f3(A,e,f,h,c)}function v(c){var e,f,h,j,k,o;e=g(b,c);f=g(b,c+J);h=g(b,c+S);j=n(b,c+R);k=g(b,c+N);o=g(b,c+F);c=g(b,c+W);THREE.BinaryLoader.prototype.f3n(A,E,e,f,h,j,k,o,c)}function w(c){var e,f,h,j;e=g(b,c);f=g(b,c+K);h=g(b,c+X);j=g(b,c+Q);c=n(b,c+U);THREE.BinaryLoader.prototype.f4(A,e,f,h,j,c)}function x(c){var e,f,h,j,o,p,u,v;e=g(b,c);f=g(b,c+K);h=g(b,c+X);j=g(b,c+Q);o=n(b, -c+U);p=g(b,c+k);u=g(b,c+ia);v=g(b,c+L);c=g(b,c+ga);THREE.BinaryLoader.prototype.f4n(A,E,e,f,h,j,o,p,u,v,c)}function y(c){var e,f;e=g(b,c);f=g(b,c+fa);c=g(b,c+$);THREE.BinaryLoader.prototype.uv3(A.faceVertexUvs[0],I[e*2],I[e*2+1],I[f*2],I[f*2+1],I[c*2],I[c*2+1])}function D(c){var e,f,h;e=g(b,c);f=g(b,c+ha);h=g(b,c+ja);c=g(b,c+ma);THREE.BinaryLoader.prototype.uv4(A.faceVertexUvs[0],I[e*2],I[e*2+1],I[f*2],I[f*2+1],I[h*2],I[h*2+1],I[c*2],I[c*2+1])}var A=this,H=0,C,E=[],I=[],J,S,R,N,F,W,K,X,Q,U,k,ia,L, -ga,fa,$,ha,ja,ma,ra,T,ka,ca,oa,da;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(A,f,c);C={signature:b.substr(H,8),header_bytes:o(b,H+8),vertex_coordinate_bytes:o(b,H+9),normal_coordinate_bytes:o(b,H+10),uv_coordinate_bytes:o(b,H+11),vertex_index_bytes:o(b,H+12),normal_index_bytes:o(b,H+13),uv_index_bytes:o(b,H+14),material_index_bytes:o(b,H+15),nvertices:g(b,H+16),nnormals:g(b,H+16+4),nuvs:g(b,H+16+8),ntri_flat:g(b,H+16+12),ntri_smooth:g(b,H+16+16),ntri_flat_uv:g(b,H+16+20),ntri_smooth_uv:g(b, -H+16+24),nquad_flat:g(b,H+16+28),nquad_smooth:g(b,H+16+32),nquad_flat_uv:g(b,H+16+36),nquad_smooth_uv:g(b,H+16+40)};H+=C.header_bytes;J=C.vertex_index_bytes;S=C.vertex_index_bytes*2;R=C.vertex_index_bytes*3;N=C.vertex_index_bytes*3+C.material_index_bytes;F=C.vertex_index_bytes*3+C.material_index_bytes+C.normal_index_bytes;W=C.vertex_index_bytes*3+C.material_index_bytes+C.normal_index_bytes*2;K=C.vertex_index_bytes;X=C.vertex_index_bytes*2;Q=C.vertex_index_bytes*3;U=C.vertex_index_bytes*4;k=C.vertex_index_bytes* -4+C.material_index_bytes;ia=C.vertex_index_bytes*4+C.material_index_bytes+C.normal_index_bytes;L=C.vertex_index_bytes*4+C.material_index_bytes+C.normal_index_bytes*2;ga=C.vertex_index_bytes*4+C.material_index_bytes+C.normal_index_bytes*3;fa=C.uv_index_bytes;$=C.uv_index_bytes*2;ha=C.uv_index_bytes;ja=C.uv_index_bytes*2;ma=C.uv_index_bytes*3;c=C.vertex_index_bytes*3+C.material_index_bytes;da=C.vertex_index_bytes*4+C.material_index_bytes;ra=C.ntri_flat*c;T=C.ntri_smooth*(c+C.normal_index_bytes*3);ka= -C.ntri_flat_uv*(c+C.uv_index_bytes*3);ca=C.ntri_smooth_uv*(c+C.normal_index_bytes*3+C.uv_index_bytes*3);oa=C.nquad_flat*da;c=C.nquad_smooth*(da+C.normal_index_bytes*4);da=C.nquad_flat_uv*(da+C.uv_index_bytes*4);H+=function(c){for(var f,g,h,k=C.vertex_coordinate_bytes*3,m=c+C.nvertices*k;c1&&(F=[new THREE.MeshFaceMaterial]);object=new THREE.Mesh(J,F);object.name=w;object.position.set(C[0],C[1],C[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=H.visible;L.scene.addObject(object);L.objects[w]=object;H.meshCollider&&(b=THREE.CollisionUtils.MeshColliderWBox(object),L.scene.collisions.colliders.push(b)); -if(H.castsShadow)b=new THREE.ShadowVolume(J),L.scene.addChild(b),b.position=object.position,b.rotation=object.rotation,b.scale=object.scale;H.trigger&&H.trigger.toLowerCase()!="none"&&(b={type:H.trigger,object:H},L.triggers[object.name]=b)}}else C=H.position,r=H.rotation,q=H.quaternion,s=H.scale,q=0,object=new THREE.Object3D,object.name=w,object.position.set(C[0],C[1],C[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0], -s[1],s[2]),object.visible=H.visible!==void 0?H.visible:!1,L.scene.addObject(object),L.objects[w]=object,L.empties[w]=object,H.trigger&&H.trigger.toLowerCase()!="none"&&(b={type:H.trigger,object:H},L.triggers[object.name]=b)}function n(b){return function(c){L.geometries[b]=c;m();Q-=1;e.onLoadComplete();o()}}function p(b){return function(c){L.geometries[b]=c}}function o(){e.callbackProgress({totalModels:k,totalTextures:ia,loadedModels:k-Q,loadedTextures:ia-U},L);e.onLoadProgress();Q==0&&U==0&&c(L)} -var u,v,w,x,y,D,A,H,C,E,I,J,S,R,N,F,W,K,X,Q,U,k,ia,L;K=b.data;N=new THREE.BinaryLoader;X=new THREE.JSONLoader;U=Q=0;L={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};b=!1;for(w in K.objects)if(H=K.objects[w],H.meshCollider){b=!0;break}if(b)L.scene.collisions=new THREE.CollisionSystem;if(K.transform){b=K.transform.position;E=K.transform.rotation;var ga=K.transform.scale;b&&L.scene.position.set(b[0],b[1],b[2]);E&&L.scene.rotation.set(E[0], -E[1],E[2]);ga&&L.scene.scale.set(ga[0],ga[1],ga[2]);(b||E||ga)&&L.scene.updateMatrix()}b=function(){U-=1;o();e.onLoadComplete()};for(y in K.cameras){E=K.cameras[y];if(E.type=="perspective")S=new THREE.Camera(E.fov,E.aspect,E.near,E.far);else if(E.type=="ortho")S=new THREE.Camera,S.projectionMatrix=THREE.Matrix4.makeOrtho(E.left,E.right,E.top,E.bottom,E.near,E.far);C=E.position;E=E.target;S.position.set(C[0],C[1],C[2]);S.target.position.set(E[0],E[1],E[2]);L.cameras[y]=S}for(x in K.lights)y=K.lights[x], -S=y.color!==void 0?y.color:16777215,E=y.intensity!==void 0?y.intensity:1,y.type=="directional"?(C=y.direction,W=new THREE.DirectionalLight(S,E),W.position.set(C[0],C[1],C[2]),W.position.normalize()):y.type=="point"?(C=y.position,d=y.distance,W=new THREE.PointLight(S,E,d),W.position.set(C[0],C[1],C[2])):y.type=="ambient"&&(W=new THREE.AmbientLight(S)),L.scene.addLight(W),L.lights[x]=W;for(D in K.fogs)x=K.fogs[D],x.type=="linear"?R=new THREE.Fog(0,x.near,x.far):x.type=="exp2"&&(R=new THREE.FogExp2(0, -x.density)),E=x.color,R.color.setRGB(E[0],E[1],E[2]),L.fogs[D]=R;if(L.cameras&&K.defaults.camera)L.currentCamera=L.cameras[K.defaults.camera];if(L.fogs&&K.defaults.fog)L.scene.fog=L.fogs[K.defaults.fog];E=K.defaults.bgcolor;L.bgColor=new THREE.Color;L.bgColor.setRGB(E[0],E[1],E[2]);L.bgColorAlpha=K.defaults.bgalpha;for(u in K.geometries)if(D=K.geometries[u],D.type=="bin_mesh"||D.type=="ascii_mesh")Q+=1,e.onLoadStart();k=Q;for(u in K.geometries)D=K.geometries[u],D.type=="cube"?(J=new THREE.CubeGeometry(D.width, -D.height,D.depth,D.segmentsWidth,D.segmentsHeight,D.segmentsDepth,null,D.flipped,D.sides),L.geometries[u]=J):D.type=="plane"?(J=new THREE.PlaneGeometry(D.width,D.height,D.segmentsWidth,D.segmentsHeight),L.geometries[u]=J):D.type=="sphere"?(J=new THREE.SphereGeometry(D.radius,D.segmentsWidth,D.segmentsHeight),L.geometries[u]=J):D.type=="cylinder"?(J=new THREE.CylinderGeometry(D.numSegs,D.topRad,D.botRad,D.height,D.topOffset,D.botOffset),L.geometries[u]=J):D.type=="torus"?(J=new THREE.TorusGeometry(D.radius, -D.tube,D.segmentsR,D.segmentsT),L.geometries[u]=J):D.type=="icosahedron"?(J=new THREE.IcosahedronGeometry(D.subdivisions),L.geometries[u]=J):D.type=="bin_mesh"?N.load({model:f(D.url,K.urlBaseType),callback:n(u)}):D.type=="ascii_mesh"?X.load({model:f(D.url,K.urlBaseType),callback:n(u)}):D.type=="embedded_mesh"&&(D=K.embeds[D.id])&&X.createModel(D,p(u),"");for(A in K.textures)if(u=K.textures[A],u.url instanceof Array){U+=u.url.length;for(N=0;N1&&(T=[new THREE.MeshFaceMaterial]);object=new THREE.Mesh(B,T);object.name=v;object.position.set(C[0],C[1],C[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=F.visible;O.scene.addObject(object);O.objects[v]=object;F.meshCollider&&(b=THREE.CollisionUtils.MeshColliderWBox(object),O.scene.collisions.colliders.push(b)); +if(F.castsShadow)b=new THREE.ShadowVolume(B),O.scene.addChild(b),b.position=object.position,b.rotation=object.rotation,b.scale=object.scale;F.trigger&&F.trigger.toLowerCase()!="none"&&(b={type:F.trigger,object:F},O.triggers[object.name]=b)}}else C=F.position,r=F.rotation,q=F.quaternion,s=F.scale,q=0,object=new THREE.Object3D,object.name=v,object.position.set(C[0],C[1],C[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0], +s[1],s[2]),object.visible=F.visible!==void 0?F.visible:!1,O.scene.addObject(object),O.objects[v]=object,O.empties[v]=object,F.trigger&&F.trigger.toLowerCase()!="none"&&(b={type:F.trigger,object:F},O.triggers[object.name]=b)}function n(b){return function(c){O.geometries[b]=c;m();K-=1;e.onLoadComplete();o()}}function p(b){return function(c){O.geometries[b]=c}}function o(){e.callbackProgress({totalModels:k,totalTextures:V,loadedModels:k-K,loadedTextures:V-S},O);e.onLoadProgress();K==0&&S==0&&c(O)}var t, +u,v,w,z,x,y,F,C,E,G,B,P,I,H,T,U,J,Y,K,S,k,V,O;J=b.data;H=new THREE.BinaryLoader;Y=new THREE.JSONLoader;S=K=0;O={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};b=!1;for(v in J.objects)if(F=J.objects[v],F.meshCollider){b=!0;break}if(b)O.scene.collisions=new THREE.CollisionSystem;if(J.transform){b=J.transform.position;E=J.transform.rotation;var fa=J.transform.scale;b&&O.scene.position.set(b[0],b[1],b[2]);E&&O.scene.rotation.set(E[0], +E[1],E[2]);fa&&O.scene.scale.set(fa[0],fa[1],fa[2]);(b||E||fa)&&O.scene.updateMatrix()}b=function(){S-=1;o();e.onLoadComplete()};for(z in J.cameras){E=J.cameras[z];if(E.type=="perspective")P=new THREE.Camera(E.fov,E.aspect,E.near,E.far);else if(E.type=="ortho")P=new THREE.Camera,P.projectionMatrix=THREE.Matrix4.makeOrtho(E.left,E.right,E.top,E.bottom,E.near,E.far);C=E.position;E=E.target;P.position.set(C[0],C[1],C[2]);P.target.position.set(E[0],E[1],E[2]);O.cameras[z]=P}for(w in J.lights)z=J.lights[w], +P=z.color!==void 0?z.color:16777215,E=z.intensity!==void 0?z.intensity:1,z.type=="directional"?(C=z.direction,U=new THREE.DirectionalLight(P,E),U.position.set(C[0],C[1],C[2]),U.position.normalize()):z.type=="point"?(C=z.position,d=z.distance,U=new THREE.PointLight(P,E,d),U.position.set(C[0],C[1],C[2])):z.type=="ambient"&&(U=new THREE.AmbientLight(P)),O.scene.addLight(U),O.lights[w]=U;for(x in J.fogs)w=J.fogs[x],w.type=="linear"?I=new THREE.Fog(0,w.near,w.far):w.type=="exp2"&&(I=new THREE.FogExp2(0, +w.density)),E=w.color,I.color.setRGB(E[0],E[1],E[2]),O.fogs[x]=I;if(O.cameras&&J.defaults.camera)O.currentCamera=O.cameras[J.defaults.camera];if(O.fogs&&J.defaults.fog)O.scene.fog=O.fogs[J.defaults.fog];E=J.defaults.bgcolor;O.bgColor=new THREE.Color;O.bgColor.setRGB(E[0],E[1],E[2]);O.bgColorAlpha=J.defaults.bgalpha;for(t in J.geometries)if(x=J.geometries[t],x.type=="bin_mesh"||x.type=="ascii_mesh")K+=1,e.onLoadStart();k=K;for(t in J.geometries)x=J.geometries[t],x.type=="cube"?(B=new THREE.CubeGeometry(x.width, +x.height,x.depth,x.segmentsWidth,x.segmentsHeight,x.segmentsDepth,null,x.flipped,x.sides),O.geometries[t]=B):x.type=="plane"?(B=new THREE.PlaneGeometry(x.width,x.height,x.segmentsWidth,x.segmentsHeight),O.geometries[t]=B):x.type=="sphere"?(B=new THREE.SphereGeometry(x.radius,x.segmentsWidth,x.segmentsHeight),O.geometries[t]=B):x.type=="cylinder"?(B=new THREE.CylinderGeometry(x.numSegs,x.topRad,x.botRad,x.height,x.topOffset,x.botOffset),O.geometries[t]=B):x.type=="torus"?(B=new THREE.TorusGeometry(x.radius, +x.tube,x.segmentsR,x.segmentsT),O.geometries[t]=B):x.type=="icosahedron"?(B=new THREE.IcosahedronGeometry(x.subdivisions),O.geometries[t]=B):x.type=="bin_mesh"?H.load({model:f(x.url,J.urlBaseType),callback:n(t)}):x.type=="ascii_mesh"?Y.load({model:f(x.url,J.urlBaseType),callback:n(t)}):x.type=="embedded_mesh"&&(x=J.embeds[x.id])&&Y.createModel(x,p(t),"");for(y in J.textures)if(t=J.textures[y],t.url instanceof Array){S+=t.url.length;for(H=0;H=this.maxCount-3&&m(this)};this.begin=function(){this.count=0; -this.hasNormal=this.hasPos=!1};this.end=function(b){if(this.count!=0){for(var c=this.count*3;cthis.size-1&&(n=this.size-1);var v=Math.floor(p-m);v<1&&(v=1);p=Math.floor(p+m);p>this.size-1&&(p=this.size-1);var w=Math.floor(o-m);w<1&&(w=1);m=Math.floor(o+m);m>this.size-1&&(m=this.size- -1);for(var x,y,D,A,H,C;u0&&(this.field[D+x]+=A)}}};this.addPlaneX=function(b,c){var g,h,j,m,n,p=this.size,o=this.yd,u=this.zd,v=this.field,w=p*Math.sqrt(b/c);w>p&&(w=p);for(g=0;g0)for(h=0;ho&&(x=o);for(h=0;h0){n=h*u;for(g=0;gsize&&(dist=size);for(j=0;j0){n=zd*j;for(h=0;hthis.size-1&&(n=this.size-1);var u=Math.floor(p-m);u<1&&(u=1);p=Math.floor(p+m);p>this.size-1&&(p=this.size-1);var v=Math.floor(o-m);v<1&&(v=1);m=Math.floor(o+m);m>this.size-1&&(m=this.size- +1);for(var w,z,x,y,F,C;t0&&(this.field[x+w]+=y)}}};this.addPlaneX=function(b,c){var g,h,j,m,n,p=this.size,o=this.yd,t=this.zd,u=this.field,v=p*Math.sqrt(b/c);v>p&&(v=p);for(g=0;g0)for(h=0;ho&&(w=o);for(h=0;h0){n=h*t;for(g=0;gsize&&(dist=size);for(j=0;j0){n=zd*j;for(h=0;hc.max.z)return Number.MAX_VALUE;c.normal.set(0,m,0);break;case THREE.CollisionSystem.prototype.raySphere=function(b,c){var e=c.center.clone().subSelf(b.origin);if(e.lengthSq=0)return Math.abs(f)-Math.sqrt(e);return Number.MAX_VALUE};THREE.CollisionSystem.__v1=new THREE.Vector3;THREE.CollisionSystem.__v2=new THREE.Vector3;THREE.CollisionSystem.__v3=new THREE.Vector3;THREE.CollisionSystem.__nr=new THREE.Vector3;THREE.CollisionSystem.__m=new THREE.Matrix4; THREE.CollisionSystem.__r=new THREE.Ray;THREE.CollisionUtils={};THREE.CollisionUtils.MeshOBB=function(b){b.geometry.computeBoundingBox();var c=b.geometry.boundingBox,e=new THREE.Vector3(c.x[0],c.y[0],c.z[0]),c=new THREE.Vector3(c.x[1],c.y[1],c.z[1]),e=new THREE.BoxCollider(e,c);e.mesh=b;return e};THREE.CollisionUtils.MeshAABB=function(b){var c=THREE.CollisionUtils.MeshOBB(b);c.min.addSelf(b.position);c.max.addSelf(b.position);c.dynamic=!1;return c}; THREE.CollisionUtils.MeshColliderWBox=function(b){return new THREE.MeshCollider(b,THREE.CollisionUtils.MeshOBB(b))}; -if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(b){THREE.WebGLRenderer.call(this,b);var c=this,e=this.setSize,f=this.render,g=new THREE.Camera,h=new THREE.Camera,j=new THREE.Matrix4,m=new THREE.Matrix4,n,p,o;g.useTarget=h.useTarget=!1;g.matrixAutoUpdate=h.matrixAutoUpdate=!1;var b={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},u=new THREE.WebGLRenderTarget(512,512,b),v=new THREE.WebGLRenderTarget(512,512,b),w=new THREE.Camera(53,1,1,1E4);w.position.z= -2;_material=new THREE.MeshShaderMaterial({uniforms:{mapLeft:{type:"t",value:0,texture:u},mapRight:{type:"t",value:1,texture:v}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D mapLeft;\nuniform sampler2D mapRight;\nvarying vec2 vUv;\nvoid main() {\nvec4 colorL, colorR;\nvec2 uv = vUv;\ncolorL = texture2D( mapLeft, uv );\ncolorR = texture2D( mapRight, uv );\ngl_FragColor = vec4( colorL.g * 0.7 + colorL.b * 0.3, colorR.g, colorR.b, colorL.a + colorR.a ) * 1.1;\n}"}); -var x=new THREE.Scene;x.addObject(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));this.setSize=function(b,f){e.call(c,b,f);u.width=b;u.height=f;v.width=b;v.height=f};this.render=function(b,e){e.update(null,!0);if(n!==e.aspect||p!==e.near||o!==e.fov){n=e.aspect;p=e.near;o=e.fov;var A=e.projectionMatrix.clone(),H=125/30*0.5,C=H*p/125,E=p*Math.tan(o*Math.PI/360),I;j.n14=H;m.n14=-H;H=-E*n+C;I=E*n+C;A.n11=2*p/(I-H);A.n13=(I+H)/(I-H);g.projectionMatrix=A.clone();H=-E*n-C;I=E*n-C;A.n11=2*p/(I-H); -A.n13=(I+H)/(I-H);h.projectionMatrix=A.clone()}g.matrix=e.matrixWorld.clone().multiplySelf(m);g.update(null,!0);g.position.copy(e.position);g.near=p;g.far=e.far;f.call(c,b,g,u,!0);h.matrix=e.matrixWorld.clone().multiplySelf(j);h.update(null,!0);h.position.copy(e.position);h.near=p;h.far=e.far;f.call(c,b,h,v,!0);f.call(c,x,w)}}; +if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(b){THREE.WebGLRenderer.call(this,b);var c=this,e=this.setSize,f=this.render,g=new THREE.Camera,h=new THREE.Camera,j=new THREE.Matrix4,m=new THREE.Matrix4,n,p,o;g.useTarget=h.useTarget=!1;g.matrixAutoUpdate=h.matrixAutoUpdate=!1;var b={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},t=new THREE.WebGLRenderTarget(512,512,b),u=new THREE.WebGLRenderTarget(512,512,b),v=new THREE.Camera(53,1,1,1E4);v.position.z= +2;_material=new THREE.MeshShaderMaterial({uniforms:{mapLeft:{type:"t",value:0,texture:t},mapRight:{type:"t",value:1,texture:u}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D mapLeft;\nuniform sampler2D mapRight;\nvarying vec2 vUv;\nvoid main() {\nvec4 colorL, colorR;\nvec2 uv = vUv;\ncolorL = texture2D( mapLeft, uv );\ncolorR = texture2D( mapRight, uv );\ngl_FragColor = vec4( colorL.g * 0.7 + colorL.b * 0.3, colorR.g, colorR.b, colorL.a + colorR.a ) * 1.1;\n}"}); +var w=new THREE.Scene;w.addObject(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));this.setSize=function(b,f){e.call(c,b,f);t.width=b;t.height=f;u.width=b;u.height=f};this.render=function(b,e){e.update(null,!0);if(n!==e.aspect||p!==e.near||o!==e.fov){n=e.aspect;p=e.near;o=e.fov;var y=e.projectionMatrix.clone(),F=125/30*0.5,C=F*p/125,E=p*Math.tan(o*Math.PI/360),G;j.n14=F;m.n14=-F;F=-E*n+C;G=E*n+C;y.n11=2*p/(G-F);y.n13=(G+F)/(G-F);g.projectionMatrix=y.clone();F=-E*n-C;G=E*n-C;y.n11=2*p/(G-F); +y.n13=(G+F)/(G-F);h.projectionMatrix=y.clone()}g.matrix=e.matrixWorld.clone().multiplySelf(m);g.update(null,!0);g.position.copy(e.position);g.near=p;g.far=e.far;f.call(c,b,g,t,!0);h.matrix=e.matrixWorld.clone().multiplySelf(j);h.update(null,!0);h.position.copy(e.position);h.near=p;h.far=e.far;f.call(c,b,h,u,!0);f.call(c,w,v)}}; if(THREE.WebGLRenderer)THREE.CrosseyedWebGLRenderer=function(b){THREE.WebGLRenderer.call(this,b);this.autoClear=!1;var c=this,e=this.setSize,f=this.render,g,h,j=new THREE.Camera,m=new THREE.Camera;c.separation=10;if(b&&b.separation!==void 0)c.separation=b.separation;(new THREE.Camera(53,window.innerWidth/2/window.innerHeight,1,1E4)).position.z=-10;this.setSize=function(b,f){e.call(c,b,f);g=b/2;h=f};this.render=function(b,e){this.clear();j.fov=e.fov;j.aspect=0.5*e.aspect;j.near=e.near;j.far=e.far; j.updateProjectionMatrix();j.position.copy(e.position);j.target.position.copy(e.target.position);j.translateX(c.separation);m.projectionMatrix=j.projectionMatrix;m.position.copy(e.position);m.target.position.copy(e.target.position);m.translateX(-c.separation);this.setViewport(0,0,g,h);f.call(c,b,j);this.setViewport(g,0,g,h);f.call(c,b,m,!1)}}; diff --git a/examples/canvas_geometry_shape.html b/examples/webgl_geometry_shapes.html similarity index 94% rename from examples/canvas_geometry_shape.html rename to examples/webgl_geometry_shapes.html index 15204cfecf..08acb4ed0c 100644 --- a/examples/canvas_geometry_shape.html +++ b/examples/webgl_geometry_shapes.html @@ -62,13 +62,18 @@ scene = new THREE.Scene(); + var light = new THREE.DirectionalLight( 0xffffff ); + light.position.set( 0, 0, 1 ); + light.position.normalize(); + scene.addLight( light ); + parent = new THREE.Object3D(); parent.position.y = 50; scene.addChild( parent ); function addGeometry( geometry, color, x, y, z, rx, ry, rz, s ) { - var mesh = new THREE.Mesh( geometry, [ new THREE.MeshBasicMaterial( { color: color } ), new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true } ) ] ); + var mesh = new THREE.Mesh( geometry, [ new THREE.MeshLambertMaterial( { color: color } ), new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true } ) ] ); mesh.position.set( x, y, z ); mesh.rotation.set( rx, ry, rz ); mesh.scale.set( s, s, s ); @@ -76,7 +81,7 @@ } - var extrudeSettings = { amount: 20, bevelEnabled: true, bevelSegments: 2, steps: 2 }; //amount: 40, steps: 2 + var extrudeSettings = { amount: 20, bevelEnabled: true, bevelSegments: 2, steps: 2 }; //amount: 40, steps: 2 // California @@ -210,20 +215,21 @@ fishShape.quadraticCurveTo( x + 50, y - 80, x, y ); var fish3d = fishShape.extrude( extrudeSettings ); - + // Arc Circle + var arcShape = new THREE.Shape(); arcShape.moveTo( 0, 0); - arcShape.arc(10,10, 40, 0, Math.PI*2,false); - + arcShape.arc( 10, 10, 40, 0, Math.PI*2, false ); + var holePath = new THREE.Path(); - holePath.moveTo( 0, 0); - holePath.arc(10, 10, 10, 0, Math.PI*2, true); - arcShape.holes.push(holePath); - + holePath.moveTo( 0, 0 ); + holePath.arc( 10, 10, 10, 0, Math.PI*2, true ); + arcShape.holes.push( holePath ); + var arc3d = arcShape.extrude( extrudeSettings ); - // Spline shape + Path Extrusion + // Spline shape + path extrusion var splinepts = []; splinepts.push( new THREE.Vector2 ( 350, 100 ) ); @@ -239,7 +245,7 @@ var extrudePath = new THREE.Path(); - extrudePath.moveTo(0,0); + extrudePath.moveTo( 0, 0 ); extrudePath.lineTo( 10, 10 ); extrudePath.quadraticCurveTo( 80, 60, 160, 10 ); extrudePath.quadraticCurveTo( 240, -40, 320, 10 ); @@ -259,7 +265,7 @@ addGeometry( splineShape3d, 0x888888, -50, -100, -50, 0, 0, 0, 0.2 ); addGeometry( arc3d, 0xbb4422, 150, 0, 0, 0, 0, 0, 1 ); - renderer = new THREE.CanvasRenderer(); + renderer = new THREE.WebGLRenderer( { antialias: true } ); renderer.setSize( window.innerWidth, window.innerHeight ); container.appendChild( renderer.domElement ); diff --git a/src/extras/geometries/ExtrudeGeometry.js b/src/extras/geometries/ExtrudeGeometry.js index 62973d0c84..085394a2e6 100644 --- a/src/extras/geometries/ExtrudeGeometry.js +++ b/src/extras/geometries/ExtrudeGeometry.js @@ -8,16 +8,19 @@ THREE.ExtrudeGeometry = function( shape, options ) { var amount = options.amount !== undefined ? options.amount : 100; // todo: bevel + var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 8; // 10 - var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness; // 8 + var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness; // 8 var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false var bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + // We should set bevel segments to 0 if bevel is not enabled. - if (!bevelEnabled) bevelSegments = 0 ; - + + if ( !bevelEnabled ) bevelSegments = 0; + var steps = options.steps !== undefined ? options.steps : 1; - + var extrudePath = options.path !== undefined ? options.path : null; var extrudePts, extrudeByPath = false; @@ -28,102 +31,109 @@ THREE.ExtrudeGeometry = function( shape, options ) { extrudeByPath = true; } - + // TODO, extrude by path's tangents? also via 3d path? THREE.Geometry.call( this ); - // Variables initalization + var ahole, h, hl; // looping of holes var scope = this; var bevelPoints = []; // getPoints - var shapePoints = shape.extractAllPoints(false); // false for getPoints | true for getSpacedPoints() for points with equal divisions - - var vertices = shapePoints.shape; - var holes = shapePoints.holes; - + + var shapePoints = shape.extractAllPoints( false ); + + var vertices = shapePoints.shape; + var holes = shapePoints.holes; + var reverse = !THREE.Shape.Utils.isClockWise( vertices ) ; - if (reverse) { + if ( reverse ) { vertices = vertices.reverse(); - - // Maybe we should also check if holes are in the opposite direction, just to be safe... - - for (h = 0, hl = holes.length; h < hl; h++ ) { - - ahole = holes[h]; - if (THREE.Shape.Utils.isClockWise(ahole)) { - - holes[h] = ahole.reverse(); - + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( h = 0, hl = holes.length; h < hl; h++ ) { + + ahole = holes[ h ]; + + if ( THREE.Shape.Utils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + } + } - + reverse = false; // If vertices are in order now, we shouldn't need to worry about them again (hopefully)! + } - - - - var faces = THREE.Shape.Utils.triangulateShape(vertices, holes); - //var faces = THREE.Shape.Utils.triangulate2(vertices, holes); + + + var faces = THREE.Shape.Utils.triangulateShape( vertices, holes ); + //var faces = THREE.Shape.Utils.triangulate2( vertices, holes ); //console.log(faces); - + //// /// Handle Vertices //// - + var contour = vertices; // vertices has all points but contour has only points of circumference - - for (h = 0, hl = holes.length; h < hl; h++ ) { - ahole = holes[h]; + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; - vertices = vertices.concat(ahole); + vertices = vertices.concat( ahole ); } - + // Find all centroids of shapes and holes - - var b; + + var i, il; var sum = new THREE.Vector2(); - var contourCentroid, holesCentroids; - - for (i=0, il = contour.length; i 0; b--) { - t = b / bevelSegments; + + for ( b = bevelSegments; b > 0; b-- ) { + + t = b / bevelSegments; z = bevelThickness * t; + // Formula could probably be simplified - bs = bevelSize * (1-Math.sin ((1-t) * Math.PI/2 )) ; //bevelSize * t ; + + bs = bevelSize * ( 1 - Math.sin ( ( 1 - t ) * Math.PI/2 ) ) ; // bevelSize * t ; // contract shape - for ( i = 0, il = contour.length; i < il; i++ ) { - - vert = scalePt(contour[i], contourCentroid, bs , false); - v( vert.x, vert.y, -z); - + + for ( i = 0, il = contour.length; i < il; i ++ ) { + + vert = scalePt( contour[ i ], contourCentroid, bs, false ); + v( vert.x, vert.y, -z ); + } - + // expand holes + for ( h = 0, hl = holes.length; h < hl; h++ ) { - - ahole = holes[h]; + + ahole = holes[ h ]; + for ( i = 0, il = ahole.length; i < il; i++ ) { - vert = scalePt(ahole[i], holesCentroids[h] , bs , true); - v( vert.x, vert.y, -z); + + vert = scalePt( ahole[ i ], holesCentroids[ h ], bs, true ); + v( vert.x, vert.y, -z ); + } - + } - + } - - + + // Back facing vertices for ( i = 0; i < vlen; i++ ) { vert = vertices[ i ]; //v( vert.x, vert.y, 0 ); - - + if ( !extrudeByPath ) { v( vert.x, vert.y, 0 ); @@ -195,11 +208,12 @@ THREE.ExtrudeGeometry = function( shape, options ) { } - // Add steped vertices... + // Add stepped vertices... // Including front facing vertices - var s = 1; - for ( ; s <= steps; s++ ) { + var s; + + for ( s = 1; s <= steps; s++ ) { for ( i = 0; i < vlen; i ++ ) { @@ -218,76 +232,79 @@ THREE.ExtrudeGeometry = function( shape, options ) { } } - - - // Add Bevel Segments planes - - for (b=1; b <= bevelSegments; b++) { - - t = b / bevelSegments; - z = bevelThickness * t; - bs = bevelSize * (1-Math.sin ((1-t) * Math.PI/2 )); - - // contract shape - for ( i = 0, il = contour.length; i < il; i++ ) { - - vert = scalePt(contour[i], contourCentroid, bs , false); - v( vert.x, vert.y, amount + z); - } - // expand holes - for ( h = 0, hl = holes.length; h < hl; h++ ) { + // Add bevel segments planes + + for ( b = 1; b <= bevelSegments; b++ ) { + + t = b / bevelSegments; + z = bevelThickness * t; + bs = bevelSize * ( 1-Math.sin ( ( 1 - t ) * Math.PI/2 ) ); + + // contract shape + + for ( i = 0, il = contour.length; i < il; i++ ) { + + vert = scalePt( contour[ i ], contourCentroid, bs, false ); + v( vert.x, vert.y, amount + z); + + } + + // expand holes + + for ( h = 0, hl = holes.length; h < hl; h++ ) { + + ahole = holes[ h ]; + + for ( i = 0, il = ahole.length; i < il; i++ ) { + + vert = scalePt( ahole[ i ], holesCentroids[h], bs, true ); - ahole = holes[h]; - for ( i = 0, il = ahole.length; i < il; i++ ) { - vert = scalePt(ahole[i], holesCentroids[h] , bs , true); - - if ( !extrudeByPath ) { + if ( !extrudeByPath ) { - v( vert.x, vert.y, amount + z); + v( vert.x, vert.y, amount + z ); - } else { + } else { - v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x +z); + v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x +z ); - } - } } - - } - + } + + } - //// /// Handle Faces //// - + + // not used anywhere + // var layers = ( steps + bevelSegments * 2 ) * vlen; // Bottom faces - if (bevelEnabled ) { - - - var layer = 0 ; //steps + 1 + + if ( bevelEnabled ) { + + var layer = 0 ; // steps + 1 var offset = vlen * layer; - - for ( i = 0; i < flen; i++ ) { + + for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; - f3( face[ 2 ]+ offset, face[ 1 ]+ offset, face[ 0 ] + offset); + f3( face[ 2 ]+ offset, face[ 1 ]+ offset, face[ 0 ] + offset ); } - layer = steps + bevelSegments* 2; + layer = steps + bevelSegments * 2; offset = vlen * layer; - + // Top faces - var layers = (steps + bevelSegments * 2) * vlen; - for ( i = 0; i < flen; i++ ) { + + for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); @@ -304,35 +321,40 @@ THREE.ExtrudeGeometry = function( shape, options ) { } // Top faces - var layers = (steps + bevelSegments * 2) * vlen; - for ( i = 0; i < flen; i++ ) { + + for ( i = 0; i < flen; i ++ ) { face = faces[ i ]; - f3( face[ 0 ] + vlen* steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); + f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); } + } var tmpPt; var j, k, l, m; var layeroffset = 0; - + // Sides faces - - sidewalls(contour); + + sidewalls( contour ); layeroffset += contour.length; - - for (h = 0, hl = holes.length; h < hl; h++ ) { - ahole = holes[h]; - sidewalls(ahole); + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + sidewalls( ahole ); + //, true layeroffset += ahole.length; + } - // Create faces for the z-sides of the shape - function sidewalls(contour) { - + // Create faces for the z-sides of the shape + + function sidewalls( contour ) { + i = contour.length; while ( --i >= 0 ) { @@ -340,7 +362,6 @@ THREE.ExtrudeGeometry = function( shape, options ) { tmpPt = contour[ i ]; j = i; - k = i - 1; if ( k < 0 ) k = contour.length - 1; @@ -349,20 +370,19 @@ THREE.ExtrudeGeometry = function( shape, options ) { var s = 0; - for ( ; s < (steps + bevelSegments * 2) ; s++ ) { + for ( s = 0; s < ( steps + bevelSegments * 2 ); s ++ ) { var slen1 = vlen * s; var slen2 = vlen * ( s + 1 ); - - + f4( layeroffset + j + slen1, layeroffset + k + slen1, layeroffset + k + slen2, layeroffset + j + slen2 ); - } } + } - + // UVs to be added this.computeCentroids(); @@ -378,13 +398,13 @@ THREE.ExtrudeGeometry = function( shape, options ) { function f3( a, b, c ) { // if ( reverse ) { // Can now be removed - // + // // scope.faces.push( new THREE.Face3( c, b, a ) ); - // + // // } else { - // + // scope.faces.push( new THREE.Face3( a, b, c ) ); - // + // // } } diff --git a/src/extras/geometries/Path.js b/src/extras/geometries/Path.js index 4a35fab12b..baad1eabe9 100644 --- a/src/extras/geometries/Path.js +++ b/src/extras/geometries/Path.js @@ -426,7 +426,7 @@ THREE.Path.prototype.getPoint = function( t ) { while ( i < curveLengths.length ) { - if ( curveLengths[ i ] >= d) { + if ( curveLengths[ i ] >= d ) { diff = curveLengths[ i ] - d; curve = this.curves[ i ]; @@ -488,7 +488,7 @@ THREE.Path.prototype.createPathGeometry = function( divisions, lineMaterial ) { var pathSegment = new THREE.Geometry(); pathSegment.vertices.push( new THREE.Vertex( new THREE.Vector3( pts[i-1].x, pts[i-1].y, 0 ) ) ); - pathSegment.vertices.push( new THREE.Vertex( new THREE.Vector3( pts[i].x, pts[i].y, 0) ) ); + pathSegment.vertices.push( new THREE.Vertex( new THREE.Vector3( pts[i].x, pts[i].y, 0 ) ) ); segment = new THREE.Line( pathSegment , lineMaterial ); pathGeometry.addChild(segment); -- GitLab