From 2294094adfe711b6377bf0c3a23327b4eccb9bc7 Mon Sep 17 00:00:00 2001 From: alteredq Date: Sun, 6 Mar 2011 19:39:32 +0100 Subject: [PATCH] Cleaned up a bit WebGLRenderer. Clearing API for rendering to RenderTarget is now flipped: before forced clearing of render target was default, now no clearing is default. New way of doing things saves one extra duplicitous clear call when switching render targets (like when doing postprocessing). (doing documentation is indeed turning out to be useful) --- build/Three.js | 440 ++++++++++++------------- build/custom/ThreeWebGL.js | 79 +++-- examples/misc_sound.html | 4 +- examples/webgl_lines_colors.html | 4 +- examples/webgl_materials_video.html | 4 +- examples/webgl_postprocessing.html | 4 +- examples/webgl_postprocessing_dof.html | 4 +- examples/webgl_ribbons.html | 4 +- examples/webgl_rtt.html | 2 +- src/renderers/WebGLRenderer.js | 14 +- 10 files changed, 276 insertions(+), 283 deletions(-) diff --git a/build/Three.js b/build/Three.js index 013dda20..3774aac1 100755 --- a/build/Three.js +++ b/build/Three.js @@ -1,6 +1,6 @@ // Three.js r35 - http://github.com/mrdoob/three.js var THREE=THREE||{};THREE.Color=function(a){this.setHex(a)}; -THREE.Color.prototype={autoUpdate:!0,setRGB:function(a,c,b){this.r=a;this.g=c;this.b=b;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,b){var d,f,g,h,j,l;if(b==0)d=f=g=0;else{h=Math.floor(a*6);j=a*6-h;a=b*(1-c);l=b*(1-c*j);c=b*(1-c*(1-j));switch(h){case 1:d=l;f=b;g=a;break;case 2:d=a;f=b;g=c;break;case 3:d=a;f=l;g=b;break;case 4:d=c;f=a;g=b;break;case 5:d=b;f=a;g=l;break;case 6:case 0:d=b;f=c;g=a}}this.r=d;this.g=f;this.b=g;if(this.autoUpdate){this.updateHex(); +THREE.Color.prototype={autoUpdate:!0,setRGB:function(a,c,b){this.r=a;this.g=c;this.b=b;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,b){var d,e,g,h,j,k;if(b==0)d=e=g=0;else{h=Math.floor(a*6);j=a*6-h;a=b*(1-c);k=b*(1-c*j);c=b*(1-c*(1-j));switch(h){case 1:d=k;e=b;g=a;break;case 2:d=a;e=b;g=c;break;case 3:d=a;e=k;g=b;break;case 4:d=c;e=a;g=b;break;case 5:d=b;e=a;g=k;break;case 6:case 0:d=b;e=c;g=a}}this.r=d;this.g=e;this.b=g;if(this.autoUpdate){this.updateHex(); this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGB();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGB:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+","+~~(this.g*255)+","+~~(this.b*255)+")"},clone:function(){return new THREE.Color(this.hex)}}; THREE.Vector2=function(a,c){this.set(a||0,c||0)}; THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.set(a.x,a.y);return this},addSelf:function(a){this.set(this.x+a.x,this.y+a.y);return this},add:function(a,c){this.set(a.x+c.x,a.y+c.y);return this},subSelf:function(a){this.set(this.x-a.x,this.y-a.y);return this},sub:function(a,c){this.set(a.x-c.x,a.y-c.y);return this},multiplyScalar:function(a){this.set(this.x*a,this.y*a);return this},negate:function(){this.set(-this.x,-this.y);return this},unit:function(){this.multiplyScalar(1/ @@ -12,72 +12,72 @@ this.length();a>0?this.multiplyScalar(1/a):this.set(0,0,0);return this},setPosit 1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}};THREE.Vector4=function(a,c,b,d){this.set(a||0,c||0,b||0,d||1)}; THREE.Vector4.prototype={set:function(a,c,b,d){this.x=a;this.y=c;this.z=b;this.w=d;return this},copy:function(a){this.set(a.x,a.y,a.z,a.w||1);return this},add:function(a,c){this.set(a.x+c.x,a.y+c.y,a.z+c.z,a.w+c.w);return this},addSelf:function(a){this.set(this.x+a.x,this.y+a.y,this.z+a.z,this.w+a.w);return this},sub:function(a,c){this.set(a.x-c.x,a.y-c.y,a.z-c.z,a.w-c.w);return this},subSelf:function(a){this.set(this.x-a.x,this.y-a.y,this.z-a.z,this.w-a.w);return this},multiplyScalar:function(a){this.set(this.x* a,this.y*a,this.z*a,this.w*a);return this},divideScalar:function(a){this.set(this.x/a,this.y/a,this.z/a,this.w/a);return this},lerpSelf:function(a,c){this.set(this.x+(a.x-this.x)*c,this.y+(a.y-this.y)*c,this.z+(a.z-this.z)*c,this.w+(a.w-this.w)*c)},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)}};THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3}; -THREE.Ray.prototype={intersectScene:function(a){var c,b,d=a.objects,f=[];a=0;for(c=d.length;a0&&E>0&&L+E<1}var b,d,f,g,h,j,l,n,p,w, -t,q=a.geometry,x=q.vertices,B=[];b=0;for(d=q.faces.length;bl?d:l;f=f>n?f:n}a()}; -this.add3Points=function(l,n,p,w,t,q){if(j){j=!1;c=lp?l>t?l:t:p>t?p:t;f=n>w?n>q?n:q:w>q?w:q}else{c=lp?l>t?l>d?l:d:t>d?t:d:p>t?p>d?p:d:t>d?t:d;f=n>w?n>q?n>f?n:f:q>f?q:f:w>q?w>f?w:f:q>f?q:f}a()};this.addRectangle=function(l){if(j){j=!1;c=l.getLeft();b=l.getTop();d=l.getRight();f=l.getBottom()}else{c=cl.getRight()? -d:l.getRight();f=f>l.getBottom()?f:l.getBottom()}a()};this.inflate=function(l){c-=l;b-=l;d+=l;f+=l;a()};this.minSelf=function(l){c=c>l.getLeft()?c:l.getLeft();b=b>l.getTop()?b:l.getTop();d=d=0&&Math.min(f,l.getBottom())-Math.max(b,l.getTop())>=0};this.empty=function(){j=!0;f=d=b=c=0;a()};this.isEmpty=function(){return j}}; +THREE.Ray.prototype={intersectScene:function(a){var c,b,d=a.objects,e=[];a=0;for(c=d.length;a0&&E>0&&L+E<1}var b,d,e,g,h,j,k,n,p,w, +t,q=a.geometry,x=q.vertices,B=[];b=0;for(d=q.faces.length;bk?d:k;e=e>n?e:n}a()}; +this.add3Points=function(k,n,p,w,t,q){if(j){j=!1;c=kp?k>t?k:t:p>t?p:t;e=n>w?n>q?n:q:w>q?w:q}else{c=kp?k>t?k>d?k:d:t>d?t:d:p>t?p>d?p:d:t>d?t:d;e=n>w?n>q?n>e?n:e:q>e?q:e:w>q?w>e?w:e:q>e?q:e}a()};this.addRectangle=function(k){if(j){j=!1;c=k.getLeft();b=k.getTop();d=k.getRight();e=k.getBottom()}else{c=ck.getRight()? +d:k.getRight();e=e>k.getBottom()?e:k.getBottom()}a()};this.inflate=function(k){c-=k;b-=k;d+=k;e+=k;a()};this.minSelf=function(k){c=c>k.getLeft()?c:k.getLeft();b=b>k.getTop()?b:k.getTop();d=d=0&&Math.min(e,k.getBottom())-Math.max(b,k.getTop())>=0};this.empty=function(){j=!0;e=d=b=c=0;a()};this.isEmpty=function(){return j}}; THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a,c=this.m;a=c[1];c[1]=c[3];c[3]=a;a=c[2];c[2]=c[6];c[6]=a;a=c[5];c[5]=c[7];c[7]=a;return this},transposeIntoArray:function(a){var c=this.m;a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return this}}; -THREE.Matrix4=function(a,c,b,d,f,g,h,j,l,n,p,w,t,q,x,B){this.set(a||1,c||0,b||0,d||0,f||0,g||1,h||0,j||0,l||0,n||0,p||1,w||0,t||0,q||0,x||0,B||1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={set:function(a,c,b,d,f,g,h,j,l,n,p,w,t,q,x,B){this.n11=a;this.n12=c;this.n13=b;this.n14=d;this.n21=f;this.n22=g;this.n23=h;this.n24=j;this.n31=l;this.n32=n;this.n33=p;this.n34=w;this.n41=t;this.n42=q;this.n43=x;this.n44=B;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a,c,b){var d=THREE.Matrix4.__v1, -f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,c).normalize();d.cross(b,g).normalize();f.cross(g,d).normalize();this.n11=d.x;this.n12=f.x;this.n13=g.x;this.n21=d.y;this.n22=f.y;this.n23=g.y;this.n31=d.z;this.n32=f.z;this.n33=g.z;return this},multiplyVector3:function(a){var c=a.x,b=a.y,d=a.z,f=1/(this.n41*c+this.n42*b+this.n43*d+this.n44);a.x=(this.n11*c+this.n12*b+this.n13*d+this.n14)*f;a.y=(this.n21*c+this.n22*b+this.n23*d+this.n24)*f;a.z=(this.n31*c+this.n32*b+this.n33*d+this.n34)*f;return a}, -multiplyVector4:function(a){var c=a.x,b=a.y,d=a.z,f=a.w;a.x=this.n11*c+this.n12*b+this.n13*d+this.n14*f;a.y=this.n21*c+this.n22*b+this.n23*d+this.n24*f;a.z=this.n31*c+this.n32*b+this.n33*d+this.n34*f;a.w=this.n41*c+this.n42*b+this.n43*d+this.n44*f;return a},rotateAxis:function(a){var c=a.x,b=a.y,d=a.z;a.x=c*this.n11+b*this.n12+d*this.n13;a.y=c*this.n21+b*this.n22+d*this.n23;a.z=c*this.n31+b*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+ -this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var b=a.n11,d=a.n12,f=a.n13,g=a.n14,h=a.n21,j=a.n22,l=a.n23,n=a.n24,p=a.n31,w=a.n32,t=a.n33,q=a.n34,x=a.n41,B=a.n42,E=a.n43,u=a.n44,F=c.n11,v=c.n12,N=c.n13,L=c.n14,Y=c.n21,M=c.n22,e=c.n23,V=c.n24,S=c.n31,ba=c.n32,ea=c.n33,J=c.n34;this.n11=b*F+d*Y+f*S;this.n12= -b*v+d*M+f*ba;this.n13=b*N+d*e+f*ea;this.n14=b*L+d*V+f*J+g;this.n21=h*F+j*Y+l*S;this.n22=h*v+j*M+l*ba;this.n23=h*N+j*e+l*ea;this.n24=h*L+j*V+l*J+n;this.n31=p*F+w*Y+t*S;this.n32=p*v+w*M+t*ba;this.n33=p*N+w*e+t*ea;this.n34=p*L+w*V+t*J+q;this.n41=x*F+B*Y+E*S;this.n42=x*v+B*M+E*ba;this.n43=x*N+B*e+E*ea;this.n44=x*L+B*V+E*J+u;return this},multiplyToArray:function(a,c,b){this.multiply(a,c);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 this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},determinant:function(){var a=this.n11,c=this.n12,b=this.n13,d=this.n14,f=this.n21,g= -this.n22,h=this.n23,j=this.n24,l=this.n31,n=this.n32,p=this.n33,w=this.n34,t=this.n41,q=this.n42,x=this.n43,B=this.n44;return d*h*n*t-b*j*n*t-d*g*p*t+c*j*p*t+b*g*w*t-c*h*w*t-d*h*l*q+b*j*l*q+d*f*p*q-a*j*p*q-b*f*w*q+a*h*w*q+d*g*l*x-c*j*l*x-d*f*n*x+a*j*n*x+c*f*w*x-a*g*w*x-b*g*l*B+c*h*l*B+b*f*n*B-a*h*n*B-c*f*p*B+a*g*p*B},transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14= +THREE.Matrix4=function(a,c,b,d,e,g,h,j,k,n,p,w,t,q,x,B){this.set(a||1,c||0,b||0,d||0,e||0,g||1,h||0,j||0,k||0,n||0,p||1,w||0,t||0,q||0,x||0,B||1);this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={set:function(a,c,b,d,e,g,h,j,k,n,p,w,t,q,x,B){this.n11=a;this.n12=c;this.n13=b;this.n14=d;this.n21=e;this.n22=g;this.n23=h;this.n24=j;this.n31=k;this.n32=n;this.n33=p;this.n34=w;this.n41=t;this.n42=q;this.n43=x;this.n44=B;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a,c,b){var d=THREE.Matrix4.__v1, +e=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,c).normalize();d.cross(b,g).normalize();e.cross(g,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=g.x;this.n21=d.y;this.n22=e.y;this.n23=g.y;this.n31=d.z;this.n32=e.z;this.n33=g.z;return this},multiplyVector3:function(a){var c=a.x,b=a.y,d=a.z,e=1/(this.n41*c+this.n42*b+this.n43*d+this.n44);a.x=(this.n11*c+this.n12*b+this.n13*d+this.n14)*e;a.y=(this.n21*c+this.n22*b+this.n23*d+this.n24)*e;a.z=(this.n31*c+this.n32*b+this.n33*d+this.n34)*e;return a}, +multiplyVector4:function(a){var c=a.x,b=a.y,d=a.z,e=a.w;a.x=this.n11*c+this.n12*b+this.n13*d+this.n14*e;a.y=this.n21*c+this.n22*b+this.n23*d+this.n24*e;a.z=this.n31*c+this.n32*b+this.n33*d+this.n34*e;a.w=this.n41*c+this.n42*b+this.n43*d+this.n44*e;return a},rotateAxis:function(a){var c=a.x,b=a.y,d=a.z;a.x=c*this.n11+b*this.n12+d*this.n13;a.y=c*this.n21+b*this.n22+d*this.n23;a.z=c*this.n31+b*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+ +this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var b=a.n11,d=a.n12,e=a.n13,g=a.n14,h=a.n21,j=a.n22,k=a.n23,n=a.n24,p=a.n31,w=a.n32,t=a.n33,q=a.n34,x=a.n41,B=a.n42,E=a.n43,u=a.n44,F=c.n11,v=c.n12,N=c.n13,L=c.n14,Y=c.n21,M=c.n22,f=c.n23,V=c.n24,S=c.n31,ba=c.n32,ea=c.n33,J=c.n34;this.n11=b*F+d*Y+e*S;this.n12= +b*v+d*M+e*ba;this.n13=b*N+d*f+e*ea;this.n14=b*L+d*V+e*J+g;this.n21=h*F+j*Y+k*S;this.n22=h*v+j*M+k*ba;this.n23=h*N+j*f+k*ea;this.n24=h*L+j*V+k*J+n;this.n31=p*F+w*Y+t*S;this.n32=p*v+w*M+t*ba;this.n33=p*N+w*f+t*ea;this.n34=p*L+w*V+t*J+q;this.n41=x*F+B*Y+E*S;this.n42=x*v+B*M+E*ba;this.n43=x*N+B*f+E*ea;this.n44=x*L+B*V+E*J+u;return this},multiplyToArray:function(a,c,b){this.multiply(a,c);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 this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},determinant:function(){var a=this.n11,c=this.n12,b=this.n13,d=this.n14,e=this.n21,g= +this.n22,h=this.n23,j=this.n24,k=this.n31,n=this.n32,p=this.n33,w=this.n34,t=this.n41,q=this.n42,x=this.n43,B=this.n44;return d*h*n*t-b*j*n*t-d*g*p*t+c*j*p*t+b*g*w*t-c*h*w*t-d*h*k*q+b*j*k*q+d*e*p*q-a*j*p*q-b*e*w*q+a*h*w*q+d*g*k*x-c*j*k*x-d*e*n*x+a*j*n*x+c*e*w*x-a*g*w*x-b*g*k*B+c*h*k*B+b*e*n*B-a*h*n*B-c*e*p*B+a*g*p*B},transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31=this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14= a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]= this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24; a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,c){a[c]=this.n11;a[c+1]=this.n21;a[c+2]=this.n31;a[c+3]=this.n41;a[c+4]=this.n12;a[c+5]=this.n22;a[c+6]=this.n32;a[c+7]=this.n42;a[c+8]=this.n13;a[c+9]=this.n23;a[c+10]=this.n33;a[c+11]=this.n43;a[c+12]=this.n14;a[c+13]=this.n24;a[c+14]=this.n34;a[c+15]=this.n44;return a},setTranslation:function(a,c,b){this.set(1,0,0,a,0,1,0,c,0,0,1,b,0,0,0,1);return this},setScale:function(a,c,b){this.set(a,0,0,0,0,c,0,0,0,0,b,0,0,0,0,1);return this}, -setRotationX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotationY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotationZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,c){var b=Math.cos(c),d=Math.sin(c),f=1-b,g=a.x,h=a.y,j=a.z,l=f*g,n=f*h;this.set(l*g+b,l*h-d*j,l*j+d*h,0,l*h+d*j,n*h+b,n*j-d*g,0,l*j-d*h, -n*j+d*g,f*j*j+b,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},setRotationFromEuler:function(a){var c=a.x,b=a.y,d=a.z;a=Math.cos(c);c=Math.sin(c);var f=Math.cos(b);b=Math.sin(b);var g=Math.cos(d);d=Math.sin(d);var h=a*b,j=c*b;this.n11=f*g;this.n12=-f*d;this.n13=b;this.n21=j*g+a*d;this.n22=-j*d+a*g;this.n23=-c*f;this.n31=-h*g+c*d;this.n32=h*d+c*g;this.n33=a*f;return this},setRotationFromQuaternion:function(a){var c=a.x,b=a.y,d=a.z,f=a.w,g=c+c,h= -b+b,j=d+d;a=c*g;var l=c*h;c*=j;var n=b*h;b*=j;d*=j;g*=f;h*=f;f*=j;this.n11=1-(n+d);this.n12=l-f;this.n13=c+h;this.n21=l+f;this.n22=1-(a+d);this.n23=b-g;this.n31=c-h;this.n32=b+g;this.n33=1-(a+n);return this},scale:function(a){var c=a.x,b=a.y;a=a.z;this.n11*=c;this.n12*=b;this.n13*=a;this.n21*=c;this.n22*=b;this.n23*=a;this.n31*=c;this.n32*=b;this.n33*=a;this.n41*=c;this.n42*=b;this.n43*=a;return this},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34},extractRotation:function(a, -c){var b=1/c.x,d=1/c.y,f=1/c.z;this.n11=a.n11*b;this.n21=a.n21*b;this.n31=a.n31*b;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*f;this.n23=a.n23*f;this.n33=a.n33*f}}; -THREE.Matrix4.makeInvert=function(a,c){var b=a.n11,d=a.n12,f=a.n13,g=a.n14,h=a.n21,j=a.n22,l=a.n23,n=a.n24,p=a.n31,w=a.n32,t=a.n33,q=a.n34,x=a.n41,B=a.n42,E=a.n43,u=a.n44;c===undefined&&(c=new THREE.Matrix4);c.n11=l*q*B-n*t*B+n*w*E-j*q*E-l*w*u+j*t*u;c.n12=g*t*B-f*q*B-g*w*E+d*q*E+f*w*u-d*t*u;c.n13=f*n*B-g*l*B+g*j*E-d*n*E-f*j*u+d*l*u;c.n14=g*l*w-f*n*w-g*j*t+d*n*t+f*j*q-d*l*q;c.n21=n*t*x-l*q*x-n*p*E+h*q*E+l*p*u-h*t*u;c.n22=f*q*x-g*t*x+g*p*E-b*q*E-f*p*u+b*t*u;c.n23=g*l*x-f*n*x-g*h*E+b*n*E+f*h*u-b*l*u; -c.n24=f*n*p-g*l*p+g*h*t-b*n*t-f*h*q+b*l*q;c.n31=j*q*x-n*w*x+n*p*B-h*q*B-j*p*u+h*w*u;c.n32=g*w*x-d*q*x-g*p*B+b*q*B+d*p*u-b*w*u;c.n33=f*n*x-g*j*x+g*h*B-b*n*B-d*h*u+b*j*u;c.n34=g*j*p-d*n*p-g*h*w+b*n*w+d*h*q-b*j*q;c.n41=l*w*x-j*t*x-l*p*B+h*t*B+j*p*E-h*w*E;c.n42=d*t*x-f*w*x+f*p*B-b*t*B-d*p*E+b*w*E;c.n43=f*j*x-d*l*x-f*h*B+b*l*B+d*h*E-b*j*E;c.n44=d*l*p-f*j*p+f*h*w-b*l*w-d*h*t+b*j*t;c.multiplyScalar(1/a.determinant());return c}; -THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,b=c.m,d=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,g=a.n32*a.n21-a.n31*a.n22,h=-a.n33*a.n12+a.n32*a.n13,j=a.n33*a.n11-a.n31*a.n13,l=-a.n32*a.n11+a.n31*a.n12,n=a.n23*a.n12-a.n22*a.n13,p=-a.n23*a.n11+a.n21*a.n13,w=a.n22*a.n11-a.n21*a.n12;a=a.n11*d+a.n21*h+a.n31*n;if(a==0)throw"matrix not invertible";a=1/a;b[0]=a*d;b[1]=a*f;b[2]=a*g;b[3]=a*h;b[4]=a*j;b[5]=a*l;b[6]=a*n;b[7]=a*p;b[8]=a*w;return c}; -THREE.Matrix4.makeFrustum=function(a,c,b,d,f,g){var h;h=new THREE.Matrix4;h.n11=2*f/(c-a);h.n12=0;h.n13=(c+a)/(c-a);h.n14=0;h.n21=0;h.n22=2*f/(d-b);h.n23=(d+b)/(d-b);h.n24=0;h.n31=0;h.n32=0;h.n33=-(g+f)/(g-f);h.n34=-2*g*f/(g-f);h.n41=0;h.n42=0;h.n43=-1;h.n44=0;return h};THREE.Matrix4.makePerspective=function(a,c,b,d){var f;a=b*Math.tan(a*Math.PI/360);f=-a;return THREE.Matrix4.makeFrustum(f*c,a*c,f,a,b,d)}; -THREE.Matrix4.makeOrtho=function(a,c,b,d,f,g){var h,j,l,n;h=new THREE.Matrix4;j=c-a;l=b-d;n=g-f;h.n11=2/j;h.n12=0;h.n13=0;h.n14=-((c+a)/j);h.n21=0;h.n22=2/l;h.n23=0;h.n24=-((b+d)/l);h.n31=0;h.n32=0;h.n33=-2/n;h.n34=-((g+f)/n);h.n41=0;h.n42=0;h.n43=0;h.n44=1;return h};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3; +setRotationX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotationY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotationZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,c){var b=Math.cos(c),d=Math.sin(c),e=1-b,g=a.x,h=a.y,j=a.z,k=e*g,n=e*h;this.set(k*g+b,k*h-d*j,k*j+d*h,0,k*h+d*j,n*h+b,n*j-d*g,0,k*j-d*h, +n*j+d*g,e*j*j+b,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},setRotationFromEuler:function(a){var c=a.x,b=a.y,d=a.z;a=Math.cos(c);c=Math.sin(c);var e=Math.cos(b);b=Math.sin(b);var g=Math.cos(d);d=Math.sin(d);var h=a*b,j=c*b;this.n11=e*g;this.n12=-e*d;this.n13=b;this.n21=j*g+a*d;this.n22=-j*d+a*g;this.n23=-c*e;this.n31=-h*g+c*d;this.n32=h*d+c*g;this.n33=a*e;return this},setRotationFromQuaternion:function(a){var c=a.x,b=a.y,d=a.z,e=a.w,g=c+c,h= +b+b,j=d+d;a=c*g;var k=c*h;c*=j;var n=b*h;b*=j;d*=j;g*=e;h*=e;e*=j;this.n11=1-(n+d);this.n12=k-e;this.n13=c+h;this.n21=k+e;this.n22=1-(a+d);this.n23=b-g;this.n31=c-h;this.n32=b+g;this.n33=1-(a+n);return this},scale:function(a){var c=a.x,b=a.y;a=a.z;this.n11*=c;this.n12*=b;this.n13*=a;this.n21*=c;this.n22*=b;this.n23*=a;this.n31*=c;this.n32*=b;this.n33*=a;this.n41*=c;this.n42*=b;this.n43*=a;return this},extractPosition:function(a){this.n14=a.n14;this.n24=a.n24;this.n34=a.n34},extractRotation:function(a, +c){var b=1/c.x,d=1/c.y,e=1/c.z;this.n11=a.n11*b;this.n21=a.n21*b;this.n31=a.n31*b;this.n12=a.n12*d;this.n22=a.n22*d;this.n32=a.n32*d;this.n13=a.n13*e;this.n23=a.n23*e;this.n33=a.n33*e}}; +THREE.Matrix4.makeInvert=function(a,c){var b=a.n11,d=a.n12,e=a.n13,g=a.n14,h=a.n21,j=a.n22,k=a.n23,n=a.n24,p=a.n31,w=a.n32,t=a.n33,q=a.n34,x=a.n41,B=a.n42,E=a.n43,u=a.n44;c===undefined&&(c=new THREE.Matrix4);c.n11=k*q*B-n*t*B+n*w*E-j*q*E-k*w*u+j*t*u;c.n12=g*t*B-e*q*B-g*w*E+d*q*E+e*w*u-d*t*u;c.n13=e*n*B-g*k*B+g*j*E-d*n*E-e*j*u+d*k*u;c.n14=g*k*w-e*n*w-g*j*t+d*n*t+e*j*q-d*k*q;c.n21=n*t*x-k*q*x-n*p*E+h*q*E+k*p*u-h*t*u;c.n22=e*q*x-g*t*x+g*p*E-b*q*E-e*p*u+b*t*u;c.n23=g*k*x-e*n*x-g*h*E+b*n*E+e*h*u-b*k*u; +c.n24=e*n*p-g*k*p+g*h*t-b*n*t-e*h*q+b*k*q;c.n31=j*q*x-n*w*x+n*p*B-h*q*B-j*p*u+h*w*u;c.n32=g*w*x-d*q*x-g*p*B+b*q*B+d*p*u-b*w*u;c.n33=e*n*x-g*j*x+g*h*B-b*n*B-d*h*u+b*j*u;c.n34=g*j*p-d*n*p-g*h*w+b*n*w+d*h*q-b*j*q;c.n41=k*w*x-j*t*x-k*p*B+h*t*B+j*p*E-h*w*E;c.n42=d*t*x-e*w*x+e*p*B-b*t*B-d*p*E+b*w*E;c.n43=e*j*x-d*k*x-e*h*B+b*k*B+d*h*E-b*j*E;c.n44=d*k*p-e*j*p+e*h*w-b*k*w-d*h*t+b*j*t;c.multiplyScalar(1/a.determinant());return c}; +THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,b=c.m,d=a.n33*a.n22-a.n32*a.n23,e=-a.n33*a.n21+a.n31*a.n23,g=a.n32*a.n21-a.n31*a.n22,h=-a.n33*a.n12+a.n32*a.n13,j=a.n33*a.n11-a.n31*a.n13,k=-a.n32*a.n11+a.n31*a.n12,n=a.n23*a.n12-a.n22*a.n13,p=-a.n23*a.n11+a.n21*a.n13,w=a.n22*a.n11-a.n21*a.n12;a=a.n11*d+a.n21*h+a.n31*n;if(a==0)throw"matrix not invertible";a=1/a;b[0]=a*d;b[1]=a*e;b[2]=a*g;b[3]=a*h;b[4]=a*j;b[5]=a*k;b[6]=a*n;b[7]=a*p;b[8]=a*w;return c}; +THREE.Matrix4.makeFrustum=function(a,c,b,d,e,g){var h;h=new THREE.Matrix4;h.n11=2*e/(c-a);h.n12=0;h.n13=(c+a)/(c-a);h.n14=0;h.n21=0;h.n22=2*e/(d-b);h.n23=(d+b)/(d-b);h.n24=0;h.n31=0;h.n32=0;h.n33=-(g+e)/(g-e);h.n34=-2*g*e/(g-e);h.n41=0;h.n42=0;h.n43=-1;h.n44=0;return h};THREE.Matrix4.makePerspective=function(a,c,b,d){var e;a=b*Math.tan(a*Math.PI/360);e=-a;return THREE.Matrix4.makeFrustum(e*c,a*c,e,a,b,d)}; +THREE.Matrix4.makeOrtho=function(a,c,b,d,e,g){var h,j,k,n;h=new THREE.Matrix4;j=c-a;k=b-d;n=g-e;h.n11=2/j;h.n12=0;h.n13=0;h.n14=-((c+a)/j);h.n21=0;h.n22=2/k;h.n23=0;h.n24=-((b+d)/k);h.n31=0;h.n32=0;h.n33=-2/n;h.n34=-((g+e)/n);h.n41=0;h.n42=0;h.n43=0;h.n44=1;return h};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3; THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixAutoUpdate=!0;this.matrixWorldNeedsUpdate=!0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.boundRadius=0;this.boundRadiusScale=1;this.visible= !0;this._vector=new THREE.Vector3}; THREE.Object3D.prototype={translate:function(a,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!== undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var c=this;c instanceof THREE.Scene===!1&&c!==undefined;)c=c.parent;c!==undefined&&c.addChildRecurse(a)}},removeChild:function(a){var c=this.children.indexOf(a);if(c!==-1){a.parent=undefined;this.children.splice(c,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!== 1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}return!0},update:function(a,c,b){if(this.visible){this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;c=!0}a=0;for(var d=this.children.length;a=1){b.w=a.w;b.x=a.x;b.y=a.y;b.z=a.z;return b}var g=Math.acos(f),h=Math.sqrt(1-f*f);if(Math.abs(h)<0.0010){b.w=0.5*(a.w+c.w);b.x=0.5*(a.x+c.x);b.y=0.5*(a.y+c.y);b.z=0.5*(a.z+c.z);return b}f=Math.sin((1-d)*g)/h;d=Math.sin(d*g)/h;b.w=a.w*f+c.w*d;b.x=a.x*f+c.x*d;b.y=a.y*f+c.y*d;b.z=a.z*f+c.z*d;return b}; +THREE.Quaternion.prototype={set:function(a,c,b,d){this.x=a;this.y=c;this.z=b;this.w=d;return this},setFromEuler:function(a){var c=0.5*Math.PI/360,b=a.x*c,d=a.y*c,e=a.z*c;a=Math.cos(d);d=Math.sin(d);c=Math.cos(-e);e=Math.sin(-e);var g=Math.cos(b);b=Math.sin(b);var h=a*c,j=d*e;this.w=h*g-j*b;this.x=h*b+j*g;this.y=d*c*g+a*e*b;this.z=a*e*g-d*c*b;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*= +-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var c=this.x,b=this.y,d=this.z,e=this.w,g=a.x,h=a.y,j=a.z;a=a.w;this.x=c*a+e*g+b*j-d*h;this.y=b*a+e*h+d*g-c*j;this.z=d*a+e*j+c*h-b*g;this.w=e*a-c*g-b*h-d*j;return this}, +multiplyVector3:function(a,c){c||(c=a);var b=a.x,d=a.y,e=a.z,g=this.x,h=this.y,j=this.z,k=this.w,n=k*b+h*e-j*d,p=k*d+j*b-g*e,w=k*e+g*d-h*b;b=-g*b-h*d-j*e;c.x=n*k+b*-g+p*-j-w*-h;c.y=p*k+b*-h+w*-g-n*-j;c.z=w*k+b*-j+n*-h-p*-g;return c}}; +THREE.Quaternion.slerp=function(a,c,b,d){var e=a.w*c.w+a.x*c.x+a.y*c.y+a.z*c.z;if(Math.abs(e)>=1){b.w=a.w;b.x=a.x;b.y=a.y;b.z=a.z;return b}var g=Math.acos(e),h=Math.sqrt(1-e*e);if(Math.abs(h)<0.0010){b.w=0.5*(a.w+c.w);b.x=0.5*(a.x+c.x);b.y=0.5*(a.y+c.y);b.z=0.5*(a.z+c.z);return b}e=Math.sin((1-d)*g)/h;d=Math.sin(d*g)/h;b.w=a.w*e+c.w*d;b.x=a.x*e+c.x*d;b.y=a.y*e+c.y*d;b.z=a.z*e+c.z*d;return b}; THREE.Vertex=function(a,c){this.position=a||new THREE.Vector3;this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.normal=c||new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.normalScreen=new THREE.Vector3;this.tangent=new THREE.Vector4;this.__visible=!0}; -THREE.Face3=function(a,c,b,d,f){this.a=a;this.b=c;this.c=b;this.centroid=new THREE.Vector3;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.materials=f instanceof Array?f:[f]};THREE.Face4=function(a,c,b,d,f,g){this.a=a;this.b=c;this.c=b;this.d=d;this.centroid=new THREE.Vector3;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.materials=g instanceof Array?g:[g]}; +THREE.Face3=function(a,c,b,d,e){this.a=a;this.b=c;this.c=b;this.centroid=new THREE.Vector3;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.materials=e instanceof Array?e:[e]};THREE.Face4=function(a,c,b,d,e,g){this.a=a;this.b=c;this.c=b;this.d=d;this.centroid=new THREE.Vector3;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.materials=g instanceof Array?g:[g]}; THREE.UV=function(a,c){this.set(a||0,c||0)};THREE.UV.prototype={set:function(a,c){this.u=a;this.v=c;return this},copy:function(a){this.set(a.u,a.v);return this}};THREE.Geometry=function(){this.id="Geometry"+THREE.GeometryIdCounter++;this.vertices=[];this.faces=[];this.uvs=[];this.uvs2=[];this.colors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1}; THREE.Geometry.prototype={computeCentroids:function(){var a,c,b;a=0;for(c=this.faces.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y], z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var c=1,b=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.z this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=this.boundingSphere===null?0:this.boundingSphere.radius,c=0,b=this.vertices.length;ct.length-2?f:f+1;c[3]=f>t.length-3?f:f+2;l=t[c[0]];n=t[c[1]];p=t[c[2]];w=t[c[3]];h=g*g;j=g*h;b.x=a(l.x,n.x,p.x,w.x,g,h,j);b.y=a(l.y,n.y,p.y,w.y,g,h,j);b.z=a(l.z,n.z,p.z,w.z,g,h,j);return b}}; -THREE.AnimationHandler=function(){var a=[],c={},b={};b.update=function(f){for(var g=0;gt.length-2?e:e+1;c[3]=e>t.length-3?e:e+2;k=t[c[0]];n=t[c[1]];p=t[c[2]];w=t[c[3]];h=g*g;j=g*h;b.x=a(k.x,n.x,p.x,w.x,g,h,j);b.y=a(k.y,n.y,p.y,w.y,g,h,j);b.z=a(k.z,n.z,p.z,w.z,g,h,j);return b}}; +THREE.AnimationHandler=function(){var a=[],c={},b={};b.update=function(e){for(var g=0;g1){console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d);d=d<0?0:1}if(b==="pos")if(this.interpolationType===THREE.AnimationHandler.LINEAR){b=a.position;b.x=f[0]+(g[0]-f[0])*d;b.y=f[1]+(g[1]-f[1])*d;b.z=f[2]+(g[2]-f[2])*d}else{var E=[];E[0]=this.getPrevKeyWith(b,q,h.index-1)[b];E[1]=f;E[2]=g;E[3]=this.getNextKeyWith(b,q,j.index+1)[b];d=d*0.33+0.33;d=this.interpolateCatmullRom(E, -d);a.position.x=d[0];a.position.y=d[1];a.position.z=d[2]}else if(b==="rot")THREE.Quaternion.slerp(f,g,a.quaternion,d);else if(b==="scl"){b=a.scale;b.x=f[0]+(g[0]-f[0])*d;b.y=f[1]+(g[1]-f[1])*d;b.z=f[2]+(g[2]-f[2])*d}}}}if(this.JITCompile&&p[0][n]===undefined){this.hierarchy[0].update(undefined,!0);for(q=0;qa.length-2?g:g+1;b[3]=g>a.length-3?g:g+2;g=a[b[0]];j=a[b[1]];l=a[b[2]];n=a[b[3]];b=f*f;h=f*b;d[0]=this.interpolate(g[0],j[0],l[0],n[0],f,b,h);d[1]=this.interpolate(g[1],j[1],l[1],n[1],f,b,h);d[2]=this.interpolate(g[2],j[2],l[2],n[2],f,b,h);return d}; -THREE.Animation.prototype.interpolate=function(a,c,b,d,f,g,h){a=(b-a)*0.5;d=(d-c)*0.5;return(2*(c-b)+a+d)*h+(-3*(c-b)-2*a-d)*g+a*f+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,b){var d=this.data.hierarchy[c].keys;for(b%=d.length;b=0?b:b+d.length;b>=0;b--)if(d[b][a]!==undefined)return d[b];return this.data.hierarchy[c].keys[d.length-1]};THREE.Camera=function(a,c,b,d,f){THREE.Object3D.call(this);this.fov=a||50;this.aspect=c||1;this.near=b||0.1;this.far=d||2E3;this.target=f||new THREE.Object3D;this.useTarget=!0;this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=null;this.updateProjectionMatrix()}; +THREE.Animation.prototype.update=function(a){if(this.isPlaying){var c=["pos","rot","scl"],b,d,e,g,h,j,k,n,p=this.data.JIT.hierarchy,w,t;this.currentTime+=a;t=this.currentTime;w=this.currentTime%=this.data.length;n=parseInt(Math.min(w*this.data.fps,this.data.length*this.data.fps),10);for(var q=0,x=this.hierarchy.length;q1){console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d);d=d<0?0:1}if(b==="pos")if(this.interpolationType===THREE.AnimationHandler.LINEAR){b=a.position;b.x=e[0]+(g[0]-e[0])*d;b.y=e[1]+(g[1]-e[1])*d;b.z=e[2]+(g[2]-e[2])*d}else{var E=[];E[0]=this.getPrevKeyWith(b,q,h.index-1)[b];E[1]=e;E[2]=g;E[3]=this.getNextKeyWith(b,q,j.index+1)[b];d=d*0.33+0.33;d=this.interpolateCatmullRom(E, +d);a.position.x=d[0];a.position.y=d[1];a.position.z=d[2]}else if(b==="rot")THREE.Quaternion.slerp(e,g,a.quaternion,d);else if(b==="scl"){b=a.scale;b.x=e[0]+(g[0]-e[0])*d;b.y=e[1]+(g[1]-e[1])*d;b.z=e[2]+(g[2]-e[2])*d}}}}if(this.JITCompile&&p[0][n]===undefined){this.hierarchy[0].update(undefined,!0);for(q=0;qa.length-2?g:g+1;b[3]=g>a.length-3?g:g+2;g=a[b[0]];j=a[b[1]];k=a[b[2]];n=a[b[3]];b=e*e;h=e*b;d[0]=this.interpolate(g[0],j[0],k[0],n[0],e,b,h);d[1]=this.interpolate(g[1],j[1],k[1],n[1],e,b,h);d[2]=this.interpolate(g[2],j[2],k[2],n[2],e,b,h);return d}; +THREE.Animation.prototype.interpolate=function(a,c,b,d,e,g,h){a=(b-a)*0.5;d=(d-c)*0.5;return(2*(c-b)+a+d)*h+(-3*(c-b)-2*a-d)*g+a*e+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,b){var d=this.data.hierarchy[c].keys;for(b%=d.length;b=0?b:b+d.length;b>=0;b--)if(d[b][a]!==undefined)return d[b];return this.data.hierarchy[c].keys[d.length-1]};THREE.Camera=function(a,c,b,d,e){THREE.Object3D.call(this);this.fov=a||50;this.aspect=c||1;this.near=b||0.1;this.far=d||2E3;this.target=e||new THREE.Object3D;this.useTarget=!0;this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=null;this.updateProjectionMatrix()}; THREE.Camera.prototype=new THREE.Object3D;THREE.Camera.prototype.constructor=THREE.Camera;THREE.Camera.prototype.supr=THREE.Object3D.prototype;THREE.Camera.prototype.translate=function(a,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(a));this.target.position.addSelf(c.multiplyScalar(a))};THREE.Camera.prototype.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)}; THREE.Camera.prototype.update=function(a,c,b){if(this.useTarget){this.matrix.lookAt(this.position,this.target.position,this.up);this.matrix.setPosition(this.position);a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse);c=!0}else{this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate= !1;c=!0;THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse)}}for(a=0;a=0&&ea>=0&&J>=0&&ca>=0)return!0;else if(ba<0&&ea<0||J<0&&ca<0)return!1;else{if(ba<0)V=Math.max(V,ba/(ba-ea));else ea<0&&(S=Math.min(S,ba/(ba-ea)));if(J<0)V=Math.max(V,J/(J-ca));else ca<0&&(S=Math.min(S,J/(J-ca)));if(S=0&&ea>=0&&J>=0&&ca>=0)return!0;else if(ba<0&&ea<0||J<0&&ca<0)return!1;else{if(ba<0)V=Math.max(V,ba/(ba-ea));else ea<0&&(S=Math.min(S,ba/(ba-ea)));if(J<0)V=Math.max(V,J/(J-ca));else ca<0&&(S=Math.min(S,J/(J-ca)));if(Sba&&da.z0&& -E.z<1){t=x[q]=x[q]||new THREE.RenderableParticle;t.x=E.x/E.w;t.y=E.y/E.w;t.z=E.z;t.rotation=fa.rotation.z;t.scale.x=fa.scale.x*Math.abs(t.x-(E.x+e.projectionMatrix.n11)/(E.w+e.projectionMatrix.n14));t.scale.y=fa.scale.y*Math.abs(t.y-(E.y+e.projectionMatrix.n22)/(E.w+e.projectionMatrix.n24));t.materials=fa.materials;S.push(t);q++}}}}V&&S.sort(a);return S};this.unprojectVector=function(M,e){var V=e.matrixWorld.clone();V.multiplySelf(THREE.Matrix4.makeInvert(e.projectionMatrix));V.multiplyVector3(M); +E.z<1){t=x[q]=x[q]||new THREE.RenderableParticle;t.x=E.x/E.w;t.y=E.y/E.w;t.z=E.z;t.rotation=fa.rotation.z;t.scale.x=fa.scale.x*Math.abs(t.x-(E.x+f.projectionMatrix.n11)/(E.w+f.projectionMatrix.n14));t.scale.y=fa.scale.y*Math.abs(t.y-(E.y+f.projectionMatrix.n22)/(E.w+f.projectionMatrix.n24));t.materials=fa.materials;S.push(t);q++}}}}V&&S.sort(a);return S};this.unprojectVector=function(M,f){var V=f.matrixWorld.clone();V.multiplySelf(THREE.Matrix4.makeInvert(f.projectionMatrix));V.multiplyVector3(M); return M}}; -THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,b,d,f,g;this.domElement=document.createElement("div");this.setSize=function(h,j){b=h;d=j;f=b/2;g=d/2};this.render=function(h,j){var l,n,p,w,t,q,x,B;a=c.projectScene(h,j);l=0;for(n=a.length;l0){K.r+=Ea.r*na;K.g+=Ea.g*na;K.b+=Ea.b*na}}else if(na instanceof THREE.PointLight){y.sub(na.position,W);y.normalize();na=T.dot(y)*va;if(na>0){K.r+=Ea.r*na;K.g+=Ea.g*na;K.b+=Ea.b*na}}}}function Ka(G,W,T){if(T.opacity!=0){a(T.opacity); -c(T.blending);var K,$,na,Ea,va,Ha;if(T instanceof THREE.ParticleBasicMaterial){if(T.map){Ea=T.map.image;va=Ea.width>>1;Ha=Ea.height>>1;$=W.scale.x*j;na=W.scale.y*l;T=$*va;K=na*Ha;R.set(G.x-T,G.y-K,G.x+T,G.y+K);if(oa.instersects(R)){n.save();n.translate(G.x,G.y);n.rotate(-W.rotation);n.scale($,-na);n.translate(-va,-Ha);n.drawImage(Ea,0,0);n.restore()}}}else if(T instanceof THREE.ParticleCircleMaterial){if(ia){m.r=z.r+C.r+k.r;m.g=z.g+C.g+k.g;m.b=z.b+C.b+k.b;S.r=T.color.r*m.r;S.g=T.color.g*m.g;S.b=T.color.b* -m.b;S.updateStyleString()}else S.__styleString=T.color.__styleString;T=W.scale.x*j;K=W.scale.y*l;R.set(G.x-T,G.y-K,G.x+T,G.y+K);if(oa.instersects(R)){$=S.__styleString;if(B!=$)n.fillStyle=B=$;n.save();n.translate(G.x,G.y);n.rotate(-W.rotation);n.scale(T,K);n.beginPath();n.arc(0,0,1,0,o,!0);n.closePath();n.fill();n.restore()}}}}function Q(G,W,T,K){if(K.opacity!=0){a(K.opacity);c(K.blending);n.beginPath();n.moveTo(G.positionScreen.x,G.positionScreen.y);n.lineTo(W.positionScreen.x,W.positionScreen.y); -n.closePath();if(K instanceof THREE.LineBasicMaterial){S.__styleString=K.color.__styleString;G=K.linewidth;if(E!=G)n.lineWidth=E=G;G=S.__styleString;if(x!=G)n.strokeStyle=x=G;n.stroke();R.inflate(K.linewidth*2)}}}function Ga(G,W,T,K,$,na){if($.opacity!=0){a($.opacity);c($.blending);N=G.positionScreen.x;L=G.positionScreen.y;Y=W.positionScreen.x;M=W.positionScreen.y;e=T.positionScreen.x;V=T.positionScreen.y;n.beginPath();n.moveTo(N,L);n.lineTo(Y,M);n.lineTo(e,V);n.lineTo(N,L);n.closePath();if($ instanceof -THREE.MeshBasicMaterial)if($.map)$.map.mapping instanceof THREE.UVMapping&&U(N,L,Y,M,e,V,$.map.image,K.uvs[0].u,K.uvs[0].v,K.uvs[1].u,K.uvs[1].v,K.uvs[2].u,K.uvs[2].v);else if($.envMap){if($.envMap.mapping instanceof THREE.SphericalReflectionMapping){G=ka.matrixWorldInverse;y.copy(K.vertexNormalsWorld[0]);ha=(y.x*G.n11+y.y*G.n12+y.z*G.n13)*0.5+0.5;fa=-(y.x*G.n21+y.y*G.n22+y.z*G.n23)*0.5+0.5;y.copy(K.vertexNormalsWorld[1]);ra=(y.x*G.n11+y.y*G.n12+y.z*G.n13)*0.5+0.5;xa=-(y.x*G.n21+y.y*G.n22+y.z*G.n23)* -0.5+0.5;y.copy(K.vertexNormalsWorld[2]);ga=(y.x*G.n11+y.y*G.n12+y.z*G.n13)*0.5+0.5;aa=-(y.x*G.n21+y.y*G.n22+y.z*G.n23)*0.5+0.5;U(N,L,Y,M,e,V,$.envMap.image,ha,fa,ra,xa,ga,aa)}}else $.wireframe?Ca($.color.__styleString,$.wireframeLinewidth):Fa($.color.__styleString);else if($ instanceof THREE.MeshLambertMaterial){if($.map&&!$.wireframe){$.map.mapping instanceof THREE.UVMapping&&U(N,L,Y,M,e,V,$.map.image,K.uvs[0].u,K.uvs[0].v,K.uvs[1].u,K.uvs[1].v,K.uvs[2].u,K.uvs[2].v);c(THREE.SubtractiveBlending)}if(ia)if(!$.wireframe&& -$.shading==THREE.SmoothShading&&K.vertexNormalsWorld.length==3){ba.r=ea.r=J.r=z.r;ba.g=ea.g=J.g=z.g;ba.b=ea.b=J.b=z.b;ma(na,K.v1.positionWorld,K.vertexNormalsWorld[0],ba);ma(na,K.v2.positionWorld,K.vertexNormalsWorld[1],ea);ma(na,K.v3.positionWorld,K.vertexNormalsWorld[2],J);ca.r=(ea.r+J.r)*0.5;ca.g=(ea.g+J.g)*0.5;ca.b=(ea.b+J.b)*0.5;ta=X(ba,ea,J,ca);U(N,L,Y,M,e,V,ta,0,0,1,0,0,1)}else{m.r=z.r;m.g=z.g;m.b=z.b;ma(na,K.centroidWorld,K.normalWorld,m);S.r=$.color.r*m.r;S.g=$.color.g*m.g;S.b=$.color.b* -m.b;S.updateStyleString();$.wireframe?Ca(S.__styleString,$.wireframeLinewidth):Fa(S.__styleString)}else $.wireframe?Ca($.color.__styleString,$.wireframeLinewidth):Fa($.color.__styleString)}else if($ instanceof THREE.MeshDepthMaterial){wa=ka.near;da=ka.far;ba.r=ba.g=ba.b=1-Z(G.positionScreen.z,wa,da);ea.r=ea.g=ea.b=1-Z(W.positionScreen.z,wa,da);J.r=J.g=J.b=1-Z(T.positionScreen.z,wa,da);ca.r=(ea.r+J.r)*0.5;ca.g=(ea.g+J.g)*0.5;ca.b=(ea.b+J.b)*0.5;ta=X(ba,ea,J,ca);U(N,L,Y,M,e,V,ta,0,0,1,0,0,1)}else if($ instanceof +THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,b,d,e,g;this.domElement=document.createElement("div");this.setSize=function(h,j){b=h;d=j;e=b/2;g=d/2};this.render=function(h,j){var k,n,p,w,t,q,x,B;a=c.projectScene(h,j);k=0;for(n=a.length;k0){K.r+=Ea.r*na;K.g+=Ea.g*na;K.b+=Ea.b*na}}else if(na instanceof THREE.PointLight){z.sub(na.position,W);z.normalize();na=T.dot(z)*va;if(na>0){K.r+=Ea.r*na;K.g+=Ea.g*na;K.b+=Ea.b*na}}}}function Ka(G,W,T){if(T.opacity!=0){a(T.opacity); +c(T.blending);var K,$,na,Ea,va,Ha;if(T instanceof THREE.ParticleBasicMaterial){if(T.map){Ea=T.map.image;va=Ea.width>>1;Ha=Ea.height>>1;$=W.scale.x*j;na=W.scale.y*k;T=$*va;K=na*Ha;R.set(G.x-T,G.y-K,G.x+T,G.y+K);if(oa.instersects(R)){n.save();n.translate(G.x,G.y);n.rotate(-W.rotation);n.scale($,-na);n.translate(-va,-Ha);n.drawImage(Ea,0,0);n.restore()}}}else if(T instanceof THREE.ParticleCircleMaterial){if(ia){m.r=y.r+C.r+l.r;m.g=y.g+C.g+l.g;m.b=y.b+C.b+l.b;S.r=T.color.r*m.r;S.g=T.color.g*m.g;S.b=T.color.b* +m.b;S.updateStyleString()}else S.__styleString=T.color.__styleString;T=W.scale.x*j;K=W.scale.y*k;R.set(G.x-T,G.y-K,G.x+T,G.y+K);if(oa.instersects(R)){$=S.__styleString;if(B!=$)n.fillStyle=B=$;n.save();n.translate(G.x,G.y);n.rotate(-W.rotation);n.scale(T,K);n.beginPath();n.arc(0,0,1,0,o,!0);n.closePath();n.fill();n.restore()}}}}function Q(G,W,T,K){if(K.opacity!=0){a(K.opacity);c(K.blending);n.beginPath();n.moveTo(G.positionScreen.x,G.positionScreen.y);n.lineTo(W.positionScreen.x,W.positionScreen.y); +n.closePath();if(K instanceof THREE.LineBasicMaterial){S.__styleString=K.color.__styleString;G=K.linewidth;if(E!=G)n.lineWidth=E=G;G=S.__styleString;if(x!=G)n.strokeStyle=x=G;n.stroke();R.inflate(K.linewidth*2)}}}function Ga(G,W,T,K,$,na){if($.opacity!=0){a($.opacity);c($.blending);N=G.positionScreen.x;L=G.positionScreen.y;Y=W.positionScreen.x;M=W.positionScreen.y;f=T.positionScreen.x;V=T.positionScreen.y;n.beginPath();n.moveTo(N,L);n.lineTo(Y,M);n.lineTo(f,V);n.lineTo(N,L);n.closePath();if($ instanceof +THREE.MeshBasicMaterial)if($.map)$.map.mapping instanceof THREE.UVMapping&&U(N,L,Y,M,f,V,$.map.image,K.uvs[0].u,K.uvs[0].v,K.uvs[1].u,K.uvs[1].v,K.uvs[2].u,K.uvs[2].v);else if($.envMap){if($.envMap.mapping instanceof THREE.SphericalReflectionMapping){G=ka.matrixWorldInverse;z.copy(K.vertexNormalsWorld[0]);ha=(z.x*G.n11+z.y*G.n12+z.z*G.n13)*0.5+0.5;fa=-(z.x*G.n21+z.y*G.n22+z.z*G.n23)*0.5+0.5;z.copy(K.vertexNormalsWorld[1]);ra=(z.x*G.n11+z.y*G.n12+z.z*G.n13)*0.5+0.5;xa=-(z.x*G.n21+z.y*G.n22+z.z*G.n23)* +0.5+0.5;z.copy(K.vertexNormalsWorld[2]);ga=(z.x*G.n11+z.y*G.n12+z.z*G.n13)*0.5+0.5;aa=-(z.x*G.n21+z.y*G.n22+z.z*G.n23)*0.5+0.5;U(N,L,Y,M,f,V,$.envMap.image,ha,fa,ra,xa,ga,aa)}}else $.wireframe?Ca($.color.__styleString,$.wireframeLinewidth):Fa($.color.__styleString);else if($ instanceof THREE.MeshLambertMaterial){if($.map&&!$.wireframe){$.map.mapping instanceof THREE.UVMapping&&U(N,L,Y,M,f,V,$.map.image,K.uvs[0].u,K.uvs[0].v,K.uvs[1].u,K.uvs[1].v,K.uvs[2].u,K.uvs[2].v);c(THREE.SubtractiveBlending)}if(ia)if(!$.wireframe&& +$.shading==THREE.SmoothShading&&K.vertexNormalsWorld.length==3){ba.r=ea.r=J.r=y.r;ba.g=ea.g=J.g=y.g;ba.b=ea.b=J.b=y.b;ma(na,K.v1.positionWorld,K.vertexNormalsWorld[0],ba);ma(na,K.v2.positionWorld,K.vertexNormalsWorld[1],ea);ma(na,K.v3.positionWorld,K.vertexNormalsWorld[2],J);ca.r=(ea.r+J.r)*0.5;ca.g=(ea.g+J.g)*0.5;ca.b=(ea.b+J.b)*0.5;ta=X(ba,ea,J,ca);U(N,L,Y,M,f,V,ta,0,0,1,0,0,1)}else{m.r=y.r;m.g=y.g;m.b=y.b;ma(na,K.centroidWorld,K.normalWorld,m);S.r=$.color.r*m.r;S.g=$.color.g*m.g;S.b=$.color.b* +m.b;S.updateStyleString();$.wireframe?Ca(S.__styleString,$.wireframeLinewidth):Fa(S.__styleString)}else $.wireframe?Ca($.color.__styleString,$.wireframeLinewidth):Fa($.color.__styleString)}else if($ instanceof THREE.MeshDepthMaterial){wa=ka.near;da=ka.far;ba.r=ba.g=ba.b=1-Z(G.positionScreen.z,wa,da);ea.r=ea.g=ea.b=1-Z(W.positionScreen.z,wa,da);J.r=J.g=J.b=1-Z(T.positionScreen.z,wa,da);ca.r=(ea.r+J.r)*0.5;ca.g=(ea.g+J.g)*0.5;ca.b=(ea.b+J.b)*0.5;ta=X(ba,ea,J,ca);U(N,L,Y,M,f,V,ta,0,0,1,0,0,1)}else if($ instanceof THREE.MeshNormalMaterial){S.r=ya(K.normalWorld.x);S.g=ya(K.normalWorld.y);S.b=ya(K.normalWorld.z);S.updateStyleString();$.wireframe?Ca(S.__styleString,$.wireframeLinewidth):Fa(S.__styleString)}}}function Ca(G,W){if(x!=G)n.strokeStyle=x=G;if(E!=W)n.lineWidth=E=W;n.stroke();R.inflate(W*2)}function Fa(G){if(B!=G)n.fillStyle=B=G;n.fill()}function U(G,W,T,K,$,na,Ea,va,Ha,Oa,Ja,Pa,Sa){var Na,Da;Na=Ea.width-1;Da=Ea.height-1;va*=Na;Ha*=Da;Oa*=Na;Ja*=Da;Pa*=Na;Sa*=Da;T-=G;K-=W;$-=G;na-=W;Oa-=va;Ja-=Ha;Pa-= va;Sa-=Ha;Na=Oa*Sa-Pa*Ja;if(Na!=0){Da=1/Na;Na=(Sa*T-Ja*$)*Da;Ja=(Sa*K-Ja*na)*Da;T=(Oa*$-Pa*T)*Da;K=(Oa*na-Pa*K)*Da;G=G-Na*va-T*Ha;W=W-Ja*va-K*Ha;n.save();n.transform(Na,Ja,T,K,G,W);n.clip();n.drawImage(Ea,0,0);n.restore()}}function X(G,W,T,K){var $=~~(G.r*255),na=~~(G.g*255);G=~~(G.b*255);var Ea=~~(W.r*255),va=~~(W.g*255);W=~~(W.b*255);var Ha=~~(T.r*255),Oa=~~(T.g*255);T=~~(T.b*255);var Ja=~~(K.r*255),Pa=~~(K.g*255);K=~~(K.b*255);H[0]=$<0?0:$>255?255:$;H[1]=na<0?0:na>255?255:na;H[2]=G<0?0:G>255?255: G;H[4]=Ea<0?0:Ea>255?255:Ea;H[5]=va<0?0:va>255?255:va;H[6]=W<0?0:W>255?255:W;H[8]=Ha<0?0:Ha>255?255:Ha;H[9]=Oa<0?0:Oa>255?255:Oa;H[10]=T<0?0:T>255?255:T;H[12]=Ja<0?0:Ja>255?255:Ja;H[13]=Pa<0?0:Pa>255?255:Pa;H[14]=K<0?0:K>255?255:K;D.putImageData(P,0,0);la.drawImage(A,0,0);return O}function Z(G,W,T){G=(G-W)/(T-W);return G*G*(3-2*G)}function ya(G){G=(G+1)*0.5;return G<0?0:G>1?1:G}function Ia(G,W){var T=W.x-G.x,K=W.y-G.y,$=1/Math.sqrt(T*T+K*K);T*=$;K*=$;W.x+=T;W.y+=K;G.x-=T;G.y-=K}var Aa,I,qa,Ma,Qa, -La,za,Ba;this.autoClear?this.clear():n.setTransform(1,0,0,-1,j,l);b=d.projectScene(ja,ka,this.sortElements);(ia=ja.lights.length>0)&&sa(ja);Aa=0;for(I=b.length;Aa0)&&sa(ja);Aa=0;for(I=b.length;Aa0){ra.r+=aa.color.r*oa;ra.g+=aa.color.g*oa;ra.b+=aa.color.b*oa}}else if(aa instanceof THREE.PointLight){V.sub(aa.position,fa.centroidWorld);V.normalize();oa=fa.normalWorld.dot(V)*aa.intensity;if(oa>0){ra.r+=aa.color.r*oa;ra.g+=aa.color.g*oa;ra.b+=aa.color.b*oa}}}}function c(ha,fa,ra, xa,ga,aa){J=d(ca++);J.setAttribute("d","M "+ha.positionScreen.x+" "+ha.positionScreen.y+" L "+fa.positionScreen.x+" "+fa.positionScreen.y+" L "+ra.positionScreen.x+","+ra.positionScreen.y+"z");if(ga instanceof THREE.MeshBasicMaterial)v.__styleString=ga.color.__styleString;else if(ga instanceof THREE.MeshLambertMaterial)if(F){N.r=L.r;N.g=L.g;N.b=L.b;a(aa,xa,N);v.r=ga.color.r*N.r;v.g=ga.color.g*N.g;v.b=ga.color.b*N.b;v.updateStyleString()}else v.__styleString=ga.color.__styleString;else if(ga instanceof -THREE.MeshDepthMaterial){e=1-ga.__2near/(ga.__farPlusNear-xa.z*ga.__farMinusNear);v.setRGB(e,e,e)}else ga instanceof THREE.MeshNormalMaterial&&v.setRGB(f(xa.normalWorld.x),f(xa.normalWorld.y),f(xa.normalWorld.z));ga.wireframe?J.setAttribute("style","fill: none; stroke: "+v.__styleString+"; stroke-width: "+ga.wireframeLinewidth+"; stroke-opacity: "+ga.opacity+"; stroke-linecap: "+ga.wireframeLinecap+"; stroke-linejoin: "+ga.wireframeLinejoin):J.setAttribute("style","fill: "+v.__styleString+"; fill-opacity: "+ +THREE.MeshDepthMaterial){f=1-ga.__2near/(ga.__farPlusNear-xa.z*ga.__farMinusNear);v.setRGB(f,f,f)}else ga instanceof THREE.MeshNormalMaterial&&v.setRGB(e(xa.normalWorld.x),e(xa.normalWorld.y),e(xa.normalWorld.z));ga.wireframe?J.setAttribute("style","fill: none; stroke: "+v.__styleString+"; stroke-width: "+ga.wireframeLinewidth+"; stroke-opacity: "+ga.opacity+"; stroke-linecap: "+ga.wireframeLinecap+"; stroke-linejoin: "+ga.wireframeLinejoin):J.setAttribute("style","fill: "+v.__styleString+"; fill-opacity: "+ ga.opacity);j.appendChild(J)}function b(ha,fa,ra,xa,ga,aa,oa){J=d(ca++);J.setAttribute("d","M "+ha.positionScreen.x+" "+ha.positionScreen.y+" L "+fa.positionScreen.x+" "+fa.positionScreen.y+" L "+ra.positionScreen.x+","+ra.positionScreen.y+" L "+xa.positionScreen.x+","+xa.positionScreen.y+"z");if(aa instanceof THREE.MeshBasicMaterial)v.__styleString=aa.color.__styleString;else if(aa instanceof THREE.MeshLambertMaterial)if(F){N.r=L.r;N.g=L.g;N.b=L.b;a(oa,ga,N);v.r=aa.color.r*N.r;v.g=aa.color.g*N.g; -v.b=aa.color.b*N.b;v.updateStyleString()}else v.__styleString=aa.color.__styleString;else if(aa instanceof THREE.MeshDepthMaterial){e=1-aa.__2near/(aa.__farPlusNear-ga.z*aa.__farMinusNear);v.setRGB(e,e,e)}else aa instanceof THREE.MeshNormalMaterial&&v.setRGB(f(ga.normalWorld.x),f(ga.normalWorld.y),f(ga.normalWorld.z));aa.wireframe?J.setAttribute("style","fill: none; stroke: "+v.__styleString+"; stroke-width: "+aa.wireframeLinewidth+"; stroke-opacity: "+aa.opacity+"; stroke-linecap: "+aa.wireframeLinecap+ -"; stroke-linejoin: "+aa.wireframeLinejoin):J.setAttribute("style","fill: "+v.__styleString+"; fill-opacity: "+aa.opacity);j.appendChild(J)}function d(ha){if(S[ha]==null){S[ha]=document.createElementNS("http://www.w3.org/2000/svg","path");ta==0&&S[ha].setAttribute("shape-rendering","crispEdges")}return S[ha]}function f(ha){return ha<0?Math.min((1+ha)*0.5,0.5):0.5+Math.min(ha*0.5,0.5)}var g=null,h=new THREE.Projector,j=document.createElementNS("http://www.w3.org/2000/svg","svg"),l,n,p,w,t,q,x,B,E= -new THREE.Rectangle,u=new THREE.Rectangle,F=!1,v=new THREE.Color(16777215),N=new THREE.Color(16777215),L=new THREE.Color(0),Y=new THREE.Color(0),M=new THREE.Color(0),e,V=new THREE.Vector3,S=[],ba=[],ea=[],J,ca,wa,da,ta=1;this.domElement=j;this.autoClear=!0;this.sortObjects=!0;this.sortElements=!0;this.setQuality=function(ha){switch(ha){case "high":ta=1;break;case "low":ta=0}};this.setSize=function(ha,fa){l=ha;n=fa;p=l/2;w=n/2;j.setAttribute("viewBox",-p+" "+-w+" "+l+" "+n);j.setAttribute("width", -l);j.setAttribute("height",n);E.set(-p,-w,p,w)};this.clear=function(){for(;j.childNodes.length>0;)j.removeChild(j.childNodes[0])};this.render=function(ha,fa){var ra,xa,ga,aa,oa,pa,R,ia;this.autoClear&&this.clear();g=h.projectScene(ha,fa,this.sortElements);da=wa=ca=0;if(F=ha.lights.length>0){R=ha.lights;L.setRGB(0,0,0);Y.setRGB(0,0,0);M.setRGB(0,0,0);ra=0;for(xa=R.length;ra0;)j.removeChild(j.childNodes[0])};this.render=function(ha,fa){var ra,xa,ga,aa,oa,pa,R,ia;this.autoClear&&this.clear();g=h.projectScene(ha,fa,this.sortElements);da=wa=ca=0;if(F=ha.lights.length>0){R=ha.lights;L.setRGB(0,0,0);Y.setRGB(0,0,0);M.setRGB(0,0,0);ra=0;for(xa=R.length;ra=0){e.bindBuffer(e.ARRAY_BUFFER,o.__webGLColorBuffer);e.vertexAttribPointer(m.color,3,e.FLOAT,!1,0,0)}if(m.normal>=0){e.bindBuffer(e.ARRAY_BUFFER,o.__webGLNormalBuffer);e.vertexAttribPointer(m.normal,3,e.FLOAT,!1,0,0)}if(m.tangent>=0){e.bindBuffer(e.ARRAY_BUFFER,o.__webGLTangentBuffer);e.vertexAttribPointer(m.tangent, -4,e.FLOAT,!1,0,0)}if(m.uv>=0)if(o.__webGLUVBuffer){e.bindBuffer(e.ARRAY_BUFFER,o.__webGLUVBuffer);e.vertexAttribPointer(m.uv,2,e.FLOAT,!1,0,0);e.enableVertexAttribArray(m.uv)}else e.disableVertexAttribArray(m.uv);if(m.uv2>=0)if(o.__webGLUV2Buffer){e.bindBuffer(e.ARRAY_BUFFER,o.__webGLUV2Buffer);e.vertexAttribPointer(m.uv2,2,e.FLOAT,!1,0,0);e.enableVertexAttribArray(m.uv2)}else e.disableVertexAttribArray(m.uv2);if(k.skinning&&m.skinVertexA>=0&&m.skinVertexB>=0&&m.skinIndex>=0&&m.skinWeight>=0){e.bindBuffer(e.ARRAY_BUFFER, -o.__webGLSkinVertexABuffer);e.vertexAttribPointer(m.skinVertexA,4,e.FLOAT,!1,0,0);e.bindBuffer(e.ARRAY_BUFFER,o.__webGLSkinVertexBBuffer);e.vertexAttribPointer(m.skinVertexB,4,e.FLOAT,!1,0,0);e.bindBuffer(e.ARRAY_BUFFER,o.__webGLSkinIndicesBuffer);e.vertexAttribPointer(m.skinIndex,4,e.FLOAT,!1,0,0);e.bindBuffer(e.ARRAY_BUFFER,o.__webGLSkinWeightsBuffer);e.vertexAttribPointer(m.skinWeight,4,e.FLOAT,!1,0,0)}if(y instanceof THREE.Mesh)if(k.wireframe){e.lineWidth(k.wireframeLinewidth);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, -o.__webGLLineBuffer);e.drawElements(e.LINES,o.__webGLLineCount,e.UNSIGNED_SHORT,0)}else{e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,o.__webGLFaceBuffer);e.drawElements(e.TRIANGLES,o.__webGLFaceCount,e.UNSIGNED_SHORT,0)}else if(y instanceof THREE.Line){y=y.type==THREE.LineStrip?e.LINE_STRIP:e.LINES;e.lineWidth(k.linewidth);e.drawArrays(y,0,o.__webGLLineCount)}else if(y instanceof THREE.ParticleSystem)e.drawArrays(e.POINTS,0,o.__webGLParticleCount);else y instanceof THREE.Ribbon&&e.drawArrays(e.TRIANGLE_STRIP, -0,o.__webGLVertexCount)}function g(m,z){if(!m.__webGLVertexBuffer)m.__webGLVertexBuffer=e.createBuffer();if(!m.__webGLNormalBuffer)m.__webGLNormalBuffer=e.createBuffer();if(m.hasPos){e.bindBuffer(e.ARRAY_BUFFER,m.__webGLVertexBuffer);e.bufferData(e.ARRAY_BUFFER,m.positionArray,e.DYNAMIC_DRAW);e.enableVertexAttribArray(z.attributes.position);e.vertexAttribPointer(z.attributes.position,3,e.FLOAT,!1,0,0)}if(m.hasNormal){e.bindBuffer(e.ARRAY_BUFFER,m.__webGLNormalBuffer);e.bufferData(e.ARRAY_BUFFER,m.normalArray, -e.DYNAMIC_DRAW);e.enableVertexAttribArray(z.attributes.normal);e.vertexAttribPointer(z.attributes.normal,3,e.FLOAT,!1,0,0)}e.drawArrays(e.TRIANGLES,0,m.count);m.count=0}function h(m){if(ea!=m.doubleSided){m.doubleSided?e.disable(e.CULL_FACE):e.enable(e.CULL_FACE);ea=m.doubleSided}if(J!=m.flipSided){m.flipSided?e.frontFace(e.CW):e.frontFace(e.CCW);J=m.flipSided}}function j(m){if(wa!=m){m?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST);wa=m}}function l(m){ra[0].set(m.n41-m.n11,m.n42-m.n12,m.n43-m.n13, -m.n44-m.n14);ra[1].set(m.n41+m.n11,m.n42+m.n12,m.n43+m.n13,m.n44+m.n14);ra[2].set(m.n41+m.n21,m.n42+m.n22,m.n43+m.n23,m.n44+m.n24);ra[3].set(m.n41-m.n21,m.n42-m.n22,m.n43-m.n23,m.n44-m.n24);ra[4].set(m.n41-m.n31,m.n42-m.n32,m.n43-m.n33,m.n44-m.n34);ra[5].set(m.n41+m.n31,m.n42+m.n32,m.n43+m.n33,m.n44+m.n34);var z;for(m=0;m<6;m++){z=ra[m];z.divideScalar(Math.sqrt(z.x*z.x+z.y*z.y+z.z*z.z))}}function n(m){for(var z=m.matrixWorld,C=-m.geometry.boundingSphere.radius*Math.max(m.scale.x,Math.max(m.scale.y, -m.scale.z)),k=0;k<6;k++){m=ra[k].x*z.n14+ra[k].y*z.n24+ra[k].z*z.n34+ra[k].w;if(m<=C)return!1}return!0}function p(m,z){m.list[m.count]=z;m.count+=1}function w(m){var z,C,k=m.object,o=m.opaque,y=m.transparent;y.count=0;m=o.count=0;for(z=k.materials.length;m65535){O[P].counter+=1;H=O[P].hash+"_"+O[P].counter;m.geometryGroups[H]== -undefined&&(m.geometryGroups[H]={faces:[],materials:D,vertices:0})}m.geometryGroups[H].faces.push(o);m.geometryGroups[H].vertices+=A}}function E(m,z,C){m.push({buffer:z,object:C,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function u(m){if(m!=ca){switch(m){case THREE.AdditiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ONE,e.ONE);break;case THREE.SubtractiveBlending:e.blendFunc(e.DST_COLOR,e.ZERO);break;case THREE.BillboardBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA, -e.ONE_MINUS_SRC_ALPHA);break;case THREE.ReverseSubtractiveBlending:e.blendEquation(e.FUNC_REVERSE_SUBTRACT);e.blendFunc(e.ONE,e.ONE);break;default:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA)}ca=m}}function F(m,z,C){if((C.width&C.width-1)==0&&(C.height&C.height-1)==0){e.texParameteri(m,e.TEXTURE_WRAP_S,Y(z.wrapS));e.texParameteri(m,e.TEXTURE_WRAP_T,Y(z.wrapT));e.texParameteri(m,e.TEXTURE_MAG_FILTER,Y(z.magFilter));e.texParameteri(m,e.TEXTURE_MIN_FILTER,Y(z.minFilter));e.generateMipmap(m)}else{e.texParameteri(m, -e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE);e.texParameteri(m,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);e.texParameteri(m,e.TEXTURE_MAG_FILTER,L(z.magFilter));e.texParameteri(m,e.TEXTURE_MIN_FILTER,L(z.minFilter))}}function v(m,z){if(m&&!m.__webGLFramebuffer){m.__webGLFramebuffer=e.createFramebuffer();m.__webGLRenderbuffer=e.createRenderbuffer();m.__webGLTexture=e.createTexture();e.bindRenderbuffer(e.RENDERBUFFER,m.__webGLRenderbuffer);e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,m.width,m.height);e.bindTexture(e.TEXTURE_2D, -m.__webGLTexture);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,Y(m.wrapS));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,Y(m.wrapT));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,Y(m.magFilter));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,Y(m.minFilter));e.texImage2D(e.TEXTURE_2D,0,Y(m.format),m.width,m.height,0,Y(m.format),Y(m.type),null);e.bindFramebuffer(e.FRAMEBUFFER,m.__webGLFramebuffer);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,m.__webGLTexture,0);e.framebufferRenderbuffer(e.FRAMEBUFFER, -e.DEPTH_ATTACHMENT,e.RENDERBUFFER,m.__webGLRenderbuffer);e.bindTexture(e.TEXTURE_2D,null);e.bindRenderbuffer(e.RENDERBUFFER,null);e.bindFramebuffer(e.FRAMEBUFFER,null)}var C,k,o;if(m){C=m.__webGLFramebuffer;k=m.width;o=m.height}else{C=null;k=ha;o=fa}if(C!=S){e.bindFramebuffer(e.FRAMEBUFFER,C);e.viewport(da,ta,k,o);z&&e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT);S=C}}function N(m,z){var C;if(m=="fragment")C=e.createShader(e.FRAGMENT_SHADER);else m=="vertex"&&(C=e.createShader(e.VERTEX_SHADER));e.shaderSource(C, -z);e.compileShader(C);if(!e.getShaderParameter(C,e.COMPILE_STATUS)){alert(e.getShaderInfoLog(C));return null}return C}function L(m){switch(m){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return e.NEAREST;case THREE.LinearFilter:case THREE.LinearMipMapNearestFilter:case THREE.LinearMipMapLinearFilter:return e.LINEAR}}function Y(m){switch(m){case THREE.RepeatWrapping:return e.REPEAT;case THREE.ClampToEdgeWrapping:return e.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return e.MIRRORED_REPEAT; -case THREE.NearestFilter:return e.NEAREST;case THREE.NearestMipMapNearestFilter:return e.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return e.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return e.LINEAR;case THREE.LinearMipMapNearestFilter:return e.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return e.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return e.BYTE;case THREE.UnsignedByteType:return e.UNSIGNED_BYTE;case THREE.ShortType:return e.SHORT;case THREE.UnsignedShortType:return e.UNSIGNED_SHORT; -case THREE.IntType:return e.INT;case THREE.UnsignedShortType:return e.UNSIGNED_INT;case THREE.FloatType:return e.FLOAT;case THREE.AlphaFormat:return e.ALPHA;case THREE.RGBFormat:return e.RGB;case THREE.RGBAFormat:return e.RGBA;case THREE.LuminanceFormat:return e.LUMINANCE;case THREE.LuminanceAlphaFormat:return e.LUMINANCE_ALPHA}return 0}var M=document.createElement("canvas"),e,V=null,S=null,ba=this,ea=null,J=null,ca=null,wa=null,da=0,ta=0,ha=0,fa=0,ra=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4, -new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],xa=new THREE.Matrix4,ga=new Float32Array(16),aa=new Float32Array(16),oa=new THREE.Vector4,pa=!0,R=new THREE.Color(0),ia=0;if(a){if(a.antialias!==undefined)pa=a.antialias;a.clearColor!==undefined&&R.setHex(a.clearColor);if(a.clearAlpha!==undefined)ia=a.clearAlpha}this.domElement=M;this.autoClear=!0;this.sortObjects=!0;(function(m,z,C){try{if(!(e=M.getContext("experimental-webgl",{antialias:m})))throw"Error creating WebGL context.";}catch(k){console.error(k)}e.clearColor(0, -0,0,1);e.clearDepth(1);e.enable(e.DEPTH_TEST);e.depthFunc(e.LEQUAL);e.frontFace(e.CCW);e.cullFace(e.BACK);e.enable(e.CULL_FACE);e.enable(e.BLEND);e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA);e.clearColor(z.r,z.g,z.b,C);_cullEnabled=!0})(pa,R,ia);this.context=e;this.lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}};this.setSize=function(m,z){M.width=m;M.height=z;this.setViewport(0,0,M.width,M.height)};this.setViewport=function(m,z,C,k){da=m; -ta=z;ha=C;fa=k;e.viewport(da,ta,ha,fa)};this.setScissor=function(m,z,C,k){e.scissor(m,z,C,k)};this.enableScissorTest=function(m){m?e.enable(e.SCISSOR_TEST):e.disable(e.SCISSOR_TEST)};this.setClearColorHex=function(m,z){var C=new THREE.Color(m);e.clearColor(C.r,C.g,C.b,z)};this.setClearColor=function(m,z){e.clearColor(m.r,m.g,m.b,z)};this.clear=function(){e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)};this.initMaterial=function(m,z,C){var k,o;if(m instanceof THREE.MeshDepthMaterial)b(m,THREE.ShaderLib.depth); -else if(m instanceof THREE.MeshNormalMaterial)b(m,THREE.ShaderLib.normal);else if(m instanceof THREE.MeshBasicMaterial)b(m,THREE.ShaderLib.basic);else if(m instanceof THREE.MeshLambertMaterial)b(m,THREE.ShaderLib.lambert);else if(m instanceof THREE.MeshPhongMaterial)b(m,THREE.ShaderLib.phong);else if(m instanceof THREE.LineBasicMaterial)b(m,THREE.ShaderLib.basic);else m instanceof THREE.ParticleBasicMaterial&&b(m,THREE.ShaderLib.particle_basic);var y,A,D,P;o=D=P=0;for(y=z.length;o0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+y.maxDirLights,"#define MAX_POINT_LIGHTS "+y.maxPointLights,y.map?"#define USE_MAP":"",y.envMap?"#define USE_ENVMAP":"",y.lightMap? -"#define USE_LIGHTMAP":"",y.vertexColors?"#define USE_COLOR":"",y.skinning?"#define USE_SKINNING":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n"); -e.attachShader(C,N("fragment",o+P));e.attachShader(C,N("vertex",y+z));e.linkProgram(C);e.getProgramParameter(C,e.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+e.getProgramParameter(C,e.VALIDATE_STATUS)+", gl error ["+e.getError()+"]");C.uniforms={};C.attributes={};m.program=C;C=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices"];for(k in m.uniforms)C.push(k);k=m.program;P=0;for(z=C.length;P< -z;P++){o=C[P];k.uniforms[o]=e.getUniformLocation(k,o)}k=m.program;C=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];P=0;for(z=C.length;P=0&&e.enableVertexAttribArray(k.color);k.normal>=0&&e.enableVertexAttribArray(k.normal);k.tangent>=0&&e.enableVertexAttribArray(k.tangent);if(m.skinning&&k.skinVertexA>=0&&k.skinVertexB>= -0&&k.skinIndex>=0&&k.skinWeight>=0){e.enableVertexAttribArray(k.skinVertexA);e.enableVertexAttribArray(k.skinVertexB);e.enableVertexAttribArray(k.skinIndex);e.enableVertexAttribArray(k.skinWeight)}};this.render=function(m,z,C,k){var o,y,A,D,P,H,O,la,ua=m.lights,ja=m.fog;z.matrixAutoUpdate&&z.update();z.matrixWorldInverse.flattenToArray(aa);z.projectionMatrix.flattenToArray(ga);xa.multiply(z.projectionMatrix,z.matrixWorldInverse);l(xa);m.update(undefined,!1,z);this.initWebGLObjects(m,z);v(C,k!==undefined? -k:!0);this.autoClear&&this.clear();P=m.__webglObjects.length;for(k=0;k=0;o--){k=C.__webglObjects[o].object;z==k&&C.__webglObjects.splice(o,1)}m.__objectsRemoved.splice(0,1)}z=0;for(C=m.__webglObjects.length;z0){e.bindBuffer(e.ARRAY_BUFFER,A.__webGLUVBuffer);e.bufferData(e.ARRAY_BUFFER, -Ma,la)}if(Ja&&ja>0){e.bindBuffer(e.ARRAY_BUFFER,A.__webGLUV2Buffer);e.bufferData(e.ARRAY_BUFFER,Qa,la)}if(Oa){e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,A.__webGLFaceBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,$,la);e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,A.__webGLLineBuffer);e.bufferData(e.ELEMENT_ARRAY_BUFFER,na,la)}if(I>0){e.bindBuffer(e.ARRAY_BUFFER,A.__webGLSkinVertexABuffer);e.bufferData(e.ARRAY_BUFFER,G,la);e.bindBuffer(e.ARRAY_BUFFER,A.__webGLSkinVertexBBuffer);e.bufferData(e.ARRAY_BUFFER,W,la);e.bindBuffer(e.ARRAY_BUFFER, -A.__webGLSkinIndicesBuffer);e.bufferData(e.ARRAY_BUFFER,T,la);e.bindBuffer(e.ARRAY_BUFFER,A.__webGLSkinWeightsBuffer);e.bufferData(e.ARRAY_BUFFER,K,la)}}}o.__dirtyVertices=!1;o.__dirtyElements=!1;o.__dirtyUvs=!1;o.__dirtyNormals=!1;o.__dirtyTangents=!1;o.__dirtyColors=!1}else if(k instanceof THREE.Ribbon){o=k.geometry;if(o.__dirtyVertices||o.__dirtyColors){k=o;y=e.DYNAMIC_DRAW;H=void 0;H=void 0;D=void 0;A=void 0;O=k.vertices;la=k.colors;ja=O.length;ua=la.length;ka=k.__vertexArray;P=k.__colorArray; -sa=k.__dirtyColors;if(k.__dirtyVertices){for(H=0;H -0}}; -THREE.Snippets={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform int combine;\n#endif", -envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( envMap, vec3( -vReflect.x, vReflect.yz ) );\nif ( combine == 1 ) {\ngl_FragColor = vec4( mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity ), opacity );\n} else {\ngl_FragColor = gl_FragColor * cubeColor;\n}\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refractionRatio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif", -map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, gl_PointCoord );\n#endif",map_pars_fragment:"#ifdef USE_MAP\nvarying vec2 vUv;\nuniform sampler2D map;\n#endif",map_pars_vertex:"#ifdef USE_MAP\nvarying vec2 vUv;\n#endif",map_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, vUv );\n#endif",map_vertex:"#ifdef USE_MAP\nvUv = uv;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\nuniform sampler2D lightMap;\n#endif", -lightmap_pars_vertex:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\n#endif",lightmap_fragment:"#ifdef USE_LIGHTMAP\ngl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n#endif",lightmap_vertex:"#ifdef USE_LIGHTMAP\nvUv2 = uv2;\n#endif",lights_pars_vertex:"uniform bool enableLighting;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n#ifdef PHONG\nvarying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];\n#endif\n#endif", +THREE.WebGLRenderer=function(a){function c(m,y,C){var l,o,z,A=m.vertices,D=A.length,P=m.colors,H=P.length,O=m.__vertexArray,la=m.__colorArray,ua=m.__sortArray,ja=m.__dirtyVertices,ka=m.__dirtyColors;if(C.sortParticles){xa.multiplySelf(C.matrixWorld);for(l=0;l=0){f.bindBuffer(f.ARRAY_BUFFER,o.__webGLColorBuffer);f.vertexAttribPointer(m.color,3,f.FLOAT,!1,0,0)}if(m.normal>=0){f.bindBuffer(f.ARRAY_BUFFER,o.__webGLNormalBuffer);f.vertexAttribPointer(m.normal,3,f.FLOAT,!1,0,0)}if(m.tangent>=0){f.bindBuffer(f.ARRAY_BUFFER,o.__webGLTangentBuffer);f.vertexAttribPointer(m.tangent, +4,f.FLOAT,!1,0,0)}if(m.uv>=0)if(o.__webGLUVBuffer){f.bindBuffer(f.ARRAY_BUFFER,o.__webGLUVBuffer);f.vertexAttribPointer(m.uv,2,f.FLOAT,!1,0,0);f.enableVertexAttribArray(m.uv)}else f.disableVertexAttribArray(m.uv);if(m.uv2>=0)if(o.__webGLUV2Buffer){f.bindBuffer(f.ARRAY_BUFFER,o.__webGLUV2Buffer);f.vertexAttribPointer(m.uv2,2,f.FLOAT,!1,0,0);f.enableVertexAttribArray(m.uv2)}else f.disableVertexAttribArray(m.uv2);if(l.skinning&&m.skinVertexA>=0&&m.skinVertexB>=0&&m.skinIndex>=0&&m.skinWeight>=0){f.bindBuffer(f.ARRAY_BUFFER, +o.__webGLSkinVertexABuffer);f.vertexAttribPointer(m.skinVertexA,4,f.FLOAT,!1,0,0);f.bindBuffer(f.ARRAY_BUFFER,o.__webGLSkinVertexBBuffer);f.vertexAttribPointer(m.skinVertexB,4,f.FLOAT,!1,0,0);f.bindBuffer(f.ARRAY_BUFFER,o.__webGLSkinIndicesBuffer);f.vertexAttribPointer(m.skinIndex,4,f.FLOAT,!1,0,0);f.bindBuffer(f.ARRAY_BUFFER,o.__webGLSkinWeightsBuffer);f.vertexAttribPointer(m.skinWeight,4,f.FLOAT,!1,0,0)}if(z instanceof THREE.Mesh)if(l.wireframe){f.lineWidth(l.wireframeLinewidth);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, +o.__webGLLineBuffer);f.drawElements(f.LINES,o.__webGLLineCount,f.UNSIGNED_SHORT,0)}else{f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,o.__webGLFaceBuffer);f.drawElements(f.TRIANGLES,o.__webGLFaceCount,f.UNSIGNED_SHORT,0)}else if(z instanceof THREE.Line){z=z.type==THREE.LineStrip?f.LINE_STRIP:f.LINES;f.lineWidth(l.linewidth);f.drawArrays(z,0,o.__webGLLineCount)}else if(z instanceof THREE.ParticleSystem)f.drawArrays(f.POINTS,0,o.__webGLParticleCount);else z instanceof THREE.Ribbon&&f.drawArrays(f.TRIANGLE_STRIP, +0,o.__webGLVertexCount)}function g(m,y){if(!m.__webGLVertexBuffer)m.__webGLVertexBuffer=f.createBuffer();if(!m.__webGLNormalBuffer)m.__webGLNormalBuffer=f.createBuffer();if(m.hasPos){f.bindBuffer(f.ARRAY_BUFFER,m.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,m.positionArray,f.DYNAMIC_DRAW);f.enableVertexAttribArray(y.attributes.position);f.vertexAttribPointer(y.attributes.position,3,f.FLOAT,!1,0,0)}if(m.hasNormal){f.bindBuffer(f.ARRAY_BUFFER,m.__webGLNormalBuffer);f.bufferData(f.ARRAY_BUFFER,m.normalArray, +f.DYNAMIC_DRAW);f.enableVertexAttribArray(y.attributes.normal);f.vertexAttribPointer(y.attributes.normal,3,f.FLOAT,!1,0,0)}f.drawArrays(f.TRIANGLES,0,m.count);m.count=0}function h(m){if(ea!=m.doubleSided){m.doubleSided?f.disable(f.CULL_FACE):f.enable(f.CULL_FACE);ea=m.doubleSided}if(J!=m.flipSided){m.flipSided?f.frontFace(f.CW):f.frontFace(f.CCW);J=m.flipSided}}function j(m){if(wa!=m){m?f.enable(f.DEPTH_TEST):f.disable(f.DEPTH_TEST);wa=m}}function k(m){ra[0].set(m.n41-m.n11,m.n42-m.n12,m.n43-m.n13, +m.n44-m.n14);ra[1].set(m.n41+m.n11,m.n42+m.n12,m.n43+m.n13,m.n44+m.n14);ra[2].set(m.n41+m.n21,m.n42+m.n22,m.n43+m.n23,m.n44+m.n24);ra[3].set(m.n41-m.n21,m.n42-m.n22,m.n43-m.n23,m.n44-m.n24);ra[4].set(m.n41-m.n31,m.n42-m.n32,m.n43-m.n33,m.n44-m.n34);ra[5].set(m.n41+m.n31,m.n42+m.n32,m.n43+m.n33,m.n44+m.n34);var y;for(m=0;m<6;m++){y=ra[m];y.divideScalar(Math.sqrt(y.x*y.x+y.y*y.y+y.z*y.z))}}function n(m){for(var y=m.matrixWorld,C=-m.geometry.boundingSphere.radius*Math.max(m.scale.x,Math.max(m.scale.y, +m.scale.z)),l=0;l<6;l++){m=ra[l].x*y.n14+ra[l].y*y.n24+ra[l].z*y.n34+ra[l].w;if(m<=C)return!1}return!0}function p(m,y){m.list[m.count]=y;m.count+=1}function w(m){var y,C,l=m.object,o=m.opaque,z=m.transparent;z.count=0;m=o.count=0;for(y=l.materials.length;m65535){O[P].counter+=1;H=O[P].hash+"_"+O[P].counter;m.geometryGroups[H]== +undefined&&(m.geometryGroups[H]={faces:[],materials:D,vertices:0})}m.geometryGroups[H].faces.push(o);m.geometryGroups[H].vertices+=A}}function E(m,y,C){m.push({buffer:y,object:C,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function u(m){if(m!=ca){switch(m){case THREE.AdditiveBlending:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.ONE,f.ONE);break;case THREE.SubtractiveBlending:f.blendFunc(f.DST_COLOR,f.ZERO);break;case THREE.BillboardBlending:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.SRC_ALPHA, +f.ONE_MINUS_SRC_ALPHA);break;case THREE.ReverseSubtractiveBlending:f.blendEquation(f.FUNC_REVERSE_SUBTRACT);f.blendFunc(f.ONE,f.ONE);break;default:f.blendEquation(f.FUNC_ADD);f.blendFunc(f.ONE,f.ONE_MINUS_SRC_ALPHA)}ca=m}}function F(m,y,C){if((C.width&C.width-1)==0&&(C.height&C.height-1)==0){f.texParameteri(m,f.TEXTURE_WRAP_S,Y(y.wrapS));f.texParameteri(m,f.TEXTURE_WRAP_T,Y(y.wrapT));f.texParameteri(m,f.TEXTURE_MAG_FILTER,Y(y.magFilter));f.texParameteri(m,f.TEXTURE_MIN_FILTER,Y(y.minFilter));f.generateMipmap(m)}else{f.texParameteri(m, +f.TEXTURE_WRAP_S,f.CLAMP_TO_EDGE);f.texParameteri(m,f.TEXTURE_WRAP_T,f.CLAMP_TO_EDGE);f.texParameteri(m,f.TEXTURE_MAG_FILTER,L(y.magFilter));f.texParameteri(m,f.TEXTURE_MIN_FILTER,L(y.minFilter))}}function v(m){if(m&&!m.__webGLFramebuffer){m.__webGLFramebuffer=f.createFramebuffer();m.__webGLRenderbuffer=f.createRenderbuffer();m.__webGLTexture=f.createTexture();f.bindRenderbuffer(f.RENDERBUFFER,m.__webGLRenderbuffer);f.renderbufferStorage(f.RENDERBUFFER,f.DEPTH_COMPONENT16,m.width,m.height);f.bindTexture(f.TEXTURE_2D, +m.__webGLTexture);f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_S,Y(m.wrapS));f.texParameteri(f.TEXTURE_2D,f.TEXTURE_WRAP_T,Y(m.wrapT));f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MAG_FILTER,Y(m.magFilter));f.texParameteri(f.TEXTURE_2D,f.TEXTURE_MIN_FILTER,Y(m.minFilter));f.texImage2D(f.TEXTURE_2D,0,Y(m.format),m.width,m.height,0,Y(m.format),Y(m.type),null);f.bindFramebuffer(f.FRAMEBUFFER,m.__webGLFramebuffer);f.framebufferTexture2D(f.FRAMEBUFFER,f.COLOR_ATTACHMENT0,f.TEXTURE_2D,m.__webGLTexture,0);f.framebufferRenderbuffer(f.FRAMEBUFFER, +f.DEPTH_ATTACHMENT,f.RENDERBUFFER,m.__webGLRenderbuffer);f.bindTexture(f.TEXTURE_2D,null);f.bindRenderbuffer(f.RENDERBUFFER,null);f.bindFramebuffer(f.FRAMEBUFFER,null)}var y,C;if(m){y=m.__webGLFramebuffer;C=m.width;m=m.height}else{y=null;C=ha;m=fa}if(y!=S){f.bindFramebuffer(f.FRAMEBUFFER,y);f.viewport(da,ta,C,m);S=y}}function N(m,y){var C;if(m=="fragment")C=f.createShader(f.FRAGMENT_SHADER);else m=="vertex"&&(C=f.createShader(f.VERTEX_SHADER));f.shaderSource(C,y);f.compileShader(C);if(!f.getShaderParameter(C, +f.COMPILE_STATUS)){alert(f.getShaderInfoLog(C));return null}return C}function L(m){switch(m){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return f.NEAREST;case THREE.LinearFilter:case THREE.LinearMipMapNearestFilter:case THREE.LinearMipMapLinearFilter:return f.LINEAR}}function Y(m){switch(m){case THREE.RepeatWrapping:return f.REPEAT;case THREE.ClampToEdgeWrapping:return f.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return f.MIRRORED_REPEAT; +case THREE.NearestFilter:return f.NEAREST;case THREE.NearestMipMapNearestFilter:return f.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return f.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return f.LINEAR;case THREE.LinearMipMapNearestFilter:return f.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return f.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return f.BYTE;case THREE.UnsignedByteType:return f.UNSIGNED_BYTE;case THREE.ShortType:return f.SHORT;case THREE.UnsignedShortType:return f.UNSIGNED_SHORT; +case THREE.IntType:return f.INT;case THREE.UnsignedShortType:return f.UNSIGNED_INT;case THREE.FloatType:return f.FLOAT;case THREE.AlphaFormat:return f.ALPHA;case THREE.RGBFormat:return f.RGB;case THREE.RGBAFormat:return f.RGBA;case THREE.LuminanceFormat:return f.LUMINANCE;case THREE.LuminanceAlphaFormat:return f.LUMINANCE_ALPHA}return 0}var M=document.createElement("canvas"),f,V=null,S=null,ba=this,ea=null,J=null,ca=null,wa=null,da=0,ta=0,ha=0,fa=0,ra=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4, +new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],xa=new THREE.Matrix4,ga=new Float32Array(16),aa=new Float32Array(16),oa=new THREE.Vector4,pa=!0,R=new THREE.Color(0),ia=0;if(a){if(a.antialias!==undefined)pa=a.antialias;a.clearColor!==undefined&&R.setHex(a.clearColor);if(a.clearAlpha!==undefined)ia=a.clearAlpha}this.domElement=M;this.autoClear=!0;this.sortObjects=!0;(function(m,y,C){try{if(!(f=M.getContext("experimental-webgl",{antialias:m})))throw"Error creating WebGL context.";}catch(l){console.error(l)}f.clearColor(0, +0,0,1);f.clearDepth(1);f.enable(f.DEPTH_TEST);f.depthFunc(f.LEQUAL);f.frontFace(f.CCW);f.cullFace(f.BACK);f.enable(f.CULL_FACE);f.enable(f.BLEND);f.blendFunc(f.ONE,f.ONE_MINUS_SRC_ALPHA);f.clearColor(y.r,y.g,y.b,C);_cullEnabled=!0})(pa,R,ia);this.context=f;this.lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}};this.setSize=function(m,y){M.width=m;M.height=y;this.setViewport(0,0,M.width,M.height)};this.setViewport=function(m,y,C,l){da=m; +ta=y;ha=C;fa=l;f.viewport(da,ta,ha,fa)};this.setScissor=function(m,y,C,l){f.scissor(m,y,C,l)};this.enableScissorTest=function(m){m?f.enable(f.SCISSOR_TEST):f.disable(f.SCISSOR_TEST)};this.setClearColorHex=function(m,y){var C=new THREE.Color(m);f.clearColor(C.r,C.g,C.b,y)};this.setClearColor=function(m,y){f.clearColor(m.r,m.g,m.b,y)};this.clear=function(){f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT)};this.initMaterial=function(m,y,C){var l,o;if(m instanceof THREE.MeshDepthMaterial)b(m,THREE.ShaderLib.depth); +else if(m instanceof THREE.MeshNormalMaterial)b(m,THREE.ShaderLib.normal);else if(m instanceof THREE.MeshBasicMaterial)b(m,THREE.ShaderLib.basic);else if(m instanceof THREE.MeshLambertMaterial)b(m,THREE.ShaderLib.lambert);else if(m instanceof THREE.MeshPhongMaterial)b(m,THREE.ShaderLib.phong);else if(m instanceof THREE.LineBasicMaterial)b(m,THREE.ShaderLib.basic);else m instanceof THREE.ParticleBasicMaterial&&b(m,THREE.ShaderLib.particle_basic);var z,A,D,P;o=D=P=0;for(z=y.length;o0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+z.maxDirLights,"#define MAX_POINT_LIGHTS "+z.maxPointLights,z.map?"#define USE_MAP":"",z.envMap?"#define USE_ENVMAP":"",z.lightMap? +"#define USE_LIGHTMAP":"",z.vertexColors?"#define USE_COLOR":"",z.skinning?"#define USE_SKINNING":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n"); +f.attachShader(C,N("fragment",o+P));f.attachShader(C,N("vertex",z+y));f.linkProgram(C);f.getProgramParameter(C,f.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+f.getProgramParameter(C,f.VALIDATE_STATUS)+", gl error ["+f.getError()+"]");C.uniforms={};C.attributes={};m.program=C;C=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices"];for(l in m.uniforms)C.push(l);l=m.program;P=0;for(y=C.length;P< +y;P++){o=C[P];l.uniforms[o]=f.getUniformLocation(l,o)}l=m.program;C=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];P=0;for(y=C.length;P=0&&f.enableVertexAttribArray(l.color);l.normal>=0&&f.enableVertexAttribArray(l.normal);l.tangent>=0&&f.enableVertexAttribArray(l.tangent);if(m.skinning&&l.skinVertexA>=0&&l.skinVertexB>= +0&&l.skinIndex>=0&&l.skinWeight>=0){f.enableVertexAttribArray(l.skinVertexA);f.enableVertexAttribArray(l.skinVertexB);f.enableVertexAttribArray(l.skinIndex);f.enableVertexAttribArray(l.skinWeight)}};this.render=function(m,y,C,l){var o,z,A,D,P,H,O,la,ua=m.lights,ja=m.fog;y.matrixAutoUpdate&&y.update();y.matrixWorldInverse.flattenToArray(aa);y.projectionMatrix.flattenToArray(ga);xa.multiply(y.projectionMatrix,y.matrixWorldInverse);k(xa);m.update(undefined,!1,y);this.initWebGLObjects(m,y);v(C);(this.autoClear|| +l)&&this.clear();P=m.__webglObjects.length;for(l=0;l=0;o--){l=C.__webglObjects[o].object;y==l&&C.__webglObjects.splice(o,1)}m.__objectsRemoved.splice(0,1)}y=0;for(C=m.__webglObjects.length;y0){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLUVBuffer);f.bufferData(f.ARRAY_BUFFER,Ma,la)}if(Ja&&ja>0){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLUV2Buffer);f.bufferData(f.ARRAY_BUFFER, +Qa,la)}if(Oa){f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,A.__webGLFaceBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,$,la);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,A.__webGLLineBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,na,la)}if(I>0){f.bindBuffer(f.ARRAY_BUFFER,A.__webGLSkinVertexABuffer);f.bufferData(f.ARRAY_BUFFER,G,la);f.bindBuffer(f.ARRAY_BUFFER,A.__webGLSkinVertexBBuffer);f.bufferData(f.ARRAY_BUFFER,W,la);f.bindBuffer(f.ARRAY_BUFFER,A.__webGLSkinIndicesBuffer);f.bufferData(f.ARRAY_BUFFER,T,la);f.bindBuffer(f.ARRAY_BUFFER, +A.__webGLSkinWeightsBuffer);f.bufferData(f.ARRAY_BUFFER,K,la)}}}o.__dirtyVertices=!1;o.__dirtyElements=!1;o.__dirtyUvs=!1;o.__dirtyNormals=!1;o.__dirtyTangents=!1;o.__dirtyColors=!1}else if(l instanceof THREE.Ribbon){o=l.geometry;if(o.__dirtyVertices||o.__dirtyColors){l=o;z=f.DYNAMIC_DRAW;H=void 0;H=void 0;D=void 0;A=void 0;O=l.vertices;la=l.colors;ja=O.length;ua=la.length;ka=l.__vertexArray;P=l.__colorArray;sa=l.__dirtyColors;if(l.__dirtyVertices){for(H=0;H0}}; +THREE.Snippets={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif", +envmap_pars_fragment:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform int combine;\n#endif",envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( envMap, vec3( -vReflect.x, vReflect.yz ) );\nif ( combine == 1 ) {\ngl_FragColor = vec4( mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity ), opacity );\n} else {\ngl_FragColor = gl_FragColor * cubeColor;\n}\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif", +envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refractionRatio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif", +map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, gl_PointCoord );\n#endif",map_pars_fragment:"#ifdef USE_MAP\nvarying vec2 vUv;\nuniform sampler2D map;\n#endif",map_pars_vertex:"#ifdef USE_MAP\nvarying vec2 vUv;\n#endif",map_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, vUv );\n#endif",map_vertex:"#ifdef USE_MAP\nvUv = uv;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\nuniform sampler2D lightMap;\n#endif",lightmap_pars_vertex:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\n#endif", +lightmap_fragment:"#ifdef USE_LIGHTMAP\ngl_FragColor = gl_FragColor * texture2D( lightMap, vUv2 );\n#endif",lightmap_vertex:"#ifdef USE_LIGHTMAP\nvUv2 = uv2;\n#endif",lights_pars_vertex:"uniform bool enableLighting;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\n#ifdef PHONG\nvarying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];\n#endif\n#endif", lights_vertex:"if ( !enableLighting ) {\nvLightWeighting = vec3( 1.0 );\n} else {\nvLightWeighting = ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nfloat directionalLightWeighting = max( dot( transformedNormal, normalize( lDirection.xyz ) ), 0.0 );\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 pointLightVector = normalize( lPosition.xyz - mvPosition.xyz );\nfloat pointLightWeighting = max( dot( transformedNormal, pointLightVector ), 0.0 );\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting;\n#ifdef PHONG\nvPointLightVector[ i ] = pointLightVector;\n#endif\n}\n#endif\n}", lights_pars_fragment:"#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nvarying vec3 vPointLightVector[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",lights_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\nvec4 mColor = vec4( diffuse, opacity );\nvec4 mSpecular = vec4( specular, opacity );\n#if MAX_POINT_LIGHTS > 0\nvec4 pointDiffuse = vec4( 0.0 );\nvec4 pointSpecular = vec4( 0.0 );\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec3 pointVector = normalize( vPointLightVector[ i ] );\nvec3 pointHalfVector = normalize( vPointLightVector[ i ] + vViewPosition );\nfloat pointDotNormalHalf = dot( normal, pointHalfVector );\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\nfloat pointSpecularWeight = 0.0;\nif ( pointDotNormalHalf >= 0.0 )\npointSpecularWeight = pow( pointDotNormalHalf, shininess );\npointDiffuse += mColor * pointDiffuseWeight;\npointSpecular += mSpecular * pointSpecularWeight;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec4 dirDiffuse = vec4( 0.0 );\nvec4 dirSpecular = vec4( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );\nfloat dirDotNormalHalf = dot( normal, dirHalfVector );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = 0.0;\nif ( dirDotNormalHalf >= 0.0 )\ndirSpecularWeight = pow( dirDotNormalHalf, shininess );\ndirDiffuse += mColor * dirDiffuseWeight;\ndirSpecular += mSpecular * dirSpecularWeight;\n}\n#endif\nvec4 totalLight = vec4( ambient, opacity );\n#if MAX_DIR_LIGHTS > 0\ntotalLight += dirDiffuse + dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalLight += pointDiffuse + pointSpecular;\n#endif\ngl_FragColor = gl_FragColor * totalLight;", color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\nvColor = color;\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[20];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif"}; @@ -275,23 +275,23 @@ THREE.Snippets.lights_pars_fragment,"void main() {\ngl_FragColor = vec4( vLightW THREE.Snippets.lights_pars_vertex,THREE.Snippets.color_pars_vertex,THREE.Snippets.skinning_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.Snippets.map_vertex,THREE.Snippets.lightmap_vertex,THREE.Snippets.envmap_vertex,THREE.Snippets.color_vertex,"#ifndef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\n#endif\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 transformedNormal = normalize( normalMatrix * normal );\nvNormal = transformedNormal;", THREE.Snippets.lights_vertex,THREE.Snippets.skinning_vertex,"}"].join("\n")},particle_basic:{uniforms:THREE.UniformsLib.particle,fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.Snippets.color_pars_fragment,THREE.Snippets.map_particle_pars_fragment,THREE.Snippets.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.Snippets.map_particle_fragment,THREE.Snippets.color_fragment,THREE.Snippets.fog_fragment,"}"].join("\n"),vertexShader:["uniform float size;", THREE.Snippets.color_pars_vertex,"void main() {",THREE.Snippets.color_vertex,"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\ngl_PointSize = size;\n}"].join("\n")}}; -THREE.SoundRenderer=function(){this.volume=1;this.domElement=document.createElement("div");this.domElement.id="THREESound";this.cameraPosition=new THREE.Vector3;this.soundPosition=new THREE.Vector3;this.render=function(a,c,b){b&&a.update(undefined,!1,c);b=a.sounds;var d,f=b.length;for(d=0;d= 0.0 )\npointSpecularWeight = pow( pointDotNormalHalf, uShininess );\npointDiffuse += vec4( uDiffuseColor, 1.0 ) * pointDiffuseWeight;\npointSpecular += vec4( uSpecularColor, 1.0 ) * pointSpecularWeight;\nvec4 dirDiffuse = vec4( 0.0, 0.0, 0.0, 0.0 );\nvec4 dirSpecular = vec4( 0.0, 0.0, 0.0, 0.0 );\nvec4 lDirection = viewMatrix * vec4( uDirLightPos, 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nvec3 dirHalfVector = normalize( lDirection.xyz + vViewPosition );\nfloat dirDotNormalHalf = dot( normal, dirHalfVector );\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\nfloat dirSpecularWeight = 0.0;\nif ( dirDotNormalHalf >= 0.0 )\ndirSpecularWeight = pow( dirDotNormalHalf, uShininess );\ndirDiffuse += vec4( uDiffuseColor, 1.0 ) * dirDiffuseWeight;\ndirSpecular += vec4( uSpecularColor, 1.0 ) * dirSpecularWeight;\nvec4 totalLight = vec4( uAmbientLightColor * uAmbientColor, 1.0 );\ntotalLight += vec4( uDirLightColor, 1.0 ) * ( dirDiffuse + dirSpecular );\ntotalLight += vec4( uPointLightColor, 1.0 ) * ( pointDiffuse + pointSpecular );\ngl_FragColor = vec4( totalLight.xyz * aoTex * diffuseTex, 1.0 );\n}", @@ -300,39 +300,39 @@ cube:{uniforms:{tCube:{type:"t",value:1,texture:null}},vertexShader:"varying vec value:0,texture:null},uImageIncrement:{type:"v2",value:new THREE.Vector2(0.001953125,0)},cKernel:{type:"fv1",value:[]}},vertexShader:"varying vec2 vUv;\nuniform vec2 uImageIncrement;\nvoid main(void) {\nvUv = uv - ((KERNEL_SIZE - 1.0) / 2.0) * uImageIncrement;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"varying vec2 vUv;\nuniform sampler2D tDiffuse;\nuniform vec2 uImageIncrement;\nuniform float cKernel[KERNEL_SIZE];\nvoid main(void) {\nvec2 imageCoord = vUv;\nvec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\nfor( int i=0; i25&&(g=25);f=(g-1)*0.5;b=Array(g);for(c=d=0;c25&&(g=25);e=(g-1)*0.5;b=Array(g);for(c=d=0;c0||(p=this.vertices.push(new THREE.Vertex(new THREE.Vector3(w,j,t)))-1);n.push(p)}c.push(n)}var q,x,B;f=c.length;for(b=0;b0)for(d=0;d1){q=this.vertices[h].position.clone(); -x=this.vertices[l].position.clone();B=this.vertices[n].position.clone();q.normalize();x.normalize();B.normalize();this.faces.push(new THREE.Face3(h,l,n,[new THREE.Vector3(q.x,q.y,q.z),new THREE.Vector3(x.x,x.y,x.z),new THREE.Vector3(B.x,B.y,B.z)]));this.uvs.push([p,w,E])}}}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};Sphere.prototype=new THREE.Geometry;Sphere.prototype.constructor=Sphere; -var Torus=function(a,c,b,d){this.radius=a||100;this.tube=c||40;this.segmentsR=b||8;this.segmentsT=d||6;a=[];THREE.Geometry.call(this);for(c=0;c<=this.segmentsR;++c)for(b=0;b<=this.segmentsT;++b){d=b/this.segmentsT*2*Math.PI;var f=c/this.segmentsR*2*Math.PI;this.vertices.push(new THREE.Vertex(new THREE.Vector3((this.radius+this.tube*Math.cos(f))*Math.cos(d),(this.radius+this.tube*Math.cos(f))*Math.sin(d),this.tube*Math.sin(f))));a.push([b/this.segmentsT,1-c/this.segmentsR])}for(c=1;c<=this.segmentsR;++c)for(b= -1;b<=this.segmentsT;++b){d=(this.segmentsT+1)*c+b;f=(this.segmentsT+1)*c+b-1;var g=(this.segmentsT+1)*(c-1)+b-1,h=(this.segmentsT+1)*(c-1)+b;this.faces.push(new THREE.Face4(d,f,g,h));this.uvs.push([new THREE.UV(a[d][0],a[d][1]),new THREE.UV(a[f][0],a[f][1]),new THREE.UV(a[g][0],a[g][1]),new THREE.UV(a[h][0],a[h][1])])}delete a;this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};Torus.prototype=new THREE.Geometry;Torus.prototype.constructor=Torus; -var Icosahedron=function(a){function c(w,t,q){var x=Math.sqrt(w*w+t*t+q*q);return f.vertices.push(new THREE.Vertex(new THREE.Vector3(w/x,t/x,q/x)))-1}function b(w,t,q,x){x.faces.push(new THREE.Face3(w,t,q))}function d(w,t){var q=f.vertices[w].position,x=f.vertices[t].position;return c((q.x+x.x)/2,(q.y+x.y)/2,(q.z+x.z)/2)}var f=this,g=new THREE.Geometry,h;this.subdivisions=a||0;THREE.Geometry.call(this);a=(1+Math.sqrt(5))/2;c(-1,a,0);c(1,a,0);c(-1,-a,0);c(1,-a,0);c(0,-1,a);c(0,1,a);c(0,-1,-a);c(0, -1,-a);c(a,0,-1);c(a,0,1);c(-a,0,-1);c(-a,0,1);b(0,11,5,g);b(0,5,1,g);b(0,1,7,g);b(0,7,10,g);b(0,10,11,g);b(1,5,9,g);b(5,11,4,g);b(11,10,2,g);b(10,7,6,g);b(7,1,8,g);b(3,9,4,g);b(3,4,2,g);b(3,2,6,g);b(3,6,8,g);b(3,8,9,g);b(4,9,5,g);b(2,4,11,g);b(6,2,10,g);b(8,6,7,g);b(9,8,1,g);for(a=0;a0||(p=this.vertices.push(new THREE.Vertex(new THREE.Vector3(w,j,t)))-1);n.push(p)}c.push(n)}var q,x,B;e=c.length;for(b=0;b0)for(d=0;d1){q=this.vertices[h].position.clone(); +x=this.vertices[k].position.clone();B=this.vertices[n].position.clone();q.normalize();x.normalize();B.normalize();this.faces.push(new THREE.Face3(h,k,n,[new THREE.Vector3(q.x,q.y,q.z),new THREE.Vector3(x.x,x.y,x.z),new THREE.Vector3(B.x,B.y,B.z)]));this.uvs.push([p,w,E])}}}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};Sphere.prototype=new THREE.Geometry;Sphere.prototype.constructor=Sphere; +var Torus=function(a,c,b,d){this.radius=a||100;this.tube=c||40;this.segmentsR=b||8;this.segmentsT=d||6;a=[];THREE.Geometry.call(this);for(c=0;c<=this.segmentsR;++c)for(b=0;b<=this.segmentsT;++b){d=b/this.segmentsT*2*Math.PI;var e=c/this.segmentsR*2*Math.PI;this.vertices.push(new THREE.Vertex(new THREE.Vector3((this.radius+this.tube*Math.cos(e))*Math.cos(d),(this.radius+this.tube*Math.cos(e))*Math.sin(d),this.tube*Math.sin(e))));a.push([b/this.segmentsT,1-c/this.segmentsR])}for(c=1;c<=this.segmentsR;++c)for(b= +1;b<=this.segmentsT;++b){d=(this.segmentsT+1)*c+b;e=(this.segmentsT+1)*c+b-1;var g=(this.segmentsT+1)*(c-1)+b-1,h=(this.segmentsT+1)*(c-1)+b;this.faces.push(new THREE.Face4(d,e,g,h));this.uvs.push([new THREE.UV(a[d][0],a[d][1]),new THREE.UV(a[e][0],a[e][1]),new THREE.UV(a[g][0],a[g][1]),new THREE.UV(a[h][0],a[h][1])])}delete a;this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals()};Torus.prototype=new THREE.Geometry;Torus.prototype.constructor=Torus; +var Icosahedron=function(a){function c(w,t,q){var x=Math.sqrt(w*w+t*t+q*q);return e.vertices.push(new THREE.Vertex(new THREE.Vector3(w/x,t/x,q/x)))-1}function b(w,t,q,x){x.faces.push(new THREE.Face3(w,t,q))}function d(w,t){var q=e.vertices[w].position,x=e.vertices[t].position;return c((q.x+x.x)/2,(q.y+x.y)/2,(q.z+x.z)/2)}var e=this,g=new THREE.Geometry,h;this.subdivisions=a||0;THREE.Geometry.call(this);a=(1+Math.sqrt(5))/2;c(-1,a,0);c(1,a,0);c(-1,-a,0);c(1,-a,0);c(0,-1,a);c(0,1,a);c(0,-1,-a);c(0, +1,-a);c(a,0,-1);c(a,0,1);c(-a,0,-1);c(-a,0,1);b(0,11,5,g);b(0,5,1,g);b(0,1,7,g);b(0,7,10,g);b(0,10,11,g);b(1,5,9,g);b(5,11,4,g);b(11,10,2,g);b(10,7,6,g);b(7,1,8,g);b(3,9,4,g);b(3,4,2,g);b(3,2,6,g);b(3,6,8,g);b(3,8,9,g);b(4,9,5,g);b(2,4,11,g);b(6,2,10,g);b(8,6,7,g);b(9,8,1,g);for(a=0;a=this.maxCount-3&&j(this)};this.begin= -function(){this.count=0;this.hasPos=!1;this.hasNormal=!1};this.end=function(b){if(this.count!=0){for(var d=this.count*3;dthis.size-1&&(l=this.size-1);var t=Math.floor(n-j);t<1&&(t=1);n=Math.floor(n+j);n>this.size-1&&(n=this.size-1);var q=Math.floor(p-j);q<1&&(q=1);j=Math.floor(p+j); -j>this.size-1&&(j=this.size-1);for(var x,B,E,u,F,v;w0&&(this.field[E+x]+=u)}}}};this.addPlaneX=function(b,d){var f,g,h,j,l,n=this.size,p=this.yd,w=this.zd,t=this.field,q=n*Math.sqrt(b/d);q>n&&(q=n);for(f=0;f0)for(g=0;gp&&(x=p);for(g=0;g0){l=g*w;for(f=0;fsize&&(dist=size);for(h=0;h0){l=zd*h;for(g=0;g=this.maxCount-3&&j(this)};this.begin= +function(){this.count=0;this.hasPos=!1;this.hasNormal=!1};this.end=function(b){if(this.count!=0){for(var d=this.count*3;dthis.size-1&&(k=this.size-1);var t=Math.floor(n-j);t<1&&(t=1);n=Math.floor(n+j);n>this.size-1&&(n=this.size-1);var q=Math.floor(p-j);q<1&&(q=1);j=Math.floor(p+j); +j>this.size-1&&(j=this.size-1);for(var x,B,E,u,F,v;w0&&(this.field[E+x]+=u)}}}};this.addPlaneX=function(b,d){var e,g,h,j,k,n=this.size,p=this.yd,w=this.zd,t=this.field,q=n*Math.sqrt(b/d);q>n&&(q=n);for(e=0;e0)for(g=0;gp&&(x=p);for(g=0;g0){k=g*w;for(e=0;esize&&(dist=size);for(h=0;h0){k=zd*h;for(g=0;g>7)-127;y|=(D&127)<<16|A<<8;if(y==0&&H==-127)return 0;return(1-2*(P>>7))*(1+y*Math.pow(2,-23))*Math.pow(2,H)}function j(k,o){var y=p(k,o),A=p(k,o+1),D=p(k,o+2);return(p(k,o+3)<<24)+(D<<16)+(A<<8)+y}function l(k,o){var y=p(k,o);return(p(k,o+1)<<8)+y}function n(k,o){var y=p(k,o);return y>127?y-256:y}function p(k,o){return k.charCodeAt(o)&255}function w(k){var o,y,A;o=j(a,k); -y=j(a,k+Y);A=j(a,k+M);k=l(a,k+e);THREE.Loader.prototype.f3(u,o,y,A,k)}function t(k){var o,y,A,D,P,H;o=j(a,k);y=j(a,k+Y);A=j(a,k+M);D=l(a,k+e);P=j(a,k+V);H=j(a,k+S);k=j(a,k+ba);THREE.Loader.prototype.f3n(u,N,o,y,A,D,P,H,k)}function q(k){var o,y,A,D;o=j(a,k);y=j(a,k+ea);A=j(a,k+J);D=j(a,k+ca);k=l(a,k+wa);THREE.Loader.prototype.f4(u,o,y,A,D,k)}function x(k){var o,y,A,D,P,H,O,la;o=j(a,k);y=j(a,k+ea);A=j(a,k+J);D=j(a,k+ca);P=l(a,k+wa);H=j(a,k+da);O=j(a,k+ta);la=j(a,k+ha);k=j(a,k+fa);THREE.Loader.prototype.f4n(u, -N,o,y,A,D,P,H,O,la,k)}function B(k){var o,y;o=j(a,k);y=j(a,k+ra);k=j(a,k+xa);THREE.Loader.prototype.uv3(u.uvs,L[o*2],L[o*2+1],L[y*2],L[y*2+1],L[k*2],L[k*2+1])}function E(k){var o,y,A;o=j(a,k);y=j(a,k+ga);A=j(a,k+aa);k=j(a,k+oa);THREE.Loader.prototype.uv4(u.uvs,L[o*2],L[o*2+1],L[y*2],L[y*2+1],L[A*2],L[A*2+1],L[k*2],L[k*2+1])}var u=this,F=0,v,N=[],L=[],Y,M,e,V,S,ba,ea,J,ca,wa,da,ta,ha,fa,ra,xa,ga,aa,oa,pa,R,ia,m,z,C;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(u,d,g);v={signature:a.substr(F, +c},loadAsciiOld:function(a,c){var b=document.createElement("script");b.type="text/javascript";b.onload=c;b.src=a;document.getElementsByTagName("head")[0].appendChild(b)},loadAscii:function(a){var c=a.model,b=a.callback,d=a.texture_path?a.texture_path:THREE.Loader.prototype.extractUrlbase(c);a=(new Date).getTime();c=new Worker(c);c.onmessage=function(e){THREE.Loader.prototype.createModel(e.data,b,d)};c.postMessage(a)},loadBinary:function(a){var c=a.model,b=a.callback,d=a.texture_path?a.texture_path: +THREE.Loader.prototype.extractUrlbase(c),e=a.bin_path?a.bin_path:THREE.Loader.prototype.extractUrlbase(c);a=(new Date).getTime();c=new Worker(c);var g=this.showProgress?THREE.Loader.prototype.updateProgress:null;c.onmessage=function(h){THREE.Loader.prototype.loadAjaxBuffers(h.data.buffers,h.data.materials,b,e,d,g)};c.onerror=function(h){alert("worker.onerror: "+h.message+"\n"+h.data);h.preventDefault()};c.postMessage(a)},loadAjaxBuffers:function(a,c,b,d,e,g){var h=new XMLHttpRequest,j=d+"/"+a,k=0; +h.onreadystatechange=function(){if(h.readyState==4)h.status==200||h.status==0?THREE.Loader.prototype.createBinModel(h.responseText,b,e,c):alert("Couldn't load ["+j+"] ["+h.status+"]");else if(h.readyState==3){if(g){k==0&&(k=h.getResponseHeader("Content-Length"));g({total:k,loaded:h.responseText.length})}}else h.readyState==2&&(k=h.getResponseHeader("Content-Length"))};h.open("GET",j,!0);h.overrideMimeType("text/plain; charset=x-user-defined");h.setRequestHeader("Content-Type","text/plain");h.send(null)}, +createBinModel:function(a,c,b,d){var e=function(g){function h(l,o){var z=p(l,o),A=p(l,o+1),D=p(l,o+2),P=p(l,o+3),H=(P<<1&255|D>>7)-127;z|=(D&127)<<16|A<<8;if(z==0&&H==-127)return 0;return(1-2*(P>>7))*(1+z*Math.pow(2,-23))*Math.pow(2,H)}function j(l,o){var z=p(l,o),A=p(l,o+1),D=p(l,o+2);return(p(l,o+3)<<24)+(D<<16)+(A<<8)+z}function k(l,o){var z=p(l,o);return(p(l,o+1)<<8)+z}function n(l,o){var z=p(l,o);return z>127?z-256:z}function p(l,o){return l.charCodeAt(o)&255}function w(l){var o,z,A;o=j(a,l); +z=j(a,l+Y);A=j(a,l+M);l=k(a,l+f);THREE.Loader.prototype.f3(u,o,z,A,l)}function t(l){var o,z,A,D,P,H;o=j(a,l);z=j(a,l+Y);A=j(a,l+M);D=k(a,l+f);P=j(a,l+V);H=j(a,l+S);l=j(a,l+ba);THREE.Loader.prototype.f3n(u,N,o,z,A,D,P,H,l)}function q(l){var o,z,A,D;o=j(a,l);z=j(a,l+ea);A=j(a,l+J);D=j(a,l+ca);l=k(a,l+wa);THREE.Loader.prototype.f4(u,o,z,A,D,l)}function x(l){var o,z,A,D,P,H,O,la;o=j(a,l);z=j(a,l+ea);A=j(a,l+J);D=j(a,l+ca);P=k(a,l+wa);H=j(a,l+da);O=j(a,l+ta);la=j(a,l+ha);l=j(a,l+fa);THREE.Loader.prototype.f4n(u, +N,o,z,A,D,P,H,O,la,l)}function B(l){var o,z;o=j(a,l);z=j(a,l+ra);l=j(a,l+xa);THREE.Loader.prototype.uv3(u.uvs,L[o*2],L[o*2+1],L[z*2],L[z*2+1],L[l*2],L[l*2+1])}function E(l){var o,z,A;o=j(a,l);z=j(a,l+ga);A=j(a,l+aa);l=j(a,l+oa);THREE.Loader.prototype.uv4(u.uvs,L[o*2],L[o*2+1],L[z*2],L[z*2+1],L[A*2],L[A*2+1],L[l*2],L[l*2+1])}var u=this,F=0,v,N=[],L=[],Y,M,f,V,S,ba,ea,J,ca,wa,da,ta,ha,fa,ra,xa,ga,aa,oa,pa,R,ia,m,y,C;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(u,d,g);v={signature:a.substr(F, 8),header_bytes:p(a,F+8),vertex_coordinate_bytes:p(a,F+9),normal_coordinate_bytes:p(a,F+10),uv_coordinate_bytes:p(a,F+11),vertex_index_bytes:p(a,F+12),normal_index_bytes:p(a,F+13),uv_index_bytes:p(a,F+14),material_index_bytes:p(a,F+15),nvertices:j(a,F+16),nnormals:j(a,F+16+4),nuvs:j(a,F+16+8),ntri_flat:j(a,F+16+12),ntri_smooth:j(a,F+16+16),ntri_flat_uv:j(a,F+16+20),ntri_smooth_uv:j(a,F+16+24),nquad_flat:j(a,F+16+28),nquad_smooth:j(a,F+16+32),nquad_flat_uv:j(a,F+16+36),nquad_smooth_uv:j(a,F+16+40)}; -F+=v.header_bytes;Y=v.vertex_index_bytes;M=v.vertex_index_bytes*2;e=v.vertex_index_bytes*3;V=v.vertex_index_bytes*3+v.material_index_bytes;S=v.vertex_index_bytes*3+v.material_index_bytes+v.normal_index_bytes;ba=v.vertex_index_bytes*3+v.material_index_bytes+v.normal_index_bytes*2;ea=v.vertex_index_bytes;J=v.vertex_index_bytes*2;ca=v.vertex_index_bytes*3;wa=v.vertex_index_bytes*4;da=v.vertex_index_bytes*4+v.material_index_bytes;ta=v.vertex_index_bytes*4+v.material_index_bytes+v.normal_index_bytes;ha= +F+=v.header_bytes;Y=v.vertex_index_bytes;M=v.vertex_index_bytes*2;f=v.vertex_index_bytes*3;V=v.vertex_index_bytes*3+v.material_index_bytes;S=v.vertex_index_bytes*3+v.material_index_bytes+v.normal_index_bytes;ba=v.vertex_index_bytes*3+v.material_index_bytes+v.normal_index_bytes*2;ea=v.vertex_index_bytes;J=v.vertex_index_bytes*2;ca=v.vertex_index_bytes*3;wa=v.vertex_index_bytes*4;da=v.vertex_index_bytes*4+v.material_index_bytes;ta=v.vertex_index_bytes*4+v.material_index_bytes+v.normal_index_bytes;ha= v.vertex_index_bytes*4+v.material_index_bytes+v.normal_index_bytes*2;fa=v.vertex_index_bytes*4+v.material_index_bytes+v.normal_index_bytes*3;ra=v.uv_index_bytes;xa=v.uv_index_bytes*2;ga=v.uv_index_bytes;aa=v.uv_index_bytes*2;oa=v.uv_index_bytes*3;g=v.vertex_index_bytes*3+v.material_index_bytes;C=v.vertex_index_bytes*4+v.material_index_bytes;pa=v.ntri_flat*g;R=v.ntri_smooth*(g+v.normal_index_bytes*3);ia=v.ntri_flat_uv*(g+v.uv_index_bytes*3);m=v.ntri_smooth_uv*(g+v.normal_index_bytes*3+v.uv_index_bytes* -3);z=v.nquad_flat*C;g=v.nquad_smooth*(C+v.normal_index_bytes*4);C=v.nquad_flat_uv*(C+v.uv_index_bytes*4);F+=function(k){for(var o,y,A,D=v.vertex_coordinate_bytes*3,P=k+v.nvertices*D;k65535){v[x].counter+=1;s=v[x].hash+"_"+v[x].counter;e.geometryGroups[s]==undefined&&(e.geometryGroups[s]={faces:[],materials:r,vertices:0})}e.geometryGroups[s].faces.push(i); e.geometryGroups[s].vertices+=o}}function L(e,j,k){e.push({buffer:j,object:k,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function M(e){if(e!=za){switch(e){case THREE.AdditiveBlending:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.ONE,c.ONE);break;case THREE.SubtractiveBlending:c.blendFunc(c.DST_COLOR,c.ZERO);break;case THREE.BillboardBlending:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.SRC_ALPHA,c.ONE_MINUS_SRC_ALPHA);break;case THREE.ReverseSubtractiveBlending:c.blendEquation(c.FUNC_REVERSE_SUBTRACT); c.blendFunc(c.ONE,c.ONE);break;default:c.blendEquation(c.FUNC_ADD);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA)}za=e}}function V(e,j,k){if((k.width&k.width-1)==0&&(k.height&k.height-1)==0){c.texParameteri(e,c.TEXTURE_WRAP_S,Y(j.wrapS));c.texParameteri(e,c.TEXTURE_WRAP_T,Y(j.wrapT));c.texParameteri(e,c.TEXTURE_MAG_FILTER,Y(j.magFilter));c.texParameteri(e,c.TEXTURE_MIN_FILTER,Y(j.minFilter));c.generateMipmap(e)}else{c.texParameteri(e,c.TEXTURE_WRAP_S,c.CLAMP_TO_EDGE);c.texParameteri(e,c.TEXTURE_WRAP_T, -c.CLAMP_TO_EDGE);c.texParameteri(e,c.TEXTURE_MAG_FILTER,aa(j.magFilter));c.texParameteri(e,c.TEXTURE_MIN_FILTER,aa(j.minFilter))}}function X(e,j){if(e&&!e.__webGLFramebuffer){e.__webGLFramebuffer=c.createFramebuffer();e.__webGLRenderbuffer=c.createRenderbuffer();e.__webGLTexture=c.createTexture();c.bindRenderbuffer(c.RENDERBUFFER,e.__webGLRenderbuffer);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,e.width,e.height);c.bindTexture(c.TEXTURE_2D,e.__webGLTexture);c.texParameteri(c.TEXTURE_2D, +c.CLAMP_TO_EDGE);c.texParameteri(e,c.TEXTURE_MAG_FILTER,aa(j.magFilter));c.texParameteri(e,c.TEXTURE_MIN_FILTER,aa(j.minFilter))}}function X(e){if(e&&!e.__webGLFramebuffer){e.__webGLFramebuffer=c.createFramebuffer();e.__webGLRenderbuffer=c.createRenderbuffer();e.__webGLTexture=c.createTexture();c.bindRenderbuffer(c.RENDERBUFFER,e.__webGLRenderbuffer);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,e.width,e.height);c.bindTexture(c.TEXTURE_2D,e.__webGLTexture);c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S,Y(e.wrapS));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_WRAP_T,Y(e.wrapT));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MAG_FILTER,Y(e.magFilter));c.texParameteri(c.TEXTURE_2D,c.TEXTURE_MIN_FILTER,Y(e.minFilter));c.texImage2D(c.TEXTURE_2D,0,Y(e.format),e.width,e.height,0,Y(e.format),Y(e.type),null);c.bindFramebuffer(c.FRAMEBUFFER,e.__webGLFramebuffer);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e.__webGLTexture,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT, -c.RENDERBUFFER,e.__webGLRenderbuffer);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null)}var k,g,i;if(e){k=e.__webGLFramebuffer;g=e.width;i=e.height}else{k=null;g=Ea;i=Fa}if(k!=la){c.bindFramebuffer(c.FRAMEBUFFER,k);c.viewport(va,Da,g,i);j&&c.clear(c.COLOR_BUFFER_BIT|c.DEPTH_BUFFER_BIT);la=k}}function ca(e,j){var k;if(e=="fragment")k=c.createShader(c.FRAGMENT_SHADER);else e=="vertex"&&(k=c.createShader(c.VERTEX_SHADER));c.shaderSource(k, -j);c.compileShader(k);if(!c.getShaderParameter(k,c.COMPILE_STATUS)){alert(c.getShaderInfoLog(k));return null}return k}function aa(e){switch(e){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return c.NEAREST;case THREE.LinearFilter:case THREE.LinearMipMapNearestFilter:case THREE.LinearMipMapLinearFilter:return c.LINEAR}}function Y(e){switch(e){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT; -case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return c.BYTE;case THREE.UnsignedByteType:return c.UNSIGNED_BYTE;case THREE.ShortType:return c.SHORT;case THREE.UnsignedShortType:return c.UNSIGNED_SHORT; -case THREE.IntType:return c.INT;case THREE.UnsignedShortType:return c.UNSIGNED_INT;case THREE.FloatType:return c.FLOAT;case THREE.AlphaFormat:return c.ALPHA;case THREE.RGBFormat:return c.RGB;case THREE.RGBAFormat:return c.RGBA;case THREE.LuminanceFormat:return c.LUMINANCE;case THREE.LuminanceAlphaFormat:return c.LUMINANCE_ALPHA}return 0}var fa=document.createElement("canvas"),c,na=null,la=null,oa=this,pa=null,qa=null,za=null,Aa=null,va=0,Da=0,Ea=0,Fa=0,ra=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4, -new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ga=new THREE.Matrix4,Pa=new Float32Array(16),Ja=new Float32Array(16),Ba=new THREE.Vector4,Qa=!0,Ra=new THREE.Color(0),Sa=0;if(a){if(a.antialias!==undefined)Qa=a.antialias;a.clearColor!==undefined&&Ra.setHex(a.clearColor);if(a.clearAlpha!==undefined)Sa=a.clearAlpha}this.domElement=fa;this.autoClear=!0;this.sortObjects=!0;(function(e,j,k){try{if(!(c=fa.getContext("experimental-webgl",{antialias:e})))throw"Error creating WebGL context.";}catch(g){console.error(g)}c.clearColor(0, -0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK);c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(j.r,j.g,j.b,k);_cullEnabled=!0})(Qa,Ra,Sa);this.context=c;this.lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}};this.setSize=function(e,j){fa.width=e;fa.height=j;this.setViewport(0,0,fa.width,fa.height)};this.setViewport=function(e,j,k,g){va= -e;Da=j;Ea=k;Fa=g;c.viewport(va,Da,Ea,Fa)};this.setScissor=function(e,j,k,g){c.scissor(e,j,k,g)};this.enableScissorTest=function(e){e?c.enable(c.SCISSOR_TEST):c.disable(c.SCISSOR_TEST)};this.setClearColorHex=function(e,j){var k=new THREE.Color(e);c.clearColor(k.r,k.g,k.b,j)};this.setClearColor=function(e,j){c.clearColor(e.r,e.g,e.b,j)};this.clear=function(){c.clear(c.COLOR_BUFFER_BIT|c.DEPTH_BUFFER_BIT)};this.initMaterial=function(e,j,k){var g,i;if(e instanceof THREE.MeshDepthMaterial)d(e,THREE.ShaderLib.depth); -else if(e instanceof THREE.MeshNormalMaterial)d(e,THREE.ShaderLib.normal);else if(e instanceof THREE.MeshBasicMaterial)d(e,THREE.ShaderLib.basic);else if(e instanceof THREE.MeshLambertMaterial)d(e,THREE.ShaderLib.lambert);else if(e instanceof THREE.MeshPhongMaterial)d(e,THREE.ShaderLib.phong);else if(e instanceof THREE.LineBasicMaterial)d(e,THREE.ShaderLib.basic);else e instanceof THREE.ParticleBasicMaterial&&d(e,THREE.ShaderLib.particle_basic);var u,o,r,x;i=r=x=0;for(u=j.length;i0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+u.maxDirLights,"#define MAX_POINT_LIGHTS "+u.maxPointLights,u.map?"#define USE_MAP":"",u.envMap?"#define USE_ENVMAP":"",u.lightMap? -"#define USE_LIGHTMAP":"",u.vertexColors?"#define USE_COLOR":"",u.skinning?"#define USE_SKINNING":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n"); +c.RENDERBUFFER,e.__webGLRenderbuffer);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null)}var j,k;if(e){j=e.__webGLFramebuffer;k=e.width;e=e.height}else{j=null;k=Ea;e=Fa}if(j!=la){c.bindFramebuffer(c.FRAMEBUFFER,j);c.viewport(va,Da,k,e);la=j}}function ca(e,j){var k;if(e=="fragment")k=c.createShader(c.FRAGMENT_SHADER);else e=="vertex"&&(k=c.createShader(c.VERTEX_SHADER));c.shaderSource(k,j);c.compileShader(k);if(!c.getShaderParameter(k,c.COMPILE_STATUS)){alert(c.getShaderInfoLog(k)); +return null}return k}function aa(e){switch(e){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return c.NEAREST;case THREE.LinearFilter:case THREE.LinearMipMapNearestFilter:case THREE.LinearMipMapLinearFilter:return c.LINEAR}}function Y(e){switch(e){case THREE.RepeatWrapping:return c.REPEAT;case THREE.ClampToEdgeWrapping:return c.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return c.MIRRORED_REPEAT;case THREE.NearestFilter:return c.NEAREST;case THREE.NearestMipMapNearestFilter:return c.NEAREST_MIPMAP_NEAREST; +case THREE.NearestMipMapLinearFilter:return c.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return c.LINEAR;case THREE.LinearMipMapNearestFilter:return c.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return c.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return c.BYTE;case THREE.UnsignedByteType:return c.UNSIGNED_BYTE;case THREE.ShortType:return c.SHORT;case THREE.UnsignedShortType:return c.UNSIGNED_SHORT;case THREE.IntType:return c.INT;case THREE.UnsignedShortType:return c.UNSIGNED_INT;case THREE.FloatType:return c.FLOAT; +case THREE.AlphaFormat:return c.ALPHA;case THREE.RGBFormat:return c.RGB;case THREE.RGBAFormat:return c.RGBA;case THREE.LuminanceFormat:return c.LUMINANCE;case THREE.LuminanceAlphaFormat:return c.LUMINANCE_ALPHA}return 0}var fa=document.createElement("canvas"),c,na=null,la=null,oa=this,pa=null,qa=null,za=null,Aa=null,va=0,Da=0,Ea=0,Fa=0,ra=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ga=new THREE.Matrix4,Pa=new Float32Array(16),Ja=new Float32Array(16), +Ba=new THREE.Vector4,Qa=!0,Ra=new THREE.Color(0),Sa=0;if(a){if(a.antialias!==undefined)Qa=a.antialias;a.clearColor!==undefined&&Ra.setHex(a.clearColor);if(a.clearAlpha!==undefined)Sa=a.clearAlpha}this.domElement=fa;this.autoClear=!0;this.sortObjects=!0;(function(e,j,k){try{if(!(c=fa.getContext("experimental-webgl",{antialias:e})))throw"Error creating WebGL context.";}catch(g){console.error(g)}c.clearColor(0,0,0,1);c.clearDepth(1);c.enable(c.DEPTH_TEST);c.depthFunc(c.LEQUAL);c.frontFace(c.CCW);c.cullFace(c.BACK); +c.enable(c.CULL_FACE);c.enable(c.BLEND);c.blendFunc(c.ONE,c.ONE_MINUS_SRC_ALPHA);c.clearColor(j.r,j.g,j.b,k);_cullEnabled=!0})(Qa,Ra,Sa);this.context=c;this.lights={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[]}};this.setSize=function(e,j){fa.width=e;fa.height=j;this.setViewport(0,0,fa.width,fa.height)};this.setViewport=function(e,j,k,g){va=e;Da=j;Ea=k;Fa=g;c.viewport(va,Da,Ea,Fa)};this.setScissor=function(e,j,k,g){c.scissor(e,j,k,g)};this.enableScissorTest= +function(e){e?c.enable(c.SCISSOR_TEST):c.disable(c.SCISSOR_TEST)};this.setClearColorHex=function(e,j){var k=new THREE.Color(e);c.clearColor(k.r,k.g,k.b,j)};this.setClearColor=function(e,j){c.clearColor(e.r,e.g,e.b,j)};this.clear=function(){c.clear(c.COLOR_BUFFER_BIT|c.DEPTH_BUFFER_BIT)};this.initMaterial=function(e,j,k){var g,i;if(e instanceof THREE.MeshDepthMaterial)d(e,THREE.ShaderLib.depth);else if(e instanceof THREE.MeshNormalMaterial)d(e,THREE.ShaderLib.normal);else if(e instanceof THREE.MeshBasicMaterial)d(e, +THREE.ShaderLib.basic);else if(e instanceof THREE.MeshLambertMaterial)d(e,THREE.ShaderLib.lambert);else if(e instanceof THREE.MeshPhongMaterial)d(e,THREE.ShaderLib.phong);else if(e instanceof THREE.LineBasicMaterial)d(e,THREE.ShaderLib.basic);else e instanceof THREE.ParticleBasicMaterial&&d(e,THREE.ShaderLib.particle_basic);var u,o,r,x;i=r=x=0;for(u=j.length;i0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+u.maxDirLights,"#define MAX_POINT_LIGHTS "+u.maxPointLights,u.map?"#define USE_MAP":"",u.envMap?"#define USE_ENVMAP":"",u.lightMap?"#define USE_LIGHTMAP":"",u.vertexColors?"#define USE_COLOR":"",u.skinning?"#define USE_SKINNING":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n"); c.attachShader(k,ca("fragment",i+x));c.attachShader(k,ca("vertex",u+j));c.linkProgram(k);c.getProgramParameter(k,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(k,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");k.uniforms={};k.attributes={};e.program=k;k=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices"];for(g in e.uniforms)k.push(g);g=e.program;x=0;for(j=k.length;x< j;x++){i=k[x];g.uniforms[i]=c.getUniformLocation(g,i)}g=e.program;k=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];x=0;for(j=k.length;x=0&&c.enableVertexAttribArray(g.color);g.normal>=0&&c.enableVertexAttribArray(g.normal);g.tangent>=0&&c.enableVertexAttribArray(g.tangent);if(e.skinning&&g.skinVertexA>=0&&g.skinVertexB>= -0&&g.skinIndex>=0&&g.skinWeight>=0){c.enableVertexAttribArray(g.skinVertexA);c.enableVertexAttribArray(g.skinVertexB);c.enableVertexAttribArray(g.skinIndex);c.enableVertexAttribArray(g.skinWeight)}};this.render=function(e,j,k,g){var i,u,o,r,x,s,v,J,P=e.lights,N=e.fog;j.matrixAutoUpdate&&j.update();j.matrixWorldInverse.flattenToArray(Ja);j.projectionMatrix.flattenToArray(Pa);Ga.multiply(j.projectionMatrix,j.matrixWorldInverse);m(Ga);e.update(undefined,!1,j);this.initWebGLObjects(e,j);X(k,g!==undefined? -g:!0);this.autoClear&&this.clear();x=e.__webglObjects.length;for(g=0;g=0;i--){g=k.__webglObjects[i].object;j==g&&k.__webglObjects.splice(i,1)}e.__objectsRemoved.splice(0,1)}j=0;for(k=e.__webglObjects.length;j0){c.bindBuffer(c.ARRAY_BUFFER,o.__webGLUVBuffer);c.bufferData(c.ARRAY_BUFFER,Ha,J)}if(Ca&&N>0){c.bindBuffer(c.ARRAY_BUFFER,o.__webGLUV2Buffer);c.bufferData(c.ARRAY_BUFFER,Ia,J)}if(La){c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,o.__webGLFaceBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,sa,J);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,o.__webGLLineBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER, -ja,J)}if(p>0){c.bindBuffer(c.ARRAY_BUFFER,o.__webGLSkinVertexABuffer);c.bufferData(c.ARRAY_BUFFER,R,J);c.bindBuffer(c.ARRAY_BUFFER,o.__webGLSkinVertexBBuffer);c.bufferData(c.ARRAY_BUFFER,S,J);c.bindBuffer(c.ARRAY_BUFFER,o.__webGLSkinIndicesBuffer);c.bufferData(c.ARRAY_BUFFER,T,J);c.bindBuffer(c.ARRAY_BUFFER,o.__webGLSkinWeightsBuffer);c.bufferData(c.ARRAY_BUFFER,U,J)}}}i.__dirtyVertices=!1;i.__dirtyElements=!1;i.__dirtyUvs=!1;i.__dirtyNormals=!1;i.__dirtyTangents=!1;i.__dirtyColors=!1}else if(g instanceof -THREE.Ribbon){i=g.geometry;if(i.__dirtyVertices||i.__dirtyColors){g=i;u=c.DYNAMIC_DRAW;s=void 0;s=void 0;r=void 0;o=void 0;v=g.vertices;J=g.colors;N=v.length;P=J.length;I=g.__vertexArray;x=g.__colorArray;K=g.__dirtyColors;if(g.__dirtyVertices){for(s=0;s0}}; +0&&g.skinIndex>=0&&g.skinWeight>=0){c.enableVertexAttribArray(g.skinVertexA);c.enableVertexAttribArray(g.skinVertexB);c.enableVertexAttribArray(g.skinIndex);c.enableVertexAttribArray(g.skinWeight)}};this.render=function(e,j,k,g){var i,u,o,r,x,s,v,J,P=e.lights,N=e.fog;j.matrixAutoUpdate&&j.update();j.matrixWorldInverse.flattenToArray(Ja);j.projectionMatrix.flattenToArray(Pa);Ga.multiply(j.projectionMatrix,j.matrixWorldInverse);m(Ga);e.update(undefined,!1,j);this.initWebGLObjects(e,j);X(k);(this.autoClear|| +g)&&this.clear();x=e.__webglObjects.length;for(g=0;g=0;i--){g=k.__webglObjects[i].object;j==g&&k.__webglObjects.splice(i,1)}e.__objectsRemoved.splice(0,1)}j=0;for(k=e.__webglObjects.length;j0){c.bindBuffer(c.ARRAY_BUFFER,o.__webGLUVBuffer);c.bufferData(c.ARRAY_BUFFER,Ha,J)}if(Ca&&N>0){c.bindBuffer(c.ARRAY_BUFFER,o.__webGLUV2Buffer);c.bufferData(c.ARRAY_BUFFER,Ia,J)}if(La){c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,o.__webGLFaceBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,sa,J);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,o.__webGLLineBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,ja,J)}if(p>0){c.bindBuffer(c.ARRAY_BUFFER, +o.__webGLSkinVertexABuffer);c.bufferData(c.ARRAY_BUFFER,R,J);c.bindBuffer(c.ARRAY_BUFFER,o.__webGLSkinVertexBBuffer);c.bufferData(c.ARRAY_BUFFER,S,J);c.bindBuffer(c.ARRAY_BUFFER,o.__webGLSkinIndicesBuffer);c.bufferData(c.ARRAY_BUFFER,T,J);c.bindBuffer(c.ARRAY_BUFFER,o.__webGLSkinWeightsBuffer);c.bufferData(c.ARRAY_BUFFER,U,J)}}}i.__dirtyVertices=!1;i.__dirtyElements=!1;i.__dirtyUvs=!1;i.__dirtyNormals=!1;i.__dirtyTangents=!1;i.__dirtyColors=!1}else if(g instanceof THREE.Ribbon){i=g.geometry;if(i.__dirtyVertices|| +i.__dirtyColors){g=i;u=c.DYNAMIC_DRAW;s=void 0;s=void 0;r=void 0;o=void 0;v=g.vertices;J=g.colors;N=v.length;P=J.length;I=g.__vertexArray;x=g.__colorArray;K=g.__dirtyColors;if(g.__dirtyVertices){for(s=0;s0}}; THREE.Snippets={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform int combine;\n#endif", envmap_fragment:"#ifdef USE_ENVMAP\nvec4 cubeColor = textureCube( envMap, vec3( -vReflect.x, vReflect.yz ) );\nif ( combine == 1 ) {\ngl_FragColor = vec4( mix( gl_FragColor.xyz, cubeColor.xyz, reflectivity ), opacity );\n} else {\ngl_FragColor = gl_FragColor * cubeColor;\n}\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvec3 nWorld = mat3( objectMatrix[0].xyz, objectMatrix[1].xyz, objectMatrix[2].xyz ) * normal;\nif ( useRefract ) {\nvReflect = refract( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ), refractionRatio );\n} else {\nvReflect = reflect( normalize( mPosition.xyz - cameraPosition ), normalize( nWorld.xyz ) );\n}\n#endif", map_particle_pars_fragment:"#ifdef USE_MAP\nuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, gl_PointCoord );\n#endif",map_pars_fragment:"#ifdef USE_MAP\nvarying vec2 vUv;\nuniform sampler2D map;\n#endif",map_pars_vertex:"#ifdef USE_MAP\nvarying vec2 vUv;\n#endif",map_fragment:"#ifdef USE_MAP\ngl_FragColor = gl_FragColor * texture2D( map, vUv );\n#endif",map_vertex:"#ifdef USE_MAP\nvUv = uv;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\nvarying vec2 vUv2;\nuniform sampler2D lightMap;\n#endif", diff --git a/examples/misc_sound.html b/examples/misc_sound.html index 65d4fee2..c84f684e 100644 --- a/examples/misc_sound.html +++ b/examples/misc_sound.html @@ -226,7 +226,7 @@ // Render scene into texture - renderer.render( scene, camera, postprocessing.rtTexture1 ); + renderer.render( scene, camera, postprocessing.rtTexture1, true ); // Render quad with blured scene into texture (convolution pass 1) @@ -251,7 +251,7 @@ postprocessing.materialScreen.uniforms.tDiffuse.texture = postprocessing.rtTexture3; postprocessing.materialScreen.uniforms.opacity.value = 1.3; - renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTexture1, false ); + renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTexture1 ); // Render to screen diff --git a/examples/webgl_lines_colors.html b/examples/webgl_lines_colors.html index 69eb9587..06ecb6ff 100644 --- a/examples/webgl_lines_colors.html +++ b/examples/webgl_lines_colors.html @@ -298,7 +298,7 @@ // Render scene into texture - renderer.render( scene, camera, rtTexture1 ); + renderer.render( scene, camera, rtTexture1, true ); // Render quad with blured scene into texture (convolution pass 1) @@ -323,7 +323,7 @@ materialScreen.uniforms.tDiffuse.texture = rtTexture3; materialScreen.uniforms.opacity.value = 1.3; - renderer.render( sceneScreen, cameraOrtho, rtTexture1, false ); + renderer.render( sceneScreen, cameraOrtho, rtTexture1 ); // Render to screen diff --git a/examples/webgl_materials_video.html b/examples/webgl_materials_video.html index 98f23436..27ea8901 100644 --- a/examples/webgl_materials_video.html +++ b/examples/webgl_materials_video.html @@ -328,7 +328,7 @@ // Render scene into texture - renderer.render( scene, camera, postprocessing.rtTexture1 ); + renderer.render( scene, camera, postprocessing.rtTexture1, true ); // Render quad with blured scene into texture (convolution pass 1) @@ -353,7 +353,7 @@ postprocessing.materialScreen.uniforms.tDiffuse.texture = postprocessing.rtTexture3; postprocessing.materialScreen.uniforms.opacity.value = 1.3; - renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTexture1, false ); + renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTexture1 ); // Render to screen diff --git a/examples/webgl_postprocessing.html b/examples/webgl_postprocessing.html index d8433ba2..f7b2b6e7 100644 --- a/examples/webgl_postprocessing.html +++ b/examples/webgl_postprocessing.html @@ -280,7 +280,7 @@ // background - renderer.render( sceneBG, cameraOrtho, rtTexture1 ); + renderer.render( sceneBG, cameraOrtho, rtTexture1, true ); // model @@ -305,7 +305,7 @@ materialScreen.uniforms.tDiffuse.texture = rtTexture3; materialScreen.uniforms.opacity.value = 1.0; - renderer.render( sceneScreen, cameraOrtho, rtTexture1, false ); + renderer.render( sceneScreen, cameraOrtho, rtTexture1 ); // Render final scene to the screen with film shader diff --git a/examples/webgl_postprocessing_dof.html b/examples/webgl_postprocessing_dof.html index b97a162a..65ccd83b 100644 --- a/examples/webgl_postprocessing_dof.html +++ b/examples/webgl_postprocessing_dof.html @@ -305,7 +305,7 @@ for( i = 0; i < nobjects; i++ ) objects[i].materials = [ materials[i] ]; - renderer.render( scene, camera, postprocessing.rtTextureColor ); + renderer.render( scene, camera, postprocessing.rtTextureColor, true ); // Render depth into texture @@ -314,7 +314,7 @@ else for( i = 0; i < nobjects; i++ ) objects[i].materials = [ material_depth ]; - renderer.render( scene, camera, postprocessing.rtTextureDepth ); + renderer.render( scene, camera, postprocessing.rtTextureDepth, true ); // Render bokeh composite diff --git a/examples/webgl_ribbons.html b/examples/webgl_ribbons.html index 381f391e..f662dc11 100644 --- a/examples/webgl_ribbons.html +++ b/examples/webgl_ribbons.html @@ -323,7 +323,7 @@ // Render scene into texture - renderer.render( scene, camera, postprocessing.rtTexture1 ); + renderer.render( scene, camera, postprocessing.rtTexture1, true ); // Render quad with blured scene into texture (convolution pass 1) @@ -348,7 +348,7 @@ postprocessing.materialScreen.uniforms.tDiffuse.texture = postprocessing.rtTexture3; postprocessing.materialScreen.uniforms.opacity.value = 1.2; - renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTexture1, false ); + renderer.render( postprocessing.scene, postprocessing.camera, postprocessing.rtTexture1 ); // Render to screen diff --git a/examples/webgl_rtt.html b/examples/webgl_rtt.html index e7866f91..1d3c6528 100644 --- a/examples/webgl_rtt.html +++ b/examples/webgl_rtt.html @@ -264,7 +264,7 @@ // Render first scene into texture - renderer.render( sceneRTT, cameraRTT, rtTexture ); + renderer.render( sceneRTT, cameraRTT, rtTexture, true ); // Render full screen quad with generated texture // (disable depth writing so that it stays in the background) diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 032df912..6cbf1754 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -1884,7 +1884,7 @@ THREE.WebGLRenderer = function ( parameters ) { }; - this.render = function( scene, camera, renderTarget, clear ) { + this.render = function( scene, camera, renderTarget, forceClear ) { var i, program, opaque, transparent, material, o, ol, oil, webglObject, object, buffer, @@ -1904,9 +1904,9 @@ THREE.WebGLRenderer = function ( parameters ) { this.initWebGLObjects( scene, camera ); - setRenderTarget( renderTarget, clear !== undefined ? clear : true ); + setRenderTarget( renderTarget ); - if ( this.autoClear ) { + if ( this.autoClear || forceClear ) { this.clear(); @@ -2852,7 +2852,7 @@ THREE.WebGLRenderer = function ( parameters ) { }; - function setRenderTarget( renderTexture, clear ) { + function setRenderTarget( renderTexture ) { if ( renderTexture && !renderTexture.__webGLFramebuffer ) { @@ -2909,12 +2909,6 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); _gl.viewport( _viewportX, _viewportY, width, height ); - if ( clear ) { - - _gl.clear( _gl.COLOR_BUFFER_BIT | _gl.DEPTH_BUFFER_BIT ); - - } - _oldFramebuffer = framebuffer; }