From 1f7838a9c210936c2be39a494f05def0bc9e6b7c Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Tue, 25 Oct 2011 10:10:41 +0200 Subject: [PATCH] Fixed bug in Ray's pointInFace3. --- build/Three.js | 935 +++++++++++++------------ build/custom/ThreeCanvas.js | 144 ++-- build/custom/ThreeDOM.js | 54 +- build/custom/ThreeSVG.js | 100 +-- build/custom/ThreeWebGL.js | 306 ++++---- examples/canvas_interactive_cubes.html | 2 +- src/core/Ray.js | 76 +- 7 files changed, 814 insertions(+), 803 deletions(-) diff --git a/build/Three.js b/build/Three.js index 8e7e199d..210269a8 100644 --- a/build/Three.js +++ b/build/Three.js @@ -1,8 +1,8 @@ // Three.js r46dev - http://github.com/mrdoob/three.js var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array;THREE.Clock=function(a){this.autoStart=a!==void 0?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1};THREE.Clock.prototype.start=function(){this.oldTime=this.startTime=Date.now();this.running=!0};THREE.Clock.prototype.stop=function(){this.getElapsedTime();this.running=!1};THREE.Clock.prototype.getElapsedTime=function(){this.elapsedTime+=this.getDelta();return this.elapsedTime}; THREE.Clock.prototype.getDelta=function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var c=Date.now(),a=0.001*(c-this.oldTime);this.oldTime=c;this.elapsedTime+=a}return a};THREE.Color=function(a){a!==void 0&&this.setHex(a);return this}; -THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},setRGB:function(a,c,b){this.r=a;this.g=c;this.b=b;return this},setHSV:function(a,c,b){var e,h,k;if(b===0)this.r=this.g=this.b=0;else switch(e=Math.floor(a*6),h=a*6-e,a=b*(1-c),k=b*(1- -c*h),c=b*(1-c*(1-h)),e){case 1:this.r=k;this.g=b;this.b=a;break;case 2:this.r=a;this.g=b;this.b=c;break;case 3:this.r=a;this.g=k;this.b=b;break;case 4:this.r=c;this.g=a;this.b=b;break;case 5:this.r=b;this.g=a;this.b=k;break;case 6:case 0:this.r=b,this.g=c,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+ +THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},setRGB:function(a,c,b){this.r=a;this.g=c;this.b=b;return this},setHSV:function(a,c,b){var e,l,f;if(b===0)this.r=this.g=this.b=0;else switch(e=Math.floor(a*6),l=a*6-e,a=b*(1-c),f=b*(1- +c*l),c=b*(1-c*(1-l)),e){case 1:this.r=f;this.g=b;this.b=a;break;case 2:this.r=a;this.g=b;this.b=c;break;case 3:this.r=a;this.g=f;this.b=b;break;case 4:this.r=c;this.g=a;this.b=b;break;case 5:this.r=b;this.g=a;this.b=f;break;case 6:case 0:this.r=b,this.g=c,this.b=a}return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},getContextStyle:function(){return"rgb("+ Math.floor(this.r*255)+","+Math.floor(this.g*255)+","+Math.floor(this.b*255)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,c){this.x=a||0;this.y=c||0}; THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this}, divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var c=this.x-a.x,a=this.y-a.y;return c*c+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, @@ -15,88 +15,88 @@ Math.abs(c)>1.0E-5?(this.x=Math.atan2(-a.n23/c,a.n33/c),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,c,b,e){this.x=a;this.y=c;this.z=b;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,c){this.x=a.x+c.x;this.y=a.y+c.y;this.z=a.z+c.z;this.w=a.w+c.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,c){this.x=a.x-c.x;this.y=a.y-c.y;this.z=a.z- c.z;this.w=a.w-c.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,c){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;return this}};THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var c,b,e=[];c=0;for(b=a.length;c0&&a>0&&k+a<1}for(var e,h=[],k=0,f=a.children.length;ka.scale.x)return[];e={distance:k,point:a.position,face:null,object:a};h.push(e)}else if(a instanceof THREE.Mesh){k= -c(this.origin,this.direction,a.matrixWorld.getPosition());if(k===null||k>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return h;var l,n,t,p,v,x,u,y,w=a.geometry,B=w.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);k=0;for(f=w.faces.length;k0:x<0)))if(x=v.dot((new THREE.Vector3).sub(l,u))/x,u=u.addSelf(y.multiplyScalar(x)),e instanceof THREE.Face3)b(u,l,n,t)&&(e={distance:this.origin.distanceTo(u),point:u,face:e,object:a},h.push(e));else if(e instanceof THREE.Face4&&(b(u,l,n,p)||b(u,n,t,p)))e={distance:this.origin.distanceTo(u), -point:u,face:e,object:a},h.push(e)}return h}}; -THREE.Rectangle=function(){function a(){k=e-c;f=h-b}var c,b,e,h,k,f,l=!0;this.getX=function(){return c};this.getY=function(){return b};this.getWidth=function(){return k};this.getHeight=function(){return f};this.getLeft=function(){return c};this.getTop=function(){return b};this.getRight=function(){return e};this.getBottom=function(){return h};this.set=function(k,f,p,v){l=!1;c=k;b=f;e=p;h=v;a()};this.addPoint=function(k,f){l?(l=!1,c=k,b=f,e=k,h=f):(c=ck?e:k,h=h>f?h:f);a()};this.add3Points= -function(k,f,p,v,x,u){l?(l=!1,c=kp?k>x?k:x:p>x?p:x,h=f>v?f>u?f:u:v>u?v:u):(c=kp?k>x?k>e?k:e:x>e?x:e:p>x?p>e?p:e:x>e?x:e,h=f>v?f>u?f>h?f:h:u>h?u:h:v>u?v>h?v:h:u>h?u:h);a()};this.addRectangle=function(k){l?(l=!1,c=k.getLeft(),b=k.getTop(),e=k.getRight(),h=k.getBottom()):(c=ck.getRight()?e:k.getRight(),h=h> -k.getBottom()?h:k.getBottom());a()};this.inflate=function(k){c-=k;b-=k;e+=k;h+=k;a()};this.minSelf=function(k){c=c>k.getLeft()?c:k.getLeft();b=b>k.getTop()?b:k.getTop();e=e=0&&Math.min(h,a.getBottom())-Math.max(b,a.getTop())>=0};this.empty=function(){l=!0;h=e=b=c=0;a()};this.isEmpty=function(){return l}}; -THREE.Math={clamp:function(a,c,b){return ab?b:a},clampBottom:function(a,c){return a=0&&u>=0&&x+u<1}for(var e=new THREE.Vector3,l=new THREE.Vector3,f=new THREE.Vector3,h,k,n,t,p,v,x,u,y,w=[],A=0,B=a.children.length;Aa.scale.x)return[];y={distance:A,point:a.position, +face:null,object:a};w.push(y)}else if(a instanceof THREE.Mesh){A=c(this.origin,this.direction,a.matrixWorld.getPosition());if(A===null||A>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return w;var D,z,C,L,H,I,R,K,N=a.geometry,M=N.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);A=0;for(B=N.faces.length;A0:I<0)))if(I=H.dot((new THREE.Vector3).sub(D,R))/I,R=R.addSelf(K.multiplyScalar(I)),y instanceof THREE.Face3)b(R,D,z,C)&&(y={distance:this.origin.distanceTo(R),point:R,face:y,object:a}, +w.push(y));else if(y instanceof THREE.Face4&&(b(R,D,z,L)||b(R,z,C,L)))y={distance:this.origin.distanceTo(R),point:R,face:y,object:a},w.push(y)}return w}}; +THREE.Rectangle=function(){function a(){f=e-c;h=l-b}var c,b,e,l,f,h,k=!0;this.getX=function(){return c};this.getY=function(){return b};this.getWidth=function(){return f};this.getHeight=function(){return h};this.getLeft=function(){return c};this.getTop=function(){return b};this.getRight=function(){return e};this.getBottom=function(){return l};this.set=function(h,f,p,v){k=!1;c=h;b=f;e=p;l=v;a()};this.addPoint=function(h,f){k?(k=!1,c=h,b=f,e=h,l=f):(c=ch?e:h,l=l>f?l:f);a()};this.add3Points= +function(h,f,p,v,x,u){k?(k=!1,c=hp?h>x?h:x:p>x?p:x,l=f>v?f>u?f:u:v>u?v:u):(c=hp?h>x?h>e?h:e:x>e?x:e:p>x?p>e?p:e:x>e?x:e,l=f>v?f>u?f>l?f:l:u>l?u:l:v>u?v>l?v:l:u>l?u:l);a()};this.addRectangle=function(h){k?(k=!1,c=h.getLeft(),b=h.getTop(),e=h.getRight(),l=h.getBottom()):(c=ch.getRight()?e:h.getRight(),l=l> +h.getBottom()?l:h.getBottom());a()};this.inflate=function(h){c-=h;b-=h;e+=h;l+=h;a()};this.minSelf=function(h){c=c>h.getLeft()?c:h.getLeft();b=b>h.getTop()?b:h.getTop();e=e=0&&Math.min(l,a.getBottom())-Math.max(b,a.getTop())>=0};this.empty=function(){k=!0;l=e=b=c=0;a()};this.isEmpty=function(){return k}}; +THREE.Math={clamp:function(a,c,b){return ab?b:a},clampBottom:function(a,c){return a=0&&h>=0&&f>=0&&l>=0?!0:k<0&&h<0||f<0&&l<0?!1:(k<0?c=Math.max(c,k/(k-h)):h<0&&(e=Math.min(e,k/(k-h))),f<0?c=Math.max(c,f/(f-l)):l<0&&(e=Math.min(e,f/(f-l))),ef&&l.positionScreen.z0&&C.z<1))f=D[z]=D[z]||new THREE.RenderableParticle,z++,E=f,E.x=C.x/C.w,E.y=C.y/C.w,E.z=C.z,E.rotation=fa.rotation.z,E.scale.x=fa.scale.x*Math.abs(E.x-(C.x+k.projectionMatrix.n11)/(C.w+k.projectionMatrix.n14)),E.scale.y=fa.scale.y*Math.abs(E.y- -(C.y+k.projectionMatrix.n22)/(C.w+k.projectionMatrix.n24)),E.material=fa.material,M.elements.push(E);h&&M.elements.sort(b);return M}};THREE.Quaternion=function(a,c,b,e){this.set(a||0,c||0,b||0,e!==void 0?e:1)}; -THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,c,b,e){this.x=a;this.y=c;this.z=b;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var c=Math.PI/360,b=a.x*c,e=a.y*c,h=a.z*c,a=Math.cos(e),e=Math.sin(e),c=Math.cos(-h),h=Math.sin(-h),k=Math.cos(b),b=Math.sin(b),f=a*c,l=e*h;this.w=f*k-l*b;this.x=f*b+l*k;this.y=e*c*k+a*h*b;this.z=a*h*k-e*c*b;return this},setFromAxisAngle:function(a,c){var b=c/2,e=Math.sin(b); +THREE.Projector=function(){function a(){var a=h[f]=h[f]||new THREE.RenderableObject;f++;return a}function c(){var a=t[n]=t[n]||new THREE.RenderableVertex;n++;return a}function b(a,b){return b.z-a.z}function e(a,b){var c=0,e=1,h=a.z+a.w,l=b.z+b.w,f=-a.z+a.w,k=-b.z+b.w;return h>=0&&l>=0&&f>=0&&k>=0?!0:h<0&&l<0||f<0&&k<0?!1:(h<0?c=Math.max(c,h/(h-l)):l<0&&(e=Math.min(e,h/(h-l))),f<0?c=Math.max(c,f/(f-k)):k<0&&(e=Math.min(e,f/(f-k))),ef&&k.positionScreen.z0&&I.z<1))f=C[z]=C[z]||new THREE.RenderableParticle,z++,D=f,D.x=I.x/I.w,D.y=I.y/I.w,D.z=I.z,D.rotation=ga.rotation.z,D.scale.x=ga.scale.x*Math.abs(D.x-(I.x+h.projectionMatrix.n11)/(I.w+h.projectionMatrix.n14)),D.scale.y= +ga.scale.y*Math.abs(D.y-(I.y+h.projectionMatrix.n22)/(I.w+h.projectionMatrix.n24)),D.material=ga.material,L.elements.push(D);l&&L.elements.sort(b);return L}};THREE.Quaternion=function(a,c,b,e){this.set(a||0,c||0,b||0,e!==void 0?e:1)}; +THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,c,b,e){this.x=a;this.y=c;this.z=b;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var c=Math.PI/360,b=a.x*c,e=a.y*c,l=a.z*c,a=Math.cos(e),e=Math.sin(e),c=Math.cos(-l),l=Math.sin(-l),f=Math.cos(b),b=Math.sin(b),h=a*c,k=e*l;this.w=h*f-k*b;this.x=h*b+k*f;this.y=e*c*f+a*l*b;this.z=a*l*f-e*c*b;return this},setFromAxisAngle:function(a,c){var b=c/2,e=Math.sin(b); this.x=a.x*e;this.y=a.y*e;this.z=a.z*e;this.w=Math.cos(b);return this},setFromRotationMatrix:function(a){var c=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,c+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,c+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,c-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,c-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var c= -this.x,b=this.y,e=this.z,h=this.w,k=a.x,f=a.y,l=a.z,a=a.w;this.x=c*a+h*k+b*l-e*f;this.y=b*a+h*f+e*k-c*l;this.z=e*a+h*l+c*f-b*k;this.w=h*a-c*k-b*f-e*l;return this},multiply:function(a,c){this.x=a.x*c.w+a.y*c.z-a.z*c.y+a.w*c.x;this.y=-a.x*c.z+a.y*c.w+a.z*c.x+a.w*c.y;this.z=a.x*c.y-a.y*c.x+a.z*c.w+a.w*c.z;this.w=-a.x*c.x-a.y*c.y-a.z*c.z+a.w*c.w;return this},multiplyVector3:function(a,c){c||(c=a);var b=a.x,e=a.y,h=a.z,k=this.x,f=this.y,l=this.z,n=this.w,t=n*b+f*h-l*e,p=n*e+l*b-k*h,v=n*h+k*e-f*b,b=-k* -b-f*e-l*h;c.x=t*n+b*-k+p*-l-v*-f;c.y=p*n+b*-f+v*-k-t*-l;c.z=v*n+b*-l+t*-f-p*-k;return c}}; -THREE.Quaternion.slerp=function(a,c,b,e){var h=a.w*c.w+a.x*c.x+a.y*c.y+a.z*c.z;h<0?(b.w=-c.w,b.x=-c.x,b.y=-c.y,b.z=-c.z,h=-h):b.copy(c);if(Math.abs(h)>=1)return b.w=a.w,b.x=a.x,b.y=a.y,b.z=a.z,b;var k=Math.acos(h),h=Math.sqrt(1-h*h);if(Math.abs(h)<0.001)return 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),b;c=Math.sin((1-e)*k)/h;e=Math.sin(e*k)/h;b.w=a.w*c+b.w*e;b.x=a.x*c+b.x*e;b.y=a.y*c+b.y*e;b.z=a.z*c+b.z*e;return b};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; -THREE.Face3=function(a,c,b,e,h,k){this.a=a;this.b=c;this.c=b;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materialIndex=k;this.centroid=new THREE.Vector3}; -THREE.Face4=function(a,c,b,e,h,k,f){this.a=a;this.b=c;this.c=b;this.d=e;this.normal=h instanceof THREE.Vector3?h:new THREE.Vector3;this.vertexNormals=h instanceof Array?h:[];this.color=k instanceof THREE.Color?k:new THREE.Color;this.vertexColors=k instanceof Array?k:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3};THREE.UV=function(a,c){this.u=a||0;this.v=c||0}; +this.x,b=this.y,e=this.z,l=this.w,f=a.x,h=a.y,k=a.z,a=a.w;this.x=c*a+l*f+b*k-e*h;this.y=b*a+l*h+e*f-c*k;this.z=e*a+l*k+c*h-b*f;this.w=l*a-c*f-b*h-e*k;return this},multiply:function(a,c){this.x=a.x*c.w+a.y*c.z-a.z*c.y+a.w*c.x;this.y=-a.x*c.z+a.y*c.w+a.z*c.x+a.w*c.y;this.z=a.x*c.y-a.y*c.x+a.z*c.w+a.w*c.z;this.w=-a.x*c.x-a.y*c.y-a.z*c.z+a.w*c.w;return this},multiplyVector3:function(a,c){c||(c=a);var b=a.x,e=a.y,l=a.z,f=this.x,h=this.y,k=this.z,n=this.w,t=n*b+h*l-k*e,p=n*e+k*b-f*l,v=n*l+f*e-h*b,b=-f* +b-h*e-k*l;c.x=t*n+b*-f+p*-k-v*-h;c.y=p*n+b*-h+v*-f-t*-k;c.z=v*n+b*-k+t*-h-p*-f;return c}}; +THREE.Quaternion.slerp=function(a,c,b,e){var l=a.w*c.w+a.x*c.x+a.y*c.y+a.z*c.z;l<0?(b.w=-c.w,b.x=-c.x,b.y=-c.y,b.z=-c.z,l=-l):b.copy(c);if(Math.abs(l)>=1)return b.w=a.w,b.x=a.x,b.y=a.y,b.z=a.z,b;var f=Math.acos(l),l=Math.sqrt(1-l*l);if(Math.abs(l)<0.001)return 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),b;c=Math.sin((1-e)*f)/l;e=Math.sin(e*f)/l;b.w=a.w*c+b.w*e;b.x=a.x*c+b.x*e;b.y=a.y*c+b.y*e;b.z=a.z*c+b.z*e;return b};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; +THREE.Face3=function(a,c,b,e,l,f){this.a=a;this.b=c;this.c=b;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=l instanceof THREE.Color?l:new THREE.Color;this.vertexColors=l instanceof Array?l:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,c,b,e,l,f,h){this.a=a;this.b=c;this.c=b;this.d=e;this.normal=l instanceof THREE.Vector3?l:new THREE.Vector3;this.vertexNormals=l instanceof Array?l:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=h;this.centroid=new THREE.Vector3};THREE.UV=function(a,c){this.u=a||0;this.v=c||0}; THREE.UV.prototype={constructor:THREE.UV,set:function(a,c){this.u=a;this.v=c;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}}; THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; -THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var c=new THREE.Matrix4;c.extractRotation(a,new THREE.Vector3(1,1,1));for(var b=0,e=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, +b.vertexNormals[1].copy(e[b.b]),b.vertexNormals[2].copy(e[b.c]),b.vertexNormals[3].copy(e[b.d]))},computeTangents:function(){function a(a,b,c,e,l,f,o){k=a.vertices[b].position;n=a.vertices[c].position;t=a.vertices[e].position;p=h[l];v=h[f];x=h[o];u=n.x-k.x;y=t.x-k.x;w=n.y-k.y;A=t.y-k.y;B=n.z-k.z;D=t.z-k.z;z=v.u-p.u;C=x.u-p.u;L=v.v-p.v;H=x.v-p.v;I=1/(z*H-C*L);M.set((H*u-L*y)*I,(H*w-L*A)*I,(H*B-L*D)*I);G.set((z*y-C*u)*I,(z*A-C*w)*I,(z*D-C*B)*I);K[b].addSelf(M);K[c].addSelf(M);K[e].addSelf(M);N[b].addSelf(G); +N[c].addSelf(G);N[e].addSelf(G)}var c,b,e,l,f,h,k,n,t,p,v,x,u,y,w,A,B,D,z,C,L,H,I,R,K=[],N=[],M=new THREE.Vector3,G=new THREE.Vector3,Z=new THREE.Vector3,$=new THREE.Vector3,U=new THREE.Vector3;c=0;for(b=this.vertices.length;c0){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.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,c=0,b=this.vertices.length;cthis.points.length-2?k:k+1;b[3]=k>this.points.length-3?k:k+2;t=this.points[b[0]];p=this.points[b[1]]; -v=this.points[b[2]];x=this.points[b[3]];l=f*f;n=f*l;e.x=c(t.x,p.x,v.x,x.x,f,l,n);e.y=c(t.y,p.y,v.y,x.y,f,l,n);e.z=c(t.z,p.z,v.z,x.z,f,l,n);return e};this.getControlPointsArray=function(){var a,b,c=this.points.length,e=[];for(a=0;athis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,c=0,b=this.vertices.length;cthis.points.length-2?f:f+1;b[3]=f>this.points.length-3?f:f+2;t=this.points[b[0]];p=this.points[b[1]]; +v=this.points[b[2]];x=this.points[b[3]];k=h*h;n=h*k;e.x=c(t.x,p.x,v.x,x.x,h,k,n);e.y=c(t.y,p.y,v.y,x.y,h,k,n);e.z=c(t.z,p.z,v.z,x.z,h,k,n);return e};this.getControlPointsArray=function(){var a,b,c=this.points.length,e=[];for(a=0;athis.duration||this.time<0){this.direction*=-1;if(this.time>this.duration)this.time=this.duration,this.directionBackwards=!0;if(this.time<0)this.time=0,this.directionBackwards=!1}}else this.time%=this.duration;a=THREE.Math.clamp(Math.floor(this.time/c),0,this.geometry.morphTargets.length-1);if(a!=this.currentKeyframe)this.morphTargetInfluences[this.lastKeyframe]= 0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a;c=this.time%c/c;this.directionBackwards&&(c=1-c);this.morphTargetInfluences[this.currentKeyframe]=c;this.morphTargetInfluences[this.lastKeyframe]=1-c};THREE.Ribbon=function(a,c){THREE.Object3D.call(this);this.geometry=a;this.material=c};THREE.Ribbon.prototype=new THREE.Object3D;THREE.Ribbon.prototype.constructor=THREE.Ribbon; @@ -149,47 +149,47 @@ THREE.Scene=function(){THREE.Object3D.call(this);this.overrideMaterial=this.fog= THREE.Scene.prototype.addObject=function(a){if(a instanceof THREE.Light)this.lights.indexOf(a)===-1&&this.lights.push(a);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&this.objects.indexOf(a)===-1){this.objects.push(a);this.__objectsAdded.push(a);var c=this.__objectsRemoved.indexOf(a);c!==-1&&this.__objectsRemoved.splice(c,1)}for(c=0;c0&&(b(THREE.NormalBlending),c(1),h("rgba("+Math.floor(B.r*255)+","+Math.floor(B.g*255)+","+Math.floor(B.b*255)+","+A+")"),w.fillRect(Math.floor(ha.getX()), -Math.floor(ha.getY()),Math.floor(ha.getWidth()),Math.floor(ha.getHeight()))),ha.empty())};this.render=function(a,p){function v(a){var b,c,e,k;ra.setRGB(0,0,0);xa.setRGB(0,0,0);sa.setRGB(0,0,0);b=0;for(c=a.length;b> -1,R=t.height>>1,f=k.scale.x*u,n=k.scale.y*y,o=f*p,l=n*R,V.set(a.x-o,a.y-l,a.x+o,a.y+l),T.intersects(V)&&(w.save(),w.translate(a.x,a.y),w.rotate(-k.rotation),w.scale(f,-n),w.translate(-p,-R),w.drawImage(t,0,0),w.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(o=k.scale.x*u,l=k.scale.y*y,V.set(a.x-o,a.y-l,a.x+o,a.y+l),T.intersects(V)&&(e(f.color.getContextStyle()),h(f.color.getContextStyle()),w.save(),w.translate(a.x,a.y),w.rotate(-k.rotation),w.scale(o,l),f.program(w),w.restore()))}function A(a, -k,h,f){c(f.opacity);b(f.blending);w.beginPath();w.moveTo(a.positionScreen.x,a.positionScreen.y);w.lineTo(k.positionScreen.x,k.positionScreen.y);w.closePath();if(f instanceof THREE.LineBasicMaterial){a=f.linewidth;if(I!=a)w.lineWidth=I=a;a=f.linecap;if(C!=a)w.lineCap=C=a;a=f.linejoin;if(P!=a)w.lineJoin=P=a;e(f.color.getContextStyle());w.stroke();V.inflate(f.linewidth*2)}}function z(a,e,f,h,l,t,u,R){k.info.render.vertices+=3;k.info.render.faces++;c(R.opacity);b(R.blending);U=a.positionScreen.x;o=a.positionScreen.y; -ca=e.positionScreen.x;X=e.positionScreen.y;oa=f.positionScreen.x;L=f.positionScreen.y;Ta(U,o,ca,X,oa,L);if(R instanceof THREE.MeshBasicMaterial)if(R.map)R.map.mapping instanceof THREE.UVMapping&&(ua=u.uvs[0],Xa(U,o,ca,X,oa,L,ua[h].u,ua[h].v,ua[l].u,ua[l].v,ua[t].u,ua[t].v,R.map));else if(R.envMap){if(R.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=p.matrixWorldInverse,na.copy(u.vertexNormalsWorld[h]),wa=(na.x*a.n11+na.y*a.n12+na.z*a.n13)*0.5+0.5,Da=-(na.x*a.n21+na.y*a.n22+na.z*a.n23)* -0.5+0.5,na.copy(u.vertexNormalsWorld[l]),Ba=(na.x*a.n11+na.y*a.n12+na.z*a.n13)*0.5+0.5,Ea=-(na.x*a.n21+na.y*a.n22+na.z*a.n23)*0.5+0.5,na.copy(u.vertexNormalsWorld[t]),Ca=(na.x*a.n11+na.y*a.n12+na.z*a.n13)*0.5+0.5,G=-(na.x*a.n21+na.y*a.n22+na.z*a.n23)*0.5+0.5,Xa(U,o,ca,X,oa,L,wa,Da,Ba,Ea,Ca,G,R.envMap)}else R.wireframe?D(R.color,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(R.color);else if(R instanceof THREE.MeshLambertMaterial)R.map&&!R.wireframe&&(R.map.mapping instanceof THREE.UVMapping&& -(ua=u.uvs[0],Xa(U,o,ca,X,oa,L,ua[h].u,ua[h].v,ua[l].u,ua[l].v,ua[t].u,ua[t].v,R.map)),b(THREE.SubtractiveBlending)),va?!R.wireframe&&R.shading==THREE.SmoothShading&&u.vertexNormalsWorld.length==3?(ka.r=ea.r=ja.r=ra.r,ka.g=ea.g=ja.g=ra.g,ka.b=ea.b=ja.b=ra.b,x(n,u.v1.positionWorld,u.vertexNormalsWorld[0],ka),x(n,u.v2.positionWorld,u.vertexNormalsWorld[1],ea),x(n,u.v3.positionWorld,u.vertexNormalsWorld[2],ja),ka.r=Math.max(0,Math.min(R.color.r*ka.r,1)),ka.g=Math.max(0,Math.min(R.color.g*ka.g,1)),ka.b= -Math.max(0,Math.min(R.color.b*ka.b,1)),ea.r=Math.max(0,Math.min(R.color.r*ea.r,1)),ea.g=Math.max(0,Math.min(R.color.g*ea.g,1)),ea.b=Math.max(0,Math.min(R.color.b*ea.b,1)),ja.r=Math.max(0,Math.min(R.color.r*ja.r,1)),ja.g=Math.max(0,Math.min(R.color.g*ja.g,1)),ja.b=Math.max(0,Math.min(R.color.b*ja.b,1)),ga.r=(ea.r+ja.r)*0.5,ga.g=(ea.g+ja.g)*0.5,ga.b=(ea.b+ja.b)*0.5,la=Ua(ka,ea,ja,ga),Ra(U,o,ca,X,oa,L,0,0,1,0,0,1,la)):(aa.r=ra.r,aa.g=ra.g,aa.b=ra.b,x(n,u.centroidWorld,u.normalWorld,aa),aa.r=Math.max(0, -Math.min(R.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(R.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(R.color.b*aa.b,1)),R.wireframe?D(aa,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(aa)):R.wireframe?D(R.color,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(R.color);else if(R instanceof THREE.MeshDepthMaterial)ta=p.near,qa=p.far,ka.r=ka.g=ka.b=1-Ma(a.positionScreen.z,ta,qa),ea.r=ea.g=ea.b=1-Ma(e.positionScreen.z,ta,qa),ja.r=ja.g=ja.b=1-Ma(f.positionScreen.z,ta,qa),ga.r= -(ea.r+ja.r)*0.5,ga.g=(ea.g+ja.g)*0.5,ga.b=(ea.b+ja.b)*0.5,la=Ua(ka,ea,ja,ga),Ra(U,o,ca,X,oa,L,0,0,1,0,0,1,la);else if(R instanceof THREE.MeshNormalMaterial)aa.r=Sa(u.normalWorld.x),aa.g=Sa(u.normalWorld.y),aa.b=Sa(u.normalWorld.z),R.wireframe?D(aa,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(aa)}function E(a,e,f,h,l,t,u,R,v){k.info.render.vertices+=4;k.info.render.faces++;c(R.opacity);b(R.blending);if(R.map||R.envMap)z(a,e,h,0,1,3,u,R,v),z(l,f,t,1,2,3,u,R,v);else if(U=a.positionScreen.x, -o=a.positionScreen.y,ca=e.positionScreen.x,X=e.positionScreen.y,oa=f.positionScreen.x,L=f.positionScreen.y,Q=h.positionScreen.x,ia=h.positionScreen.y,da=l.positionScreen.x,$=l.positionScreen.y,ma=t.positionScreen.x,fa=t.positionScreen.y,R instanceof THREE.MeshBasicMaterial)Va(U,o,ca,X,oa,L,Q,ia),R.wireframe?D(R.color,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(R.color);else if(R instanceof THREE.MeshLambertMaterial)va?!R.wireframe&&R.shading==THREE.SmoothShading&&u.vertexNormalsWorld.length== -4?(ka.r=ea.r=ja.r=ga.r=ra.r,ka.g=ea.g=ja.g=ga.g=ra.g,ka.b=ea.b=ja.b=ga.b=ra.b,x(n,u.v1.positionWorld,u.vertexNormalsWorld[0],ka),x(n,u.v2.positionWorld,u.vertexNormalsWorld[1],ea),x(n,u.v4.positionWorld,u.vertexNormalsWorld[3],ja),x(n,u.v3.positionWorld,u.vertexNormalsWorld[2],ga),ka.r=Math.max(0,Math.min(R.color.r*ka.r,1)),ka.g=Math.max(0,Math.min(R.color.g*ka.g,1)),ka.b=Math.max(0,Math.min(R.color.b*ka.b,1)),ea.r=Math.max(0,Math.min(R.color.r*ea.r,1)),ea.g=Math.max(0,Math.min(R.color.g*ea.g,1)), -ea.b=Math.max(0,Math.min(R.color.b*ea.b,1)),ja.r=Math.max(0,Math.min(R.color.r*ja.r,1)),ja.g=Math.max(0,Math.min(R.color.g*ja.g,1)),ja.b=Math.max(0,Math.min(R.color.b*ja.b,1)),ga.r=Math.max(0,Math.min(R.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(R.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(R.color.b*ga.b,1)),la=Ua(ka,ea,ja,ga),Ta(U,o,ca,X,Q,ia),Ra(U,o,ca,X,Q,ia,0,0,1,0,0,1,la),Ta(da,$,oa,L,ma,fa),Ra(da,$,oa,L,ma,fa,1,0,1,1,0,1,la)):(aa.r=ra.r,aa.g=ra.g,aa.b=ra.b,x(n,u.centroidWorld,u.normalWorld,aa), -aa.r=Math.max(0,Math.min(R.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(R.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(R.color.b*aa.b,1)),Va(U,o,ca,X,oa,L,Q,ia),R.wireframe?D(aa,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(aa)):(Va(U,o,ca,X,oa,L,Q,ia),R.wireframe?D(R.color,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(R.color));else if(R instanceof THREE.MeshNormalMaterial)aa.r=Sa(u.normalWorld.x),aa.g=Sa(u.normalWorld.y),aa.b=Sa(u.normalWorld.z),Va(U,o,ca,X,oa,L,Q,ia), -R.wireframe?D(aa,R.wireframeLinewidth,R.wireframeLinecap,R.wireframeLinejoin):M(aa);else if(R instanceof THREE.MeshDepthMaterial)ta=p.near,qa=p.far,ka.r=ka.g=ka.b=1-Ma(a.positionScreen.z,ta,qa),ea.r=ea.g=ea.b=1-Ma(e.positionScreen.z,ta,qa),ja.r=ja.g=ja.b=1-Ma(h.positionScreen.z,ta,qa),ga.r=ga.g=ga.b=1-Ma(f.positionScreen.z,ta,qa),la=Ua(ka,ea,ja,ga),Ta(U,o,ca,X,Q,ia),Ra(U,o,ca,X,Q,ia,0,0,1,0,0,1,la),Ta(da,$,oa,L,ma,fa),Ra(da,$,oa,L,ma,fa,1,0,1,1,0,1,la)}function Ta(a,b,c,e,k,f){w.beginPath();w.moveTo(a, -b);w.lineTo(c,e);w.lineTo(k,f);w.lineTo(a,b);w.closePath()}function Va(a,b,c,e,k,f,h,o){w.beginPath();w.moveTo(a,b);w.lineTo(c,e);w.lineTo(k,f);w.lineTo(h,o);w.lineTo(a,b);w.closePath()}function D(a,b,c,k){if(I!=b)w.lineWidth=I=b;if(C!=c)w.lineCap=C=c;if(P!=k)w.lineJoin=P=k;e(a.getContextStyle());w.stroke();V.inflate(b*2)}function M(a){h(a.getContextStyle());w.fill()}function Xa(a,b,c,e,k,f,o,l,n,R,u,t,p){if(p.image.width!=0){if(p.needsUpdate==!0||pa[p.id]==void 0){var v=p.wrapS==THREE.RepeatWrapping, -x=p.wrapT==THREE.RepeatWrapping;pa[p.id]=w.createPattern(p.image,v&&x?"repeat":v&&!x?"repeat-x":!v&&x?"repeat-y":"no-repeat");p.needsUpdate=!1}h(pa[p.id]);var v=p.offset.x/p.repeat.x,x=p.offset.y/p.repeat.y,G=(p.image.width-1)*p.repeat.x,p=(p.image.height-1)*p.repeat.y,o=(o+v)*G,l=(l+x)*p,n=(n+v)*G,R=(R+x)*p,u=(u+v)*G,t=(t+x)*p;c-=a;e-=b;k-=a;f-=b;n-=o;R-=l;u-=o;t-=l;v=1/(n*t-u*R);p=(t*c-R*k)*v;R=(t*e-R*f)*v;c=(n*k-u*c)*v;e=(n*f-u*e)*v;a=a-p*o-c*l;b=b-R*o-e*l;w.save();w.transform(p,R,c,e,a,b);w.fill(); -w.restore()}}function Ra(a,b,c,e,k,f,h,o,l,n,R,u,t){var p,v;p=t.width-1;v=t.height-1;h*=p;o*=v;l*=p;n*=v;R*=p;u*=v;c-=a;e-=b;k-=a;f-=b;l-=h;n-=o;R-=h;u-=o;v=1/(l*u-R*n);p=(u*c-n*k)*v;n=(u*e-n*f)*v;c=(l*k-R*c)*v;e=(l*f-R*e)*v;a=a-p*h-c*o;b=b-n*h-e*o;w.save();w.transform(p,n,c,e,a,b);w.clip();w.drawImage(t,0,0);w.restore()}function Ua(a,b,c,e){var k=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),h=~~(b.r*255),o=~~(b.g*255),b=~~(b.b*255),l=~~(c.r*255),n=~~(c.g*255),c=~~(c.b*255),R=~~(e.r*255),u=~~(e.g*255), -e=~~(e.b*255);Aa[0]=k<0?0:k>255?255:k;Aa[1]=f<0?0:f>255?255:f;Aa[2]=a<0?0:a>255?255:a;Aa[4]=h<0?0:h>255?255:h;Aa[5]=o<0?0:o>255?255:o;Aa[6]=b<0?0:b>255?255:b;Aa[8]=l<0?0:l>255?255:l;Aa[9]=n<0?0:n>255?255:n;Aa[10]=c<0?0:c>255?255:c;Aa[12]=R<0?0:R>255?255:R;Aa[13]=u<0?0:u>255?255:u;Aa[14]=e<0?0:e>255?255:e;ya.putImageData(Ga,0,0);Ia.drawImage(Fa,0,0);return Y}function Ma(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Sa(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function La(a,b){var c=b.x-a.x,e=b.y-a.y, -k=c*c+e*e;k!=0&&(k=1/Math.sqrt(k),c*=k,e*=k,b.x+=c,b.y+=e,a.x-=c,a.y-=e)}var Wa,Ya,za,Ha;this.autoClear?this.clear():w.setTransform(1,0,0,-1,u,y);k.info.render.vertices=0;k.info.render.faces=0;f=t.projectScene(a,p,this.sortElements);l=f.elements;n=f.lights;(va=n.length>0)&&v(n);Wa=0;for(Ya=l.length;Wa1?1:a}var e=this,h,k,f,l=new THREE.Projector,n=document.createElementNS("http://www.w3.org/2000/svg","svg"),t,p,v,x,u,y,w,B,A=new THREE.Rectangle,E=new THREE.Rectangle,z=!1,D=new THREE.Color,M=new THREE.Color,I=new THREE.Color,C=new THREE.Color,P,K=new THREE.Vector3,O=[],N=[],H,W,Z,U=1;this.domElement=n;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, -faces:0}};this.setQuality=function(a){switch(a){case "high":U=1;break;case "low":U=0}};this.setSize=function(a,b){t=a;p=b;v=t/2;x=p/2;n.setAttribute("viewBox",-v+" "+-x+" "+t+" "+p);n.setAttribute("width",t);n.setAttribute("height",p);A.set(-v,-x,v,x)};this.clear=function(){for(;n.childNodes.length>0;)n.removeChild(n.childNodes[0])};this.render=function(o,t){var p,K,L,Q;this.autoClear&&this.clear();e.info.render.vertices=0;e.info.render.faces=0;h=l.projectScene(o,t,this.sortElements);k=h.elements; -f=h.lights;Z=W=0;if(z=f.length>0){M.setRGB(0,0,0);I.setRGB(0,0,0);C.setRGB(0,0,0);p=0;for(K=f.length;p0&&(b(THREE.NormalBlending),c(1),l("rgba("+Math.floor(A.r*255)+","+Math.floor(A.g*255)+","+Math.floor(A.b*255)+","+B+")"),w.fillRect(Math.floor(ia.getX()), +Math.floor(ia.getY()),Math.floor(ia.getWidth()),Math.floor(ia.getHeight()))),ia.empty())};this.render=function(a,p){function v(a){var b,c,e,h;ra.setRGB(0,0,0);wa.setRGB(0,0,0);sa.setRGB(0,0,0);b=0;for(c=a.length;b> +1,Q=t.height>>1,f=h.scale.x*u,n=h.scale.y*y,o=f*p,k=n*Q,X.set(a.x-o,a.y-k,a.x+o,a.y+k),V.intersects(X)&&(w.save(),w.translate(a.x,a.y),w.rotate(-h.rotation),w.scale(f,-n),w.translate(-p,-Q),w.drawImage(t,0,0),w.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(o=h.scale.x*u,k=h.scale.y*y,X.set(a.x-o,a.y-k,a.x+o,a.y+k),V.intersects(X)&&(e(f.color.getContextStyle()),l(f.color.getContextStyle()),w.save(),w.translate(a.x,a.y),w.rotate(-h.rotation),w.scale(o,k),f.program(w),w.restore()))}function B(a, +h,f,l){c(l.opacity);b(l.blending);w.beginPath();w.moveTo(a.positionScreen.x,a.positionScreen.y);w.lineTo(h.positionScreen.x,h.positionScreen.y);w.closePath();if(l instanceof THREE.LineBasicMaterial){a=l.linewidth;if(H!=a)w.lineWidth=H=a;a=l.linecap;if(I!=a)w.lineCap=I=a;a=l.linejoin;if(R!=a)w.lineJoin=R=a;e(l.color.getContextStyle());w.stroke();X.inflate(l.linewidth*2)}}function z(a,e,h,l,k,t,u,Q){f.info.render.vertices+=3;f.info.render.faces++;c(Q.opacity);b(Q.blending);U=a.positionScreen.x;o=a.positionScreen.y; +da=e.positionScreen.x;Y=e.positionScreen.y;pa=h.positionScreen.x;P=h.positionScreen.y;Ua(U,o,da,Y,pa,P);if(Q instanceof THREE.MeshBasicMaterial)if(Q.map)Q.map.mapping instanceof THREE.UVMapping&&(ua=u.uvs[0],Xa(U,o,da,Y,pa,P,ua[l].u,ua[l].v,ua[k].u,ua[k].v,ua[t].u,ua[t].v,Q.map));else if(Q.envMap){if(Q.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=p.matrixWorldInverse,oa.copy(u.vertexNormalsWorld[l]),xa=(oa.x*a.n11+oa.y*a.n12+oa.z*a.n13)*0.5+0.5,Da=-(oa.x*a.n21+oa.y*a.n22+oa.z*a.n23)* +0.5+0.5,oa.copy(u.vertexNormalsWorld[k]),Ba=(oa.x*a.n11+oa.y*a.n12+oa.z*a.n13)*0.5+0.5,Ea=-(oa.x*a.n21+oa.y*a.n22+oa.z*a.n23)*0.5+0.5,oa.copy(u.vertexNormalsWorld[t]),Ca=(oa.x*a.n11+oa.y*a.n12+oa.z*a.n13)*0.5+0.5,E=-(oa.x*a.n21+oa.y*a.n22+oa.z*a.n23)*0.5+0.5,Xa(U,o,da,Y,pa,P,xa,Da,Ba,Ea,Ca,E,Q.envMap)}else Q.wireframe?L(Q.color,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(Q.color);else if(Q instanceof THREE.MeshLambertMaterial)Q.map&&!Q.wireframe&&(Q.map.mapping instanceof THREE.UVMapping&& +(ua=u.uvs[0],Xa(U,o,da,Y,pa,P,ua[l].u,ua[l].v,ua[k].u,ua[k].v,ua[t].u,ua[t].v,Q.map)),b(THREE.SubtractiveBlending)),va?!Q.wireframe&&Q.shading==THREE.SmoothShading&&u.vertexNormalsWorld.length==3?(la.r=fa.r=ka.r=ra.r,la.g=fa.g=ka.g=ra.g,la.b=fa.b=ka.b=ra.b,x(n,u.v1.positionWorld,u.vertexNormalsWorld[0],la),x(n,u.v2.positionWorld,u.vertexNormalsWorld[1],fa),x(n,u.v3.positionWorld,u.vertexNormalsWorld[2],ka),la.r=Math.max(0,Math.min(Q.color.r*la.r,1)),la.g=Math.max(0,Math.min(Q.color.g*la.g,1)),la.b= +Math.max(0,Math.min(Q.color.b*la.b,1)),fa.r=Math.max(0,Math.min(Q.color.r*fa.r,1)),fa.g=Math.max(0,Math.min(Q.color.g*fa.g,1)),fa.b=Math.max(0,Math.min(Q.color.b*fa.b,1)),ka.r=Math.max(0,Math.min(Q.color.r*ka.r,1)),ka.g=Math.max(0,Math.min(Q.color.g*ka.g,1)),ka.b=Math.max(0,Math.min(Q.color.b*ka.b,1)),ha.r=(fa.r+ka.r)*0.5,ha.g=(fa.g+ka.g)*0.5,ha.b=(fa.b+ka.b)*0.5,ma=Va(la,fa,ka,ha),Sa(U,o,da,Y,pa,P,0,0,1,0,0,1,ma)):(ca.r=ra.r,ca.g=ra.g,ca.b=ra.b,x(n,u.centroidWorld,u.normalWorld,ca),ca.r=Math.max(0, +Math.min(Q.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(Q.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(Q.color.b*ca.b,1)),Q.wireframe?L(ca,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(ca)):Q.wireframe?L(Q.color,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(Q.color);else if(Q instanceof THREE.MeshDepthMaterial)ta=p.near,qa=p.far,la.r=la.g=la.b=1-Na(a.positionScreen.z,ta,qa),fa.r=fa.g=fa.b=1-Na(e.positionScreen.z,ta,qa),ka.r=ka.g=ka.b=1-Na(h.positionScreen.z,ta,qa),ha.r= +(fa.r+ka.r)*0.5,ha.g=(fa.g+ka.g)*0.5,ha.b=(fa.b+ka.b)*0.5,ma=Va(la,fa,ka,ha),Sa(U,o,da,Y,pa,P,0,0,1,0,0,1,ma);else if(Q instanceof THREE.MeshNormalMaterial)ca.r=Ta(u.normalWorld.x),ca.g=Ta(u.normalWorld.y),ca.b=Ta(u.normalWorld.z),Q.wireframe?L(ca,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(ca)}function D(a,e,h,l,k,t,u,Q,v){f.info.render.vertices+=4;f.info.render.faces++;c(Q.opacity);b(Q.blending);if(Q.map||Q.envMap)z(a,e,l,0,1,3,u,Q,v),z(k,h,t,1,2,3,u,Q,v);else if(U=a.positionScreen.x, +o=a.positionScreen.y,da=e.positionScreen.x,Y=e.positionScreen.y,pa=h.positionScreen.x,P=h.positionScreen.y,T=l.positionScreen.x,ja=l.positionScreen.y,ea=k.positionScreen.x,aa=k.positionScreen.y,na=t.positionScreen.x,ga=t.positionScreen.y,Q instanceof THREE.MeshBasicMaterial)C(U,o,da,Y,pa,P,T,ja),Q.wireframe?L(Q.color,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(Q.color);else if(Q instanceof THREE.MeshLambertMaterial)va?!Q.wireframe&&Q.shading==THREE.SmoothShading&&u.vertexNormalsWorld.length== +4?(la.r=fa.r=ka.r=ha.r=ra.r,la.g=fa.g=ka.g=ha.g=ra.g,la.b=fa.b=ka.b=ha.b=ra.b,x(n,u.v1.positionWorld,u.vertexNormalsWorld[0],la),x(n,u.v2.positionWorld,u.vertexNormalsWorld[1],fa),x(n,u.v4.positionWorld,u.vertexNormalsWorld[3],ka),x(n,u.v3.positionWorld,u.vertexNormalsWorld[2],ha),la.r=Math.max(0,Math.min(Q.color.r*la.r,1)),la.g=Math.max(0,Math.min(Q.color.g*la.g,1)),la.b=Math.max(0,Math.min(Q.color.b*la.b,1)),fa.r=Math.max(0,Math.min(Q.color.r*fa.r,1)),fa.g=Math.max(0,Math.min(Q.color.g*fa.g,1)), +fa.b=Math.max(0,Math.min(Q.color.b*fa.b,1)),ka.r=Math.max(0,Math.min(Q.color.r*ka.r,1)),ka.g=Math.max(0,Math.min(Q.color.g*ka.g,1)),ka.b=Math.max(0,Math.min(Q.color.b*ka.b,1)),ha.r=Math.max(0,Math.min(Q.color.r*ha.r,1)),ha.g=Math.max(0,Math.min(Q.color.g*ha.g,1)),ha.b=Math.max(0,Math.min(Q.color.b*ha.b,1)),ma=Va(la,fa,ka,ha),Ua(U,o,da,Y,T,ja),Sa(U,o,da,Y,T,ja,0,0,1,0,0,1,ma),Ua(ea,aa,pa,P,na,ga),Sa(ea,aa,pa,P,na,ga,1,0,1,1,0,1,ma)):(ca.r=ra.r,ca.g=ra.g,ca.b=ra.b,x(n,u.centroidWorld,u.normalWorld, +ca),ca.r=Math.max(0,Math.min(Q.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(Q.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(Q.color.b*ca.b,1)),C(U,o,da,Y,pa,P,T,ja),Q.wireframe?L(ca,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(ca)):(C(U,o,da,Y,pa,P,T,ja),Q.wireframe?L(Q.color,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(Q.color));else if(Q instanceof THREE.MeshNormalMaterial)ca.r=Ta(u.normalWorld.x),ca.g=Ta(u.normalWorld.y),ca.b=Ta(u.normalWorld.z),C(U,o,da,Y,pa,P,T, +ja),Q.wireframe?L(ca,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):La(ca);else if(Q instanceof THREE.MeshDepthMaterial)ta=p.near,qa=p.far,la.r=la.g=la.b=1-Na(a.positionScreen.z,ta,qa),fa.r=fa.g=fa.b=1-Na(e.positionScreen.z,ta,qa),ka.r=ka.g=ka.b=1-Na(l.positionScreen.z,ta,qa),ha.r=ha.g=ha.b=1-Na(h.positionScreen.z,ta,qa),ma=Va(la,fa,ka,ha),Ua(U,o,da,Y,T,ja),Sa(U,o,da,Y,T,ja,0,0,1,0,0,1,ma),Ua(ea,aa,pa,P,na,ga),Sa(ea,aa,pa,P,na,ga,1,0,1,1,0,1,ma)}function Ua(a,b,c,e,h,l){w.beginPath(); +w.moveTo(a,b);w.lineTo(c,e);w.lineTo(h,l);w.lineTo(a,b);w.closePath()}function C(a,b,c,e,h,l,f,o){w.beginPath();w.moveTo(a,b);w.lineTo(c,e);w.lineTo(h,l);w.lineTo(f,o);w.lineTo(a,b);w.closePath()}function L(a,b,c,h){if(H!=b)w.lineWidth=H=b;if(I!=c)w.lineCap=I=c;if(R!=h)w.lineJoin=R=h;e(a.getContextStyle());w.stroke();X.inflate(b*2)}function La(a){l(a.getContextStyle());w.fill()}function Xa(a,b,c,e,h,f,o,k,n,Q,t,u,p){if(p.image.width!=0){if(p.needsUpdate==!0||O[p.id]==void 0){var v=p.wrapS==THREE.RepeatWrapping, +x=p.wrapT==THREE.RepeatWrapping;O[p.id]=w.createPattern(p.image,v&&x?"repeat":v&&!x?"repeat-x":!v&&x?"repeat-y":"no-repeat");p.needsUpdate=!1}l(O[p.id]);var v=p.offset.x/p.repeat.x,x=p.offset.y/p.repeat.y,E=(p.image.width-1)*p.repeat.x,p=(p.image.height-1)*p.repeat.y,o=(o+v)*E,k=(k+x)*p,n=(n+v)*E,Q=(Q+x)*p,t=(t+v)*E,u=(u+x)*p;c-=a;e-=b;h-=a;f-=b;n-=o;Q-=k;t-=o;u-=k;v=1/(n*u-t*Q);p=(u*c-Q*h)*v;Q=(u*e-Q*f)*v;c=(n*h-t*c)*v;e=(n*f-t*e)*v;a=a-p*o-c*k;b=b-Q*o-e*k;w.save();w.transform(p,Q,c,e,a,b);w.fill(); +w.restore()}}function Sa(a,b,c,e,h,l,f,o,k,n,Q,t,u){var p,v;p=u.width-1;v=u.height-1;f*=p;o*=v;k*=p;n*=v;Q*=p;t*=v;c-=a;e-=b;h-=a;l-=b;k-=f;n-=o;Q-=f;t-=o;v=1/(k*t-Q*n);p=(t*c-n*h)*v;n=(t*e-n*l)*v;c=(k*h-Q*c)*v;e=(k*l-Q*e)*v;a=a-p*f-c*o;b=b-n*f-e*o;w.save();w.transform(p,n,c,e,a,b);w.clip();w.drawImage(u,0,0);w.restore()}function Va(a,b,c,e){var h=~~(a.r*255),l=~~(a.g*255),a=~~(a.b*255),f=~~(b.r*255),o=~~(b.g*255),b=~~(b.b*255),k=~~(c.r*255),n=~~(c.g*255),c=~~(c.b*255),Q=~~(e.r*255),t=~~(e.g*255), +e=~~(e.b*255);Aa[0]=h<0?0:h>255?255:h;Aa[1]=l<0?0:l>255?255:l;Aa[2]=a<0?0:a>255?255:a;Aa[4]=f<0?0:f>255?255:f;Aa[5]=o<0?0:o>255?255:o;Aa[6]=b<0?0:b>255?255:b;Aa[8]=k<0?0:k>255?255:k;Aa[9]=n<0?0:n>255?255:n;Aa[10]=c<0?0:c>255?255:c;Aa[12]=Q<0?0:Q>255?255:Q;Aa[13]=t<0?0:t>255?255:t;Aa[14]=e<0?0:e>255?255:e;ya.putImageData(Ga,0,0);Ia.drawImage(Fa,0,0);return W}function Na(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Ta(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Ma(a,b){var c=b.x-a.x,e=b.y-a.y, +h=c*c+e*e;h!=0&&(h=1/Math.sqrt(h),c*=h,e*=h,b.x+=c,b.y+=e,a.x-=c,a.y-=e)}var Wa,Ya,za,Ha;this.autoClear?this.clear():w.setTransform(1,0,0,-1,u,y);f.info.render.vertices=0;f.info.render.faces=0;h=t.projectScene(a,p,this.sortElements);k=h.elements;n=h.lights;(va=n.length>0)&&v(n);Wa=0;for(Ya=k.length;Wa1?1:a}var e=this,l,f,h,k=new THREE.Projector,n=document.createElementNS("http://www.w3.org/2000/svg","svg"),t,p,v,x,u,y,w,A,B=new THREE.Rectangle,D=new THREE.Rectangle,z=!1,C=new THREE.Color,L=new THREE.Color,H=new THREE.Color,I=new THREE.Color,R,K=new THREE.Vector3,N=[],M=[],G,Z,$,U=1;this.domElement=n;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, +faces:0}};this.setQuality=function(a){switch(a){case "high":U=1;break;case "low":U=0}};this.setSize=function(a,b){t=a;p=b;v=t/2;x=p/2;n.setAttribute("viewBox",-v+" "+-x+" "+t+" "+p);n.setAttribute("width",t);n.setAttribute("height",p);B.set(-v,-x,v,x)};this.clear=function(){for(;n.childNodes.length>0;)n.removeChild(n.childNodes[0])};this.render=function(o,t){var p,K,P,T;this.autoClear&&this.clear();e.info.render.vertices=0;e.info.render.faces=0;l=k.projectScene(o,t,this.sortElements);f=l.elements; +h=l.lights;$=Z=0;if(z=h.length>0){L.setRGB(0,0,0);H.setRGB(0,0,0);I.setRGB(0,0,0);p=0;for(K=h.length;p= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0 ) {\n#ifdef SHADOWMAP_SOFT\nfloat shadow = 0.0;\nfor ( float y = -1.25; y <= 1.25; y += 1.25 )\nfor ( float x = -1.25; x <= 1.25; x += 1.25 ) {\nvec4 rgbaDepth = texture2D( shadowMap[ i ], vec2( x * xPixelOffset, y * yPixelOffset ) + shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadow += 1.0;\n}\nshadow /= 9.0;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( shadowDarkness );\n#endif\n}\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( position, 1.0 );\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; -THREE.UniformsUtils={merge:function(a){var c,b,e,h={};for(c=0;c=0)return a.geometry.materials[b.materialIndex]}function b(a,b,c){var e,k,h,f=a.vertices,l=f.length,n=a.colors,u=n.length,t=a.__vertexArray,p=a.__colorArray,v=a.__sortArray,w=a.__dirtyVertices,x=a.__dirtyColors,G=a.__webglCustomAttributesList,y;if(G){h=0;for(e=G.length;h=0)b&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglVertexBuffer),o.vertexAttribPointer(a.position,3,o.FLOAT,!1,0,0));else if(h.morphTargetBase){c=k.program.attributes;h.morphTargetBase!==-1?(o.bindBuffer(o.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[h.morphTargetBase]),o.vertexAttribPointer(c.position,3,o.FLOAT,!1,0,0)):c.position>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglVertexBuffer), -o.vertexAttribPointer(c.position,3,o.FLOAT,!1,0,0));if(h.morphTargetForcedOrder.length){l=0;var u=h.morphTargetForcedOrder;for(n=h.morphTargetInfluences;lt&&(p=v,t=n[p]);o.bindBuffer(o.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[p]);o.vertexAttribPointer(c["morphTarget"+l],3,o.FLOAT,!1,0,0);h.__webglMorphTargetInfluences[l]=t;u[p]=1;t=-1;l++}}k.program.uniforms.morphTargetInfluences!==null&&o.uniform1fv(k.program.uniforms.morphTargetInfluences,h.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){l=0;for(n=f.__webglCustomAttributesList.length;l= -0&&(o.bindBuffer(o.ARRAY_BUFFER,c.buffer),o.vertexAttribPointer(a[c.buffer.belongsToAttribute],c.size,o.FLOAT,!1,0,0))}a.color>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglColorBuffer),o.vertexAttribPointer(a.color,3,o.FLOAT,!1,0,0));a.normal>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglNormalBuffer),o.vertexAttribPointer(a.normal,3,o.FLOAT,!1,0,0));a.tangent>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglTangentBuffer),o.vertexAttribPointer(a.tangent,4,o.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(o.bindBuffer(o.ARRAY_BUFFER, -f.__webglUVBuffer),o.vertexAttribPointer(a.uv,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv)):o.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(o.bindBuffer(o.ARRAY_BUFFER,f.__webglUV2Buffer),o.vertexAttribPointer(a.uv2,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv2)):o.disableVertexAttribArray(a.uv2));k.skinning&&a.skinVertexA>=0&&a.skinVertexB>=0&&a.skinIndex>=0&&a.skinWeight>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinVertexABuffer),o.vertexAttribPointer(a.skinVertexA,4, -o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),o.vertexAttribPointer(a.skinVertexB,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),o.vertexAttribPointer(a.skinIndex,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),o.vertexAttribPointer(a.skinWeight,4,o.FLOAT,!1,0,0))}h instanceof THREE.Mesh?(k.wireframe?(o.lineWidth(k.wireframeLinewidth),b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),o.drawElements(o.LINES,f.__webglLineCount, -o.UNSIGNED_SHORT,0)):(b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),o.drawElements(o.TRIANGLES,f.__webglFaceCount,o.UNSIGNED_SHORT,0)),U.info.render.calls++,U.info.render.vertices+=f.__webglFaceCount,U.info.render.faces+=f.__webglFaceCount/3):h instanceof THREE.Line?(h=h.type===THREE.LineStrip?o.LINE_STRIP:o.LINES,o.lineWidth(k.linewidth),o.drawArrays(h,0,f.__webglLineCount),U.info.render.calls++):h instanceof THREE.ParticleSystem?(o.drawArrays(o.POINTS,0,f.__webglParticleCount),U.info.render.calls++): -h instanceof THREE.Ribbon&&(o.drawArrays(o.TRIANGLE_STRIP,0,f.__webglVertexCount),U.info.render.calls++)}}function k(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=o.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=o.createBuffer();a.hasPos&&(o.bindBuffer(o.ARRAY_BUFFER,a.__webglVertexBuffer),o.bufferData(o.ARRAY_BUFFER,a.positionArray,o.DYNAMIC_DRAW),o.enableVertexAttribArray(b.attributes.position),o.vertexAttribPointer(b.attributes.position,3,o.FLOAT,!1,0,0));if(a.hasNormal){o.bindBuffer(o.ARRAY_BUFFER, -a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,k,f,h,l,n,u,t,p,v,w=a.count*3;for(v=0;v=0)b=b.geometry.materials[c],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=e)b.transparent?(a.transparent= -b,a.opaque=null):(a.opaque=b,a.transparent=null)}function y(a,b){return b.z-a.z}function w(a){var b,c,n,u=0,t,w,x,G,y=a.lights;xa||(xa=new THREE.PerspectiveCamera(U.shadowCameraFov,U.shadowMapWidth/U.shadowMapHeight,U.shadowCameraNear,U.shadowCameraFar));b=0;for(c=y.length;b=0;c--)a[c].object===b&&a.splice(c,1)}function M(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function I(a){if(a!==ma){switch(a){case THREE.AdditiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE);break;case THREE.SubtractiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO, -o.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,o.SRC_COLOR);break;default:o.blendEquationSeparate(o.FUNC_ADD,o.FUNC_ADD),o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA)}ma=a}}function C(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(o.texParameteri(a,o.TEXTURE_WRAP_S,Z(b.wrapS)),o.texParameteri(a,o.TEXTURE_WRAP_T,Z(b.wrapT)),o.texParameteri(a,o.TEXTURE_MAG_FILTER,Z(b.magFilter)),o.texParameteri(a, -o.TEXTURE_MIN_FILTER,Z(b.minFilter)),o.generateMipmap(a)):(o.texParameteri(a,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_MAG_FILTER,W(b.magFilter)),o.texParameteri(a,o.TEXTURE_MIN_FILTER,W(b.minFilter)))}function P(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=o.createTexture(),U.info.memory.textures++;o.activeTexture(o.TEXTURE0+b);o.bindTexture(o.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture? -o.texImage2D(o.TEXTURE_2D,0,Z(a.format),a.image.width,a.image.height,0,Z(a.format),o.UNSIGNED_BYTE,a.image.data):o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,a.image);C(o.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else o.activeTexture(o.TEXTURE0+b),o.bindTexture(o.TEXTURE_2D,a.__webglTexture)}function K(a,b){o.bindRenderbuffer(o.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_COMPONENT16,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER, -o.DEPTH_ATTACHMENT,o.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_STENCIL,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.RENDERBUFFER,a)):o.renderbufferStorage(o.RENDERBUFFER,o.RGBA4,b.width,b.height)}function O(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=o.createTexture(); -if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture);C(o.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=o.createFramebuffer();a.__webglRenderbuffer[c]=o.createRenderbuffer();o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,Z(a.format),a.width,a.height,0,Z(a.format),Z(a.type),null);var e=a,k=o.TEXTURE_CUBE_MAP_POSITIVE_X+c;o.bindFramebuffer(o.FRAMEBUFFER,a.__webglFramebuffer[c]);o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0, -k,e.__webglTexture,0);K(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=o.createFramebuffer(),a.__webglRenderbuffer=o.createRenderbuffer(),o.bindTexture(o.TEXTURE_2D,a.__webglTexture),C(o.TEXTURE_2D,a,a),o.texImage2D(o.TEXTURE_2D,0,Z(a.format),a.width,a.height,0,Z(a.format),Z(a.type),null),c=o.TEXTURE_2D,o.bindFramebuffer(o.FRAMEBUFFER,a.__webglFramebuffer),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,c,a.__webglTexture,0),o.bindRenderbuffer(o.RENDERBUFFER,a.__webglRenderbuffer), -K(a.__webglRenderbuffer,a);b?o.bindTexture(o.TEXTURE_CUBE_MAP,null):o.bindTexture(o.TEXTURE_2D,null);o.bindRenderbuffer(o.RENDERBUFFER,null);o.bindFramebuffer(o.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,k=e=0):(b=null,c=ta,a=qa,e=ga,k=pa);b!==oa&&(o.bindFramebuffer(o.FRAMEBUFFER,b),o.viewport(e,k,c,a),oa=b)}function N(a){a instanceof THREE.WebGLRenderTargetCube?(o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture),o.generateMipmap(o.TEXTURE_CUBE_MAP), -o.bindTexture(o.TEXTURE_CUBE_MAP,null)):(o.bindTexture(o.TEXTURE_2D,a.__webglTexture),o.generateMipmap(o.TEXTURE_2D),o.bindTexture(o.TEXTURE_2D,null))}function H(a,b){var c;a==="fragment"?c=o.createShader(o.FRAGMENT_SHADER):a==="vertex"&&(c=o.createShader(o.VERTEX_SHADER));o.shaderSource(c,b);o.compileShader(c);if(!o.getShaderParameter(c,o.COMPILE_STATUS))return console.error(o.getShaderInfoLog(c)),console.error(b),null;return c}function W(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return o.NEAREST; -default:return o.LINEAR}}function Z(a){switch(a){case THREE.RepeatWrapping:return o.REPEAT;case THREE.ClampToEdgeWrapping:return o.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return o.MIRRORED_REPEAT;case THREE.NearestFilter:return o.NEAREST;case THREE.NearestMipMapNearestFilter:return o.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return o.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return o.LINEAR;case THREE.LinearMipMapNearestFilter:return o.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return o.LINEAR_MIPMAP_LINEAR; -case THREE.ByteType:return o.BYTE;case THREE.UnsignedByteType:return o.UNSIGNED_BYTE;case THREE.ShortType:return o.SHORT;case THREE.UnsignedShortType:return o.UNSIGNED_SHORT;case THREE.IntType:return o.INT;case THREE.UnsignedShortType:return o.UNSIGNED_INT;case THREE.FloatType:return o.FLOAT;case THREE.AlphaFormat:return o.ALPHA;case THREE.RGBFormat:return o.RGB;case THREE.RGBAFormat:return o.RGBA;case THREE.LuminanceFormat:return o.LUMINANCE;case THREE.LuminanceAlphaFormat:return o.LUMINANCE_ALPHA}return 0} -var U=this,o,ca=[],X=null,oa=null,L=-1,Q=null,ia=0,da=null,$=null,ma=null,fa=null,aa=null,ka=null,ea=null,ja=null,ga=0,pa=0,ta=0,qa=0,la=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],ua=new THREE.Matrix4,wa=new Float32Array(16),Da=new Float32Array(16),Ba=new THREE.Vector4,Ea={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},Ca=a.canvas!==void 0?a.canvas:document.createElement("canvas"), -G=a.stencil!==void 0?a.stencil:!0,T=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,ha=a.antialias!==void 0?a.antialias:!1,V=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),va=a.clearAlpha!==void 0?a.clearAlpha:0,ra=a.maxLights!==void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=Ca;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil= -this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var xa,sa=[],a=THREE.ShaderLib.depthRGBA,na=THREE.UniformsUtils.clone(a.uniforms),Fa=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader, -vertexShader:a.vertexShader,uniforms:na}),ya=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:na,morphTargets:!0});Fa._shadowPass=!0;ya._shadowPass=!0;try{if(!(o=Ca.getContext("experimental-webgl",{antialias:ha,stencil:G,preserveDrawingBuffer:T})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+o.getParameter(o.VERSION)+" | "+o.getParameter(o.VENDOR)+" | "+o.getParameter(o.RENDERER)+" | "+o.getParameter(o.SHADING_LANGUAGE_VERSION))}catch(Ga){console.error(Ga)}o.clearColor(0, -0,0,1);o.clearDepth(1);o.clearStencil(0);o.enable(o.DEPTH_TEST);o.depthFunc(o.LEQUAL);o.frontFace(o.CCW);o.cullFace(o.BACK);o.enable(o.CULL_FACE);o.enable(o.BLEND);o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA);o.clearColor(V.r,V.g,V.b,va);this.context=o;var Aa=o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,Y={};Y.vertices=new Float32Array(16);Y.faces=new Uint16Array(6);G=0;Y.vertices[G++]=-1;Y.vertices[G++]=-1;Y.vertices[G++]=0;Y.vertices[G++]=1;Y.vertices[G++]=1; -Y.vertices[G++]=-1;Y.vertices[G++]=1;Y.vertices[G++]=1;Y.vertices[G++]=1;Y.vertices[G++]=1;Y.vertices[G++]=1;Y.vertices[G++]=0;Y.vertices[G++]=-1;Y.vertices[G++]=1;Y.vertices[G++]=0;G=Y.vertices[G++]=0;Y.faces[G++]=0;Y.faces[G++]=1;Y.faces[G++]=2;Y.faces[G++]=0;Y.faces[G++]=2;Y.faces[G++]=3;Y.vertexBuffer=o.createBuffer();Y.elementBuffer=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,Y.vertexBuffer);o.bufferData(o.ARRAY_BUFFER,Y.vertices,o.STATIC_DRAW);o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,Y.elementBuffer); -o.bufferData(o.ELEMENT_ARRAY_BUFFER,Y.faces,o.STATIC_DRAW);Y.program=o.createProgram();o.attachShader(Y.program,H("fragment",THREE.ShaderLib.sprite.fragmentShader));o.attachShader(Y.program,H("vertex",THREE.ShaderLib.sprite.vertexShader));o.linkProgram(Y.program);Y.attributes={};Y.uniforms={};Y.attributes.position=o.getAttribLocation(Y.program,"position");Y.attributes.uv=o.getAttribLocation(Y.program,"uv");Y.uniforms.uvOffset=o.getUniformLocation(Y.program,"uvOffset");Y.uniforms.uvScale=o.getUniformLocation(Y.program, -"uvScale");Y.uniforms.rotation=o.getUniformLocation(Y.program,"rotation");Y.uniforms.scale=o.getUniformLocation(Y.program,"scale");Y.uniforms.alignment=o.getUniformLocation(Y.program,"alignment");Y.uniforms.color=o.getUniformLocation(Y.program,"color");Y.uniforms.map=o.getUniformLocation(Y.program,"map");Y.uniforms.opacity=o.getUniformLocation(Y.program,"opacity");Y.uniforms.useScreenCoordinates=o.getUniformLocation(Y.program,"useScreenCoordinates");Y.uniforms.affectedByDistance=o.getUniformLocation(Y.program, -"affectedByDistance");Y.uniforms.screenPosition=o.getUniformLocation(Y.program,"screenPosition");Y.uniforms.modelViewMatrix=o.getUniformLocation(Y.program,"modelViewMatrix");Y.uniforms.projectionMatrix=o.getUniformLocation(Y.program,"projectionMatrix");var Ia=!1;this.setSize=function(a,b){Ca.width=a;Ca.height=b;this.setViewport(0,0,Ca.width,Ca.height)};this.setViewport=function(a,b,c,e){ga=a;pa=b;ta=c;qa=e;o.viewport(ga,pa,ta,qa)};this.setScissor=function(a,b,c,e){o.scissor(a,b,c,e)};this.enableScissorTest= -function(a){a?o.enable(o.SCISSOR_TEST):o.disable(o.SCISSOR_TEST)};this.setClearColorHex=function(a,b){V.setHex(a);va=b;o.clearColor(V.r,V.g,V.b,va)};this.setClearColor=function(a,b){V.copy(a);va=b;o.clearColor(V.r,V.g,V.b,va)};this.getClearColor=function(){return V};this.getClearAlpha=function(){return va};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=o.COLOR_BUFFER_BIT;if(b===void 0||b)e|=o.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=o.STENCIL_BUFFER_BIT;o.clear(e)};this.getContext=function(){return o}; -this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(g in a.geometry.geometryGroups){var b=a.geometry.geometryGroups[g];o.deleteBuffer(b.__webglVertexBuffer);o.deleteBuffer(b.__webglNormalBuffer);o.deleteBuffer(b.__webglTangentBuffer);o.deleteBuffer(b.__webglColorBuffer);o.deleteBuffer(b.__webglUVBuffer);o.deleteBuffer(b.__webglUV2Buffer);o.deleteBuffer(b.__webglSkinVertexABuffer); -o.deleteBuffer(b.__webglSkinVertexBBuffer);o.deleteBuffer(b.__webglSkinIndicesBuffer);o.deleteBuffer(b.__webglSkinWeightsBuffer);o.deleteBuffer(b.__webglFaceBuffer);o.deleteBuffer(b.__webglLineBuffer);if(b.numMorphTargets)for(var c=0,e=b.numMorphTargets;c=0&&o.enableVertexAttribArray(w.position);w.color>=0&&o.enableVertexAttribArray(w.color);w.normal>=0&&o.enableVertexAttribArray(w.normal); -w.tangent>=0&&o.enableVertexAttribArray(w.tangent);a.skinning&&w.skinVertexA>=0&&w.skinVertexB>=0&&w.skinIndex>=0&&w.skinWeight>=0&&(o.enableVertexAttribArray(w.skinVertexA),o.enableVertexAttribArray(w.skinVertexB),o.enableVertexAttribArray(w.skinIndex),o.enableVertexAttribArray(w.skinWeight));if(a.attributes)for(f in a.attributes)w[f]!==void 0&&w[f]>=0&&o.enableVertexAttribArray(w[f]);if(a.morphTargets)for(f=a.numSupportedMorphTargets=0;f=0&&(o.enableVertexAttribArray(w[x]), -a.numSupportedMorphTargets++);a.uniformsList=[];for(k in a.uniforms)a.uniformsList.push([a.uniforms[k],k])};this.clearTarget=function(a,b,c,e){O(a);this.clear(b,c,e)};this.updateShadowMap=function(a,b){w(a,b)};this.render=function(a,b,c,G){var ha,z,T,E,D,V,ga,M=a.lights,ra=a.fog;L=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&w(a,b);U.info.render.calls=0;U.info.render.vertices=0;U.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), -a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(Da);b.projectionMatrix.flattenToArray(wa);ua.multiply(b.projectionMatrix,b.matrixWorldInverse);p(ua);O(c);(this.autoClear||G)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);T=a.__webglObjects.length;for(G=0;G=0;G--)if(D=a.__webglObjects[G],D.render&&(V=D.object,ga=D.buffer,z=D.opaque))f(V),l(z.depthTest),n(z.depthWrite),t(z.polygonOffset,z.polygonOffsetFactor, -z.polygonOffsetUnits),h(b,M,ra,z,ga,V);for(G=0;G65535&&(w[v].counter+=1,G=w[v].hash+"_"+w[v].counter,l.geometryGroups[G]=== -void 0&&(l.geometryGroups[G]={faces:[],materialIndex:p,vertices:0,numMorphTargets:x})),l.geometryGroups[G].faces.push(n),l.geometryGroups[G].vertices+=t;l.geometryGroupsList=[];n=void 0;for(n in l.geometryGroups)l.geometryGroups[n].id=ia++,l.geometryGroupsList.push(l.geometryGroups[n])}for(f in h.geometryGroups)if(l=h.geometryGroups[f],!l.__webglVertexBuffer){n=l;n.__webglVertexBuffer=o.createBuffer();n.__webglNormalBuffer=o.createBuffer();n.__webglTangentBuffer=o.createBuffer();n.__webglColorBuffer= +THREE.WebGLRenderer=function(a){function c(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;else if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function b(a,b,c){var e,h,f,l=a.vertices,k=l.length,n=a.colors,t=n.length,u=a.__vertexArray,p=a.__colorArray,v=a.__sortArray,w=a.__dirtyVertices,x=a.__dirtyColors,E=a.__webglCustomAttributesList,y;if(E){f=0;for(e=E.length;f=0)b&&(o.bindBuffer(o.ARRAY_BUFFER,l.__webglVertexBuffer),o.vertexAttribPointer(a.position,3,o.FLOAT,!1,0,0));else if(f.morphTargetBase){c=h.program.attributes;f.morphTargetBase!==-1?(o.bindBuffer(o.ARRAY_BUFFER,l.__webglMorphTargetsBuffers[f.morphTargetBase]),o.vertexAttribPointer(c.position, +3,o.FLOAT,!1,0,0)):c.position>=0&&(o.bindBuffer(o.ARRAY_BUFFER,l.__webglVertexBuffer),o.vertexAttribPointer(c.position,3,o.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){k=0;var t=f.morphTargetForcedOrder;for(n=f.morphTargetInfluences;ku&&(p=v,u=n[p]);o.bindBuffer(o.ARRAY_BUFFER,l.__webglMorphTargetsBuffers[p]);o.vertexAttribPointer(c["morphTarget"+k],3,o.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[k]=u;t[p]=1;u=-1;k++}}h.program.uniforms.morphTargetInfluences!==null&&o.uniform1fv(h.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(b){if(l.__webglCustomAttributesList){k=0;for(n= +l.__webglCustomAttributesList.length;k=0&&(o.bindBuffer(o.ARRAY_BUFFER,c.buffer),o.vertexAttribPointer(a[c.buffer.belongsToAttribute],c.size,o.FLOAT,!1,0,0))}a.color>=0&&(o.bindBuffer(o.ARRAY_BUFFER,l.__webglColorBuffer),o.vertexAttribPointer(a.color,3,o.FLOAT,!1,0,0));a.normal>=0&&(o.bindBuffer(o.ARRAY_BUFFER,l.__webglNormalBuffer),o.vertexAttribPointer(a.normal,3,o.FLOAT,!1,0,0));a.tangent>=0&&(o.bindBuffer(o.ARRAY_BUFFER, +l.__webglTangentBuffer),o.vertexAttribPointer(a.tangent,4,o.FLOAT,!1,0,0));a.uv>=0&&(l.__webglUVBuffer?(o.bindBuffer(o.ARRAY_BUFFER,l.__webglUVBuffer),o.vertexAttribPointer(a.uv,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv)):o.disableVertexAttribArray(a.uv));a.uv2>=0&&(l.__webglUV2Buffer?(o.bindBuffer(o.ARRAY_BUFFER,l.__webglUV2Buffer),o.vertexAttribPointer(a.uv2,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv2)):o.disableVertexAttribArray(a.uv2));h.skinning&&a.skinVertexA>=0&&a.skinVertexB>= +0&&a.skinIndex>=0&&a.skinWeight>=0&&(o.bindBuffer(o.ARRAY_BUFFER,l.__webglSkinVertexABuffer),o.vertexAttribPointer(a.skinVertexA,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,l.__webglSkinVertexBBuffer),o.vertexAttribPointer(a.skinVertexB,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,l.__webglSkinIndicesBuffer),o.vertexAttribPointer(a.skinIndex,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,l.__webglSkinWeightsBuffer),o.vertexAttribPointer(a.skinWeight,4,o.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(h.wireframe? +(o.lineWidth(h.wireframeLinewidth),b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,l.__webglLineBuffer),o.drawElements(o.LINES,l.__webglLineCount,o.UNSIGNED_SHORT,0)):(b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,l.__webglFaceBuffer),o.drawElements(o.TRIANGLES,l.__webglFaceCount,o.UNSIGNED_SHORT,0)),U.info.render.calls++,U.info.render.vertices+=l.__webglFaceCount,U.info.render.faces+=l.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?o.LINE_STRIP:o.LINES,o.lineWidth(h.linewidth),o.drawArrays(f, +0,l.__webglLineCount),U.info.render.calls++):f instanceof THREE.ParticleSystem?(o.drawArrays(o.POINTS,0,l.__webglParticleCount),U.info.render.calls++):f instanceof THREE.Ribbon&&(o.drawArrays(o.TRIANGLE_STRIP,0,l.__webglVertexCount),U.info.render.calls++)}}function f(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=o.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=o.createBuffer();a.hasPos&&(o.bindBuffer(o.ARRAY_BUFFER,a.__webglVertexBuffer),o.bufferData(o.ARRAY_BUFFER,a.positionArray, +o.DYNAMIC_DRAW),o.enableVertexAttribArray(b.attributes.position),o.vertexAttribPointer(b.attributes.position,3,o.FLOAT,!1,0,0));if(a.hasNormal){o.bindBuffer(o.ARRAY_BUFFER,a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,h,l,f,k,n,t,u,p,v,w=a.count*3;for(v=0;v=0)b=b.geometry.materials[c],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=e)b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function y(a,b){return b.z-a.z}function w(a){var b,c,n,t=0,u,w,x,E,y=a.lights;wa||(wa=new THREE.PerspectiveCamera(U.shadowCameraFov,U.shadowMapWidth/U.shadowMapHeight,U.shadowCameraNear,U.shadowCameraFar));b=0;for(c=y.length;b=0;c--)a[c].object===b&&a.splice(c,1)}function L(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})} +function H(a){if(a!==na){switch(a){case THREE.AdditiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE);break;case THREE.SubtractiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,o.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,o.SRC_COLOR);break;default:o.blendEquationSeparate(o.FUNC_ADD,o.FUNC_ADD),o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA)}na=a}}function I(a,b,c){(c.width&c.width- +1)===0&&(c.height&c.height-1)===0?(o.texParameteri(a,o.TEXTURE_WRAP_S,$(b.wrapS)),o.texParameteri(a,o.TEXTURE_WRAP_T,$(b.wrapT)),o.texParameteri(a,o.TEXTURE_MAG_FILTER,$(b.magFilter)),o.texParameteri(a,o.TEXTURE_MIN_FILTER,$(b.minFilter)),o.generateMipmap(a)):(o.texParameteri(a,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_MAG_FILTER,Z(b.magFilter)),o.texParameteri(a,o.TEXTURE_MIN_FILTER,Z(b.minFilter)))}function R(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit= +!0,a.__webglTexture=o.createTexture(),U.info.memory.textures++;o.activeTexture(o.TEXTURE0+b);o.bindTexture(o.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture?o.texImage2D(o.TEXTURE_2D,0,$(a.format),a.image.width,a.image.height,0,$(a.format),o.UNSIGNED_BYTE,a.image.data):o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,a.image);I(o.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else o.activeTexture(o.TEXTURE0+b),o.bindTexture(o.TEXTURE_2D,a.__webglTexture)}function K(a,b){o.bindRenderbuffer(o.RENDERBUFFER, +a);b.depthBuffer&&!b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_COMPONENT16,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_STENCIL,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.RENDERBUFFER,a)):o.renderbufferStorage(o.RENDERBUFFER,o.RGBA4,b.width,b.height)}function N(a){var b=a instanceof THREE.WebGLRenderTargetCube; +if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=o.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture);I(o.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=o.createFramebuffer();a.__webglRenderbuffer[c]=o.createRenderbuffer();o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,$(a.format),a.width,a.height,0,$(a.format),$(a.type), +null);var e=a,h=o.TEXTURE_CUBE_MAP_POSITIVE_X+c;o.bindFramebuffer(o.FRAMEBUFFER,a.__webglFramebuffer[c]);o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,h,e.__webglTexture,0);K(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=o.createFramebuffer(),a.__webglRenderbuffer=o.createRenderbuffer(),o.bindTexture(o.TEXTURE_2D,a.__webglTexture),I(o.TEXTURE_2D,a,a),o.texImage2D(o.TEXTURE_2D,0,$(a.format),a.width,a.height,0,$(a.format),$(a.type),null),c=o.TEXTURE_2D,o.bindFramebuffer(o.FRAMEBUFFER, +a.__webglFramebuffer),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,c,a.__webglTexture,0),o.bindRenderbuffer(o.RENDERBUFFER,a.__webglRenderbuffer),K(a.__webglRenderbuffer,a);b?o.bindTexture(o.TEXTURE_CUBE_MAP,null):o.bindTexture(o.TEXTURE_2D,null);o.bindRenderbuffer(o.RENDERBUFFER,null);o.bindFramebuffer(o.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,h=e=0):(b=null,c=ta,a=qa,e=ha,h=O);b!==pa&&(o.bindFramebuffer(o.FRAMEBUFFER, +b),o.viewport(e,h,c,a),pa=b)}function M(a){a instanceof THREE.WebGLRenderTargetCube?(o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture),o.generateMipmap(o.TEXTURE_CUBE_MAP),o.bindTexture(o.TEXTURE_CUBE_MAP,null)):(o.bindTexture(o.TEXTURE_2D,a.__webglTexture),o.generateMipmap(o.TEXTURE_2D),o.bindTexture(o.TEXTURE_2D,null))}function G(a,b){var c;a==="fragment"?c=o.createShader(o.FRAGMENT_SHADER):a==="vertex"&&(c=o.createShader(o.VERTEX_SHADER));o.shaderSource(c,b);o.compileShader(c);if(!o.getShaderParameter(c, +o.COMPILE_STATUS))return console.error(o.getShaderInfoLog(c)),console.error(b),null;return c}function Z(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return o.NEAREST;default:return o.LINEAR}}function $(a){switch(a){case THREE.RepeatWrapping:return o.REPEAT;case THREE.ClampToEdgeWrapping:return o.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return o.MIRRORED_REPEAT;case THREE.NearestFilter:return o.NEAREST;case THREE.NearestMipMapNearestFilter:return o.NEAREST_MIPMAP_NEAREST; +case THREE.NearestMipMapLinearFilter:return o.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return o.LINEAR;case THREE.LinearMipMapNearestFilter:return o.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return o.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return o.BYTE;case THREE.UnsignedByteType:return o.UNSIGNED_BYTE;case THREE.ShortType:return o.SHORT;case THREE.UnsignedShortType:return o.UNSIGNED_SHORT;case THREE.IntType:return o.INT;case THREE.UnsignedShortType:return o.UNSIGNED_INT;case THREE.FloatType:return o.FLOAT; +case THREE.AlphaFormat:return o.ALPHA;case THREE.RGBFormat:return o.RGB;case THREE.RGBAFormat:return o.RGBA;case THREE.LuminanceFormat:return o.LUMINANCE;case THREE.LuminanceAlphaFormat:return o.LUMINANCE_ALPHA}return 0}var U=this,o,da=[],Y=null,pa=null,P=-1,T=null,ja=0,ea=null,aa=null,na=null,ga=null,ca=null,la=null,fa=null,ka=null,ha=0,O=0,ta=0,qa=0,ma=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],ua=new THREE.Matrix4,xa=new Float32Array(16), +Da=new Float32Array(16),Ba=new THREE.Vector4,Ea={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},Ca=a.canvas!==void 0?a.canvas:document.createElement("canvas"),E=a.stencil!==void 0?a.stencil:!0,V=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,ia=a.antialias!==void 0?a.antialias:!1,X=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),va=a.clearAlpha!==void 0?a.clearAlpha:0,ra=a.maxLights!== +void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=Ca;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar= +5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var wa,sa=[],a=THREE.ShaderLib.depthRGBA,oa=THREE.UniformsUtils.clone(a.uniforms),Fa=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:oa}),ya=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:oa,morphTargets:!0});Fa._shadowPass=!0;ya._shadowPass=!0;try{if(!(o=Ca.getContext("experimental-webgl", +{antialias:ia,stencil:E,preserveDrawingBuffer:V})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+o.getParameter(o.VERSION)+" | "+o.getParameter(o.VENDOR)+" | "+o.getParameter(o.RENDERER)+" | "+o.getParameter(o.SHADING_LANGUAGE_VERSION))}catch(Ga){console.error(Ga)}o.clearColor(0,0,0,1);o.clearDepth(1);o.clearStencil(0);o.enable(o.DEPTH_TEST);o.depthFunc(o.LEQUAL);o.frontFace(o.CCW);o.cullFace(o.BACK);o.enable(o.CULL_FACE);o.enable(o.BLEND);o.blendEquation(o.FUNC_ADD); +o.blendFunc(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA);o.clearColor(X.r,X.g,X.b,va);this.context=o;var Aa=o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,W={};W.vertices=new Float32Array(16);W.faces=new Uint16Array(6);E=0;W.vertices[E++]=-1;W.vertices[E++]=-1;W.vertices[E++]=0;W.vertices[E++]=1;W.vertices[E++]=1;W.vertices[E++]=-1;W.vertices[E++]=1;W.vertices[E++]=1;W.vertices[E++]=1;W.vertices[E++]=1;W.vertices[E++]=1;W.vertices[E++]=0;W.vertices[E++]=-1;W.vertices[E++]=1;W.vertices[E++]=0;E=W.vertices[E++]= +0;W.faces[E++]=0;W.faces[E++]=1;W.faces[E++]=2;W.faces[E++]=0;W.faces[E++]=2;W.faces[E++]=3;W.vertexBuffer=o.createBuffer();W.elementBuffer=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,W.vertexBuffer);o.bufferData(o.ARRAY_BUFFER,W.vertices,o.STATIC_DRAW);o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,W.elementBuffer);o.bufferData(o.ELEMENT_ARRAY_BUFFER,W.faces,o.STATIC_DRAW);W.program=o.createProgram();o.attachShader(W.program,G("fragment",THREE.ShaderLib.sprite.fragmentShader));o.attachShader(W.program,G("vertex", +THREE.ShaderLib.sprite.vertexShader));o.linkProgram(W.program);W.attributes={};W.uniforms={};W.attributes.position=o.getAttribLocation(W.program,"position");W.attributes.uv=o.getAttribLocation(W.program,"uv");W.uniforms.uvOffset=o.getUniformLocation(W.program,"uvOffset");W.uniforms.uvScale=o.getUniformLocation(W.program,"uvScale");W.uniforms.rotation=o.getUniformLocation(W.program,"rotation");W.uniforms.scale=o.getUniformLocation(W.program,"scale");W.uniforms.alignment=o.getUniformLocation(W.program, +"alignment");W.uniforms.color=o.getUniformLocation(W.program,"color");W.uniforms.map=o.getUniformLocation(W.program,"map");W.uniforms.opacity=o.getUniformLocation(W.program,"opacity");W.uniforms.useScreenCoordinates=o.getUniformLocation(W.program,"useScreenCoordinates");W.uniforms.affectedByDistance=o.getUniformLocation(W.program,"affectedByDistance");W.uniforms.screenPosition=o.getUniformLocation(W.program,"screenPosition");W.uniforms.modelViewMatrix=o.getUniformLocation(W.program,"modelViewMatrix"); +W.uniforms.projectionMatrix=o.getUniformLocation(W.program,"projectionMatrix");var Ia=!1;this.setSize=function(a,b){Ca.width=a;Ca.height=b;this.setViewport(0,0,Ca.width,Ca.height)};this.setViewport=function(a,b,c,e){ha=a;O=b;ta=c;qa=e;o.viewport(ha,O,ta,qa)};this.setScissor=function(a,b,c,e){o.scissor(a,b,c,e)};this.enableScissorTest=function(a){a?o.enable(o.SCISSOR_TEST):o.disable(o.SCISSOR_TEST)};this.setClearColorHex=function(a,b){X.setHex(a);va=b;o.clearColor(X.r,X.g,X.b,va)};this.setClearColor= +function(a,b){X.copy(a);va=b;o.clearColor(X.r,X.g,X.b,va)};this.getClearColor=function(){return X};this.getClearAlpha=function(){return va};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=o.COLOR_BUFFER_BIT;if(b===void 0||b)e|=o.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=o.STENCIL_BUFFER_BIT;o.clear(e)};this.getContext=function(){return o};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray, +a instanceof THREE.Mesh)for(g in a.geometry.geometryGroups){var b=a.geometry.geometryGroups[g];o.deleteBuffer(b.__webglVertexBuffer);o.deleteBuffer(b.__webglNormalBuffer);o.deleteBuffer(b.__webglTangentBuffer);o.deleteBuffer(b.__webglColorBuffer);o.deleteBuffer(b.__webglUVBuffer);o.deleteBuffer(b.__webglUV2Buffer);o.deleteBuffer(b.__webglSkinVertexABuffer);o.deleteBuffer(b.__webglSkinVertexBBuffer);o.deleteBuffer(b.__webglSkinIndicesBuffer);o.deleteBuffer(b.__webglSkinWeightsBuffer);o.deleteBuffer(b.__webglFaceBuffer); +o.deleteBuffer(b.__webglLineBuffer);if(b.numMorphTargets)for(var c=0,e=b.numMorphTargets;c=0&&o.enableVertexAttribArray(w.position);w.color>=0&&o.enableVertexAttribArray(w.color);w.normal>=0&&o.enableVertexAttribArray(w.normal); +w.tangent>=0&&o.enableVertexAttribArray(w.tangent);a.skinning&&w.skinVertexA>=0&&w.skinVertexB>=0&&w.skinIndex>=0&&w.skinWeight>=0&&(o.enableVertexAttribArray(w.skinVertexA),o.enableVertexAttribArray(w.skinVertexB),o.enableVertexAttribArray(w.skinIndex),o.enableVertexAttribArray(w.skinWeight));if(a.attributes)for(l in a.attributes)w[l]!==void 0&&w[l]>=0&&o.enableVertexAttribArray(w[l]);if(a.morphTargets)for(l=a.numSupportedMorphTargets=0;l=0&&(o.enableVertexAttribArray(w[x]), +a.numSupportedMorphTargets++);a.uniformsList=[];for(h in a.uniforms)a.uniformsList.push([a.uniforms[h],h])};this.clearTarget=function(a,b,c,e){N(a);this.clear(b,c,e)};this.updateShadowMap=function(a,b){w(a,b)};this.render=function(a,b,c,E){var ia,z,V,D,C,X,ha,L=a.lights,ra=a.fog;P=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&w(a,b);U.info.render.calls=0;U.info.render.vertices=0;U.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), +a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(Da);b.projectionMatrix.flattenToArray(xa);ua.multiply(b.projectionMatrix,b.matrixWorldInverse);p(ua);N(c);(this.autoClear||E)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);V=a.__webglObjects.length;for(E=0;E=0;E--)if(C=a.__webglObjects[E],C.render&&(X=C.object,ha=C.buffer,z=C.opaque))h(X),k(z.depthTest),n(z.depthWrite),t(z.polygonOffset,z.polygonOffsetFactor, +z.polygonOffsetUnits),l(b,L,ra,z,ha,X);for(E=0;E65535&&(E[v].counter+=1,w=E[v].hash+"_"+E[v].counter,k.geometryGroups[w]=== +void 0&&(k.geometryGroups[w]={faces:[],materialIndex:p,vertices:0,numMorphTargets:x})),k.geometryGroups[w].faces.push(n),k.geometryGroups[w].vertices+=t;k.geometryGroupsList=[];n=void 0;for(n in k.geometryGroups)k.geometryGroups[n].id=ja++,k.geometryGroupsList.push(k.geometryGroups[n])}for(l in f.geometryGroups)if(k=f.geometryGroups[l],!k.__webglVertexBuffer){n=k;n.__webglVertexBuffer=o.createBuffer();n.__webglNormalBuffer=o.createBuffer();n.__webglTangentBuffer=o.createBuffer();n.__webglColorBuffer= o.createBuffer();n.__webglUVBuffer=o.createBuffer();n.__webglUV2Buffer=o.createBuffer();n.__webglSkinVertexABuffer=o.createBuffer();n.__webglSkinVertexBBuffer=o.createBuffer();n.__webglSkinIndicesBuffer=o.createBuffer();n.__webglSkinWeightsBuffer=o.createBuffer();n.__webglFaceBuffer=o.createBuffer();n.__webglLineBuffer=o.createBuffer();if(n.numMorphTargets){p=u=void 0;n.__webglMorphTargetsBuffers=[];u=0;for(p=n.numMorphTargets;u0||x.faceVertexUvs.length>0)l.__uvArray=new Float32Array(n*2);if(x.faceUvs.length>1||x.faceVertexUvs.length>1)l.__uv2Array=new Float32Array(n*2)}if(p.geometry.skinWeights.length&&p.geometry.skinIndices.length)l.__skinVertexAArray=new Float32Array(n*4),l.__skinVertexBArray=new Float32Array(n* -4),l.__skinIndexArray=new Float32Array(n*4),l.__skinWeightArray=new Float32Array(n*4);l.__faceArray=new Uint16Array(v*3);l.__lineArray=new Uint16Array(G*2);if(l.numMorphTargets){l.__morphTargetsArrays=[];x=0;for(y=l.numMorphTargets;x=0;h--)k[h]===f&&k.splice(h,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&D(k.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(k=a.__webglObjects.length;e0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglColorBuffer),o.bufferData(o.ARRAY_BUFFER,ea,v));Ba&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglNormalBuffer),o.bufferData(o.ARRAY_BUFFER,da,v));Ea&&wa.hasTangents&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglTangentBuffer), -o.bufferData(o.ARRAY_BUFFER,la,v));Ga&&ta>0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglUVBuffer),o.bufferData(o.ARRAY_BUFFER,ja,v));Ga&&xa>0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglUV2Buffer),o.bufferData(o.ARRAY_BUFFER,ka,v));Aa&&(o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,p.__webglFaceBuffer),o.bufferData(o.ELEMENT_ARRAY_BUFFER,ua,v),o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,p.__webglLineBuffer),o.bufferData(o.ELEMENT_ARRAY_BUFFER,ya,v));S>0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinVertexABuffer),o.bufferData(o.ARRAY_BUFFER, -ca,v),o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinVertexBBuffer),o.bufferData(o.ARRAY_BUFFER,Z,v),o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinIndicesBuffer),o.bufferData(o.ARRAY_BUFFER,$,v),o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinWeightsBuffer),o.bufferData(o.ARRAY_BUFFER,sa,v));G&&(delete p.__inittedArrays,delete p.__colorArray,delete p.__normalArray,delete p.__tangentArray,delete p.__uvArray,delete p.__uv2Array,delete p.__faceArray,delete p.__vertexArray,delete p.__lineArray,delete p.__skinVertexAArray, -delete p.__skinVertexBArray,delete p.__skinIndexArray,delete p.__skinWeightArray)}f.__dirtyVertices=!1;f.__dirtyMorphTargets=!1;f.__dirtyElements=!1;f.__dirtyUvs=!1;f.__dirtyNormals=!1;f.__dirtyColors=!1;f.__dirtyTangents=!1;l.attributes&&z(l)}else if(h instanceof THREE.Ribbon){if(f.__dirtyVertices||f.__dirtyColors){h=f;l=o.DYNAMIC_DRAW;n=w=G=G=void 0;x=h.vertices;u=h.colors;t=x.length;p=u.length;ha=h.__vertexArray;v=h.__colorArray;B=h.__dirtyColors;if(h.__dirtyVertices){for(G=0;G0||x.faceVertexUvs.length>0)k.__uvArray=new Float32Array(n*2);if(x.faceUvs.length>1||x.faceVertexUvs.length>1)k.__uv2Array=new Float32Array(n*2)}if(p.geometry.skinWeights.length&&p.geometry.skinIndices.length)k.__skinVertexAArray=new Float32Array(n*4),k.__skinVertexBArray=new Float32Array(n* +4),k.__skinIndexArray=new Float32Array(n*4),k.__skinWeightArray=new Float32Array(n*4);k.__faceArray=new Uint16Array(v*3);k.__lineArray=new Uint16Array(w*2);if(k.numMorphTargets){k.__morphTargetsArrays=[];x=0;for(y=k.numMorphTargets;x=0;f--)h[f]===l&&h.splice(f,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&C(h.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(h=a.__webglObjects.length;e0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglColorBuffer),o.bufferData(o.ARRAY_BUFFER,fa,v));Ba&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglNormalBuffer),o.bufferData(o.ARRAY_BUFFER,ea,v));Ea&&xa.hasTangents&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglTangentBuffer), +o.bufferData(o.ARRAY_BUFFER,ma,v));Ga&&R>0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglUVBuffer),o.bufferData(o.ARRAY_BUFFER,ka,v));Ga&&ta>0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglUV2Buffer),o.bufferData(o.ARRAY_BUFFER,la,v));Aa&&(o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,p.__webglFaceBuffer),o.bufferData(o.ELEMENT_ARRAY_BUFFER,ua,v),o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,p.__webglLineBuffer),o.bufferData(o.ELEMENT_ARRAY_BUFFER,ya,v));S>0&&(o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinVertexABuffer),o.bufferData(o.ARRAY_BUFFER, +da,v),o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinVertexBBuffer),o.bufferData(o.ARRAY_BUFFER,$,v),o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinIndicesBuffer),o.bufferData(o.ARRAY_BUFFER,aa,v),o.bindBuffer(o.ARRAY_BUFFER,p.__webglSkinWeightsBuffer),o.bufferData(o.ARRAY_BUFFER,sa,v));w&&(delete p.__inittedArrays,delete p.__colorArray,delete p.__normalArray,delete p.__tangentArray,delete p.__uvArray,delete p.__uv2Array,delete p.__faceArray,delete p.__vertexArray,delete p.__lineArray,delete p.__skinVertexAArray, +delete p.__skinVertexBArray,delete p.__skinIndexArray,delete p.__skinWeightArray)}l.__dirtyVertices=!1;l.__dirtyMorphTargets=!1;l.__dirtyElements=!1;l.__dirtyUvs=!1;l.__dirtyNormals=!1;l.__dirtyColors=!1;l.__dirtyTangents=!1;k.attributes&&z(k)}else if(f instanceof THREE.Ribbon){if(l.__dirtyVertices||l.__dirtyColors){f=l;k=o.DYNAMIC_DRAW;n=E=w=w=void 0;x=f.vertices;u=f.colors;t=x.length;p=u.length;ia=f.__vertexArray;v=f.__colorArray;A=f.__dirtyColors;if(f.__dirtyVertices){for(w=0;w1&&(b-=1)}c===void 0&&(c={h:0,s:0,v:0});c.h=b;c.s=f;c.v=k;return c}}; +THREE.ColorUtils={adjustHSV:function(a,c,b,e){var l=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,l);l.h=THREE.Math.clamp(l.h+c,0,1);l.s=THREE.Math.clamp(l.s+b,0,1);l.v=THREE.Math.clamp(l.v+e,0,1);a.setHSV(l.h,l.s,l.v)},rgbToHsv:function(a,c){var b=a.r,e=a.g,l=a.b,f=Math.max(Math.max(b,e),l),h=Math.min(Math.min(b,e),l);if(h===f)h=b=0;else{var k=f-h,h=k/f,b=b===f?(e-l)/k:e===f?2+(l-b)/k:4+(b-e)/k;b/=6;b<0&&(b+=1);b>1&&(b-=1)}c===void 0&&(c={h:0,s:0,v:0});c.h=b;c.s=h;c.v=f;return c}}; THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(a,c){for(var b,e,h=a.vertices.length,k=c instanceof THREE.Mesh?c.geometry:c,f=a.vertices,l=k.vertices,n=a.faces,t=k.faces,p=a.faceVertexUvs[0],v=k.faceVertexUvs[0],x={},u=0;u1&&(e=1-e,h=1-h);k=1-e-h;f.copy(a);f.multiplyScalar(e);l.copy(c);l.multiplyScalar(h);f.addSelf(l);l.copy(b);l.multiplyScalar(k);f.addSelf(l);return f},randomPointInFace:function(a,c,b){var e,h,k;if(a instanceof THREE.Face3)return e=c.vertices[a.a].position,h=c.vertices[a.b].position, -k=c.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(e,h,k);else if(a instanceof THREE.Face4){e=c.vertices[a.a].position;h=c.vertices[a.b].position;k=c.vertices[a.c].position;var c=c.vertices[a.d].position,f;b?a._area1&&a._area2?(b=a._area1,f=a._area2):(b=THREE.GeometryUtils.triangleArea(e,h,c),f=THREE.GeometryUtils.triangleArea(h,k,c),a._area1=b,a._area2=f):(b=THREE.GeometryUtils.triangleArea(e,h,c),f=THREE.GeometryUtils.triangleArea(h,k,c));return THREE.GeometryUtils.random()*(b+ -f)a?b(c,k-1):t[k]1&&(e=1-e,l=1-l);f=1-e-l;h.copy(a);h.multiplyScalar(e);k.copy(c);k.multiplyScalar(l);h.addSelf(k);k.copy(b);k.multiplyScalar(f);h.addSelf(k);return h},randomPointInFace:function(a,c,b){var e,l,f;if(a instanceof THREE.Face3)return e=c.vertices[a.a].position,l=c.vertices[a.b].position, +f=c.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(e,l,f);else if(a instanceof THREE.Face4){e=c.vertices[a.a].position;l=c.vertices[a.b].position;f=c.vertices[a.c].position;var c=c.vertices[a.d].position,h;b?a._area1&&a._area2?(b=a._area1,h=a._area2):(b=THREE.GeometryUtils.triangleArea(e,l,c),h=THREE.GeometryUtils.triangleArea(l,f,c),a._area1=b,a._area2=h):(b=THREE.GeometryUtils.triangleArea(e,l,c),h=THREE.GeometryUtils.triangleArea(l,f,c));return THREE.GeometryUtils.random()*(b+ +h)a?b(c,h-1):t[h] 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#ifdef VERTEX_TEXTURES\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\nvec4 displacedPosition = vec4( vNormal.xyz * df, 0.0 ) + mvPosition;\ngl_Position = projectionMatrix * displacedPosition;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif", THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:1,texture:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vViewPosition;\nvoid main() {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vViewPosition;\nvoid main() {\nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( tFlip * wPos.x, wPos.yz ) );\n}"}}}; THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(a){return this.getPoint(this.getUtoTmapping(a))};THREE.Curve.prototype.getPoints=function(a){a||(a=5);var c,b=[];for(c=0;c<=a;c++)b.push(this.getPoint(c/a));return b};THREE.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var c,b=[];for(c=0;c<=a;c++)b.push(this.getPointAt(c/a));return b}; -THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1)return this.cacheArcLengths;var c=[],b,e=this.getPoint(0),h,k=0;c.push(0);for(h=1;h<=a;h++)b=this.getPoint(h/a),k+=b.distanceTo(e),c.push(k),e=b;return this.cacheArcLengths=c}; -THREE.Curve.prototype.getUtoTmapping=function(a,c){var b=this.getLengths(),e=0,h=b.length,k;k=c?c:a*b[h-1];time=Date.now();for(var f=0,l=h-1,n;f<=l;)if(e=Math.floor(f+(l-f)/2),n=b[e]-k,n<0)f=e+1;else if(n>0)l=e-1;else{l=e;break}e=l;if(b[e]==k)return e/(h-1);f=b[e];return b=(e+(k-f)/(b[e+1]-f))/(h-1)};THREE.Curve.prototype.getNormalVector=function(a){a=this.getTangent(a);return new THREE.Vector2(-a.y,a.x)}; +THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1)return this.cacheArcLengths;var c=[],b,e=this.getPoint(0),l,f=0;c.push(0);for(l=1;l<=a;l++)b=this.getPoint(l/a),f+=b.distanceTo(e),c.push(f),e=b;return this.cacheArcLengths=c}; +THREE.Curve.prototype.getUtoTmapping=function(a,c){var b=this.getLengths(),e=0,l=b.length,f;f=c?c:a*b[l-1];time=Date.now();for(var h=0,k=l-1,n;h<=k;)if(e=Math.floor(h+(k-h)/2),n=b[e]-f,n<0)h=e+1;else if(n>0)k=e-1;else{k=e;break}e=k;if(b[e]==f)return e/(l-1);h=b[e];return b=(e+(f-h)/(b[e+1]-h))/(l-1)};THREE.Curve.prototype.getNormalVector=function(a){a=this.getTangent(a);return new THREE.Vector2(-a.y,a.x)}; THREE.Curve.prototype.getTangent=function(a){var c=a-1.0E-4;a+=1.0E-4;c<0&&(c=0);a>1&&(a=1);var c=this.getPoint(c),a=this.getPoint(a),b=new THREE.Vector2;b.sub(a,c);return b.unit()};THREE.LineCurve=function(a,c){a instanceof THREE.Vector2?(this.v1=a,this.v2=c):THREE.LineCurve.oldConstructor.apply(this,arguments)};THREE.LineCurve.oldConstructor=function(a,c,b,e){this.constructor(new THREE.Vector2(a,c),new THREE.Vector2(b,e))};THREE.LineCurve.prototype=new THREE.Curve; THREE.LineCurve.prototype.constructor=THREE.LineCurve;THREE.LineCurve.prototype.getPoint=function(a){var c=new THREE.Vector2;c.sub(this.v2,this.v1);c.multiplyScalar(a).addSelf(this.v1);return c};THREE.LineCurve.prototype.getPointAt=function(a){return this.getPoint(a)};THREE.LineCurve.prototype.getTangent=function(){var a=new THREE.Vector2;a.sub(this.v2,this.v1);a.normalize();return a}; THREE.QuadraticBezierCurve=function(a,c,b){if(!(c instanceof THREE.Vector2))var e=Array.prototype.slice.call(arguments),a=new THREE.Vector2(e[0],e[1]),c=new THREE.Vector2(e[2],e[3]),b=new THREE.Vector2(e[4],e[5]);this.v0=a;this.v1=c;this.v2=b};THREE.QuadraticBezierCurve.prototype=new THREE.Curve;THREE.QuadraticBezierCurve.prototype.constructor=THREE.QuadraticBezierCurve; THREE.QuadraticBezierCurve.prototype.getPoint=function(a){var c;c=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);return new THREE.Vector2(c,a)};THREE.QuadraticBezierCurve.prototype.getTangent=function(a){var c;c=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.x,this.v1.x,this.v2.x);a=THREE.Curve.Utils.tangentQuadraticBezier(a,this.v0.y,this.v1.y,this.v2.y);c=new THREE.Vector2(c,a);c.normalize();return c}; -THREE.CubicBezierCurve=function(a,c,b,e){if(!(c instanceof THREE.Vector2))var h=Array.prototype.slice.call(arguments),a=new THREE.Vector2(h[0],h[1]),c=new THREE.Vector2(h[2],h[3]),b=new THREE.Vector2(h[4],h[5]),e=new THREE.Vector2(h[6],h[7]);this.v0=a;this.v1=c;this.v2=b;this.v3=e};THREE.CubicBezierCurve.prototype=new THREE.Curve;THREE.CubicBezierCurve.prototype.constructor=THREE.CubicBezierCurve; +THREE.CubicBezierCurve=function(a,c,b,e){if(!(c instanceof THREE.Vector2))var l=Array.prototype.slice.call(arguments),a=new THREE.Vector2(l[0],l[1]),c=new THREE.Vector2(l[2],l[3]),b=new THREE.Vector2(l[4],l[5]),e=new THREE.Vector2(l[6],l[7]);this.v0=a;this.v1=c;this.v2=b;this.v3=e};THREE.CubicBezierCurve.prototype=new THREE.Curve;THREE.CubicBezierCurve.prototype.constructor=THREE.CubicBezierCurve; THREE.CubicBezierCurve.prototype.getPoint=function(a){var c;c=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);return new THREE.Vector2(c,a)};THREE.CubicBezierCurve.prototype.getTangent=function(a){var c;c=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);a=THREE.Curve.Utils.tangentCubicBezier(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);c=new THREE.Vector2(c,a);c.normalize();return c}; THREE.SplineCurve=function(a){this.points=a};THREE.SplineCurve.prototype=new THREE.Curve;THREE.SplineCurve.prototype.constructor=THREE.SplineCurve; -THREE.SplineCurve.prototype.getPoint=function(a){var c=new THREE.Vector2,b=[],e=this.points,h;h=(e.length-1)*a;a=Math.floor(h);h-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,h);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,h);return c};THREE.ArcCurve=function(a,c,b,e,h,k){this.aX=a;this.aY=c;this.aRadius=b;this.aStartAngle=e;this.aEndAngle=h;this.aClockwise=k}; +THREE.SplineCurve.prototype.getPoint=function(a){var c=new THREE.Vector2,b=[],e=this.points,l;l=(e.length-1)*a;a=Math.floor(l);l-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,l);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,l);return c};THREE.ArcCurve=function(a,c,b,e,l,f){this.aX=a;this.aY=c;this.aRadius=b;this.aStartAngle=e;this.aEndAngle=l;this.aClockwise=f}; THREE.ArcCurve.prototype=new THREE.Curve;THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.ArcCurve.prototype.getPoint=function(a){var c=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);a=this.aStartAngle+a*c;return new THREE.Vector2(this.aX+this.aRadius*Math.cos(a),this.aY+this.aRadius*Math.sin(a))}; -THREE.Curve.Utils={tangentQuadraticBezier:function(a,c,b,e){return 2*(1-a)*(b-c)+2*a*(e-b)},tangentCubicBezier:function(a,c,b,e,h){return-3*c*(1-a)*(1-a)+3*b*(1-a)*(1-a)-6*a*b*(1-a)+6*a*e*(1-a)-3*a*a*e+3*a*a*h},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,c,b,e,h){var a=(b-a)*0.5,e=(e-c)*0.5,k=h*h;return(2*c-2*b+a+e)*h*k+(-3*c+3*b-2*a-e)*k+a*h+c}}; +THREE.Curve.Utils={tangentQuadraticBezier:function(a,c,b,e){return 2*(1-a)*(b-c)+2*a*(e-b)},tangentCubicBezier:function(a,c,b,e,l){return-3*c*(1-a)*(1-a)+3*b*(1-a)*(1-a)-6*a*b*(1-a)+6*a*e*(1-a)-3*a*a*e+3*a*a*l},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,c,b,e,l){var a=(b-a)*0.5,e=(e-c)*0.5,f=l*l;return(2*c-2*b+a+e)*l*f+(-3*c+3*b-2*a-e)*f+a*l+c}}; THREE.Curve.create=function(a,c){a.prototype=new THREE.Curve;a.prototype.constructor=a;a.prototype.getPoint=c;return a};THREE.LineCurve3=THREE.Curve.create(function(a,c){this.v1=a;this.v2=c},function(a){var c=new THREE.Vector3;c.sub(v2,v1);c.multiplyScalar(a);c.addSelf(this.v1);return c}); THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,c,b){this.v0=a;this.v1=c;this.v2=b},function(a){var c,b;c=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);b=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(c,b,a)}); THREE.CubicBezierCurve3=THREE.Curve.create(function(a,c,b,e){this.v0=a;this.v1=c;this.v2=b;this.v3=e},function(a){var c,b;c=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);b=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(c,b,a)}); -THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=a},function(a){var c=new THREE.Vector3,b=[],e=this.points,h;h=(e.length-1)*a;a=Math.floor(h);h-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,h);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,h);c.z=THREE.Curve.Utils.interpolate(e[b[0]].z,e[b[1]].z,e[b[2]].z,e[b[3]].z,h);return c}); +THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=a},function(a){var c=new THREE.Vector3,b=[],e=this.points,l;l=(e.length-1)*a;a=Math.floor(l);l-=a;b[0]=a==0?a:a-1;b[1]=a;b[2]=a>e.length-2?a:a+1;b[3]=a>e.length-3?a:a+2;c.x=THREE.Curve.Utils.interpolate(e[b[0]].x,e[b[1]].x,e[b[2]].x,e[b[3]].x,l);c.y=THREE.Curve.Utils.interpolate(e[b[0]].y,e[b[1]].y,e[b[2]].y,e[b[3]].y,l);c.z=THREE.Curve.Utils.interpolate(e[b[0]].z,e[b[1]].z,e[b[2]].z,e[b[3]].z,l);return c}); THREE.CurvePath=function(){this.curves=[];this.bends=[]};THREE.CurvePath.prototype=new THREE.Curve;THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){}; THREE.CurvePath.prototype.getPoint=function(a){for(var c=a*this.getLength(),b=this.getCurveLengths(),a=0;a=c)return c=b[a]-c,a=this.curves[a],c=1-c/a.getLength(),a.getPointAt(c);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],c=0,b,e=this.curves.length;for(b=0;bc)c=k.x;else if(k.xb)b=k.y;else if(k.yc)c=f.x;else if(f.xb)b=f.y;else if(f.y0?(f=b[b.length-1],u=f.x,y=f.y):(f=this.actions[e-1].args,u=f[f.length-2],y=f[f.length-1]);for(f=1;f<=a;f++)w=f/a,k=THREE.Shape.Utils.b2(w,u,v,l),w=THREE.Shape.Utils.b2(w,y,x, -n),b.push(new THREE.Vector2(k,w));break;case THREE.PathActions.BEZIER_CURVE_TO:l=k[4];n=k[5];v=k[0];x=k[1];t=k[2];p=k[3];b.length>0?(f=b[b.length-1],u=f.x,y=f.y):(f=this.actions[e-1].args,u=f[f.length-2],y=f[f.length-1]);for(f=1;f<=a;f++)w=f/a,k=THREE.Shape.Utils.b3(w,u,v,t,l),w=THREE.Shape.Utils.b3(w,y,x,p,n),b.push(new THREE.Vector2(k,w));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[e-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];w=a*k[0].length;f=f.concat(k[0]);k=new THREE.SplineCurve(f); -for(f=1;f<=w;f++)b.push(k.getPointAt(f/w));break;case THREE.PathActions.ARC:f=this.actions[e-1].args;l=k[0];n=k[1];t=k[2];v=k[3];w=k[4];x=!!k[5];p=f[f.length-2];u=f[f.length-1];f.length==0&&(p=u=0);y=w-v;var B=a*2;for(f=1;f<=B;f++)w=f/B,x||(w=1-w),w=v+w*y,k=p+l+t*Math.cos(w),w=u+n+t*Math.sin(w),b.push(new THREE.Vector2(k,w))}c&&b.push(b[0]);return b};THREE.Path.prototype.transform=function(a,c){this.getBoundingBox();return this.getWrapPoints(this.getPoints(c),a)}; -THREE.Path.prototype.nltransform=function(a,c,b,e,h,k){var f=this.getPoints(),l,n,t,p,v;l=0;for(n=f.length;l0?(h=b[b.length-1],u=h.x,y=h.y):(h=this.actions[e-1].args,u=h[h.length-2],y=h[h.length-1]);for(h=1;h<=a;h++)w=h/a,f=THREE.Shape.Utils.b2(w,u,v,k),w=THREE.Shape.Utils.b2(w,y,x, +n),b.push(new THREE.Vector2(f,w));break;case THREE.PathActions.BEZIER_CURVE_TO:k=f[4];n=f[5];v=f[0];x=f[1];t=f[2];p=f[3];b.length>0?(h=b[b.length-1],u=h.x,y=h.y):(h=this.actions[e-1].args,u=h[h.length-2],y=h[h.length-1]);for(h=1;h<=a;h++)w=h/a,f=THREE.Shape.Utils.b3(w,u,v,t,k),w=THREE.Shape.Utils.b3(w,y,x,p,n),b.push(new THREE.Vector2(f,w));break;case THREE.PathActions.CSPLINE_THRU:h=this.actions[e-1].args;h=[new THREE.Vector2(h[h.length-2],h[h.length-1])];w=a*f[0].length;h=h.concat(f[0]);f=new THREE.SplineCurve(h); +for(h=1;h<=w;h++)b.push(f.getPointAt(h/w));break;case THREE.PathActions.ARC:h=this.actions[e-1].args;k=f[0];n=f[1];t=f[2];v=f[3];w=f[4];x=!!f[5];p=h[h.length-2];u=h[h.length-1];h.length==0&&(p=u=0);y=w-v;var A=a*2;for(h=1;h<=A;h++)w=h/A,x||(w=1-w),w=v+w*y,f=p+k+t*Math.cos(w),w=u+n+t*Math.sin(w),b.push(new THREE.Vector2(f,w))}c&&b.push(b[0]);return b};THREE.Path.prototype.transform=function(a,c){this.getBoundingBox();return this.getWrapPoints(this.getPoints(c),a)}; +THREE.Path.prototype.nltransform=function(a,c,b,e,l,f){var h=this.getPoints(),k,n,t,p,v;k=0;for(n=h.length;k=0?l-1:b.length-1;k=f-1>=0?f-1:t.length-1;var w=[t[f],b[l],b[h]];v=THREE.FontUtils.Triangulate.area(w);var B=[t[f],t[k],b[l]];x=THREE.FontUtils.Triangulate.area(B);u=l;p=f;l+=1;f+=-1;l< -0&&(l+=b.length);l%=b.length;f<0&&(f+=t.length);f%=t.length;h=l-1>=0?l-1:b.length-1;k=f-1>=0?f-1:t.length-1;w=[t[f],b[l],b[h]];w=THREE.FontUtils.Triangulate.area(w);B=[t[f],t[k],b[l]];B=THREE.FontUtils.Triangulate.area(B);v+x>w+B&&(l=u,f=p,l<0&&(l+=b.length),l%=b.length,f<0&&(f+=t.length),f%=t.length,h=l-1>=0?l-1:b.length-1,k=f-1>=0?f-1:t.length-1);v=b.slice(0,l);x=b.slice(l);u=t.slice(f);p=t.slice(0,f);k=[t[f],t[k],b[l]];y.push([t[f],b[l],b[h]]);y.push(k);b=v.concat(u).concat(p).concat(x)}return{shape:b, -isolatedPts:y,allpoints:e}},triangulateShape:function(a,c){var b=THREE.Shape.Utils.removeHoles(a,c),e=b.allpoints,h=b.isolatedPts,b=THREE.FontUtils.Triangulate(b.shape,!1),k,f,l,n,t={};k=0;for(f=e.length;k=0?k-1:b.length-1;f=h-1>=0?h-1:t.length-1;var w=[t[h],b[k],b[l]];v=THREE.FontUtils.Triangulate.area(w);var A=[t[h],t[f],b[k]];x=THREE.FontUtils.Triangulate.area(A);u=k;p=h;k+=1;h+=-1;k< +0&&(k+=b.length);k%=b.length;h<0&&(h+=t.length);h%=t.length;l=k-1>=0?k-1:b.length-1;f=h-1>=0?h-1:t.length-1;w=[t[h],b[k],b[l]];w=THREE.FontUtils.Triangulate.area(w);A=[t[h],t[f],b[k]];A=THREE.FontUtils.Triangulate.area(A);v+x>w+A&&(k=u,h=p,k<0&&(k+=b.length),k%=b.length,h<0&&(h+=t.length),h%=t.length,l=k-1>=0?k-1:b.length-1,f=h-1>=0?h-1:t.length-1);v=b.slice(0,k);x=b.slice(k);u=t.slice(h);p=t.slice(0,h);f=[t[h],t[f],b[k]];y.push([t[h],b[k],b[l]]);y.push(f);b=v.concat(u).concat(p).concat(x)}return{shape:b, +isolatedPts:y,allpoints:e}},triangulateShape:function(a,c){var b=THREE.Shape.Utils.removeHoles(a,c),e=b.allpoints,l=b.isolatedPts,b=THREE.FontUtils.Triangulate(b.shape,!1),f,h,k,n,t={};f=0;for(h=e.length;f1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+e+" on bone "+u),e=e<0?0:1;if(b==="pos")if(b=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)b.x=h[0]+(k[0]-h[0])*e,b.y=h[1]+(k[1]-h[1])*e,b.z=h[2]+(k[2]-h[2])*e;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= -this.getPrevKeyWith("pos",u,f.index-1).pos,this.points[1]=h,this.points[2]=k,this.points[3]=this.getNextKeyWith("pos",u,l.index+1).pos,e=e*0.33+0.33,h=this.interpolateCatmullRom(this.points,e),b.x=h[0],b.y=h[1],b.z=h[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)e=this.interpolateCatmullRom(this.points,e*1.01),this.target.set(e[0],e[1],e[2]),this.target.subSelf(b),this.target.y=0,this.target.normalize(),e=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,e,0)}else if(b=== -"rot")THREE.Quaternion.slerp(h,k,a.quaternion,e);else if(b==="scl")b=a.scale,b.x=h[0]+(k[0]-h[0])*e,b.y=h[1]+(k[1]-h[1])*e,b.z=h[2]+(k[2]-h[2])*e}}if(this.JITCompile&&p[0][t]===void 0){this.hierarchy[0].update(null,!0);for(u=0;ua.length-2?k:k+1;b[3]=k>a.length-3?k:k+2;k=a[b[0]];l=a[b[1]];n=a[b[2]];t=a[b[3]];b=h*h;f=h*b;e[0]=this.interpolate(k[0],l[0],n[0],t[0],h,b,f);e[1]=this.interpolate(k[1],l[1],n[1],t[1],h,b,f);e[2]=this.interpolate(k[2],l[2],n[2],t[2],h,b,f);return e}; -THREE.Animation.prototype.interpolate=function(a,c,b,e,h,k,f){a=(b-a)*0.5;e=(e-c)*0.5;return(2*(c-b)+a+e)*f+(-3*(c-b)-2*a-e)*k+a*h+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,b){var e=this.data.hierarchy[c].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?b=b1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+e+" on bone "+u),e=e<0?0:1;if(b==="pos")if(b=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)b.x=l[0]+(f[0]-l[0])*e,b.y=l[1]+(f[1]-l[1])*e,b.z=l[2]+(f[2]-l[2])*e;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= +this.getPrevKeyWith("pos",u,h.index-1).pos,this.points[1]=l,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",u,k.index+1).pos,e=e*0.33+0.33,l=this.interpolateCatmullRom(this.points,e),b.x=l[0],b.y=l[1],b.z=l[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)e=this.interpolateCatmullRom(this.points,e*1.01),this.target.set(e[0],e[1],e[2]),this.target.subSelf(b),this.target.y=0,this.target.normalize(),e=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,e,0)}else if(b=== +"rot")THREE.Quaternion.slerp(l,f,a.quaternion,e);else if(b==="scl")b=a.scale,b.x=l[0]+(f[0]-l[0])*e,b.y=l[1]+(f[1]-l[1])*e,b.z=l[2]+(f[2]-l[2])*e}}if(this.JITCompile&&p[0][t]===void 0){this.hierarchy[0].update(null,!0);for(u=0;ua.length-2?f:f+1;b[3]=f>a.length-3?f:f+2;f=a[b[0]];k=a[b[1]];n=a[b[2]];t=a[b[3]];b=l*l;h=l*b;e[0]=this.interpolate(f[0],k[0],n[0],t[0],l,b,h);e[1]=this.interpolate(f[1],k[1],n[1],t[1],l,b,h);e[2]=this.interpolate(f[2],k[2],n[2],t[2],l,b,h);return e}; +THREE.Animation.prototype.interpolate=function(a,c,b,e,l,f,h){a=(b-a)*0.5;e=(e-c)*0.5;return(2*(c-b)+a+e)*h+(-3*(c-b)-2*a-e)*f+a*l+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,b){var e=this.data.hierarchy[c].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?b=b0?b:0:b>=0?b:b+e.length;b>=0;b--)if(e[b][a]!==void 0)return e[b];return this.data.hierarchy[c].keys[e.length-1]}; THREE.CubeCamera=function(a,c,b,e){this.heightOffset=b;this.position=new THREE.Vector3(0,b,0);this.cameraPX=new THREE.PerspectiveCamera(90,1,a,c);this.cameraNX=new THREE.PerspectiveCamera(90,1,a,c);this.cameraPY=new THREE.PerspectiveCamera(90,1,a,c);this.cameraNY=new THREE.PerspectiveCamera(90,1,a,c);this.cameraPZ=new THREE.PerspectiveCamera(90,1,a,c);this.cameraNZ=new THREE.PerspectiveCamera(90,1,a,c);this.cameraPX.position=this.position;this.cameraNX.position=this.position;this.cameraPY.position= this.position;this.cameraNY.position=this.position;this.cameraPZ.position=this.position;this.cameraNZ.position=this.position;this.cameraPX.up.set(0,-1,0);this.cameraNX.up.set(0,-1,0);this.cameraPY.up.set(0,0,1);this.cameraNY.up.set(0,0,-1);this.cameraPZ.up.set(0,-1,0);this.cameraNZ.up.set(0,-1,0);this.targetPX=new THREE.Vector3(0,0,0);this.targetNX=new THREE.Vector3(0,0,0);this.targetPY=new THREE.Vector3(0,0,0);this.targetNY=new THREE.Vector3(0,0,0);this.targetPZ=new THREE.Vector3(0,0,0);this.targetNZ= new THREE.Vector3(0,0,0);this.renderTarget=new THREE.WebGLRenderTargetCube(e,e,{format:THREE.RGBFormat,magFilter:THREE.LinearFilter,minFilter:THREE.LinearFilter});this.updatePosition=function(a){this.position.copy(a);this.position.y+=this.heightOffset;this.targetPX.copy(this.position);this.targetNX.copy(this.position);this.targetPY.copy(this.position);this.targetNY.copy(this.position);this.targetPZ.copy(this.position);this.targetNZ.copy(this.position);this.targetPX.x+=1;this.targetNX.x-=1;this.targetPY.y+= 1;this.targetNY.y-=1;this.targetPZ.z+=1;this.targetNZ.z-=1;this.cameraPX.lookAt(this.targetPX);this.cameraNX.lookAt(this.targetNX);this.cameraPY.lookAt(this.targetPY);this.cameraNY.lookAt(this.targetNY);this.cameraPZ.lookAt(this.targetPZ);this.cameraNZ.lookAt(this.targetNZ)};this.updateCubeMap=function(a,b){var c=this.renderTarget;c.activeCubeFace=0;a.render(b,this.cameraPX,c);c.activeCubeFace=1;a.render(b,this.cameraNX,c);c.activeCubeFace=2;a.render(b,this.cameraPY,c);c.activeCubeFace=3;a.render(b, this.cameraNY,c);c.activeCubeFace=4;a.render(b,this.cameraPZ,c);c.activeCubeFace=5;a.render(b,this.cameraNZ,c)}};THREE.FirstPersonCamera=function(){console.warn("DEPRECATED: FirstPersonCamera() is FirstPersonControls().")};THREE.PathCamera=function(){console.warn("DEPRECATED: PathCamera() is PathControls().")};THREE.FlyCamera=function(){console.warn("DEPRECATED: FlyCamera() is FlyControls().")};THREE.RollCamera=function(){console.warn("DEPRECATED: RollCamera() is RollControls().")}; -THREE.TrackballCamera=function(){console.warn("DEPRECATED: TrackballCamera() is TrackballControls().")};THREE.CombinedCamera=function(a,c,b,e,h,k,f){THREE.Camera.call(this);this.fov=b;this.left=-a/2;this.right=a/2;this.top=c/2;this.bottom=-c/2;this.cameraO=new THREE.OrthographicCamera(a/-2,a/2,c/2,c/-2,k,f);this.cameraP=new THREE.PerspectiveCamera(b,a/c,e,h);this.zoom=1;this.toPerspective()};THREE.CombinedCamera.prototype=new THREE.Camera;THREE.CombinedCamera.prototype.constructor=THREE.CoolCamera; +THREE.TrackballCamera=function(){console.warn("DEPRECATED: TrackballCamera() is TrackballControls().")};THREE.CombinedCamera=function(a,c,b,e,l,f,h){THREE.Camera.call(this);this.fov=b;this.left=-a/2;this.right=a/2;this.top=c/2;this.bottom=-c/2;this.cameraO=new THREE.OrthographicCamera(a/-2,a/2,c/2,c/-2,f,h);this.cameraP=new THREE.PerspectiveCamera(b,a/c,e,l);this.zoom=1;this.toPerspective()};THREE.CombinedCamera.prototype=new THREE.Camera;THREE.CombinedCamera.prototype.constructor=THREE.CoolCamera; THREE.CombinedCamera.prototype.toPerspective=function(){this.near=this.cameraP.near;this.far=this.cameraP.far;this.cameraP.fov=this.fov/this.zoom;this.cameraP.updateProjectionMatrix();this.projectionMatrix=this.cameraP.projectionMatrix;this.inPersepectiveMode=!0;this.inOrthographicMode=!1}; THREE.CombinedCamera.prototype.toOrthographic=function(){var a=Math.tan(this.fov/2)*((this.cameraP.near+this.cameraP.far)/2),c=2*a*this.cameraP.aspect/2;a/=this.zoom;c/=this.zoom;this.cameraO.left=-c;this.cameraO.right=c;this.cameraO.top=a;this.cameraO.bottom=-a;this.cameraO.updateProjectionMatrix();this.near=this.cameraO.near;this.far=this.cameraO.far;this.projectionMatrix=this.cameraO.projectionMatrix;this.inPersepectiveMode=!1;this.inOrthographicMode=!0}; THREE.CombinedCamera.prototype.setFov=function(a){this.fov=a;this.inPersepectiveMode?this.toPerspective():this.toOrthographic()};THREE.CombinedCamera.prototype.setLens=function(a,c){c||(c=43.25);var b=2*Math.atan(c/(a*2));b*=180/Math.PI;this.setFov(b);return b};THREE.CombinedCamera.prototype.setZoom=function(a){this.zoom=a;this.inPersepectiveMode?this.toPerspective():this.toOrthographic()}; @@ -452,218 +453,218 @@ function(a){switch(a.keyCode){case 38:case 87:this.moveForward=!0;break;case 37: this.moveUp&&this.object.translateY(b);this.moveDown&&this.object.translateY(-b);b=a*this.lookSpeed;this.activeLook||(b=0);this.lon+=this.mouseX*b;this.lookVertical&&(this.lat-=this.mouseY*b);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;var a=this.target,c=this.object.position;a.x=c.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=c.y+100*Math.cos(this.phi);a.z=c.z+100*Math.sin(this.phi)*Math.sin(this.theta)}a=1;this.constrainVertical&& (a=Math.PI/(this.verticalMax-this.verticalMin));this.lon+=this.mouseX*b;this.lookVertical&&(this.lat-=this.mouseY*b*a);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;if(this.constrainVertical)this.phi=THREE.Math.mapLinear(this.phi,0,Math.PI,this.verticalMin,this.verticalMax);a=this.target;c=this.object.position;a.x=c.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=c.y+100*Math.cos(this.phi);a.z=c.z+100*Math.sin(this.phi)*Math.sin(this.theta); this.object.lookAt(a)};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},!1);this.domElement.addEventListener("mousemove",b(this,this.onMouseMove),!1);this.domElement.addEventListener("mousedown",b(this,this.onMouseDown),!1);this.domElement.addEventListener("mouseup",b(this,this.onMouseUp),!1);this.domElement.addEventListener("keydown",b(this,this.onKeyDown),!1);this.domElement.addEventListener("keyup",b(this,this.onKeyUp),!1)}; -THREE.PathControls=function(a,c){function b(a){if((a*=2)<1)return 0.5*a*a;return-0.5*(--a*(a-2)-1)}function e(a,b){return function(){b.apply(a,arguments)}}function h(a,b,c,e){var k={name:c,fps:0.6,length:e,hierarchy:[]},f,h=b.getControlPointsArray(),l=b.getLength(),B=h.length,A=0;f=B-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:h[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[f]={time:e,pos:h[f],rot:[0,0,0,1],scl:[1,1,1]};for(f=1;f=0?a:a+f;c=this.verticalAngleMap.srcRange; +this.domElement.offsetWidth/2,this.viewHalfY=this.domElement.offsetHeight/2,this.domElement.setAttribute("tabindex",-1));var h=Math.PI*2,k=Math.PI/180;this.update=function(a){var c;this.lookHorizontal&&(this.lon+=this.mouseX*this.lookSpeed*a);this.lookVertical&&(this.lat-=this.mouseY*this.lookSpeed*a);this.lon=Math.max(0,Math.min(360,this.lon));this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*k;this.theta=this.lon*k;a=this.phi%h;this.phi=a>=0?a:a+h;c=this.verticalAngleMap.srcRange; a=this.verticalAngleMap.dstRange;c=THREE.Math.mapLinear(this.phi,c[0],c[1],a[0],a[1]);var e=a[1]-a[0];this.phi=b((c-a[0])/e)*e+a[0];c=this.horizontalAngleMap.srcRange;a=this.horizontalAngleMap.dstRange;c=THREE.Math.mapLinear(this.theta,c[0],c[1],a[0],a[1]);e=a[1]-a[0];this.theta=b((c-a[0])/e)*e+a[0];a=this.target.position;a.x=100*Math.sin(this.phi)*Math.cos(this.theta);a.y=100*Math.cos(this.phi);a.z=100*Math.sin(this.phi)*Math.sin(this.theta);this.object.lookAt(this.target.position)};this.onMouseMove= function(a){this.domElement===document?(this.mouseX=a.pageX-this.viewHalfX,this.mouseY=a.pageY-this.viewHalfY):(this.mouseX=a.pageX-this.domElement.offsetLeft-this.viewHalfX,this.mouseY=a.pageY-this.domElement.offsetTop-this.viewHalfY)};this.init=function(){this.spline=new THREE.Spline;this.spline.initFromArray(this.waypoints);this.useConstantSpeed&&this.spline.reparametrizeByArcLength(this.resamplingCoef);if(this.createDebugDummy){var a=new THREE.MeshLambertMaterial({color:30719}),b=new THREE.MeshLambertMaterial({color:65280}), -c=new THREE.CubeGeometry(10,10,20),f=new THREE.CubeGeometry(2,2,10);this.animationParent=new THREE.Mesh(c,a);a=new THREE.Mesh(f,b);a.position.set(0,10,0);this.animation=h(this.animationParent,this.spline,this.id,this.duration);this.animationParent.add(this.object);this.animationParent.add(this.target);this.animationParent.add(a)}else this.animation=h(this.animationParent,this.spline,this.id,this.duration),this.animationParent.add(this.target),this.animationParent.add(this.object);if(this.createDebugPath){var a= -this.debugPath,b=this.spline,c=k(b,10),f=k(b,10),l=new THREE.LineBasicMaterial({color:16711680,linewidth:3});lineObj=new THREE.Line(c,l);particleObj=new THREE.ParticleSystem(f,new THREE.ParticleBasicMaterial({color:16755200,size:3}));lineObj.scale.set(1,1,1);a.add(lineObj);particleObj.scale.set(1,1,1);a.add(particleObj);f=new THREE.SphereGeometry(1,16,8);l=new THREE.MeshBasicMaterial({color:65280});for(i=0;i0){var b=this.getContainerDimensions(),c=b.size[0]/2,f=b.size[1]/2;this.moveState.yawLeft=-(a.pageX-b.offset[0]-c)/c;this.moveState.pitchDown=(a.pageY-b.offset[1]-f)/f;this.updateRotationVector()}};this.mouseup=function(a){a.preventDefault();a.stopPropagation();if(this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else switch(a.button){case 0:this.moveForward= +!0;break;case 2:this.object.moveBackward=!0}};this.mousemove=function(a){if(!this.dragToLook||this.mouseStatus>0){var b=this.getContainerDimensions(),c=b.size[0]/2,h=b.size[1]/2;this.moveState.yawLeft=-(a.pageX-b.offset[0]-c)/c;this.moveState.pitchDown=(a.pageY-b.offset[1]-h)/h;this.updateRotationVector()}};this.mouseup=function(a){a.preventDefault();a.stopPropagation();if(this.dragToLook)this.mouseStatus--,this.moveState.yawLeft=this.moveState.pitchDown=0;else switch(a.button){case 0:this.moveForward= !1;break;case 2:this.moveBackward=!1}this.updateRotationVector()};this.update=function(a){var b=a*this.movementSpeed;a*=this.rollSpeed;this.object.translateX(this.moveVector.x*b);this.object.translateY(this.moveVector.y*b);this.object.translateZ(this.moveVector.z*b);this.tmpQuaternion.set(this.rotationVector.x*a,this.rotationVector.y*a,this.rotationVector.z*a,1).normalize();this.object.quaternion.multiplySelf(this.tmpQuaternion);this.object.matrix.setPosition(this.object.position);this.object.matrix.setRotationFromQuaternion(this.object.quaternion); this.object.matrixWorldNeedsUpdate=!0};this.updateMovementVector=function(){var a=this.moveState.forward||this.autoForward&&!this.moveState.back?1:0;this.moveVector.x=-this.moveState.left+this.moveState.right;this.moveVector.y=-this.moveState.down+this.moveState.up;this.moveVector.z=-a+this.moveState.back};this.updateRotationVector=function(){this.rotationVector.x=-this.moveState.pitchDown+this.moveState.pitchUp;this.rotationVector.y=-this.moveState.yawRight+this.moveState.yawLeft;this.rotationVector.z= -this.moveState.rollRight+this.moveState.rollLeft};this.getContainerDimensions=function(){return this.domElement!=document?{size:[this.domElement.offsetWidth,this.domElement.offsetHeight],offset:[this.domElement.offsetLeft,this.domElement.offsetTop]}:{size:[window.innerWidth,window.innerHeight],offset:[0,0]}};this.domElement.addEventListener("mousemove",b(this,this.mousemove),!1);this.domElement.addEventListener("mousedown",b(this,this.mousedown),!1);this.domElement.addEventListener("mouseup",b(this, this.mouseup),!1);this.domElement.addEventListener("keydown",b(this,this.keydown),!1);this.domElement.addEventListener("keyup",b(this,this.keyup),!1);this.updateMovementVector();this.updateRotationVector()}; -THREE.RollControls=function(a,c){this.object=a;this.domElement=c!==void 0?c:document;this.mouseLook=!0;this.autoForward=!1;this.rollSpeed=this.movementSpeed=this.lookSpeed=1;this.constrainVertical=[-0.9,0.9];this.object.matrixAutoUpdate=!1;this.forward=new THREE.Vector3(0,0,1);this.roll=0;var b=new THREE.Vector3,e=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Matrix4,f=!1,l=1,n=0,t=0,p=0,v=0,x=0,u=window.innerWidth/2,y=window.innerHeight/2;this.update=function(a){if(this.mouseLook){var c=a*this.lookSpeed; -this.rotateHorizontally(c*v);this.rotateVertically(c*x)}c=a*this.movementSpeed;this.object.translateZ(-c*(n>0||this.autoForward&&!(n<0)?1:n));this.object.translateX(c*t);this.object.translateY(c*p);f&&(this.roll+=this.rollSpeed*a*l);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y0||this.autoForward&&!(n<0)?1:n));this.object.translateX(c*t);this.object.translateY(c*p);h&&(this.roll+=this.rollSpeed*a*k);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y1?e.normalize():e.z=Math.sqrt(1-k*k);f.copy(b.object.position).subSelf(b.target);k=b.object.up.clone().setLength(e.y);k.addSelf(b.object.up.clone().crossSelf(f).setLength(e.x));k.addSelf(f.setLength(e.z));return k};this.rotateCamera=function(){var a=Math.acos(l.dot(n)/l.length()/n.length());if(a){var c=(new THREE.Vector3).cross(l,n).normalize(),e=new THREE.Quaternion;a*=b.rotateSpeed;e.setFromAxisAngle(c,-a);e.multiplyVector3(f); -e.multiplyVector3(b.object.up);e.multiplyVector3(n);b.staticMoving?l=n:(e.setFromAxisAngle(c,a*(b.dynamicDampingFactor-1)),e.multiplyVector3(l))}};this.zoomCamera=function(){var a=1+(p.y-t.y)*b.zoomSpeed;a!==1&&a>0&&(f.multiplyScalar(a),b.staticMoving?t=p:t.y+=(p.y-t.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=x.clone().subSelf(v);if(a.lengthSq()){a.multiplyScalar(f.length()*b.panSpeed);var c=f.clone().crossSelf(b.object.up).setLength(a.x);c.addSelf(b.object.up.clone().setLength(a.y)); -b.object.position.addSelf(c);b.target.addSelf(c);b.staticMoving?v=x:v.addSelf(a.sub(x,v).multiplyScalar(b.dynamicDampingFactor))}};this.checkDistances=function(){if(!b.noZoom||!b.noPan)b.object.position.lengthSq()>b.maxDistance*b.maxDistance&&b.object.position.setLength(b.maxDistance),f.lengthSq()0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(l=0;l0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(l=0;la&&(a+=Math.PI*2),anglec=(b+a)/2,new THREE.Vector2(-Math.cos(anglec),-Math.sin(anglec));return e.multiplyScalar(h).addSelf(l).subSelf(a).clone()}function h(a){for(N=a.length;--N>=0;){da=N;$=N-1;$<0&&($=a.length- -1);for(var b=0,c=u+p*2,b=0;b=0;W--){Z=W/p;U=n*(1-Z);Z=t*Math.sin(Z*Math.PI/2);N=0;for(H=E.length;N1?e.normalize():e.z=Math.sqrt(1-f*f);h.copy(b.object.position).subSelf(b.target);f=b.object.up.clone().setLength(e.y);f.addSelf(b.object.up.clone().crossSelf(h).setLength(e.x));f.addSelf(h.setLength(e.z));return f};this.rotateCamera=function(){var a=Math.acos(k.dot(n)/k.length()/n.length());if(a){var c=(new THREE.Vector3).cross(k,n).normalize(),e=new THREE.Quaternion;a*=b.rotateSpeed;e.setFromAxisAngle(c,-a);e.multiplyVector3(h); +e.multiplyVector3(b.object.up);e.multiplyVector3(n);b.staticMoving?k=n:(e.setFromAxisAngle(c,a*(b.dynamicDampingFactor-1)),e.multiplyVector3(k))}};this.zoomCamera=function(){var a=1+(p.y-t.y)*b.zoomSpeed;a!==1&&a>0&&(h.multiplyScalar(a),b.staticMoving?t=p:t.y+=(p.y-t.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=x.clone().subSelf(v);if(a.lengthSq()){a.multiplyScalar(h.length()*b.panSpeed);var c=h.clone().crossSelf(b.object.up).setLength(a.x);c.addSelf(b.object.up.clone().setLength(a.y)); +b.object.position.addSelf(c);b.target.addSelf(c);b.staticMoving?v=x:v.addSelf(a.sub(x,v).multiplyScalar(b.dynamicDampingFactor))}};this.checkDistances=function(){if(!b.noZoom||!b.noPan)b.object.position.lengthSq()>b.maxDistance*b.maxDistance&&b.object.position.setLength(b.maxDistance),h.lengthSq()0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,h,0)));for(k=0;k0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-h,0)));for(k=0;ka&&(a+=Math.PI*2),anglec=(b+a)/2,new THREE.Vector2(-Math.cos(anglec),-Math.sin(anglec));return e.multiplyScalar(l).addSelf(k).subSelf(a).clone()}function l(a){for(M=a.length;--M>=0;){ea=M;aa=M-1;aa<0&&(aa=a.length- +1);for(var b=0,c=u+p*2,b=0;b=0;Z--){$=Z/p;U=n*(1-$);$=t*Math.sin($*Math.PI/2);M=0;for(G=D.length;M0||(p=this.vertices.push(new THREE.Vertex(new THREE.Vector3(v,l,x)))-1);t.push(p)}c.push(t)}for(var u,y,w,h=c.length,b=0;b0)for(e=0;e1&&(u= -this.vertices[f].position.clone(),y=this.vertices[n].position.clone(),w=this.vertices[t].position.clone(),u.normalize(),y.normalize(),w.normalize(),this.faces.push(new THREE.Face3(f,n,t,[new THREE.Vector3(u.x,u.y,u.z),new THREE.Vector3(y.x,y.y,y.z),new THREE.Vector3(w.x,w.y,w.z)])),this.faceVertexUvs[0].push([p,v,B]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};THREE.SphereGeometry.prototype=new THREE.Geometry; +THREE.SphereGeometry=function(a,c,b){THREE.Geometry.call(this);for(var a=a||50,e,l=Math.PI,f=Math.max(3,c||8),h=Math.max(2,b||6),c=[],b=0;b0||(p=this.vertices.push(new THREE.Vertex(new THREE.Vector3(v,k,x)))-1);t.push(p)}c.push(t)}for(var u,y,w,l=c.length,b=0;b0)for(e=0;e1&&(u= +this.vertices[h].position.clone(),y=this.vertices[n].position.clone(),w=this.vertices[t].position.clone(),u.normalize(),y.normalize(),w.normalize(),this.faces.push(new THREE.Face3(h,n,t,[new THREE.Vector3(u.x,u.y,u.z),new THREE.Vector3(y.x,y.y,y.z),new THREE.Vector3(w.x,w.y,w.z)])),this.faceVertexUvs[0].push([p,v,A]))}this.computeCentroids();this.computeFaceNormals();this.computeVertexNormals();this.boundingSphere={radius:a}};THREE.SphereGeometry.prototype=new THREE.Geometry; THREE.SphereGeometry.prototype.constructor=THREE.SphereGeometry; THREE.TextGeometry=function(a,c){var b=(new THREE.TextPath(a,c)).toShapes();c.amount=c.height!==void 0?c.height:50;if(c.bevelThickness===void 0)c.bevelThickness=10;if(c.bevelSize===void 0)c.bevelSize=8;if(c.bevelEnabled===void 0)c.bevelEnabled=!1;if(c.bend){var e=b[b.length-1].getBoundingBox().maxX;c.bendPath=new THREE.QuadraticBezierCurve(new THREE.Vector2(0,0),new THREE.Vector2(e/2,120),new THREE.Vector2(e,0))}THREE.ExtrudeGeometry.call(this,b,c)};THREE.TextGeometry.prototype=new THREE.ExtrudeGeometry; THREE.TextGeometry.prototype.constructor=THREE.TextGeometry; THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size:150,divisions:10,getFace:function(){return this.faces[this.face][this.weight][this.style]},getTextShapes:function(a,c){return(new TextPath(a,c)).toShapes()},loadFace:function(a){var c=a.familyName.toLowerCase();this.faces[c]=this.faces[c]||{};this.faces[c][a.cssFontWeight]=this.faces[c][a.cssFontWeight]||{};this.faces[c][a.cssFontWeight][a.cssFontStyle]=a;return this.faces[c][a.cssFontWeight][a.cssFontStyle]=a},drawText:function(a){for(var c= -this.getFace(),b=this.size/c.resolution,e=0,h=String(a).split(""),k=h.length,f=[],a=0;a0)for(t=0;t2;){if(v--<=0){console.log("Warning, unable to triangulate polygon!");if(e)return l;return k}n=t;h<=n&&(n=0);t=n+1;h<=t&&(t=0);p=t+1;h<=p&&(p=0);var x;a:{x=a;var u=n,y=t,w=p,B=h,A=f,E=void 0,z=void 0,D=void 0, -M=void 0,I=void 0,C=void 0,P=void 0,K=void 0,O=void 0,z=x[A[u]].x,D=x[A[u]].y,M=x[A[y]].x,I=x[A[y]].y,C=x[A[w]].x,P=x[A[w]].y;if(1.0E-10>(M-z)*(P-D)-(I-D)*(C-z))x=!1;else{for(E=0;E=0&&W>=0&&U>=0){x=!1;break a}}x= -!0}}if(x){k.push([a[f[n]],a[f[t]],a[f[p]]]);l.push([f[n],f[t],f[p]]);n=t;for(p=t+1;p0)for(t=0;t2;){if(v--<=0){console.log("Warning, unable to triangulate polygon!");if(e)return k;return f}n=t;l<=n&&(n=0);t=n+1;l<=t&&(t=0);p=t+1;l<=p&&(p=0);var x;a:{x=a;var u=n,y=t,w=p,A=l,B=h,D=void 0,z=void 0,C=void 0, +L=void 0,H=void 0,I=void 0,R=void 0,K=void 0,N=void 0,z=x[B[u]].x,C=x[B[u]].y,L=x[B[y]].x,H=x[B[y]].y,I=x[B[w]].x,R=x[B[w]].y;if(1.0E-10>(L-z)*(R-C)-(H-C)*(I-z))x=!1;else{for(D=0;D=0&&Z>=0&&U>=0){x=!1;break a}}x= +!0}}if(x){f.push([a[h[n]],a[h[t]],a[h[p]]]);k.push([h[n],h[t],h[p]]);n=t;for(p=t+1;p0;)this.smooth(a)}; -THREE.SubdivisionModifier.prototype.smooth=function(a){function c(a,b,c,e,l,n){var p=new THREE.Face4(a,b,c,e,null,l.color,l.material);if(f.useOldVertexColors){p.vertexColors=[];for(var t,u,v,w=0;w<4;w++){v=n[w];t=new THREE.Color;t.setRGB(0,0,0);for(var y=0;y>7)-127;e|=(k&127)<<16|f<<8;if(e==0&&l==-127)return 0;return(1-2*(h>>7))*(1+e*Math.pow(2,-23))*Math.pow(2,l)}function h(a,b){var c=p(a,b),e=p(a,b+1),f=p(a,b+2);return(p(a,b+3)<<24)+(f<<16)+(e<<8)+c}function n(a,b){var c=p(a,b);return(p(a,b+1)<<8)+c}function t(a,b){var c=p(a,b);return c>127?c-256:c}function p(a,b){return a.charCodeAt(b)&255}function v(b){var c, -e,f;c=h(a,b);e=h(a,b+I);f=h(a,b+C);b=n(a,b+P);A.faces.push(new THREE.Face3(c,e,f,null,null,b))}function x(b){var c,e,f,k,o,p,t;c=h(a,b);e=h(a,b+I);f=h(a,b+C);k=n(a,b+P);o=h(a,b+K);p=h(a,b+O);t=h(a,b+N);var b=D[p*3],u=D[p*3+1];p=D[p*3+2];var v=D[t*3],w=D[t*3+1];t=D[t*3+2];A.faces.push(new THREE.Face3(c,e,f,[new THREE.Vector3(D[o*3],D[o*3+1],D[o*3+2]),new THREE.Vector3(b,u,p),new THREE.Vector3(v,w,t)],null,k))}function u(b){var c,e,f,k;c=h(a,b);e=h(a,b+H);f=h(a,b+W);k=h(a,b+Z);b=n(a,b+U);A.faces.push(new THREE.Face4(c, -e,f,k,null,null,b))}function y(b){var c,e,f,k,p,t,u,v,w;c=h(a,b);e=h(a,b+H);f=h(a,b+W);k=h(a,b+Z);p=n(a,b+U);t=h(a,b+o);u=h(a,b+ca);v=h(a,b+X);w=h(a,b+oa);var b=D[u*3],x=D[u*3+1];u=D[u*3+2];var G=D[v*3],T=D[v*3+1];v=D[v*3+2];var y=D[w*3],z=D[w*3+1];w=D[w*3+2];A.faces.push(new THREE.Face4(c,e,f,k,[new THREE.Vector3(D[t*3],D[t*3+1],D[t*3+2]),new THREE.Vector3(b,x,u),new THREE.Vector3(G,T,v),new THREE.Vector3(y,z,w)],null,p))}function w(b){var c,e,f,k;c=h(a,b);e=h(a,b+L);f=h(a,b+Q);b=M[c*2];k=M[c*2+ -1];c=M[e*2];var n=A.faceVertexUvs[0];e=M[e*2+1];var o=M[f*2];f=M[f*2+1];var p=[];p.push(new THREE.UV(b,k));p.push(new THREE.UV(c,e));p.push(new THREE.UV(o,f));n.push(p)}function B(b){var c,e,f,k,n,o;c=h(a,b);e=h(a,b+ia);f=h(a,b+da);k=h(a,b+$);b=M[c*2];n=M[c*2+1];c=M[e*2];o=M[e*2+1];e=M[f*2];var p=A.faceVertexUvs[0];f=M[f*2+1];var t=M[k*2];k=M[k*2+1];var u=[];u.push(new THREE.UV(b,n));u.push(new THREE.UV(c,o));u.push(new THREE.UV(e,f));u.push(new THREE.UV(t,k));p.push(u)}var A=this,E=0,z,D=[],M=[], -I,C,P,K,O,N,H,W,Z,U,o,ca,X,oa,L,Q,ia,da,$,ma,fa,aa,ka,ea,ja;THREE.Geometry.call(this);THREE.Loader.prototype.initMaterials(A,e,b);z={signature:a.substr(E,8),header_bytes:p(a,E+8),vertex_coordinate_bytes:p(a,E+9),normal_coordinate_bytes:p(a,E+10),uv_coordinate_bytes:p(a,E+11),vertex_index_bytes:p(a,E+12),normal_index_bytes:p(a,E+13),uv_index_bytes:p(a,E+14),material_index_bytes:p(a,E+15),nvertices:h(a,E+16),nnormals:h(a,E+16+4),nuvs:h(a,E+16+8),ntri_flat:h(a,E+16+12),ntri_smooth:h(a,E+16+16),ntri_flat_uv:h(a, -E+16+20),ntri_smooth_uv:h(a,E+16+24),nquad_flat:h(a,E+16+28),nquad_smooth:h(a,E+16+32),nquad_flat_uv:h(a,E+16+36),nquad_smooth_uv:h(a,E+16+40)};E+=z.header_bytes;I=z.vertex_index_bytes;C=z.vertex_index_bytes*2;P=z.vertex_index_bytes*3;K=z.vertex_index_bytes*3+z.material_index_bytes;O=z.vertex_index_bytes*3+z.material_index_bytes+z.normal_index_bytes;N=z.vertex_index_bytes*3+z.material_index_bytes+z.normal_index_bytes*2;H=z.vertex_index_bytes;W=z.vertex_index_bytes*2;Z=z.vertex_index_bytes*3;U=z.vertex_index_bytes* -4;o=z.vertex_index_bytes*4+z.material_index_bytes;ca=z.vertex_index_bytes*4+z.material_index_bytes+z.normal_index_bytes;X=z.vertex_index_bytes*4+z.material_index_bytes+z.normal_index_bytes*2;oa=z.vertex_index_bytes*4+z.material_index_bytes+z.normal_index_bytes*3;L=z.uv_index_bytes;Q=z.uv_index_bytes*2;ia=z.uv_index_bytes;da=z.uv_index_bytes*2;$=z.uv_index_bytes*3;b=z.vertex_index_bytes*3+z.material_index_bytes;ja=z.vertex_index_bytes*4+z.material_index_bytes;ma=z.ntri_flat*b;fa=z.ntri_smooth*(b+z.normal_index_bytes* -3);aa=z.ntri_flat_uv*(b+z.uv_index_bytes*3);ka=z.ntri_smooth_uv*(b+z.normal_index_bytes*3+z.uv_index_bytes*3);ea=z.nquad_flat*ja;b=z.nquad_smooth*(ja+z.normal_index_bytes*4);ja=z.nquad_flat_uv*(ja+z.uv_index_bytes*4);E+=function(b){for(var e,k,h,l=z.vertex_coordinate_bytes*3,n=b+z.nvertices*l;b=0){x=n.invBindMatrices[u];o.invBindMatrix=x;o.skinningMatrix=new THREE.Matrix4;o.skinningMatrix.multiply(o.world,x);o.weights=[];for(x=0;x1){n=new THREE.MeshFaceMaterial;for(j=0;j1?b.add(n):b=n}}b.name=a.id||"";a.matrix.decompose(b.position,b.rotation, -b.scale);for(f=0;f1?c[1].substr(0,b):"0";c[1].length=0,h=f.indexOf("(")>=0,l;if(k)e=f.split("."), -f=e.shift(),e.shift();else if(h){l=f.split("(");f=l.shift();for(e=0;e>7)-127;e|=(h&127)<<16|f<<8;if(e==0&&l==-127)return 0;return(1-2*(k>>7))*(1+e*Math.pow(2,-23))*Math.pow(2,l)}function k(a,b){var c=p(a,b),e=p(a,b+1),f=p(a,b+2);return(p(a,b+3)<<24)+(f<<16)+(e<<8)+c}function l(a,b){var c=p(a,b);return(p(a,b+1)<<8)+c}function t(a,b){var c=p(a,b);return c>127?c-256:c}function p(a,b){return a.charCodeAt(b)&255}function v(b){var c, +e,f;c=k(a,b);e=k(a,b+H);f=k(a,b+I);b=l(a,b+R);B.faces.push(new THREE.Face3(c,e,f,null,null,b))}function x(b){var c,e,f,h,o,p,t;c=k(a,b);e=k(a,b+H);f=k(a,b+I);h=l(a,b+R);o=k(a,b+K);p=k(a,b+N);t=k(a,b+M);var b=C[p*3],u=C[p*3+1];p=C[p*3+2];var v=C[t*3],w=C[t*3+1];t=C[t*3+2];B.faces.push(new THREE.Face3(c,e,f,[new THREE.Vector3(C[o*3],C[o*3+1],C[o*3+2]),new THREE.Vector3(b,u,p),new THREE.Vector3(v,w,t)],null,h))}function u(b){var c,e,f,h;c=k(a,b);e=k(a,b+G);f=k(a,b+Z);h=k(a,b+$);b=l(a,b+U);B.faces.push(new THREE.Face4(c, +e,f,h,null,null,b))}function y(b){var c,e,f,h,p,t,u,v,w;c=k(a,b);e=k(a,b+G);f=k(a,b+Z);h=k(a,b+$);p=l(a,b+U);t=k(a,b+o);u=k(a,b+da);v=k(a,b+Y);w=k(a,b+pa);var b=C[u*3],x=C[u*3+1];u=C[u*3+2];var E=C[v*3],y=C[v*3+1];v=C[v*3+2];var ia=C[w*3],z=C[w*3+1];w=C[w*3+2];B.faces.push(new THREE.Face4(c,e,f,h,[new THREE.Vector3(C[t*3],C[t*3+1],C[t*3+2]),new THREE.Vector3(b,x,u),new THREE.Vector3(E,y,v),new THREE.Vector3(ia,z,w)],null,p))}function w(b){var c,e,f,h;c=k(a,b);e=k(a,b+P);f=k(a,b+T);b=L[c*2];h=L[c* +2+1];c=L[e*2];var l=B.faceVertexUvs[0];e=L[e*2+1];var n=L[f*2];f=L[f*2+1];var o=[];o.push(new THREE.UV(b,h));o.push(new THREE.UV(c,e));o.push(new THREE.UV(n,f));l.push(o)}function A(b){var c,e,f,h,l,n;c=k(a,b);e=k(a,b+ja);f=k(a,b+ea);h=k(a,b+aa);b=L[c*2];l=L[c*2+1];c=L[e*2];n=L[e*2+1];e=L[f*2];var o=B.faceVertexUvs[0];f=L[f*2+1];var p=L[h*2];h=L[h*2+1];var t=[];t.push(new THREE.UV(b,l));t.push(new THREE.UV(c,n));t.push(new THREE.UV(e,f));t.push(new THREE.UV(p,h));o.push(t)}var B=this,D=0,z,C=[],L= +[],H,I,R,K,N,M,G,Z,$,U,o,da,Y,pa,P,T,ja,ea,aa,na,ga,ca,la,fa,ka;THREE.Geometry.call(this);THREE.Loader.prototype.initMaterials(B,e,b);z={signature:a.substr(D,8),header_bytes:p(a,D+8),vertex_coordinate_bytes:p(a,D+9),normal_coordinate_bytes:p(a,D+10),uv_coordinate_bytes:p(a,D+11),vertex_index_bytes:p(a,D+12),normal_index_bytes:p(a,D+13),uv_index_bytes:p(a,D+14),material_index_bytes:p(a,D+15),nvertices:k(a,D+16),nnormals:k(a,D+16+4),nuvs:k(a,D+16+8),ntri_flat:k(a,D+16+12),ntri_smooth:k(a,D+16+16),ntri_flat_uv:k(a, +D+16+20),ntri_smooth_uv:k(a,D+16+24),nquad_flat:k(a,D+16+28),nquad_smooth:k(a,D+16+32),nquad_flat_uv:k(a,D+16+36),nquad_smooth_uv:k(a,D+16+40)};D+=z.header_bytes;H=z.vertex_index_bytes;I=z.vertex_index_bytes*2;R=z.vertex_index_bytes*3;K=z.vertex_index_bytes*3+z.material_index_bytes;N=z.vertex_index_bytes*3+z.material_index_bytes+z.normal_index_bytes;M=z.vertex_index_bytes*3+z.material_index_bytes+z.normal_index_bytes*2;G=z.vertex_index_bytes;Z=z.vertex_index_bytes*2;$=z.vertex_index_bytes*3;U=z.vertex_index_bytes* +4;o=z.vertex_index_bytes*4+z.material_index_bytes;da=z.vertex_index_bytes*4+z.material_index_bytes+z.normal_index_bytes;Y=z.vertex_index_bytes*4+z.material_index_bytes+z.normal_index_bytes*2;pa=z.vertex_index_bytes*4+z.material_index_bytes+z.normal_index_bytes*3;P=z.uv_index_bytes;T=z.uv_index_bytes*2;ja=z.uv_index_bytes;ea=z.uv_index_bytes*2;aa=z.uv_index_bytes*3;b=z.vertex_index_bytes*3+z.material_index_bytes;ka=z.vertex_index_bytes*4+z.material_index_bytes;na=z.ntri_flat*b;ga=z.ntri_smooth*(b+ +z.normal_index_bytes*3);ca=z.ntri_flat_uv*(b+z.uv_index_bytes*3);la=z.ntri_smooth_uv*(b+z.normal_index_bytes*3+z.uv_index_bytes*3);fa=z.nquad_flat*ka;b=z.nquad_smooth*(ka+z.normal_index_bytes*4);ka=z.nquad_flat_uv*(ka+z.uv_index_bytes*4);D+=function(b){for(var e,f,l,k=z.vertex_coordinate_bytes*3,n=b+z.nvertices*k;b=0){x=n.invBindMatrices[u];o.invBindMatrix=x;o.skinningMatrix=new THREE.Matrix4;o.skinningMatrix.multiply(o.world,x);o.weights=[];for(x=0;x1){n=new THREE.MeshFaceMaterial;for(j=0;j1?b.add(n):b=n}}b.name=a.id||"";a.matrix.decompose(b.position,b.rotation, +b.scale);for(h=0;h1?c[1].substr(0,b):"0";c[1].length=0,k=f.indexOf("(")>=0,l;if(h)e=f.split("."), +f=e.shift(),e.shift();else if(k){l=f.split("(");f=l.shift();for(e=0;eb){p=o.output[n];break}h=p!==void 0?p instanceof THREE.Matrix4?h.multiply(h,p):h.multiply(h,l.matrix):h.multiply(h,l.matrix)}else h=h.multiply(h,l.matrix);b=h;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};v.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;ab){p=o.output[n];break}k=p!==void 0?p instanceof THREE.Matrix4?k.multiply(k,p):k.multiply(k,l.matrix):k.multiply(k,l.matrix)}else k=k.multiply(k,l.matrix);b=k;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};v.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a0&&(this[c.nodeName]=parseFloat(e[0].textContent))}}this.create();return this};O.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var e=this[c];if(e instanceof K)if(e.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(e=ga[this.effect.surface.init_from]))a.map= -THREE.ImageUtils.loadTexture(Da+e.init_from),a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}else c=="diffuse"?a.color=e.color.getHex():b||(a[c]=e.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=Ca;return this.material=new THREE.MeshLambertMaterial(a)};N.prototype.parse=function(a){for(var b=0;b=0,e=a.indexOf("(")>=0,f,k;if(c)b=a.split("."),a=b.shift(),k=b.shift();else if(e){f=a.split("(");a=f.shift();for(b=0;b0&&(this[c.nodeName]=parseFloat(e[0].textContent))}}this.create();return this};N.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var e=this[c];if(e instanceof K)if(e.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(e=ha[this.effect.surface.init_from]))a.map= +THREE.ImageUtils.loadTexture(Da+e.init_from),a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}else c=="diffuse"?a.color=e.color.getHex():b||(a[c]=e.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=Ca;return this.material=new THREE.MeshLambertMaterial(a)};M.prototype.parse=function(a){for(var b=0;b=0,e=a.indexOf("(")>=0,f,h;if(c)b=a.split("."),a=b.shift(),h=b.shift();else if(e){f=a.split("(");a=f.shift();for(b=0;b1&&(O=new THREE.MeshFaceMaterial);object=new THREE.Mesh(I,O);object.name=u;object.position.set(z[0],z[1],z[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=E.visible;X.scene.add(object);X.objects[u]=object;E.meshCollider&&(a=THREE.CollisionUtils.MeshColliderWBox(object),X.scene.collisions.colliders.push(a));if(E.castsShadow)a= -new THREE.ShadowVolume(I),X.scene.add(a),a.position=object.position,a.rotation=object.rotation,a.scale=object.scale;E.trigger&&E.trigger.toLowerCase()!="none"&&(a={type:E.trigger,object:E},X.triggers[object.name]=a)}}else z=E.position,r=E.rotation,q=E.quaternion,s=E.scale,q=0,object=new THREE.Object3D,object.name=u,object.position.set(z[0],z[1],z[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0],s[1],s[2]),object.visible= -E.visible!==void 0?E.visible:!1,X.scene.add(object),X.objects[u]=object,X.empties[u]=object,E.trigger&&E.trigger.toLowerCase()!="none"&&(a={type:E.trigger,object:E},X.triggers[object.name]=a)}function n(a){return function(c){X.geometries[a]=c;l();Z-=1;b.onLoadComplete();p()}}function t(a){return function(b){X.geometries[a]=b}}function p(){b.callbackProgress({totalModels:o,totalTextures:ca,loadedModels:o-Z,loadedTextures:ca-U},X);b.onLoadProgress();Z==0&&U==0&&c(X)}var v,x,u,y,w,B,A,E,z,D,M,I,C,P, -K,O,N,H,W,Z,U,o,ca,X;H=a.data;K=new THREE.BinaryLoader;W=new THREE.JSONLoader;U=Z=0;X={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};a=!1;for(u in H.objects)if(E=H.objects[u],E.meshCollider){a=!0;break}if(a)X.scene.collisions=new THREE.CollisionSystem;if(H.transform){a=H.transform.position;D=H.transform.rotation;var oa=H.transform.scale;a&&X.scene.position.set(a[0],a[1],a[2]);D&&X.scene.rotation.set(D[0],D[1],D[2]);oa&& -X.scene.scale.set(oa[0],oa[1],oa[2]);(a||D||oa)&&X.scene.updateMatrix()}a=function(){U-=1;p();b.onLoadComplete()};for(w in H.cameras)D=H.cameras[w],D.type=="perspective"?C=new THREE.PerspectiveCamera(D.fov,D.aspect,D.near,D.far):D.type=="ortho"&&(C=new THREE.OrthographicCamera(D.left,D.right,D.top,D.bottom,D.near,D.far)),z=D.position,D=D.target,C.position.set(z[0],z[1],z[2]),C.target=new THREE.Vector3(D[0],D[1],D[2]),X.cameras[w]=C;for(y in H.lights)w=H.lights[y],C=w.color!==void 0?w.color:16777215, -D=w.intensity!==void 0?w.intensity:1,w.type=="directional"?(z=w.direction,N=new THREE.DirectionalLight(C,D),N.position.set(z[0],z[1],z[2]),N.position.normalize()):w.type=="point"?(z=w.position,d=w.distance,N=new THREE.PointLight(C,D,d),N.position.set(z[0],z[1],z[2])):w.type=="ambient"&&(N=new THREE.AmbientLight(C)),X.scene.add(N),X.lights[y]=N;for(B in H.fogs)y=H.fogs[B],y.type=="linear"?P=new THREE.Fog(0,y.near,y.far):y.type=="exp2"&&(P=new THREE.FogExp2(0,y.density)),D=y.color,P.color.setRGB(D[0], -D[1],D[2]),X.fogs[B]=P;if(X.cameras&&H.defaults.camera)X.currentCamera=X.cameras[H.defaults.camera];if(X.fogs&&H.defaults.fog)X.scene.fog=X.fogs[H.defaults.fog];D=H.defaults.bgcolor;X.bgColor=new THREE.Color;X.bgColor.setRGB(D[0],D[1],D[2]);X.bgColorAlpha=H.defaults.bgalpha;for(v in H.geometries)if(B=H.geometries[v],B.type=="bin_mesh"||B.type=="ascii_mesh")Z+=1,b.onLoadStart();o=Z;for(v in H.geometries)B=H.geometries[v],B.type=="cube"?(I=new THREE.CubeGeometry(B.width,B.height,B.depth,B.segmentsWidth, -B.segmentsHeight,B.segmentsDepth,null,B.flipped,B.sides),X.geometries[v]=I):B.type=="plane"?(I=new THREE.PlaneGeometry(B.width,B.height,B.segmentsWidth,B.segmentsHeight),X.geometries[v]=I):B.type=="sphere"?(I=new THREE.SphereGeometry(B.radius,B.segmentsWidth,B.segmentsHeight),X.geometries[v]=I):B.type=="cylinder"?(I=new THREE.CylinderGeometry(B.topRad,B.botRad,B.height,B.radSegs,B.heightSegs),X.geometries[v]=I):B.type=="torus"?(I=new THREE.TorusGeometry(B.radius,B.tube,B.segmentsR,B.segmentsT),X.geometries[v]= -I):B.type=="icosahedron"?(I=new THREE.IcosahedronGeometry(B.subdivisions),X.geometries[v]=I):B.type=="bin_mesh"?K.load(e(B.url,H.urlBaseType),n(v)):B.type=="ascii_mesh"?W.load(e(B.url,H.urlBaseType),n(v)):B.type=="embedded_mesh"&&(B=H.embeds[B.id])&&W.createModel(B,t(v),"");for(A in H.textures)if(v=H.textures[A],v.url instanceof Array){U+=v.url.length;for(K=0;K1&&(N=new THREE.MeshFaceMaterial);object=new THREE.Mesh(H,N);object.name=u;object.position.set(z[0],z[1],z[2]);q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]);object.scale.set(s[0],s[1],s[2]);object.visible=D.visible;Y.scene.add(object);Y.objects[u]=object;D.meshCollider&&(a=THREE.CollisionUtils.MeshColliderWBox(object),Y.scene.collisions.colliders.push(a));if(D.castsShadow)a= +new THREE.ShadowVolume(H),Y.scene.add(a),a.position=object.position,a.rotation=object.rotation,a.scale=object.scale;D.trigger&&D.trigger.toLowerCase()!="none"&&(a={type:D.trigger,object:D},Y.triggers[object.name]=a)}}else z=D.position,r=D.rotation,q=D.quaternion,s=D.scale,q=0,object=new THREE.Object3D,object.name=u,object.position.set(z[0],z[1],z[2]),q?(object.quaternion.set(q[0],q[1],q[2],q[3]),object.useQuaternion=!0):object.rotation.set(r[0],r[1],r[2]),object.scale.set(s[0],s[1],s[2]),object.visible= +D.visible!==void 0?D.visible:!1,Y.scene.add(object),Y.objects[u]=object,Y.empties[u]=object,D.trigger&&D.trigger.toLowerCase()!="none"&&(a={type:D.trigger,object:D},Y.triggers[object.name]=a)}function n(a){return function(c){Y.geometries[a]=c;k();$-=1;b.onLoadComplete();p()}}function t(a){return function(b){Y.geometries[a]=b}}function p(){b.callbackProgress({totalModels:o,totalTextures:da,loadedModels:o-$,loadedTextures:da-U},Y);b.onLoadProgress();$==0&&U==0&&c(Y)}var v,x,u,y,w,A,B,D,z,C,L,H,I,R, +K,N,M,G,Z,$,U,o,da,Y;G=a.data;K=new THREE.BinaryLoader;Z=new THREE.JSONLoader;U=$=0;Y={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{},empties:{}};a=!1;for(u in G.objects)if(D=G.objects[u],D.meshCollider){a=!0;break}if(a)Y.scene.collisions=new THREE.CollisionSystem;if(G.transform){a=G.transform.position;C=G.transform.rotation;var pa=G.transform.scale;a&&Y.scene.position.set(a[0],a[1],a[2]);C&&Y.scene.rotation.set(C[0],C[1],C[2]);pa&& +Y.scene.scale.set(pa[0],pa[1],pa[2]);(a||C||pa)&&Y.scene.updateMatrix()}a=function(){U-=1;p();b.onLoadComplete()};for(w in G.cameras)C=G.cameras[w],C.type=="perspective"?I=new THREE.PerspectiveCamera(C.fov,C.aspect,C.near,C.far):C.type=="ortho"&&(I=new THREE.OrthographicCamera(C.left,C.right,C.top,C.bottom,C.near,C.far)),z=C.position,C=C.target,I.position.set(z[0],z[1],z[2]),I.target=new THREE.Vector3(C[0],C[1],C[2]),Y.cameras[w]=I;for(y in G.lights)w=G.lights[y],I=w.color!==void 0?w.color:16777215, +C=w.intensity!==void 0?w.intensity:1,w.type=="directional"?(z=w.direction,M=new THREE.DirectionalLight(I,C),M.position.set(z[0],z[1],z[2]),M.position.normalize()):w.type=="point"?(z=w.position,d=w.distance,M=new THREE.PointLight(I,C,d),M.position.set(z[0],z[1],z[2])):w.type=="ambient"&&(M=new THREE.AmbientLight(I)),Y.scene.add(M),Y.lights[y]=M;for(A in G.fogs)y=G.fogs[A],y.type=="linear"?R=new THREE.Fog(0,y.near,y.far):y.type=="exp2"&&(R=new THREE.FogExp2(0,y.density)),C=y.color,R.color.setRGB(C[0], +C[1],C[2]),Y.fogs[A]=R;if(Y.cameras&&G.defaults.camera)Y.currentCamera=Y.cameras[G.defaults.camera];if(Y.fogs&&G.defaults.fog)Y.scene.fog=Y.fogs[G.defaults.fog];C=G.defaults.bgcolor;Y.bgColor=new THREE.Color;Y.bgColor.setRGB(C[0],C[1],C[2]);Y.bgColorAlpha=G.defaults.bgalpha;for(v in G.geometries)if(A=G.geometries[v],A.type=="bin_mesh"||A.type=="ascii_mesh")$+=1,b.onLoadStart();o=$;for(v in G.geometries)A=G.geometries[v],A.type=="cube"?(H=new THREE.CubeGeometry(A.width,A.height,A.depth,A.segmentsWidth, +A.segmentsHeight,A.segmentsDepth,null,A.flipped,A.sides),Y.geometries[v]=H):A.type=="plane"?(H=new THREE.PlaneGeometry(A.width,A.height,A.segmentsWidth,A.segmentsHeight),Y.geometries[v]=H):A.type=="sphere"?(H=new THREE.SphereGeometry(A.radius,A.segmentsWidth,A.segmentsHeight),Y.geometries[v]=H):A.type=="cylinder"?(H=new THREE.CylinderGeometry(A.topRad,A.botRad,A.height,A.radSegs,A.heightSegs),Y.geometries[v]=H):A.type=="torus"?(H=new THREE.TorusGeometry(A.radius,A.tube,A.segmentsR,A.segmentsT),Y.geometries[v]= +H):A.type=="icosahedron"?(H=new THREE.IcosahedronGeometry(A.subdivisions),Y.geometries[v]=H):A.type=="bin_mesh"?K.load(e(A.url,G.urlBaseType),n(v)):A.type=="ascii_mesh"?Z.load(e(A.url,G.urlBaseType),n(v)):A.type=="embedded_mesh"&&(A=G.embeds[A.id])&&Z.createModel(A,t(v),"");for(B in G.textures)if(v=G.textures[B],v.url instanceof Array){U+=v.url.length;for(K=0;K=57344&&(c-=2048);c++;for(var b=new Float32Array(8*c),e=1,h=0;h<8;h++){for(var k=0,f=0;f>1^-(l&1);b[8*f+h]=k}e+=c}c=a.length-e;k=new Uint16Array(c);for(h=f=0;h=57344&&(c-=2048);c++;for(var b=new Float32Array(8*c),e=1,l=0;l<8;l++){for(var f=0,h=0;h>1^-(k&1);b[8*h+l]=f}e+=c}c=a.length-e;f=new Uint16Array(c);for(l=h=0;l=this.maxCount-3&&l(this)};this.begin= -function(){this.count=0;this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var c=this.count*3;cthis.size-1&&(n=this.size-1);var x=Math.floor(t-l);x<1&&(x=1);t=Math.floor(t+l);t>this.size-1&&(t=this.size-1);var u=Math.floor(p-l);u<1&&(u=1);l=Math.floor(p+l); -l>this.size-1&&(l=this.size-1);for(var y,w,B,A,E,z;v0&&(this.field[B+y]+=A)}}};this.addPlaneX=function(a,c){var h,k,f,l,n,t=this.size,p=this.yd,v=this.zd,x=this.field,u=t*Math.sqrt(a/c);u>t&&(u=t);for(h=0;h0)for(k=0;kp&&(y=p);for(k=0;k0){n=k*v;for(h=0;hsize&&(dist=size);for(f=0;f0){n=zd*f;for(k=0;k=this.maxCount-3&&k(this)};this.begin= +function(){this.count=0;this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var c=this.count*3;cthis.size-1&&(n=this.size-1);var x=Math.floor(t-k);x<1&&(x=1);t=Math.floor(t+k);t>this.size-1&&(t=this.size-1);var u=Math.floor(p-k);u<1&&(u=1);k=Math.floor(p+k); +k>this.size-1&&(k=this.size-1);for(var y,w,A,B,D,z;v0&&(this.field[A+y]+=B)}}};this.addPlaneX=function(a,c){var l,f,h,k,n,t=this.size,p=this.yd,v=this.zd,x=this.field,u=t*Math.sqrt(a/c);u>t&&(u=t);for(l=0;l0)for(f=0;fp&&(y=p);for(f=0;f0){n=f*v;for(l=0;lsize&&(dist=size);for(h=0;h0){n=zd*h;for(f=0;fk?this.hits.push(h):this.hits.unshift(h),k=e;return this.hits}; +THREE.CollisionSystem.prototype.rayCastAll=function(a){a.direction.normalize();this.hits.length=0;var c,b,e,l,f=0;c=0;for(b=this.colliders.length;cf?this.hits.push(l):this.hits.unshift(l),f=e;return this.hits}; THREE.CollisionSystem.prototype.rayCastNearest=function(a){var c=this.rayCastAll(a);if(c.length==0)return null;for(var b=0;c[b]instanceof THREE.MeshCollider;){var e=this.rayMesh(a,c[b]);if(e.distc.length)return null;return c[b]}; THREE.CollisionSystem.prototype.rayCast=function(a,c){if(c instanceof THREE.PlaneCollider)return this.rayPlane(a,c);else if(c instanceof THREE.SphereCollider)return this.raySphere(a,c);else if(c instanceof THREE.BoxCollider)return this.rayBox(a,c);else if(c instanceof THREE.MeshCollider&&c.box)return this.rayBox(a,c.box)}; -THREE.CollisionSystem.prototype.rayMesh=function(a,c){for(var b=this.makeRayLocal(a,c.mesh),e=Number.MAX_VALUE,h,k=0;k=l*h))return Number.MAX_VALUE;f/=l;l=THREE.CollisionSystem.__v3;l.copy(a.direction);l.multiplyScalar(f);l.addSelf(a.origin);Math.abs(k.x)> -Math.abs(k.y)?Math.abs(k.x)>Math.abs(k.z)?(a=l.y-c.y,k=b.y-c.y,h=e.y-c.y,l=l.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=l.x-c.x,k=b.x-c.x,h=e.x-c.x,l=l.y-c.y,b=b.y-c.y,e=e.y-c.y):Math.abs(k.y)>Math.abs(k.z)?(a=l.x-c.x,k=b.x-c.x,h=e.x-c.x,l=l.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=l.x-c.x,k=b.x-c.x,h=e.x-c.x,l=l.y-c.y,b=b.y-c.y,e=e.y-c.y);c=k*e-b*h;if(c==0)return Number.MAX_VALUE;c=1/c;e=(a*e-l*h)*c;if(!(e>=0))return Number.MAX_VALUE;c*=k*l-b*a;if(!(c>=0))return Number.MAX_VALUE;if(!(1-e-c>=0))return Number.MAX_VALUE;return f}; +THREE.CollisionSystem.prototype.rayMesh=function(a,c){for(var b=this.makeRayLocal(a,c.mesh),e=Number.MAX_VALUE,l,f=0;f=k*l))return Number.MAX_VALUE;h/=k;k=THREE.CollisionSystem.__v3;k.copy(a.direction);k.multiplyScalar(h);k.addSelf(a.origin);Math.abs(f.x)> +Math.abs(f.y)?Math.abs(f.x)>Math.abs(f.z)?(a=k.y-c.y,f=b.y-c.y,l=e.y-c.y,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,f=b.x-c.x,l=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y):Math.abs(f.y)>Math.abs(f.z)?(a=k.x-c.x,f=b.x-c.x,l=e.x-c.x,k=k.z-c.z,b=b.z-c.z,e=e.z-c.z):(a=k.x-c.x,f=b.x-c.x,l=e.x-c.x,k=k.y-c.y,b=b.y-c.y,e=e.y-c.y);c=f*e-b*l;if(c==0)return Number.MAX_VALUE;c=1/c;e=(a*e-k*l)*c;if(!(e>=0))return Number.MAX_VALUE;c*=f*k-b*a;if(!(c>=0))return Number.MAX_VALUE;if(!(1-e-c>=0))return Number.MAX_VALUE;return h}; THREE.CollisionSystem.prototype.makeRayLocal=function(a,c){var b=THREE.CollisionSystem.__m;b.getInverse(c.matrixWorld);var e=THREE.CollisionSystem.__r;e.origin.copy(a.origin);e.direction.copy(a.direction);b.multiplyVector3(e.origin);b.rotateAxis(e.direction);e.direction.normalize();return e}; -THREE.CollisionSystem.prototype.rayBox=function(a,c){var b;c.dynamic&&c.mesh&&c.mesh.matrixWorld?b=this.makeRayLocal(a,c.mesh):(b=THREE.CollisionSystem.__r,b.origin.copy(a.origin),b.direction.copy(a.direction));var e=0,h=0,k=0,f=0,l=0,n=0,t=!0;b.origin.xc.max.x&&(e=c.max.x-b.origin.x,e/=b.direction.x,t=!1,f=1);b.origin.yc.max.y&&(h=c.max.y-b.origin.y,h/=b.direction.y, -t=!1,l=1);b.origin.zc.max.z&&(k=c.max.z-b.origin.z,k/=b.direction.z,t=!1,n=1);if(t)return-1;t=0;h>e&&(t=1,e=h);k>e&&(t=2,e=k);switch(t){case 0:l=b.origin.y+b.direction.y*e;if(lc.max.y)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(f,0,0);break;case 1:f=b.origin.x+b.direction.x*e;if(fc.max.x)return Number.MAX_VALUE;b=b.origin.z+b.direction.z* -e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(0,l,0);break;case 2:f=b.origin.x+b.direction.x*e;if(fc.max.x)return Number.MAX_VALUE;l=b.origin.y+b.direction.y*e;if(lc.max.y)return Number.MAX_VALUE;c.normal.set(0,0,n)}return e};THREE.CollisionSystem.prototype.rayPlane=function(a,c){var b=a.direction.dot(c.normal),e=c.point.dot(c.normal);if(b<0)b=(e-a.origin.dot(c.normal))/b;else return Number.MAX_VALUE;return b>0?b:Number.MAX_VALUE}; +THREE.CollisionSystem.prototype.rayBox=function(a,c){var b;c.dynamic&&c.mesh&&c.mesh.matrixWorld?b=this.makeRayLocal(a,c.mesh):(b=THREE.CollisionSystem.__r,b.origin.copy(a.origin),b.direction.copy(a.direction));var e=0,l=0,f=0,h=0,k=0,n=0,t=!0;b.origin.xc.max.x&&(e=c.max.x-b.origin.x,e/=b.direction.x,t=!1,h=1);b.origin.yc.max.y&&(l=c.max.y-b.origin.y,l/=b.direction.y, +t=!1,k=1);b.origin.zc.max.z&&(f=c.max.z-b.origin.z,f/=b.direction.z,t=!1,n=1);if(t)return-1;t=0;l>e&&(t=1,e=l);f>e&&(t=2,e=f);switch(t){case 0:k=b.origin.y+b.direction.y*e;if(kc.max.y)return Number.MAX_VALUE;b=b.origin.z+b.direction.z*e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(h,0,0);break;case 1:h=b.origin.x+b.direction.x*e;if(hc.max.x)return Number.MAX_VALUE;b=b.origin.z+b.direction.z* +e;if(bc.max.z)return Number.MAX_VALUE;c.normal.set(0,k,0);break;case 2:h=b.origin.x+b.direction.x*e;if(hc.max.x)return Number.MAX_VALUE;k=b.origin.y+b.direction.y*e;if(kc.max.y)return Number.MAX_VALUE;c.normal.set(0,0,n)}return e};THREE.CollisionSystem.prototype.rayPlane=function(a,c){var b=a.direction.dot(c.normal),e=c.point.dot(c.normal);if(b<0)b=(e-a.origin.dot(c.normal))/b;else return Number.MAX_VALUE;return b>0?b:Number.MAX_VALUE}; THREE.CollisionSystem.prototype.raySphere=function(a,c){var b=c.center.clone().subSelf(a.origin);if(b.lengthSq=0)return Math.abs(e)-Math.sqrt(b);return Number.MAX_VALUE};THREE.CollisionSystem.__v1=new THREE.Vector3;THREE.CollisionSystem.__v2=new THREE.Vector3;THREE.CollisionSystem.__v3=new THREE.Vector3;THREE.CollisionSystem.__nr=new THREE.Vector3;THREE.CollisionSystem.__m=new THREE.Matrix4; THREE.CollisionSystem.__r=new THREE.Ray;THREE.CollisionUtils={};THREE.CollisionUtils.MeshOBB=function(a){a.geometry.computeBoundingBox();var c=a.geometry.boundingBox,b=new THREE.Vector3(c.x[0],c.y[0],c.z[0]),c=new THREE.Vector3(c.x[1],c.y[1],c.z[1]),b=new THREE.BoxCollider(b,c);b.mesh=a;return b};THREE.CollisionUtils.MeshAABB=function(a){var c=THREE.CollisionUtils.MeshOBB(a);c.min.addSelf(a.position);c.max.addSelf(a.position);c.dynamic=!1;return c}; THREE.CollisionUtils.MeshColliderWBox=function(a){return new THREE.MeshCollider(a,THREE.CollisionUtils.MeshOBB(a))}; -if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);this.autoUpdateScene=!1;var c=this,b=this.setSize,e=this.render,h=new THREE.PerspectiveCamera,k=new THREE.PerspectiveCamera,f=new THREE.Matrix4,l=new THREE.Matrix4,n,t,p,v;h.matrixAutoUpdate=k.matrixAutoUpdate=!1;var a={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},x=new THREE.WebGLRenderTarget(512,512,a),u=new THREE.WebGLRenderTarget(512,512,a),y=new THREE.PerspectiveCamera(53, +if(THREE.WebGLRenderer)THREE.AnaglyphWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);this.autoUpdateScene=!1;var c=this,b=this.setSize,e=this.render,l=new THREE.PerspectiveCamera,f=new THREE.PerspectiveCamera,h=new THREE.Matrix4,k=new THREE.Matrix4,n,t,p,v;l.matrixAutoUpdate=f.matrixAutoUpdate=!1;var a={minFilter:THREE.LinearFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat},x=new THREE.WebGLRenderTarget(512,512,a),u=new THREE.WebGLRenderTarget(512,512,a),y=new THREE.PerspectiveCamera(53, 1,1,1E4);y.position.z=2;_material=new THREE.ShaderMaterial({uniforms:{mapLeft:{type:"t",value:0,texture:x},mapRight:{type:"t",value:1,texture:u}},vertexShader:"varying vec2 vUv;\nvoid main() {\nvUv = vec2( uv.x, 1.0 - uv.y );\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform sampler2D mapLeft;\nuniform sampler2D mapRight;\nvarying vec2 vUv;\nvoid main() {\nvec4 colorL, colorR;\nvec2 uv = vUv;\ncolorL = texture2D( mapLeft, uv );\ncolorR = texture2D( mapRight, uv );\ngl_FragColor = vec4( colorL.g * 0.7 + colorL.b * 0.3, colorR.g, colorR.b, colorL.a + colorR.a ) * 1.1;\n}"}); -var w=new THREE.Scene;w.add(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));w.add(y);this.setSize=function(a,e){b.call(c,a,e);x.width=a;x.height=e;u.width=a;u.height=e};this.render=function(a,b){a.updateMatrixWorld();if(n!==b.aspect||t!==b.near||p!==b.far||v!==b.fov){n=b.aspect;t=b.near;p=b.far;v=b.fov;var E=b.projectionMatrix.clone(),z=125/30*0.5,D=z*t/125,M=t*Math.tan(v*Math.PI/360),I;f.n14=z;l.n14=-z;z=-M*n+D;I=M*n+D;E.n11=2*t/(I-z);E.n13=(I+z)/(I-z);h.projectionMatrix.copy(E);z=-M*n-D; -I=M*n-D;E.n11=2*t/(I-z);E.n13=(I+z)/(I-z);k.projectionMatrix.copy(E)}h.matrixWorld.copy(b.matrixWorld).multiplySelf(l);h.position.copy(b.position);h.near=b.near;h.far=b.far;e.call(c,a,h,x,!0);k.matrixWorld.copy(b.matrixWorld).multiplySelf(f);k.position.copy(b.position);k.near=b.near;k.far=b.far;e.call(c,a,k,u,!0);w.updateMatrixWorld();e.call(c,w,y)}}; -if(THREE.WebGLRenderer)THREE.CrosseyedWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);this.autoClear=!1;var c=this,b=this.setSize,e=this.render,h,k,f=new THREE.PerspectiveCamera;f.target=new THREE.Vector3(0,0,0);var l=new THREE.PerspectiveCamera;l.target=new THREE.Vector3(0,0,0);c.separation=10;if(a&&a.separation!==void 0)c.separation=a.separation;this.setSize=function(a,e){b.call(c,a,e);h=a/2;k=e};this.render=function(a,b){this.clear();f.fov=b.fov;f.aspect=0.5*b.aspect;f.near=b.near;f.far= -b.far;f.updateProjectionMatrix();f.position.copy(b.position);f.target.copy(b.target);f.translateX(c.separation);f.lookAt(f.target);l.projectionMatrix=f.projectionMatrix;l.position.copy(b.position);l.target.copy(b.target);l.translateX(-c.separation);l.lookAt(l.target);this.setViewport(0,0,h,k);e.call(c,a,f);this.setViewport(h,0,h,k);e.call(c,a,l,!1)}}; +var w=new THREE.Scene;w.add(new THREE.Mesh(new THREE.PlaneGeometry(2,2),_material));w.add(y);this.setSize=function(a,e){b.call(c,a,e);x.width=a;x.height=e;u.width=a;u.height=e};this.render=function(a,b){a.updateMatrixWorld();if(n!==b.aspect||t!==b.near||p!==b.far||v!==b.fov){n=b.aspect;t=b.near;p=b.far;v=b.fov;var D=b.projectionMatrix.clone(),z=125/30*0.5,C=z*t/125,L=t*Math.tan(v*Math.PI/360),H;h.n14=z;k.n14=-z;z=-L*n+C;H=L*n+C;D.n11=2*t/(H-z);D.n13=(H+z)/(H-z);l.projectionMatrix.copy(D);z=-L*n-C; +H=L*n-C;D.n11=2*t/(H-z);D.n13=(H+z)/(H-z);f.projectionMatrix.copy(D)}l.matrixWorld.copy(b.matrixWorld).multiplySelf(k);l.position.copy(b.position);l.near=b.near;l.far=b.far;e.call(c,a,l,x,!0);f.matrixWorld.copy(b.matrixWorld).multiplySelf(h);f.position.copy(b.position);f.near=b.near;f.far=b.far;e.call(c,a,f,u,!0);w.updateMatrixWorld();e.call(c,w,y)}}; +if(THREE.WebGLRenderer)THREE.CrosseyedWebGLRenderer=function(a){THREE.WebGLRenderer.call(this,a);this.autoClear=!1;var c=this,b=this.setSize,e=this.render,l,f,h=new THREE.PerspectiveCamera;h.target=new THREE.Vector3(0,0,0);var k=new THREE.PerspectiveCamera;k.target=new THREE.Vector3(0,0,0);c.separation=10;if(a&&a.separation!==void 0)c.separation=a.separation;this.setSize=function(a,e){b.call(c,a,e);l=a/2;f=e};this.render=function(a,b){this.clear();h.fov=b.fov;h.aspect=0.5*b.aspect;h.near=b.near;h.far= +b.far;h.updateProjectionMatrix();h.position.copy(b.position);h.target.copy(b.target);h.translateX(c.separation);h.lookAt(h.target);k.projectionMatrix=h.projectionMatrix;k.position.copy(b.position);k.target.copy(b.target);k.translateX(-c.separation);k.lookAt(k.target);this.setViewport(0,0,l,f);e.call(c,a,h);this.setViewport(l,0,l,f);e.call(c,a,k,!1)}}; diff --git a/build/custom/ThreeCanvas.js b/build/custom/ThreeCanvas.js index 329878b3..be7aa37b 100644 --- a/build/custom/ThreeCanvas.js +++ b/build/custom/ThreeCanvas.js @@ -14,64 +14,64 @@ Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&e+a<1}for(var d,f=[],e=0,g=a.children.length;ea.scale.x)return[];d={distance:e,point:a.position,face:null,object:a};f.push(d)}else if(a instanceof THREE.Mesh){e= -b(this.origin,this.direction,a.matrixWorld.getPosition());if(e===null||e>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;var h,l,o,i,n,m,j,q,k=a.geometry,s=k.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);e=0;for(g=k.faces.length;e0:m<0)))if(m=n.dot((new THREE.Vector3).sub(h,j))/m,j=j.addSelf(q.multiplyScalar(m)),d instanceof THREE.Face3)c(j,h,l,o)&&(d={distance:this.origin.distanceTo(j),point:j,face:d,object:a},f.push(d));else if(d instanceof THREE.Face4&&(c(j,h,l,i)||c(j,l,o,i)))d={distance:this.origin.distanceTo(j), -point:j,face:d,object:a},f.push(d)}return f}}; -THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b,c,d,f,e,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,i,n){h=!1;b=e;c=g;d=i;f=n;a()};this.addPoint=function(e,g){h?(h=!1,b=e,c=g,d=e,f=g):(b=be?d:e,f=f>g?f:g);a()};this.add3Points= -function(e,g,i,n,m,j){h?(h=!1,b=ei?e>m?e:m:i>m?i:m,f=g>n?g>j?g:j:n>j?n:j):(b=ei?e>m?e>d?e:d:m>d?m:d:i>m?i>d?i:d:m>d?m:d,f=g>n?g>j?g>f?g:f:j>f?j:f:n>j?n>f?n:f:j>f?j:f);a()};this.addRectangle=function(e){h?(h=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b=0&&o>=0&&p+o<1}for(var d=new THREE.Vector3,f=new THREE.Vector3,e=new THREE.Vector3,g,h,l,n,j,i,p,o,m,k=[],r=0,H=a.children.length;ra.scale.x)return[];m={distance:r,point:a.position, +face:null,object:a};k.push(m)}else if(a instanceof THREE.Mesh){r=b(this.origin,this.direction,a.matrixWorld.getPosition());if(r===null||r>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return k;var E,L,M,t,F,w,x,u,s=a.geometry,B=s.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);r=0;for(H=s.faces.length;r0:w<0)))if(w=F.dot((new THREE.Vector3).sub(E,x))/w,x=x.addSelf(u.multiplyScalar(w)),m instanceof THREE.Face3)c(x,E,L,M)&&(m={distance:this.origin.distanceTo(x),point:x,face:m,object:a}, +k.push(m));else if(m instanceof THREE.Face4&&(c(x,E,L,t)||c(x,L,M,t)))m={distance:this.origin.distanceTo(x),point:x,face:m,object:a},k.push(m)}return k}}; +THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b,c,d,f,e,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,j,i){h=!1;b=e;c=g;d=j;f=i;a()};this.addPoint=function(e,g){h?(h=!1,b=e,c=g,d=e,f=g):(b=be?d:e,f=f>g?f:g);a()};this.add3Points= +function(e,g,j,i,p,o){h?(h=!1,b=ej?e>p?e:p:j>p?j:p,f=g>i?g>o?g:o:i>o?i:o):(b=ej?e>p?e>d?e:d:p>d?p:d:j>p?j>d?j:d:p>d?p:d,f=g>i?g>o?g>f?g:f:o>f?o:f:i>o?i>f?i:f:o>f?o:f);a()};this.addRectangle=function(e){h?(h=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> e.getBottom()?f:e.getBottom());a()};this.inflate=function(e){b-=e;c-=e;d+=e;f+=e;a()};this.minSelf=function(e){b=b>e.getLeft()?b:e.getLeft();c=c>e.getTop()?c:e.getTop();d=d=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;f=d=c=b=0;a()};this.isEmpty=function(){return h}}; THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),dg&&h.positionScreen.z0&&C.z<1))g=P[S]=P[S]||new THREE.RenderableParticle,S++,F=g,F.x=C.x/C.w,F.y=C.y/C.w,F.z=C.z,F.rotation=G.rotation.z,F.scale.x=G.scale.x*Math.abs(F.x-(C.x+e.projectionMatrix.n11)/(C.w+e.projectionMatrix.n14)),F.scale.y=G.scale.y*Math.abs(F.y-(C.y+e.projectionMatrix.n22)/(C.w+e.projectionMatrix.n24)),F.material=G.material,z.elements.push(F);f&&z.elements.sort(c); -return z}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +THREE.Projector=function(){function a(){var a=g[e]=g[e]||new THREE.RenderableObject;e++;return a}function b(){var a=n[l]=n[l]||new THREE.RenderableVertex;l++;return a}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;return e>=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),dg&&h.positionScreen.z0&&w.z<1))g=M[L]=M[L]||new THREE.RenderableParticle,L++,E=g,E.x=w.x/w.w,E.y=w.y/w.w,E.z=w.z,E.rotation=G.rotation.z,E.scale.x=G.scale.x*Math.abs(E.x-(w.x+e.projectionMatrix.n11)/(w.w+e.projectionMatrix.n14)),E.scale.y=G.scale.y*Math.abs(E.y-(w.y+e.projectionMatrix.n22)/(w.w+e.projectionMatrix.n24)),E.material=G.material,t.elements.push(E);f&&t.elements.sort(c); +return t}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,f=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-f),f=Math.sin(-f),e=Math.cos(c),c=Math.sin(c),g=a*b,h=d*f;this.w=g*e-h*c;this.x=g*c+h*e;this.y=d*b*e+a*f*c;this.z=a*f*e-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+f*e+c*h-d*g;this.y=c*a+f*g+d*e-b*h;this.z=d*a+f*h+b*g-c*e;this.w=f*a-b*e-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,h=this.z,l=this.w,o=l*c+g*f-h*d,i=l*d+h*c-e*f,n=l*f+e*d-g*c,c=-e* -c-g*d-h*f;b.x=o*l+c*-e+i*-h-n*-g;b.y=i*l+c*-g+n*-e-o*-h;b.z=n*l+c*-h+o*-g-i*-e;return b}}; +this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+f*e+c*h-d*g;this.y=c*a+f*g+d*e-b*h;this.z=d*a+f*h+b*g-c*e;this.w=f*a-b*e-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,h=this.z,l=this.w,n=l*c+g*f-h*d,j=l*d+h*c-e*f,i=l*f+e*d-g*c,c=-e* +c-g*d-h*f;b.x=n*l+c*-e+j*-h-i*-g;b.y=j*l+c*-g+i*-e-n*-h;b.z=i*l+c*-h+n*-g-j*-e;return b}}; THREE.Quaternion.slerp=function(a,b,c,d){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;f<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,f=-f):c.copy(b);if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var e=Math.acos(f),f=Math.sqrt(1-f*f);if(Math.abs(f)<0.001)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-d)*e)/f;d=Math.sin(d*e)/f;c.w=a.w*b+c.w*d;c.x=a.x*b+c.x*d;c.y=a.y*b+c.y*d;c.z=a.z*b+c.z*d;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; THREE.Face3=function(a,b,c,d,f,e){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=e;this.centroid=new THREE.Vector3}; THREE.Face4=function(a,b,c,d,f,e,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; @@ -82,9 +82,9 @@ b;a++)c=this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid c,d,f,e,g,h=new THREE.Vector3,l=new THREE.Vector3;d=0;for(f=this.faces.length;d0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, +c.vertexNormals[1].copy(d[c.b]),c.vertexNormals[2].copy(d[c.c]),c.vertexNormals[3].copy(d[c.d]))},computeTangents:function(){function a(a,b,c,d,e,f,x){h=a.vertices[b].position;l=a.vertices[c].position;n=a.vertices[d].position;j=g[e];i=g[f];p=g[x];o=l.x-h.x;m=n.x-h.x;k=l.y-h.y;r=n.y-h.y;H=l.z-h.z;E=n.z-h.z;L=i.u-j.u;M=p.u-j.u;t=i.v-j.v;F=p.v-j.v;w=1/(L*F-M*t);B.set((F*o-t*m)*w,(F*k-t*r)*w,(F*H-t*E)*w);K.set((L*m-M*o)*w,(L*r-M*k)*w,(L*E-M*H)*w);u[b].addSelf(B);u[c].addSelf(B);u[d].addSelf(B);s[b].addSelf(K); +s[c].addSelf(K);s[d].addSelf(K)}var b,c,d,f,e,g,h,l,n,j,i,p,o,m,k,r,H,E,L,M,t,F,w,x,u=[],s=[],B=new THREE.Vector3,K=new THREE.Vector3,aa=new THREE.Vector3,ea=new THREE.Vector3,O=new THREE.Vector3;b=0;for(c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,b=0,c=this.vertices.length;b0&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(s.r*255)+","+Math.floor(s.g*255)+","+Math.floor(s.b*255)+","+N+")"),k.fillRect(Math.floor(X.getX()), -Math.floor(X.getY()),Math.floor(X.getWidth()),Math.floor(X.getHeight()))),X.empty())};this.render=function(a,i){function n(a){var b,c,d,e;Y.setRGB(0,0,0);sa.setRGB(0,0,0);ta.setRGB(0,0,0);b=0;for(c=a.length;b>1,o=n.height>> -1,g=e.scale.x*j,l=e.scale.y*q,h=g*p,i=l*o,W.set(a.x-h,a.y-i,a.x+h,a.y+i),ka.intersects(W)&&(k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(g,-l),k.translate(-p,-o),k.drawImage(n,0,0),k.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=e.scale.x*j,i=e.scale.y*q,W.set(a.x-h,a.y-i,a.x+h,a.y+i),ka.intersects(W)&&(d(g.color.getContextStyle()),f(g.color.getContextStyle()),k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(h,i),g.program(k),k.restore()))}function z(a,e, -f,g){b(g.opacity);c(g.blending);k.beginPath();k.moveTo(a.positionScreen.x,a.positionScreen.y);k.lineTo(e.positionScreen.x,e.positionScreen.y);k.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(A!=a)k.lineWidth=A=a;a=g.linecap;if(C!=a)k.lineCap=C=a;a=g.linejoin;if(E!=a)k.lineJoin=E=a;d(g.color.getContextStyle());k.stroke();W.inflate(g.linewidth*2)}}function F(a,d,f,g,h,k,j,p){e.info.render.vertices+=3;e.info.render.faces++;b(p.opacity);c(p.blending);L=a.positionScreen.x;O=a.positionScreen.y; -T=d.positionScreen.x;U=d.positionScreen.y;H=f.positionScreen.x;B=f.positionScreen.y;N(L,O,T,U,H,B);if(p instanceof THREE.MeshBasicMaterial)if(p.map)p.map.mapping instanceof THREE.UVMapping&&(aa=j.uvs[0],za(L,O,T,U,H,B,aa[g].u,aa[g].v,aa[h].u,aa[h].v,aa[k].u,aa[k].v,p.map));else if(p.envMap){if(p.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=i.matrixWorldInverse,R.copy(j.vertexNormalsWorld[g]),Aa=(R.x*a.n11+R.y*a.n12+R.z*a.n13)*0.5+0.5,Ba=-(R.x*a.n21+R.y*a.n22+R.z*a.n23)*0.5+0.5,R.copy(j.vertexNormalsWorld[h]), -Ca=(R.x*a.n11+R.y*a.n12+R.z*a.n13)*0.5+0.5,Da=-(R.x*a.n21+R.y*a.n22+R.z*a.n23)*0.5+0.5,R.copy(j.vertexNormalsWorld[k]),Ea=(R.x*a.n11+R.y*a.n12+R.z*a.n13)*0.5+0.5,Fa=-(R.x*a.n21+R.y*a.n22+R.z*a.n23)*0.5+0.5,za(L,O,T,U,H,B,Aa,Ba,Ca,Da,Ea,Fa,p.envMap)}else p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color);else if(p instanceof THREE.MeshLambertMaterial)p.map&&!p.wireframe&&(p.map.mapping instanceof THREE.UVMapping&&(aa=j.uvs[0],za(L,O,T,U,H,B,aa[g].u,aa[g].v, -aa[h].u,aa[h].v,aa[k].u,aa[k].v,p.map)),c(THREE.SubtractiveBlending)),xa?!p.wireframe&&p.shading==THREE.SmoothShading&&j.vertexNormalsWorld.length==3?(y.r=w.r=x.r=Y.r,y.g=w.g=x.g=Y.g,y.b=w.b=x.b=Y.b,m(l,j.v1.positionWorld,j.vertexNormalsWorld[0],y),m(l,j.v2.positionWorld,j.vertexNormalsWorld[1],w),m(l,j.v3.positionWorld,j.vertexNormalsWorld[2],x),y.r=Math.max(0,Math.min(p.color.r*y.r,1)),y.g=Math.max(0,Math.min(p.color.g*y.g,1)),y.b=Math.max(0,Math.min(p.color.b*y.b,1)),w.r=Math.max(0,Math.min(p.color.r* -w.r,1)),w.g=Math.max(0,Math.min(p.color.g*w.g,1)),w.b=Math.max(0,Math.min(p.color.b*w.b,1)),x.r=Math.max(0,Math.min(p.color.r*x.r,1)),x.g=Math.max(0,Math.min(p.color.g*x.g,1)),x.b=Math.max(0,Math.min(p.color.b*x.b,1)),I.r=(w.r+x.r)*0.5,I.g=(w.g+x.g)*0.5,I.b=(w.b+x.b)*0.5,ea=va(y,w,x,I),ma(L,O,T,U,H,B,0,0,1,0,0,1,ea)):(t.r=Y.r,t.g=Y.g,t.b=Y.b,m(l,j.centroidWorld,j.normalWorld,t),t.r=Math.max(0,Math.min(p.color.r*t.r,1)),t.g=Math.max(0,Math.min(p.color.g*t.g,1)),t.b=Math.max(0,Math.min(p.color.b*t.b, -1)),p.wireframe?ga(t,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(t)):p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color);else if(p instanceof THREE.MeshDepthMaterial)Z=i.near,fa=i.far,y.r=y.g=y.b=1-la(a.positionScreen.z,Z,fa),w.r=w.g=w.b=1-la(d.positionScreen.z,Z,fa),x.r=x.g=x.b=1-la(f.positionScreen.z,Z,fa),I.r=(w.r+x.r)*0.5,I.g=(w.g+x.g)*0.5,I.b=(w.b+x.b)*0.5,ea=va(y,w,x,I),ma(L,O,T,U,H,B,0,0,1,0,0,1,ea);else if(p instanceof THREE.MeshNormalMaterial)t.r= -na(j.normalWorld.x),t.g=na(j.normalWorld.y),t.b=na(j.normalWorld.z),p.wireframe?ga(t,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(t)}function S(a,d,f,g,h,k,j,p,n){e.info.render.vertices+=4;e.info.render.faces++;b(p.opacity);c(p.blending);if(p.map||p.envMap)F(a,d,g,0,1,3,j,p,n),F(h,f,k,1,2,3,j,p,n);else if(L=a.positionScreen.x,O=a.positionScreen.y,T=d.positionScreen.x,U=d.positionScreen.y,H=f.positionScreen.x,B=f.positionScreen.y,Q=g.positionScreen.x,v=g.positionScreen.y,M=h.positionScreen.x, -K=h.positionScreen.y,oa=k.positionScreen.x,G=k.positionScreen.y,p instanceof THREE.MeshBasicMaterial)P(L,O,T,U,H,B,Q,v),p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color);else if(p instanceof THREE.MeshLambertMaterial)xa?!p.wireframe&&p.shading==THREE.SmoothShading&&j.vertexNormalsWorld.length==4?(y.r=w.r=x.r=I.r=Y.r,y.g=w.g=x.g=I.g=Y.g,y.b=w.b=x.b=I.b=Y.b,m(l,j.v1.positionWorld,j.vertexNormalsWorld[0],y),m(l,j.v2.positionWorld,j.vertexNormalsWorld[1], -w),m(l,j.v4.positionWorld,j.vertexNormalsWorld[3],x),m(l,j.v3.positionWorld,j.vertexNormalsWorld[2],I),y.r=Math.max(0,Math.min(p.color.r*y.r,1)),y.g=Math.max(0,Math.min(p.color.g*y.g,1)),y.b=Math.max(0,Math.min(p.color.b*y.b,1)),w.r=Math.max(0,Math.min(p.color.r*w.r,1)),w.g=Math.max(0,Math.min(p.color.g*w.g,1)),w.b=Math.max(0,Math.min(p.color.b*w.b,1)),x.r=Math.max(0,Math.min(p.color.r*x.r,1)),x.g=Math.max(0,Math.min(p.color.g*x.g,1)),x.b=Math.max(0,Math.min(p.color.b*x.b,1)),I.r=Math.max(0,Math.min(p.color.r* -I.r,1)),I.g=Math.max(0,Math.min(p.color.g*I.g,1)),I.b=Math.max(0,Math.min(p.color.b*I.b,1)),ea=va(y,w,x,I),N(L,O,T,U,Q,v),ma(L,O,T,U,Q,v,0,0,1,0,0,1,ea),N(M,K,H,B,oa,G),ma(M,K,H,B,oa,G,1,0,1,1,0,1,ea)):(t.r=Y.r,t.g=Y.g,t.b=Y.b,m(l,j.centroidWorld,j.normalWorld,t),t.r=Math.max(0,Math.min(p.color.r*t.r,1)),t.g=Math.max(0,Math.min(p.color.g*t.g,1)),t.b=Math.max(0,Math.min(p.color.b*t.b,1)),P(L,O,T,U,H,B,Q,v),p.wireframe?ga(t,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(t)):(P(L,O, -T,U,H,B,Q,v),p.wireframe?ga(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(p.color));else if(p instanceof THREE.MeshNormalMaterial)t.r=na(j.normalWorld.x),t.g=na(j.normalWorld.y),t.b=na(j.normalWorld.z),P(L,O,T,U,H,B,Q,v),p.wireframe?ga(t,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ha(t);else if(p instanceof THREE.MeshDepthMaterial)Z=i.near,fa=i.far,y.r=y.g=y.b=1-la(a.positionScreen.z,Z,fa),w.r=w.g=w.b=1-la(d.positionScreen.z,Z,fa),x.r=x.g=x.b=1-la(g.positionScreen.z, -Z,fa),I.r=I.g=I.b=1-la(f.positionScreen.z,Z,fa),ea=va(y,w,x,I),N(L,O,T,U,Q,v),ma(L,O,T,U,Q,v,0,0,1,0,0,1,ea),N(M,K,H,B,oa,G),ma(M,K,H,B,oa,G,1,0,1,1,0,1,ea)}function N(a,b,c,d,e,f){k.beginPath();k.moveTo(a,b);k.lineTo(c,d);k.lineTo(e,f);k.lineTo(a,b);k.closePath()}function P(a,b,c,d,e,f,g,h){k.beginPath();k.moveTo(a,b);k.lineTo(c,d);k.lineTo(e,f);k.lineTo(g,h);k.lineTo(a,b);k.closePath()}function ga(a,b,c,e){if(A!=b)k.lineWidth=A=b;if(C!=c)k.lineCap=C=c;if(E!=e)k.lineJoin=E=e;d(a.getContextStyle()); -k.stroke();W.inflate(b*2)}function ha(a){f(a.getContextStyle());k.fill()}function za(a,b,c,d,e,g,h,i,j,l,n,o,m){if(m.image.width!=0){if(m.needsUpdate==!0||ja[m.id]==void 0){var q=m.wrapS==THREE.RepeatWrapping,r=m.wrapT==THREE.RepeatWrapping;ja[m.id]=k.createPattern(m.image,q&&r?"repeat":q&&!r?"repeat-x":!q&&r?"repeat-y":"no-repeat");m.needsUpdate=!1}f(ja[m.id]);var q=m.offset.x/m.repeat.x,r=m.offset.y/m.repeat.y,s=(m.image.width-1)*m.repeat.x,m=(m.image.height-1)*m.repeat.y,h=(h+q)*s,i=(i+r)*m,j= -(j+q)*s,l=(l+r)*m,n=(n+q)*s,o=(o+r)*m;c-=a;d-=b;e-=a;g-=b;j-=h;l-=i;n-=h;o-=i;q=1/(j*o-n*l);m=(o*c-l*e)*q;l=(o*d-l*g)*q;c=(j*e-n*c)*q;d=(j*g-n*d)*q;a=a-m*h-c*i;b=b-l*h-d*i;k.save();k.transform(m,l,c,d,a,b);k.fill();k.restore()}}function ma(a,b,c,d,e,f,g,h,i,j,l,m,n){var o,q;o=n.width-1;q=n.height-1;g*=o;h*=q;i*=o;j*=q;l*=o;m*=q;c-=a;d-=b;e-=a;f-=b;i-=g;j-=h;l-=g;m-=h;q=1/(i*m-l*j);o=(m*c-j*e)*q;j=(m*d-j*f)*q;c=(i*e-l*c)*q;d=(i*f-l*d)*q;a=a-o*g-c*h;b=b-j*g-d*h;k.save();k.transform(o,j,c,d,a,b);k.clip(); -k.drawImage(n,0,0);k.restore()}function va(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);ba[0]=e<0?0:e>255?255:e;ba[1]=f<0?0:f>255?255:f;ba[2]=a<0?0:a>255?255:a;ba[4]=g<0?0:g>255?255:g;ba[5]=h<0?0:h>255?255:h;ba[6]=b<0?0:b>255?255:b;ba[8]=i<0?0:i>255?255:i;ba[9]=j<0?0:j>255?255:j;ba[10]=c<0?0:c>255?255:c;ba[12]=k<0?0:k>255?255:k;ba[13]=l<0?0:l>255?255:l;ba[14]=d<0? -0:d>255?255:d;qa.putImageData(ya,0,0);ua.drawImage(pa,0,0);return ra}function la(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function na(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function ia(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;e!=0&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}var wa,Ga,V,ca;this.autoClear?this.clear():k.setTransform(1,0,0,-1,j,q);e.info.render.vertices=0;e.info.render.faces=0;g=o.projectScene(a,i,this.sortElements);h=g.elements;l=g.lights;(xa=l.length>0)&&n(l);wa=0;for(Ga=h.length;wa< -Ga;wa++)if(V=h[wa],ca=V.material,ca=ca instanceof THREE.MeshFaceMaterial?V.faceMaterial:ca,!(ca==null||ca.opacity==0)){W.empty();if(V instanceof THREE.RenderableParticle)u=V,u.x*=j,u.y*=q,s(u,V,ca,a);else if(V instanceof THREE.RenderableLine)u=V.v1,r=V.v2,u.positionScreen.x*=j,u.positionScreen.y*=q,r.positionScreen.x*=j,r.positionScreen.y*=q,W.addPoint(u.positionScreen.x,u.positionScreen.y),W.addPoint(r.positionScreen.x,r.positionScreen.y),ka.intersects(W)&&z(u,r,V,ca,a);else if(V instanceof THREE.RenderableFace3)u= -V.v1,r=V.v2,D=V.v3,u.positionScreen.x*=j,u.positionScreen.y*=q,r.positionScreen.x*=j,r.positionScreen.y*=q,D.positionScreen.x*=j,D.positionScreen.y*=q,ca.overdraw&&(ia(u.positionScreen,r.positionScreen),ia(r.positionScreen,D.positionScreen),ia(D.positionScreen,u.positionScreen)),W.add3Points(u.positionScreen.x,u.positionScreen.y,r.positionScreen.x,r.positionScreen.y,D.positionScreen.x,D.positionScreen.y),ka.intersects(W)&&F(u,r,D,0,1,2,V,ca,a);else if(V instanceof THREE.RenderableFace4)u=V.v1,r=V.v2, -D=V.v3,J=V.v4,u.positionScreen.x*=j,u.positionScreen.y*=q,r.positionScreen.x*=j,r.positionScreen.y*=q,D.positionScreen.x*=j,D.positionScreen.y*=q,J.positionScreen.x*=j,J.positionScreen.y*=q,$.positionScreen.copy(r.positionScreen),da.positionScreen.copy(J.positionScreen),ca.overdraw&&(ia(u.positionScreen,r.positionScreen),ia(r.positionScreen,J.positionScreen),ia(J.positionScreen,u.positionScreen),ia(D.positionScreen,$.positionScreen),ia(D.positionScreen,da.positionScreen)),W.addPoint(u.positionScreen.x, -u.positionScreen.y),W.addPoint(r.positionScreen.x,r.positionScreen.y),W.addPoint(D.positionScreen.x,D.positionScreen.y),W.addPoint(J.positionScreen.x,J.positionScreen.y),ka.intersects(W)&&S(u,r,D,J,$,da,V,ca,a);X.addRectangle(W)}k.setTransform(1,0,0,1,0,0)}};THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)}; +THREE.CanvasRenderer=function(a){function b(a){if(E!=a)k.globalAlpha=E=a}function c(a){if(L!=a){switch(a){case THREE.NormalBlending:k.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:k.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:k.globalCompositeOperation="darker"}L=a}}function d(a){if(M!=a)k.strokeStyle=M=a}function f(a){if(t!=a)k.fillStyle=t=a}var e=this,g,h,l,n=new THREE.Projector,a=a||{},j=a.canvas!==void 0?a.canvas:document.createElement("canvas"), +i,p,o,m,k=j.getContext("2d"),r=new THREE.Color(0),H=0,E=1,L=0,M=null,t=null,F=null,w=null,x=null,u,s,B,K,aa=new THREE.RenderableVertex,ea=new THREE.RenderableVertex,O,Q,T,X,I,D,R,y,P,N,V,G,v=new THREE.Color,C=new THREE.Color,z=new THREE.Color,A=new THREE.Color,J=new THREE.Color,ka=[],$,ga,fa,ba,Aa,Ba,Ca,Da,Ea,Fa,la=new THREE.Rectangle,Y=new THREE.Rectangle,W=new THREE.Rectangle,xa=!1,Z=new THREE.Color,sa=new THREE.Color,ta=new THREE.Color,S=new THREE.Vector3,pa,qa,ya,ca,ra,ua,a=16;pa=document.createElement("canvas"); +pa.width=pa.height=2;qa=pa.getContext("2d");qa.fillStyle="rgba(0,0,0,1)";qa.fillRect(0,0,2,2);ya=qa.getImageData(0,0,2,2);ca=ya.data;ra=document.createElement("canvas");ra.width=ra.height=a;ua=ra.getContext("2d");ua.translate(-a/2,-a/2);ua.scale(a,a);a--;this.domElement=j;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){i=a;p=b;o=Math.floor(i/2);m=Math.floor(p/2);j.width=i;j.height=p;la.set(-o,-m,o,m);Y.set(-o,-m,o,m);E=1;L=0; +x=w=F=t=M=null};this.setClearColor=function(a,b){r.copy(a);H=b;Y.set(-o,-m,o,m)};this.setClearColorHex=function(a,b){r.setHex(a);H=b;Y.set(-o,-m,o,m)};this.clear=function(){k.setTransform(1,0,0,-1,o,m);Y.isEmpty()||(Y.minSelf(la),Y.inflate(2),H<1&&k.clearRect(Math.floor(Y.getX()),Math.floor(Y.getY()),Math.floor(Y.getWidth()),Math.floor(Y.getHeight())),H>0&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b*255)+","+H+")"),k.fillRect(Math.floor(Y.getX()), +Math.floor(Y.getY()),Math.floor(Y.getWidth()),Math.floor(Y.getHeight()))),Y.empty())};this.render=function(a,j){function i(a){var b,c,d,e;Z.setRGB(0,0,0);sa.setRGB(0,0,0);ta.setRGB(0,0,0);b=0;for(c=a.length;b>1,n=i.height>> +1,g=e.scale.x*o,l=e.scale.y*m,h=g*q,j=l*n,W.set(a.x-h,a.y-j,a.x+h,a.y+j),la.intersects(W)&&(k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(g,-l),k.translate(-q,-n),k.drawImage(i,0,0),k.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=e.scale.x*o,j=e.scale.y*m,W.set(a.x-h,a.y-j,a.x+h,a.y+j),la.intersects(W)&&(d(g.color.getContextStyle()),f(g.color.getContextStyle()),k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(h,j),g.program(k),k.restore()))}function t(a,e, +f,g){b(g.opacity);c(g.blending);k.beginPath();k.moveTo(a.positionScreen.x,a.positionScreen.y);k.lineTo(e.positionScreen.x,e.positionScreen.y);k.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(F!=a)k.lineWidth=F=a;a=g.linecap;if(w!=a)k.lineCap=w=a;a=g.linejoin;if(x!=a)k.lineJoin=x=a;d(g.color.getContextStyle());k.stroke();W.inflate(g.linewidth*2)}}function E(a,d,f,g,h,k,i,q){e.info.render.vertices+=3;e.info.render.faces++;b(q.opacity);c(q.blending);O=a.positionScreen.x;Q=a.positionScreen.y; +T=d.positionScreen.x;X=d.positionScreen.y;I=f.positionScreen.x;D=f.positionScreen.y;H(O,Q,T,X,I,D);if(q instanceof THREE.MeshBasicMaterial)if(q.map)q.map.mapping instanceof THREE.UVMapping&&(ba=i.uvs[0],za(O,Q,T,X,I,D,ba[g].u,ba[g].v,ba[h].u,ba[h].v,ba[k].u,ba[k].v,q.map));else if(q.envMap){if(q.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=j.matrixWorldInverse,S.copy(i.vertexNormalsWorld[g]),Aa=(S.x*a.n11+S.y*a.n12+S.z*a.n13)*0.5+0.5,Ba=-(S.x*a.n21+S.y*a.n22+S.z*a.n23)*0.5+0.5,S.copy(i.vertexNormalsWorld[h]), +Ca=(S.x*a.n11+S.y*a.n12+S.z*a.n13)*0.5+0.5,Da=-(S.x*a.n21+S.y*a.n22+S.z*a.n23)*0.5+0.5,S.copy(i.vertexNormalsWorld[k]),Ea=(S.x*a.n11+S.y*a.n12+S.z*a.n13)*0.5+0.5,Fa=-(S.x*a.n21+S.y*a.n22+S.z*a.n23)*0.5+0.5,za(O,Q,T,X,I,D,Aa,Ba,Ca,Da,Ea,Fa,q.envMap)}else q.wireframe?ha(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(q.color);else if(q instanceof THREE.MeshLambertMaterial)q.map&&!q.wireframe&&(q.map.mapping instanceof THREE.UVMapping&&(ba=i.uvs[0],za(O,Q,T,X,I,D,ba[g].u,ba[g].v, +ba[h].u,ba[h].v,ba[k].u,ba[k].v,q.map)),c(THREE.SubtractiveBlending)),xa?!q.wireframe&&q.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==3?(C.r=z.r=A.r=Z.r,C.g=z.g=A.g=Z.g,C.b=z.b=A.b=Z.b,p(l,i.v1.positionWorld,i.vertexNormalsWorld[0],C),p(l,i.v2.positionWorld,i.vertexNormalsWorld[1],z),p(l,i.v3.positionWorld,i.vertexNormalsWorld[2],A),C.r=Math.max(0,Math.min(q.color.r*C.r,1)),C.g=Math.max(0,Math.min(q.color.g*C.g,1)),C.b=Math.max(0,Math.min(q.color.b*C.b,1)),z.r=Math.max(0,Math.min(q.color.r* +z.r,1)),z.g=Math.max(0,Math.min(q.color.g*z.g,1)),z.b=Math.max(0,Math.min(q.color.b*z.b,1)),A.r=Math.max(0,Math.min(q.color.r*A.r,1)),A.g=Math.max(0,Math.min(q.color.g*A.g,1)),A.b=Math.max(0,Math.min(q.color.b*A.b,1)),J.r=(z.r+A.r)*0.5,J.g=(z.g+A.g)*0.5,J.b=(z.b+A.b)*0.5,fa=va(C,z,A,J),na(O,Q,T,X,I,D,0,0,1,0,0,1,fa)):(v.r=Z.r,v.g=Z.g,v.b=Z.b,p(l,i.centroidWorld,i.normalWorld,v),v.r=Math.max(0,Math.min(q.color.r*v.r,1)),v.g=Math.max(0,Math.min(q.color.g*v.g,1)),v.b=Math.max(0,Math.min(q.color.b*v.b, +1)),q.wireframe?ha(v,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(v)):q.wireframe?ha(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(q.color);else if(q instanceof THREE.MeshDepthMaterial)$=j.near,ga=j.far,C.r=C.g=C.b=1-ma(a.positionScreen.z,$,ga),z.r=z.g=z.b=1-ma(d.positionScreen.z,$,ga),A.r=A.g=A.b=1-ma(f.positionScreen.z,$,ga),J.r=(z.r+A.r)*0.5,J.g=(z.g+A.g)*0.5,J.b=(z.b+A.b)*0.5,fa=va(C,z,A,J),na(O,Q,T,X,I,D,0,0,1,0,0,1,fa);else if(q instanceof THREE.MeshNormalMaterial)v.r= +oa(i.normalWorld.x),v.g=oa(i.normalWorld.y),v.b=oa(i.normalWorld.z),q.wireframe?ha(v,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(v)}function L(a,d,f,g,h,k,i,q,n){e.info.render.vertices+=4;e.info.render.faces++;b(q.opacity);c(q.blending);if(q.map||q.envMap)E(a,d,g,0,1,3,i,q,n),E(h,f,k,1,2,3,i,q,n);else if(O=a.positionScreen.x,Q=a.positionScreen.y,T=d.positionScreen.x,X=d.positionScreen.y,I=f.positionScreen.x,D=f.positionScreen.y,R=g.positionScreen.x,y=g.positionScreen.y,P=h.positionScreen.x, +N=h.positionScreen.y,V=k.positionScreen.x,G=k.positionScreen.y,q instanceof THREE.MeshBasicMaterial)M(O,Q,T,X,I,D,R,y),q.wireframe?ha(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(q.color);else if(q instanceof THREE.MeshLambertMaterial)xa?!q.wireframe&&q.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==4?(C.r=z.r=A.r=J.r=Z.r,C.g=z.g=A.g=J.g=Z.g,C.b=z.b=A.b=J.b=Z.b,p(l,i.v1.positionWorld,i.vertexNormalsWorld[0],C),p(l,i.v2.positionWorld,i.vertexNormalsWorld[1],z), +p(l,i.v4.positionWorld,i.vertexNormalsWorld[3],A),p(l,i.v3.positionWorld,i.vertexNormalsWorld[2],J),C.r=Math.max(0,Math.min(q.color.r*C.r,1)),C.g=Math.max(0,Math.min(q.color.g*C.g,1)),C.b=Math.max(0,Math.min(q.color.b*C.b,1)),z.r=Math.max(0,Math.min(q.color.r*z.r,1)),z.g=Math.max(0,Math.min(q.color.g*z.g,1)),z.b=Math.max(0,Math.min(q.color.b*z.b,1)),A.r=Math.max(0,Math.min(q.color.r*A.r,1)),A.g=Math.max(0,Math.min(q.color.g*A.g,1)),A.b=Math.max(0,Math.min(q.color.b*A.b,1)),J.r=Math.max(0,Math.min(q.color.r* +J.r,1)),J.g=Math.max(0,Math.min(q.color.g*J.g,1)),J.b=Math.max(0,Math.min(q.color.b*J.b,1)),fa=va(C,z,A,J),H(O,Q,T,X,R,y),na(O,Q,T,X,R,y,0,0,1,0,0,1,fa),H(P,N,I,D,V,G),na(P,N,I,D,V,G,1,0,1,1,0,1,fa)):(v.r=Z.r,v.g=Z.g,v.b=Z.b,p(l,i.centroidWorld,i.normalWorld,v),v.r=Math.max(0,Math.min(q.color.r*v.r,1)),v.g=Math.max(0,Math.min(q.color.g*v.g,1)),v.b=Math.max(0,Math.min(q.color.b*v.b,1)),M(O,Q,T,X,I,D,R,y),q.wireframe?ha(v,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(v)):(M(O,Q,T, +X,I,D,R,y),q.wireframe?ha(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(q.color));else if(q instanceof THREE.MeshNormalMaterial)v.r=oa(i.normalWorld.x),v.g=oa(i.normalWorld.y),v.b=oa(i.normalWorld.z),M(O,Q,T,X,I,D,R,y),q.wireframe?ha(v,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(v);else if(q instanceof THREE.MeshDepthMaterial)$=j.near,ga=j.far,C.r=C.g=C.b=1-ma(a.positionScreen.z,$,ga),z.r=z.g=z.b=1-ma(d.positionScreen.z,$,ga),A.r=A.g=A.b=1-ma(g.positionScreen.z, +$,ga),J.r=J.g=J.b=1-ma(f.positionScreen.z,$,ga),fa=va(C,z,A,J),H(O,Q,T,X,R,y),na(O,Q,T,X,R,y,0,0,1,0,0,1,fa),H(P,N,I,D,V,G),na(P,N,I,D,V,G,1,0,1,1,0,1,fa)}function H(a,b,c,d,e,f){k.beginPath();k.moveTo(a,b);k.lineTo(c,d);k.lineTo(e,f);k.lineTo(a,b);k.closePath()}function M(a,b,c,d,e,f,g,h){k.beginPath();k.moveTo(a,b);k.lineTo(c,d);k.lineTo(e,f);k.lineTo(g,h);k.lineTo(a,b);k.closePath()}function ha(a,b,c,e){if(F!=b)k.lineWidth=F=b;if(w!=c)k.lineCap=w=c;if(x!=e)k.lineJoin=x=e;d(a.getContextStyle()); +k.stroke();W.inflate(b*2)}function ia(a){f(a.getContextStyle());k.fill()}function za(a,b,c,d,e,g,h,j,i,l,n,o,m){if(m.image.width!=0){if(m.needsUpdate==!0||ka[m.id]==void 0){var p=m.wrapS==THREE.RepeatWrapping,r=m.wrapT==THREE.RepeatWrapping;ka[m.id]=k.createPattern(m.image,p&&r?"repeat":p&&!r?"repeat-x":!p&&r?"repeat-y":"no-repeat");m.needsUpdate=!1}f(ka[m.id]);var p=m.offset.x/m.repeat.x,r=m.offset.y/m.repeat.y,s=(m.image.width-1)*m.repeat.x,m=(m.image.height-1)*m.repeat.y,h=(h+p)*s,j=(j+r)*m,i= +(i+p)*s,l=(l+r)*m,n=(n+p)*s,o=(o+r)*m;c-=a;d-=b;e-=a;g-=b;i-=h;l-=j;n-=h;o-=j;p=1/(i*o-n*l);m=(o*c-l*e)*p;l=(o*d-l*g)*p;c=(i*e-n*c)*p;d=(i*g-n*d)*p;a=a-m*h-c*j;b=b-l*h-d*j;k.save();k.transform(m,l,c,d,a,b);k.fill();k.restore()}}function na(a,b,c,d,e,f,g,h,j,i,l,m,n){var o,p;o=n.width-1;p=n.height-1;g*=o;h*=p;j*=o;i*=p;l*=o;m*=p;c-=a;d-=b;e-=a;f-=b;j-=g;i-=h;l-=g;m-=h;p=1/(j*m-l*i);o=(m*c-i*e)*p;i=(m*d-i*f)*p;c=(j*e-l*c)*p;d=(j*f-l*d)*p;a=a-o*g-c*h;b=b-i*g-d*h;k.save();k.transform(o,i,c,d,a,b);k.clip(); +k.drawImage(n,0,0);k.restore()}function va(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*255),b=~~(b.b*255),i=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),k=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);ca[0]=e<0?0:e>255?255:e;ca[1]=f<0?0:f>255?255:f;ca[2]=a<0?0:a>255?255:a;ca[4]=g<0?0:g>255?255:g;ca[5]=h<0?0:h>255?255:h;ca[6]=b<0?0:b>255?255:b;ca[8]=i<0?0:i>255?255:i;ca[9]=j<0?0:j>255?255:j;ca[10]=c<0?0:c>255?255:c;ca[12]=k<0?0:k>255?255:k;ca[13]=l<0?0:l>255?255:l;ca[14]=d<0? +0:d>255?255:d;qa.putImageData(ya,0,0);ua.drawImage(pa,0,0);return ra}function ma(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function oa(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function ja(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;e!=0&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}var wa,Ga,U,da;this.autoClear?this.clear():k.setTransform(1,0,0,-1,o,m);e.info.render.vertices=0;e.info.render.faces=0;g=n.projectScene(a,j,this.sortElements);h=g.elements;l=g.lights;(xa=l.length>0)&&i(l);wa=0;for(Ga=h.length;wa< +Ga;wa++)if(U=h[wa],da=U.material,da=da instanceof THREE.MeshFaceMaterial?U.faceMaterial:da,!(da==null||da.opacity==0)){W.empty();if(U instanceof THREE.RenderableParticle)u=U,u.x*=o,u.y*=m,r(u,U,da,a);else if(U instanceof THREE.RenderableLine)u=U.v1,s=U.v2,u.positionScreen.x*=o,u.positionScreen.y*=m,s.positionScreen.x*=o,s.positionScreen.y*=m,W.addPoint(u.positionScreen.x,u.positionScreen.y),W.addPoint(s.positionScreen.x,s.positionScreen.y),la.intersects(W)&&t(u,s,U,da,a);else if(U instanceof THREE.RenderableFace3)u= +U.v1,s=U.v2,B=U.v3,u.positionScreen.x*=o,u.positionScreen.y*=m,s.positionScreen.x*=o,s.positionScreen.y*=m,B.positionScreen.x*=o,B.positionScreen.y*=m,da.overdraw&&(ja(u.positionScreen,s.positionScreen),ja(s.positionScreen,B.positionScreen),ja(B.positionScreen,u.positionScreen)),W.add3Points(u.positionScreen.x,u.positionScreen.y,s.positionScreen.x,s.positionScreen.y,B.positionScreen.x,B.positionScreen.y),la.intersects(W)&&E(u,s,B,0,1,2,U,da,a);else if(U instanceof THREE.RenderableFace4)u=U.v1,s=U.v2, +B=U.v3,K=U.v4,u.positionScreen.x*=o,u.positionScreen.y*=m,s.positionScreen.x*=o,s.positionScreen.y*=m,B.positionScreen.x*=o,B.positionScreen.y*=m,K.positionScreen.x*=o,K.positionScreen.y*=m,aa.positionScreen.copy(s.positionScreen),ea.positionScreen.copy(K.positionScreen),da.overdraw&&(ja(u.positionScreen,s.positionScreen),ja(s.positionScreen,K.positionScreen),ja(K.positionScreen,u.positionScreen),ja(B.positionScreen,aa.positionScreen),ja(B.positionScreen,ea.positionScreen)),W.addPoint(u.positionScreen.x, +u.positionScreen.y),W.addPoint(s.positionScreen.x,s.positionScreen.y),W.addPoint(B.positionScreen.x,B.positionScreen.y),W.addPoint(K.positionScreen.x,K.positionScreen.y),la.intersects(W)&&L(u,s,B,K,aa,ea,U,da,a);Y.addRectangle(W)}k.setTransform(1,0,0,1,0,0)}};THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)}; THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.material=null;this.uvs=[[]];this.z=null}; THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.v4=new THREE.RenderableVertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.material=null;this.uvs=[[]];this.z=null};THREE.RenderableObject=function(){this.z=this.object=null}; THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null}; diff --git a/build/custom/ThreeDOM.js b/build/custom/ThreeDOM.js index 96633af9..761a5e87 100644 --- a/build/custom/ThreeDOM.js +++ b/build/custom/ThreeDOM.js @@ -14,31 +14,31 @@ Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&f+a<1}for(var d,e=[],f=0,g=a.children.length;fa.scale.x)return[];d={distance:f,point:a.position,face:null,object:a};e.push(d)}else if(a instanceof THREE.Mesh){f= -b(this.origin,this.direction,a.matrixWorld.getPosition());if(f===null||f>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return e;var h,j,k,i,l,n,m,p,o=a.geometry,q=o.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);f=0;for(g=o.faces.length;f0:n<0)))if(n=l.dot((new THREE.Vector3).sub(h,m))/n,m=m.addSelf(p.multiplyScalar(n)),d instanceof THREE.Face3)c(m,h,j,k)&&(d={distance:this.origin.distanceTo(m),point:m,face:d,object:a},e.push(d));else if(d instanceof THREE.Face4&&(c(m,h,j,i)||c(m,j,k,i)))d={distance:this.origin.distanceTo(m), -point:m,face:d,object:a},e.push(d)}return e}}; -THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b,c,d,e,f,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,i,l){h=!1;b=f;c=g;d=i;e=l;a()};this.addPoint=function(f,g){h?(h=!1,b=f,c=g,d=f,e=g):(b=bf?d:f,e=e>g?e:g);a()};this.add3Points= +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b=0&&m>=0&&n+m<1}for(var d=new THREE.Vector3,e=new THREE.Vector3,f=new THREE.Vector3,g,h,j,k,i,l,n,m,o,p=[],q=0,I=a.children.length;qa.scale.x)return[];o={distance:q,point:a.position, +face:null,object:a};p.push(o)}else if(a instanceof THREE.Mesh){q=b(this.origin,this.direction,a.matrixWorld.getPosition());if(q===null||q>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return p;var v,D,J,r,A,u,t,F,w=a.geometry,C=w.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);q=0;for(I=w.faces.length;q0:u<0)))if(u=A.dot((new THREE.Vector3).sub(v,t))/u,t=t.addSelf(F.multiplyScalar(u)),o instanceof THREE.Face3)c(t,v,D,J)&&(o={distance:this.origin.distanceTo(t),point:t,face:o,object:a}, +p.push(o));else if(o instanceof THREE.Face4&&(c(t,v,D,r)||c(t,D,J,r)))o={distance:this.origin.distanceTo(t),point:t,face:o,object:a},p.push(o)}return p}}; +THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b,c,d,e,f,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(j,f,g,l){h=!1;b=j;c=f;d=g;e=l;a()};this.addPoint=function(f,g){h?(h=!1,b=f,c=g,d=f,e=g):(b=bf?d:f,e=e>g?e:g);a()};this.add3Points= function(f,g,i,l,n,m){h?(h=!1,b=fi?f>n?f:n:i>n?i:n,e=g>l?g>m?g:m:l>m?l:m):(b=fi?f>n?f>d?f:d:n>d?n:d:i>n?i>d?i:d:n>d?n:d,e=g>l?g>m?g>e?g:e:m>e?m:e:l>m?l>e?l:e:m>e?m:e);a()};this.addRectangle=function(f){h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=bf.getRight()?d:f.getRight(),e=e> f.getBottom()?e:f.getBottom());a()};this.inflate=function(f){b-=f;c-=f;d+=f;e+=f;a()};this.minSelf=function(f){b=b>f.getLeft()?b:f.getLeft();c=c>f.getTop()?c:f.getTop();d=d=0&&Math.min(e,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}}; THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),dg&&h.positionScreen.z0&&u.z<1))g=L[H]=L[H]||new THREE.RenderableParticle,H++,A=g,A.x=u.x/u.w,A.y=u.y/u.w,A.z=u.z,A.rotation=t.rotation.z,A.scale.x=t.scale.x*Math.abs(A.x-(u.x+e.projectionMatrix.n11)/(u.w+e.projectionMatrix.n14)),A.scale.y=t.scale.y*Math.abs(A.y-(u.y+e.projectionMatrix.n22)/(u.w+e.projectionMatrix.n24)),A.material=t.material,s.elements.push(A);f&&s.elements.sort(c); -return s}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +i,l,n=[],m,o=[],p,q,I=[],v,D,J=[],r={objects:[],sprites:[],lights:[],elements:[]},A=new THREE.Vector3,u=new THREE.Vector4,t=new THREE.Matrix4,F=new THREE.Matrix4,w=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],C=new THREE.Vector4,H=new THREE.Vector4;this.computeFrustum=function(a){w[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);w[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);w[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+ +a.n23,a.n44+a.n24);w[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);w[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);w[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(a=0;a<6;a++){var b=w[a];b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}};this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);t.multiply(b.projectionMatrix,b.matrixWorldInverse);t.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix); +t.multiply(b.matrixWorld,b.projectionMatrixInverse);t.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectGraph=function(b,d){f=0;r.objects.length=0;r.sprites.length=0;r.lights.length=0;var g=function(b){if(b.visible!==!1){var c;if(c=b instanceof THREE.Mesh||b instanceof THREE.Line)if(!(c=b.frustumCulled===!1))a:{for(var d=b.matrixWorld, +f=-b.geometry.boundingSphere.radius*Math.max(b.scale.x,Math.max(b.scale.y,b.scale.z)),h=0;h<6;h++)if(c=w[h].x*d.n14+w[h].y*d.n24+w[h].z*d.n34+w[h].w,c<=f){c=!1;break a}c=!0}c?(t.multiplyVector3(A.copy(b.position)),e=a(),e.object=b,e.z=A.z,r.objects.push(e)):b instanceof THREE.Sprite||b instanceof THREE.Particle?(t.multiplyVector3(A.copy(b.position)),e=a(),e.object=b,e.z=A.z,r.sprites.push(e)):b instanceof THREE.Light&&r.lights.push(b);c=0;for(d=b.children.length;cg&&h.positionScreen.z0&&u.z<1))g=J[D]=J[D]||new THREE.RenderableParticle,D++,v=g,v.x=u.x/u.w,v.y=u.y/u.w,v.z=u.z,v.rotation=x.rotation.z,v.scale.x=x.scale.x*Math.abs(v.x-(u.x+e.projectionMatrix.n11)/(u.w+e.projectionMatrix.n14)),v.scale.y=x.scale.y*Math.abs(v.y-(u.y+e.projectionMatrix.n22)/(u.w+e.projectionMatrix.n24)),v.material=x.material,r.elements.push(v);f&&r.elements.sort(c); +return r}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-e),e=Math.sin(-e),f=Math.cos(c),c=Math.sin(c),g=a*b,h=d*e;this.w=g*f-h*c;this.x=g*c+h*f;this.y=d*b*f+a*e*c;this.z=a*e*f-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= @@ -90,5 +90,5 @@ THREE.SpriteAlignment.topRight=new THREE.Vector2(-1,-1);THREE.SpriteAlignment.ce THREE.Scene=function(){THREE.Object3D.call(this);this.overrideMaterial=this.fog=null;this.matrixAutoUpdate=!1;this.objects=[];this.lights=[];this.__objectsAdded=[];this.__objectsRemoved=[]};THREE.Scene.prototype=new THREE.Object3D;THREE.Scene.prototype.constructor=THREE.Scene; THREE.Scene.prototype.addObject=function(a){if(a instanceof THREE.Light)this.lights.indexOf(a)===-1&&this.lights.push(a);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&this.objects.indexOf(a)===-1){this.objects.push(a);this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);b!==-1&&this.__objectsRemoved.splice(b,1)}for(b=0;b1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b0&&a>0&&e+a<1}for(var d,f=[],e=0,g=a.children.length;ea.scale.x)return[];d={distance:e,point:a.position,face:null,object:a};f.push(d)}else if(a instanceof THREE.Mesh){e= -b(this.origin,this.direction,a.matrixWorld.getPosition());if(e===null||e>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;var h,j,n,i,k,o,l,q,r=a.geometry,u=r.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);e=0;for(g=r.faces.length;e0:o<0)))if(o=k.dot((new THREE.Vector3).sub(h,l))/o,l=l.addSelf(q.multiplyScalar(o)),d instanceof THREE.Face3)c(l,h,j,n)&&(d={distance:this.origin.distanceTo(l),point:l,face:d,object:a},f.push(d));else if(d instanceof THREE.Face4&&(c(l,h,j,i)||c(l,j,n,i)))d={distance:this.origin.distanceTo(l), -point:l,face:d,object:a},f.push(d)}return f}}; +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,d=[];b=0;for(c=a.length;b=0&&n>=0&&o+n<1}for(var d=new THREE.Vector3,f=new THREE.Vector3,e=new THREE.Vector3,g,h,j,l,i,k,o,n,p,q=[],t=0,J=a.children.length;ta.scale.x)return[];p={distance:t,point:a.position, +face:null,object:a};q.push(p)}else if(a instanceof THREE.Mesh){t=b(this.origin,this.direction,a.matrixWorld.getPosition());if(t===null||t>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return q;var z,H,v,u,C,x,w,E,y=a.geometry,F=y.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);t=0;for(J=y.faces.length;t0:x<0)))if(x=C.dot((new THREE.Vector3).sub(z,w))/x,w=w.addSelf(E.multiplyScalar(x)),p instanceof THREE.Face3)c(w,z,H,v)&&(p={distance:this.origin.distanceTo(w),point:w,face:p,object:a}, +q.push(p));else if(p instanceof THREE.Face4&&(c(w,z,H,u)||c(w,H,v,u)))p={distance:this.origin.distanceTo(w),point:w,face:p,object:a},q.push(p)}return q}}; THREE.Rectangle=function(){function a(){e=d-b;g=f-c}var b,c,d,f,e,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return e};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(e,g,i,k){h=!1;b=e;c=g;d=i;f=k;a()};this.addPoint=function(e,g){h?(h=!1,b=e,c=g,d=e,f=g):(b=be?d:e,f=f>g?f:g);a()};this.add3Points= -function(e,g,i,k,o,l){h?(h=!1,b=ei?e>o?e:o:i>o?i:o,f=g>k?g>l?g:l:k>l?k:l):(b=ei?e>o?e>d?e:d:o>d?o:d:i>o?i>d?i:d:o>d?o:d,f=g>k?g>l?g>f?g:f:l>f?l:f:k>l?k>f?k:f:l>f?l:f);a()};this.addRectangle=function(e){h?(h=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> +function(e,g,i,k,o,n){h?(h=!1,b=ei?e>o?e:o:i>o?i:o,f=g>k?g>n?g:n:k>n?k:n):(b=ei?e>o?e>d?e:d:o>d?o:d:i>o?i>d?i:d:o>d?o:d,f=g>k?g>n?g>f?g:f:n>f?n:f:k>n?k>f?k:f:n>f?n:f);a()};this.addRectangle=function(e){h?(h=!1,b=e.getLeft(),c=e.getTop(),d=e.getRight(),f=e.getBottom()):(b=be.getRight()?d:e.getRight(),f=f> e.getBottom()?f:e.getBottom());a()};this.inflate=function(e){b-=e;c-=e;d+=e;f+=e;a()};this.minSelf=function(e){b=b>e.getLeft()?b:e.getLeft();c=c>e.getTop()?c:e.getTop();d=d=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;f=d=c=b=0;a()};this.isEmpty=function(){return h}}; THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),dg&&h.positionScreen.z0&&A.z<1))g=t[I]=t[I]||new THREE.RenderableParticle,I++,y=g,y.x=A.x/A.w,y.y=A.y/A.w,y.z=A.z,y.rotation=F.rotation.z,y.scale.x=F.scale.x*Math.abs(y.x-(A.x+e.projectionMatrix.n11)/(A.w+e.projectionMatrix.n14)),y.scale.y=F.scale.y*Math.abs(y.y-(A.y+e.projectionMatrix.n22)/(A.w+e.projectionMatrix.n24)),y.material=F.material,v.elements.push(y);f&&v.elements.sort(c); -return v}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +THREE.Projector=function(){function a(){var a=g[e]=g[e]||new THREE.RenderableObject;e++;return a}function b(){var a=l[j]=l[j]||new THREE.RenderableVertex;j++;return a}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;return e>=0&&f>=0&&g>=0&&h>=0?!0:e<0&&f<0||g<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-f)):f<0&&(d=Math.min(d,e/(e-f))),g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h))),dg&&h.positionScreen.z0&&x.z<1))g=v[H]=v[H]||new THREE.RenderableParticle,H++,z=g,z.x=x.x/x.w,z.y=x.y/x.w,z.z=x.z,z.rotation=I.rotation.z,z.scale.x=I.scale.x*Math.abs(z.x-(x.x+e.projectionMatrix.n11)/(x.w+e.projectionMatrix.n14)),z.scale.y=I.scale.y*Math.abs(z.y-(x.y+e.projectionMatrix.n22)/(x.w+e.projectionMatrix.n24)),z.material=I.material,u.elements.push(z);f&&u.elements.sort(c); +return u}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,f=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-f),f=Math.sin(-f),e=Math.cos(c),c=Math.sin(c),g=a*b,h=d*f;this.w=g*e-h*c;this.x=g*c+h*e;this.y=d*b*e+a*f*c;this.z=a*f*e-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+f*e+c*h-d*g;this.y=c*a+f*g+d*e-b*h;this.z=d*a+f*h+b*g-c*e;this.w=f*a-b*e-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,h=this.z,j=this.w,n=j*c+g*f-h*d,i=j*d+h*c-e*f,k=j*f+e*d-g*c,c=-e* -c-g*d-h*f;b.x=n*j+c*-e+i*-h-k*-g;b.y=i*j+c*-g+k*-e-n*-h;b.z=k*j+c*-h+n*-g-i*-e;return b}}; +this.x,c=this.y,d=this.z,f=this.w,e=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+f*e+c*h-d*g;this.y=c*a+f*g+d*e-b*h;this.z=d*a+f*h+b*g-c*e;this.w=f*a-b*e-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,f=a.z,e=this.x,g=this.y,h=this.z,j=this.w,l=j*c+g*f-h*d,i=j*d+h*c-e*f,k=j*f+e*d-g*c,c=-e* +c-g*d-h*f;b.x=l*j+c*-e+i*-h-k*-g;b.y=i*j+c*-g+k*-e-l*-h;b.z=k*j+c*-h+l*-g-i*-e;return b}}; THREE.Quaternion.slerp=function(a,b,c,d){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;f<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,f=-f):c.copy(b);if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var e=Math.acos(f),f=Math.sqrt(1-f*f);if(Math.abs(f)<0.001)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-d)*e)/f;d=Math.sin(d*e)/f;c.w=a.w*b+c.w*d;c.x=a.x*b+c.x*d;c.y=a.y*b+c.y*d;c.z=a.z*b+c.z*d;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; THREE.Face3=function(a,b,c,d,f,e){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=e;this.centroid=new THREE.Vector3}; THREE.Face4=function(a,b,c,d,f,e,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; @@ -82,9 +82,9 @@ b;a++)c=this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid c,d,f,e,g,h=new THREE.Vector3,j=new THREE.Vector3;d=0;for(f=this.faces.length;d0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, +c.vertexNormals[1].copy(d[c.b]),c.vertexNormals[2].copy(d[c.c]),c.vertexNormals[3].copy(d[c.d]))},computeTangents:function(){function a(a,b,c,d,e,f,w){h=a.vertices[b].position;j=a.vertices[c].position;l=a.vertices[d].position;i=g[e];k=g[f];o=g[w];n=j.x-h.x;p=l.x-h.x;q=j.y-h.y;t=l.y-h.y;J=j.z-h.z;z=l.z-h.z;H=k.u-i.u;v=o.u-i.u;u=k.v-i.v;C=o.v-i.v;x=1/(H*C-v*u);F.set((C*n-u*p)*x,(C*q-u*t)*x,(C*J-u*z)*x);B.set((H*p-v*n)*x,(H*t-v*q)*x,(H*z-v*J)*x);E[b].addSelf(F);E[c].addSelf(F);E[d].addSelf(F);y[b].addSelf(B); +y[c].addSelf(B);y[d].addSelf(B)}var b,c,d,f,e,g,h,j,l,i,k,o,n,p,q,t,J,z,H,v,u,C,x,w,E=[],y=[],F=new THREE.Vector3,B=new THREE.Vector3,L=new THREE.Vector3,N=new THREE.Vector3,M=new THREE.Vector3;b=0;for(c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y, this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,b=0,c=this.vertices.length;b1?1:a}var d=this,f,e,g,h=new THREE.Projector,j=document.createElementNS("http://www.w3.org/2000/svg","svg"),n,i,k,o,l,q,r,u,K=new THREE.Rectangle,y=new THREE.Rectangle,I=!1,t=new THREE.Color,v=new THREE.Color,E=new THREE.Color,A=new THREE.Color,B,G=new THREE.Vector3,x=[],H=[],z,L,N,M=1;this.domElement=j;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, -faces:0}};this.setQuality=function(a){switch(a){case "high":M=1;break;case "low":M=0}};this.setSize=function(a,b){n=a;i=b;k=n/2;o=i/2;j.setAttribute("viewBox",-k+" "+-o+" "+n+" "+i);j.setAttribute("width",n);j.setAttribute("height",i);K.set(-k,-o,k,o)};this.clear=function(){for(;j.childNodes.length>0;)j.removeChild(j.childNodes[0])};this.render=function(i,n){var x,G,s,p;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;f=h.projectScene(i,n,this.sortElements);e=f.elements; -g=f.lights;N=L=0;if(I=g.length>0){v.setRGB(0,0,0);E.setRGB(0,0,0);A.setRGB(0,0,0);x=0;for(G=g.length;x1?1:a}var d=this,f,e,g,h=new THREE.Projector,j=document.createElementNS("http://www.w3.org/2000/svg","svg"),l,i,k,o,n,p,q,t,J=new THREE.Rectangle,z=new THREE.Rectangle,H=!1,v=new THREE.Color,u=new THREE.Color,C=new THREE.Color,x=new THREE.Color,w,E=new THREE.Vector3,y=[],F=[],B,L,N,M=1;this.domElement=j;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, +faces:0}};this.setQuality=function(a){switch(a){case "high":M=1;break;case "low":M=0}};this.setSize=function(a,b){l=a;i=b;k=l/2;o=i/2;j.setAttribute("viewBox",-k+" "+-o+" "+l+" "+i);j.setAttribute("width",l);j.setAttribute("height",i);J.set(-k,-o,k,o)};this.clear=function(){for(;j.childNodes.length>0;)j.removeChild(j.childNodes[0])};this.render=function(i,l){var y,E,s,r;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;f=h.projectScene(i,l,this.sortElements);e=f.elements; +g=f.lights;N=L=0;if(H=g.length>0){u.setRGB(0,0,0);C.setRGB(0,0,0);x.setRGB(0,0,0);y=0;for(E=g.length;y1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b),this.z=Math.atan2(-a.n12 THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,e){this.x=a;this.y=b;this.z=c;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Ray=function(a,b){this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3}; -THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,e=[];b=0;for(c=a.length;b0&&a>0&&h+a<1}for(var e,f=[],h=0,i=a.children.length;ha.scale.x)return[];e={distance:h,point:a.position,face:null,object:a};f.push(e)}else if(a instanceof THREE.Mesh){h= -b(this.origin,this.direction,a.matrixWorld.getPosition());if(h===null||h>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return f;var j,l,m,k,o,v,q,B,A=a.geometry,G=A.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);h=0;for(i=A.faces.length;h0:v<0)))if(v=o.dot((new THREE.Vector3).sub(j,q))/v,q=q.addSelf(B.multiplyScalar(v)),e instanceof THREE.Face3)c(q,j,l,m)&&(e={distance:this.origin.distanceTo(q),point:q,face:e,object:a},f.push(e));else if(e instanceof THREE.Face4&&(c(q,j,l,k)||c(q,l,m,k)))e={distance:this.origin.distanceTo(q), -point:q,face:e,object:a},f.push(e)}return f}}; +THREE.Ray.prototype={constructor:THREE.Ray,intersectScene:function(a){return this.intersectObjects(a.children)},intersectObjects:function(a){var b,c,e=[];b=0;for(c=a.length;b=0&&z>=0&&t+z<1}for(var e=new THREE.Vector3,f=new THREE.Vector3,h=new THREE.Vector3,i,j,m,l,k,o,t,z,y,A=[],B=0,ja=a.children.length;Ba.scale.x)return[];y={distance:B,point:a.position, +face:null,object:a};A.push(y)}else if(a instanceof THREE.Mesh){B=b(this.origin,this.direction,a.matrixWorld.getPosition());if(B===null||B>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return A;var aa,na,sa,G,M,F,H,S,C=a.geometry,Y=C.vertices;a.matrixRotationWorld.extractRotation(a.matrixWorld);B=0;for(ja=C.faces.length;B0:F<0)))if(F=M.dot((new THREE.Vector3).sub(aa,H))/F,H=H.addSelf(S.multiplyScalar(F)),y instanceof THREE.Face3)c(H,aa,na,sa)&&(y={distance:this.origin.distanceTo(H),point:H,face:y, +object:a},A.push(y));else if(y instanceof THREE.Face4&&(c(H,aa,na,G)||c(H,na,sa,G)))y={distance:this.origin.distanceTo(H),point:H,face:y,object:a},A.push(y)}return A}}; THREE.Rectangle=function(){function a(){h=e-b;i=f-c}var b,c,e,f,h,i,j=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return h};this.getHeight=function(){return i};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return e};this.getBottom=function(){return f};this.set=function(h,i,k,o){j=!1;b=h;c=i;e=k;f=o;a()};this.addPoint=function(h,i){j?(j=!1,b=h,c=i,e=h,f=i):(b=bh?e:h,f=f>i?f:i);a()};this.add3Points= -function(h,i,k,o,v,q){j?(j=!1,b=hk?h>v?h:v:k>v?k:v,f=i>o?i>q?i:q:o>q?o:q):(b=hk?h>v?h>e?h:e:v>e?v:e:k>v?k>e?k:e:v>e?v:e,f=i>o?i>q?i>f?i:f:q>f?q:f:o>q?o>f?o:f:q>f?q:f);a()};this.addRectangle=function(h){j?(j=!1,b=h.getLeft(),c=h.getTop(),e=h.getRight(),f=h.getBottom()):(b=bh.getRight()?e:h.getRight(),f=f> +function(h,i,k,o,t,z){j?(j=!1,b=hk?h>t?h:t:k>t?k:t,f=i>o?i>z?i:z:o>z?o:z):(b=hk?h>t?h>e?h:e:t>e?t:e:k>t?k>e?k:e:t>e?t:e,f=i>o?i>z?i>f?i:f:z>f?z:f:o>z?o>f?o:f:z>f?z:f);a()};this.addRectangle=function(h){j?(j=!1,b=h.getLeft(),c=h.getTop(),e=h.getRight(),f=h.getBottom()):(b=bh.getRight()?e:h.getRight(),f=f> h.getBottom()?f:h.getBottom());a()};this.inflate=function(h){b-=h;c-=h;e+=h;f+=h;a()};this.minSelf=function(h){b=b>h.getLeft()?b:h.getLeft();c=c>h.getTop()?c:h.getTop();e=e=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){j=!0;f=e=c=b=0;a()};this.isEmpty=function(){return j}}; THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&h>=0&&f>=0&&i>=0?!0:e<0&&h<0||f<0&&i<0?!1:(e<0?c=Math.max(c,e/(e-h)):h<0&&(d=Math.min(d,e/(e-h))),f<0?c=Math.max(c,f/(f-i)):i<0&&(d=Math.min(d,f/(f-i))),dd&&j.positionScreen.z0&&E.z<1))d=va[sa]=va[sa]||new THREE.RenderableParticle,sa++,ma=d,ma.x=E.x/E.w,ma.y=E.y/E.w,ma.z=E.z,ma.rotation=U.rotation.z,ma.scale.x=U.scale.x*Math.abs(ma.x-(E.x+h.projectionMatrix.n11)/(E.w+h.projectionMatrix.n14)),ma.scale.y=U.scale.y*Math.abs(ma.y-(E.y+h.projectionMatrix.n22)/(E.w+h.projectionMatrix.n24)), -ma.material=U.material,R.elements.push(ma);f&&R.elements.sort(c);return R}};THREE.Quaternion=function(a,b,c,e){this.set(a||0,b||0,c||0,e!==void 0?e:1)}; +THREE.Projector=function(){function a(){var a=i[h]=i[h]||new THREE.RenderableObject;h++;return a}function b(){var a=l[m]=l[m]||new THREE.RenderableVertex;m++;return a}function c(a,b){return b.z-a.z}function e(a,b){var c=0,d=1,e=a.z+a.w,h=b.z+b.w,f=-a.z+a.w,i=-b.z+b.w;return e>=0&&h>=0&&f>=0&&i>=0?!0:e<0&&h<0||f<0&&i<0?!1:(e<0?c=Math.max(c,e/(e-h)):h<0&&(d=Math.min(d,e/(e-h))),f<0?c=Math.max(c,f/(f-i)):i<0&&(d=Math.min(d,f/(f-i))),dd&&j.positionScreen.z0&&F.z<1))d=sa[na]=sa[na]||new THREE.RenderableParticle,na++,aa=d,aa.x=F.x/F.w,aa.y=F.y/F.w,aa.z=F.z,aa.rotation=V.rotation.z,aa.scale.x=V.scale.x*Math.abs(aa.x-(F.x+h.projectionMatrix.n11)/(F.w+h.projectionMatrix.n14)),aa.scale.y=V.scale.y*Math.abs(aa.y-(F.y+h.projectionMatrix.n22)/(F.w+h.projectionMatrix.n24)),aa.material=V.material, +G.elements.push(aa);f&&G.elements.sort(c);return G}};THREE.Quaternion=function(a,b,c,e){this.set(a||0,b||0,c||0,e!==void 0?e:1)}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,e){this.x=a;this.y=b;this.z=c;this.w=e;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,e=a.y*b,f=a.z*b,a=Math.cos(e),e=Math.sin(e),b=Math.cos(-f),f=Math.sin(-f),h=Math.cos(c),c=Math.sin(c),i=a*b,j=e*f;this.w=i*h-j*c;this.x=i*c+j*h;this.y=e*b*h+a*f*c;this.z=a*f*h-e*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,e=Math.sin(c); this.x=a.x*e;this.y=a.y*e;this.z=a.z*e;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,e=this.z,f=this.w,h=a.x,i=a.y,j=a.z,a=a.w;this.x=b*a+f*h+c*j-e*i;this.y=c*a+f*i+e*h-b*j;this.z=e*a+f*j+b*i-c*h;this.w=f*a-b*h-c*i-e*j;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,f=a.z,h=this.x,i=this.y,j=this.z,l=this.w,m=l*c+i*f-j*e,k=l*e+j*c-h*f,o=l*f+h*e-i*c,c=-h* -c-i*e-j*f;b.x=m*l+c*-h+k*-j-o*-i;b.y=k*l+c*-i+o*-h-m*-j;b.z=o*l+c*-j+m*-i-k*-h;return b}}; +this.x,c=this.y,e=this.z,f=this.w,h=a.x,i=a.y,j=a.z,a=a.w;this.x=b*a+f*h+c*j-e*i;this.y=c*a+f*i+e*h-b*j;this.z=e*a+f*j+b*i-c*h;this.w=f*a-b*h-c*i-e*j;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,f=a.z,h=this.x,i=this.y,j=this.z,m=this.w,l=m*c+i*f-j*e,k=m*e+j*c-h*f,o=m*f+h*e-i*c,c=-h* +c-i*e-j*f;b.x=l*m+c*-h+k*-j-o*-i;b.y=k*m+c*-i+o*-h-l*-j;b.z=o*m+c*-j+l*-i-k*-h;return b}}; THREE.Quaternion.slerp=function(a,b,c,e){var f=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;f<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,f=-f):c.copy(b);if(Math.abs(f)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var h=Math.acos(f),f=Math.sqrt(1-f*f);if(Math.abs(f)<0.001)return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-e)*h)/f;e=Math.sin(e*h)/f;c.w=a.w*b+c.w*e;c.x=a.x*b+c.x*e;c.y=a.y*b+c.y*e;c.z=a.z*b+c.z*e;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; THREE.Face3=function(a,b,c,e,f,h){this.a=a;this.b=b;this.c=c;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=h;this.centroid=new THREE.Vector3}; THREE.Face4=function(a,b,c,e,f,h,i){this.a=a;this.b=b;this.c=c;this.d=e;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materialIndex=i;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; @@ -79,18 +79,18 @@ THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;ret THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,e=this.vertices.length;c0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x], +c.vertexNormals[1].copy(e[c.b]),c.vertexNormals[2].copy(e[c.c]),c.vertexNormals[3].copy(e[c.d]))},computeTangents:function(){function a(a,d,b,c,e,h,f){j=a.vertices[d].position;m=a.vertices[b].position;l=a.vertices[c].position;k=i[e];o=i[h];t=i[f];z=m.x-j.x;y=l.x-j.x;A=m.y-j.y;B=l.y-j.y;ja=m.z-j.z;aa=l.z-j.z;na=o.u-k.u;sa=t.u-k.u;G=o.v-k.v;M=t.v-k.v;F=1/(na*M-sa*G);Y.set((M*z-G*y)*F,(M*A-G*B)*F,(M*ja-G*aa)*F);Q.set((na*y-sa*z)*F,(na*B-sa*A)*F,(na*aa-sa*ja)*F);S[d].addSelf(Y);S[b].addSelf(Y);S[c].addSelf(Y); +C[d].addSelf(Q);C[b].addSelf(Q);C[c].addSelf(Q)}var b,c,e,f,h,i,j,m,l,k,o,t,z,y,A,B,ja,aa,na,sa,G,M,F,H,S=[],C=[],Y=new THREE.Vector3,Q=new THREE.Vector3,xa=new THREE.Vector3,ia=new THREE.Vector3,E=new THREE.Vector3;b=0;for(c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x], y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.z< this.boundingBox.z[0])this.boundingBox.z[0]=a.position.z;else if(a.position.z>this.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=0,b=0,c=this.vertices.length;bthis.points.length-2?h:h+1;c[3]=h>this.points.length-3?h:h+2;m=this.points[c[0]];k=this.points[c[1]]; -o=this.points[c[2]];v=this.points[c[3]];j=i*i;l=i*j;e.x=b(m.x,k.x,o.x,v.x,i,j,l);e.y=b(m.y,k.y,o.y,v.y,i,j,l);e.z=b(m.z,k.z,o.z,v.z,i,j,l);return e};this.getControlPointsArray=function(){var a,b,c=this.points.length,e=[];for(a=0;athis.points.length-2?h:h+1;c[3]=h>this.points.length-3?h:h+2;l=this.points[c[0]];k=this.points[c[1]]; +o=this.points[c[2]];t=this.points[c[3]];j=i*i;m=i*j;e.x=b(l.x,k.x,o.x,t.x,i,j,m);e.y=b(l.y,k.y,o.y,t.y,i,j,m);e.z=b(l.z,k.z,o.z,t.z,i,j,m);return e};this.getControlPointsArray=function(){var a,b,c=this.points.length,e=[];for(a=0;a=0)return a.geometry.materials[b.materialIndex]}function c(a,b,c){var e,h,f,i=a.vertices,u=i.length,t=a.colors,p=t.length,j=a.__vertexArray,k=a.__colorArray,Aa=a.__sortArray,y=a.__dirtyVertices,l=a.__dirtyColors,m=a.__webglCustomAttributesList,o;if(m){f=0;for(e=m.length;f=0)b&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer),d.vertexAttribPointer(a.position,3,d.FLOAT,!1,0,0));else if(i.morphTargetBase){c=h.program.attributes;i.morphTargetBase!==-1?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[i.morphTargetBase]),d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0)):c.position>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer), -d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0));if(i.morphTargetForcedOrder.length){j=0;var t=i.morphTargetForcedOrder;for(u=i.morphTargetInfluences;jp&&(k=o,p=u[k]);d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[k]);d.vertexAttribPointer(c["morphTarget"+j],3,d.FLOAT,!1,0,0);i.__webglMorphTargetInfluences[j]=p;t[k]=1;p=-1;j++}}h.program.uniforms.morphTargetInfluences!==null&&d.uniform1fv(h.program.uniforms.morphTargetInfluences,i.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){j=0;for(u=f.__webglCustomAttributesList.length;j= +THREE.WebGLRenderer=function(a){function b(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;else if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function c(a,b,c){var e,h,f,i=a.vertices,u=i.length,q=a.colors,r=q.length,j=a.__vertexArray,Ba=a.__colorArray,k=a.__sortArray,P=a.__dirtyVertices,m=a.__dirtyColors,l=a.__webglCustomAttributesList,o;if(l){f=0;for(e=l.length;f=0)b&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer),d.vertexAttribPointer(a.position,3,d.FLOAT,!1,0,0));else if(i.morphTargetBase){c=h.program.attributes;i.morphTargetBase!==-1?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[i.morphTargetBase]),d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0)):c.position>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglVertexBuffer), +d.vertexAttribPointer(c.position,3,d.FLOAT,!1,0,0));if(i.morphTargetForcedOrder.length){j=0;var q=i.morphTargetForcedOrder;for(u=i.morphTargetInfluences;jr&&(k=o,r=u[k]);d.bindBuffer(d.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[k]);d.vertexAttribPointer(c["morphTarget"+j],3,d.FLOAT,!1,0,0);i.__webglMorphTargetInfluences[j]=r;q[k]=1;r=-1;j++}}h.program.uniforms.morphTargetInfluences!==null&&d.uniform1fv(h.program.uniforms.morphTargetInfluences,i.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){j=0;for(u=f.__webglCustomAttributesList.length;j= 0&&(d.bindBuffer(d.ARRAY_BUFFER,c.buffer),d.vertexAttribPointer(a[c.buffer.belongsToAttribute],c.size,d.FLOAT,!1,0,0))}a.color>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglColorBuffer),d.vertexAttribPointer(a.color,3,d.FLOAT,!1,0,0));a.normal>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglNormalBuffer),d.vertexAttribPointer(a.normal,3,d.FLOAT,!1,0,0));a.tangent>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglTangentBuffer),d.vertexAttribPointer(a.tangent,4,d.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(d.bindBuffer(d.ARRAY_BUFFER, f.__webglUVBuffer),d.vertexAttribPointer(a.uv,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv)):d.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(d.bindBuffer(d.ARRAY_BUFFER,f.__webglUV2Buffer),d.vertexAttribPointer(a.uv2,2,d.FLOAT,!1,0,0),d.enableVertexAttribArray(a.uv2)):d.disableVertexAttribArray(a.uv2));h.skinning&&a.skinVertexA>=0&&a.skinVertexB>=0&&a.skinIndex>=0&&a.skinWeight>=0&&(d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexABuffer),d.vertexAttribPointer(a.skinVertexA,4, d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),d.vertexAttribPointer(a.skinVertexB,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),d.vertexAttribPointer(a.skinIndex,4,d.FLOAT,!1,0,0),d.bindBuffer(d.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),d.vertexAttribPointer(a.skinWeight,4,d.FLOAT,!1,0,0))}i instanceof THREE.Mesh?(h.wireframe?(d.lineWidth(h.wireframeLinewidth),b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),d.drawElements(d.LINES,f.__webglLineCount, -d.UNSIGNED_SHORT,0)):(b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),d.drawElements(d.TRIANGLES,f.__webglFaceCount,d.UNSIGNED_SHORT,0)),F.info.render.calls++,F.info.render.vertices+=f.__webglFaceCount,F.info.render.faces+=f.__webglFaceCount/3):i instanceof THREE.Line?(i=i.type===THREE.LineStrip?d.LINE_STRIP:d.LINES,d.lineWidth(h.linewidth),d.drawArrays(i,0,f.__webglLineCount),F.info.render.calls++):i instanceof THREE.ParticleSystem?(d.drawArrays(d.POINTS,0,f.__webglParticleCount),F.info.render.calls++): -i instanceof THREE.Ribbon&&(d.drawArrays(d.TRIANGLE_STRIP,0,f.__webglVertexCount),F.info.render.calls++)}}function h(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=d.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=d.createBuffer();a.hasPos&&(d.bindBuffer(d.ARRAY_BUFFER,a.__webglVertexBuffer),d.bufferData(d.ARRAY_BUFFER,a.positionArray,d.DYNAMIC_DRAW),d.enableVertexAttribArray(b.attributes.position),d.vertexAttribPointer(b.attributes.position,3,d.FLOAT,!1,0,0));if(a.hasNormal){d.bindBuffer(d.ARRAY_BUFFER, -a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,f,h,i,j,t,k,o,l,m,y=a.count*3;for(m=0;m=0)b=b.geometry.materials[d],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=c)b.transparent?(a.transparent= -b,a.opaque=null):(a.opaque=b,a.transparent=null)}function B(a,b){return b.z-a.z}function A(a){var b,c,m,l=0,K,q,u,t,p=a.lights;V||(V=new THREE.PerspectiveCamera(F.shadowCameraFov,F.shadowMapWidth/F.shadowMapHeight,F.shadowCameraNear,F.shadowCameraFar));b=0;for(c=p.length;b=0;d--)a[d].object===b&&a.splice(d,1)}function R(a,b,d){a.push({buffer:b,object:d,opaque:null,transparent:null})}function N(a){if(a!==ka){switch(a){case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD); -d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,d.FUNC_ADD),d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}ka=a}}function E(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(d.texParameteri(a,d.TEXTURE_WRAP_S,P(b.wrapS)),d.texParameteri(a,d.TEXTURE_WRAP_T,P(b.wrapT)),d.texParameteri(a,d.TEXTURE_MAG_FILTER,P(b.magFilter)), -d.texParameteri(a,d.TEXTURE_MIN_FILTER,P(b.minFilter)),d.generateMipmap(a)):(d.texParameteri(a,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_MAG_FILTER,wa(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,wa(b.minFilter)))}function O(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=d.createTexture(),F.info.memory.textures++;d.activeTexture(d.TEXTURE0+b);d.bindTexture(d.TEXTURE_2D,a.__webglTexture);a instanceof -THREE.DataTexture?d.texImage2D(d.TEXTURE_2D,0,P(a.format),a.image.width,a.image.height,0,P(a.format),d.UNSIGNED_BYTE,a.image.data):d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,a.image);E(d.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+b),d.bindTexture(d.TEXTURE_2D,a.__webglTexture)}function qa(a,b){d.bindRenderbuffer(d.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER, +d.UNSIGNED_SHORT,0)):(b&&d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),d.drawElements(d.TRIANGLES,f.__webglFaceCount,d.UNSIGNED_SHORT,0)),E.info.render.calls++,E.info.render.vertices+=f.__webglFaceCount,E.info.render.faces+=f.__webglFaceCount/3):i instanceof THREE.Line?(i=i.type===THREE.LineStrip?d.LINE_STRIP:d.LINES,d.lineWidth(h.linewidth),d.drawArrays(i,0,f.__webglLineCount),E.info.render.calls++):i instanceof THREE.ParticleSystem?(d.drawArrays(d.POINTS,0,f.__webglParticleCount),E.info.render.calls++): +i instanceof THREE.Ribbon&&(d.drawArrays(d.TRIANGLE_STRIP,0,f.__webglVertexCount),E.info.render.calls++)}}function h(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=d.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=d.createBuffer();a.hasPos&&(d.bindBuffer(d.ARRAY_BUFFER,a.__webglVertexBuffer),d.bufferData(d.ARRAY_BUFFER,a.positionArray,d.DYNAMIC_DRAW),d.enableVertexAttribArray(b.attributes.position),d.vertexAttribPointer(b.attributes.position,3,d.FLOAT,!1,0,0));if(a.hasNormal){d.bindBuffer(d.ARRAY_BUFFER, +a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,f,h,i,j,q,r,k,o,m,l=a.count*3;for(m=0;m=0)b=b.geometry.materials[d],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=c)b.transparent?(a.transparent= +b,a.opaque=null):(a.opaque=b,a.transparent=null)}function y(a,b){return b.z-a.z}function A(a){var b,c,m,wa=0,L,l,u,q,r=a.lights;W||(W=new THREE.PerspectiveCamera(E.shadowCameraFov,E.shadowMapWidth/E.shadowMapHeight,E.shadowCameraNear,E.shadowCameraFar));b=0;for(c=r.length;b=0;d--)a[d].object===b&&a.splice(d,1)}function G(a,b,d){a.push({buffer:b,object:d,opaque:null,transparent:null})}function M(a){if(a!==pa){switch(a){case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD); +d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,d.FUNC_ADD),d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}pa=a}}function F(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(d.texParameteri(a,d.TEXTURE_WRAP_S,ia(b.wrapS)),d.texParameteri(a,d.TEXTURE_WRAP_T,ia(b.wrapT)),d.texParameteri(a,d.TEXTURE_MAG_FILTER,ia(b.magFilter)), +d.texParameteri(a,d.TEXTURE_MIN_FILTER,ia(b.minFilter)),d.generateMipmap(a)):(d.texParameteri(a,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE),d.texParameteri(a,d.TEXTURE_MAG_FILTER,xa(b.magFilter)),d.texParameteri(a,d.TEXTURE_MIN_FILTER,xa(b.minFilter)))}function H(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=d.createTexture(),E.info.memory.textures++;d.activeTexture(d.TEXTURE0+b);d.bindTexture(d.TEXTURE_2D,a.__webglTexture);a instanceof +THREE.DataTexture?d.texImage2D(d.TEXTURE_2D,0,ia(a.format),a.image.width,a.image.height,0,ia(a.format),d.UNSIGNED_BYTE,a.image.data):d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,a.image);F(d.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else d.activeTexture(d.TEXTURE0+b),d.bindTexture(d.TEXTURE_2D,a.__webglTexture)}function S(a,b){d.bindRenderbuffer(d.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER, d.DEPTH_ATTACHMENT,d.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_STENCIL,b.width,b.height),d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_STENCIL_ATTACHMENT,d.RENDERBUFFER,a)):d.renderbufferStorage(d.RENDERBUFFER,d.RGBA4,b.width,b.height)}function C(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=d.createTexture(); -if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture);E(d.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=d.createFramebuffer();a.__webglRenderbuffer[c]=d.createRenderbuffer();d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,P(a.format),a.width,a.height,0,P(a.format),P(a.type),null);var e=a,f=d.TEXTURE_CUBE_MAP_POSITIVE_X+c;d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer[c]);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0, -f,e.__webglTexture,0);qa(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=d.createFramebuffer(),a.__webglRenderbuffer=d.createRenderbuffer(),d.bindTexture(d.TEXTURE_2D,a.__webglTexture),E(d.TEXTURE_2D,a,a),d.texImage2D(d.TEXTURE_2D,0,P(a.format),a.width,a.height,0,P(a.format),P(a.type),null),c=d.TEXTURE_2D,d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,c,a.__webglTexture,0),d.bindRenderbuffer(d.RENDERBUFFER,a.__webglRenderbuffer), -qa(a.__webglRenderbuffer,a);b?d.bindTexture(d.TEXTURE_CUBE_MAP,null):d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=ta,a=Ia,e=Ba,f=Ca);b!==Ya&&(d.bindFramebuffer(d.FRAMEBUFFER,b),d.viewport(e,f,c,a),Ya=b)}function ja(a){a instanceof THREE.WebGLRenderTargetCube?(d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture),d.generateMipmap(d.TEXTURE_CUBE_MAP), -d.bindTexture(d.TEXTURE_CUBE_MAP,null)):(d.bindTexture(d.TEXTURE_2D,a.__webglTexture),d.generateMipmap(d.TEXTURE_2D),d.bindTexture(d.TEXTURE_2D,null))}function aa(a,b){var c;a==="fragment"?c=d.createShader(d.FRAGMENT_SHADER):a==="vertex"&&(c=d.createShader(d.VERTEX_SHADER));d.shaderSource(c,b);d.compileShader(c);if(!d.getShaderParameter(c,d.COMPILE_STATUS))return console.error(d.getShaderInfoLog(c)),console.error(b),null;return c}function wa(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST; -default:return d.LINEAR}}function P(a){switch(a){case THREE.RepeatWrapping:return d.REPEAT;case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR; +if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture);F(d.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=d.createFramebuffer();a.__webglRenderbuffer[c]=d.createRenderbuffer();d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,ia(a.format),a.width,a.height,0,ia(a.format),ia(a.type),null);var e=a,f=d.TEXTURE_CUBE_MAP_POSITIVE_X+c;d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer[c]);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0, +f,e.__webglTexture,0);S(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=d.createFramebuffer(),a.__webglRenderbuffer=d.createRenderbuffer(),d.bindTexture(d.TEXTURE_2D,a.__webglTexture),F(d.TEXTURE_2D,a,a),d.texImage2D(d.TEXTURE_2D,0,ia(a.format),a.width,a.height,0,ia(a.format),ia(a.type),null),c=d.TEXTURE_2D,d.bindFramebuffer(d.FRAMEBUFFER,a.__webglFramebuffer),d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,c,a.__webglTexture,0),d.bindRenderbuffer(d.RENDERBUFFER,a.__webglRenderbuffer), +S(a.__webglRenderbuffer,a);b?d.bindTexture(d.TEXTURE_CUBE_MAP,null):d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=ua,a=Ia,e=Ca,f=Da);b!==Xa&&(d.bindFramebuffer(d.FRAMEBUFFER,b),d.viewport(e,f,c,a),Xa=b)}function Y(a){a instanceof THREE.WebGLRenderTargetCube?(d.bindTexture(d.TEXTURE_CUBE_MAP,a.__webglTexture),d.generateMipmap(d.TEXTURE_CUBE_MAP), +d.bindTexture(d.TEXTURE_CUBE_MAP,null)):(d.bindTexture(d.TEXTURE_2D,a.__webglTexture),d.generateMipmap(d.TEXTURE_2D),d.bindTexture(d.TEXTURE_2D,null))}function Q(a,b){var c;a==="fragment"?c=d.createShader(d.FRAGMENT_SHADER):a==="vertex"&&(c=d.createShader(d.VERTEX_SHADER));d.shaderSource(c,b);d.compileShader(c);if(!d.getShaderParameter(c,d.COMPILE_STATUS))return console.error(d.getShaderInfoLog(c)),console.error(b),null;return c}function xa(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST; +default:return d.LINEAR}}function ia(a){switch(a){case THREE.RepeatWrapping:return d.REPEAT;case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR; case THREE.ByteType:return d.BYTE;case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;case THREE.AlphaFormat:return d.ALPHA;case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0} -var F=this,d,xa=[],Wa=null,Ya=null,J=-1,Q=null,S=0,T=null,X=null,ka=null,U=null,ua=null,za=null,Ka=null,Qa=null,Ba=0,Ca=0,ta=0,Ia=0,ha=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Da=new THREE.Matrix4,Ta=new Float32Array(16),Ua=new Float32Array(16),Ha=new THREE.Vector4,Za={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},ya=a.canvas!==void 0?a.canvas:document.createElement("canvas"), -I=a.stencil!==void 0?a.stencil:!0,db=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,eb=a.antialias!==void 0?a.antialias:!1,Y=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),Ea=a.clearAlpha!==void 0?a.clearAlpha:0,Xa=a.maxLights!==void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=ya;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil= -this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var V,Sa=[],a=THREE.ShaderLib.depthRGBA,bb=THREE.UniformsUtils.clone(a.uniforms),Va=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader, -vertexShader:a.vertexShader,uniforms:bb}),$a=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:bb,morphTargets:!0});Va._shadowPass=!0;$a._shadowPass=!0;try{if(!(d=ya.getContext("experimental-webgl",{antialias:eb,stencil:I,preserveDrawingBuffer:db})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+d.getParameter(d.VERSION)+" | "+d.getParameter(d.VENDOR)+" | "+d.getParameter(d.RENDERER)+" | "+d.getParameter(d.SHADING_LANGUAGE_VERSION))}catch(fb){console.error(fb)}d.clearColor(0, -0,0,1);d.clearDepth(1);d.clearStencil(0);d.enable(d.DEPTH_TEST);d.depthFunc(d.LEQUAL);d.frontFace(d.CCW);d.cullFace(d.BACK);d.enable(d.CULL_FACE);d.enable(d.BLEND);d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA);d.clearColor(Y.r,Y.g,Y.b,Ea);this.context=d;var cb=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,s={};s.vertices=new Float32Array(16);s.faces=new Uint16Array(6);I=0;s.vertices[I++]=-1;s.vertices[I++]=-1;s.vertices[I++]=0;s.vertices[I++]=1;s.vertices[I++]=1; -s.vertices[I++]=-1;s.vertices[I++]=1;s.vertices[I++]=1;s.vertices[I++]=1;s.vertices[I++]=1;s.vertices[I++]=1;s.vertices[I++]=0;s.vertices[I++]=-1;s.vertices[I++]=1;s.vertices[I++]=0;I=s.vertices[I++]=0;s.faces[I++]=0;s.faces[I++]=1;s.faces[I++]=2;s.faces[I++]=0;s.faces[I++]=2;s.faces[I++]=3;s.vertexBuffer=d.createBuffer();s.elementBuffer=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,s.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,s.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,s.elementBuffer); -d.bufferData(d.ELEMENT_ARRAY_BUFFER,s.faces,d.STATIC_DRAW);s.program=d.createProgram();d.attachShader(s.program,aa("fragment",THREE.ShaderLib.sprite.fragmentShader));d.attachShader(s.program,aa("vertex",THREE.ShaderLib.sprite.vertexShader));d.linkProgram(s.program);s.attributes={};s.uniforms={};s.attributes.position=d.getAttribLocation(s.program,"position");s.attributes.uv=d.getAttribLocation(s.program,"uv");s.uniforms.uvOffset=d.getUniformLocation(s.program,"uvOffset");s.uniforms.uvScale=d.getUniformLocation(s.program, -"uvScale");s.uniforms.rotation=d.getUniformLocation(s.program,"rotation");s.uniforms.scale=d.getUniformLocation(s.program,"scale");s.uniforms.alignment=d.getUniformLocation(s.program,"alignment");s.uniforms.color=d.getUniformLocation(s.program,"color");s.uniforms.map=d.getUniformLocation(s.program,"map");s.uniforms.opacity=d.getUniformLocation(s.program,"opacity");s.uniforms.useScreenCoordinates=d.getUniformLocation(s.program,"useScreenCoordinates");s.uniforms.affectedByDistance=d.getUniformLocation(s.program, -"affectedByDistance");s.uniforms.screenPosition=d.getUniformLocation(s.program,"screenPosition");s.uniforms.modelViewMatrix=d.getUniformLocation(s.program,"modelViewMatrix");s.uniforms.projectionMatrix=d.getUniformLocation(s.program,"projectionMatrix");var ab=!1;this.setSize=function(a,b){ya.width=a;ya.height=b;this.setViewport(0,0,ya.width,ya.height)};this.setViewport=function(a,b,c,e){Ba=a;Ca=b;ta=c;Ia=e;d.viewport(Ba,Ca,ta,Ia)};this.setScissor=function(a,b,c,e){d.scissor(a,b,c,e)};this.enableScissorTest= -function(a){a?d.enable(d.SCISSOR_TEST):d.disable(d.SCISSOR_TEST)};this.setClearColorHex=function(a,b){Y.setHex(a);Ea=b;d.clearColor(Y.r,Y.g,Y.b,Ea)};this.setClearColor=function(a,b){Y.copy(a);Ea=b;d.clearColor(Y.r,Y.g,Y.b,Ea)};this.getClearColor=function(){return Y};this.getClearAlpha=function(){return Ea};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=d.COLOR_BUFFER_BIT;if(b===void 0||b)e|=d.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=d.STENCIL_BUFFER_BIT;d.clear(e)};this.getContext=function(){return d}; +var E=this,d,ya=[],Va=null,Xa=null,K=-1,T=null,U=0,R=null,Z=null,pa=null,V=null,va=null,Aa=null,Ka=null,Pa=null,Ca=0,Da=0,ua=0,Ia=0,ka=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ea=new THREE.Matrix4,Sa=new Float32Array(16),Ta=new Float32Array(16),Ha=new THREE.Vector4,Ya={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},za=a.canvas!==void 0?a.canvas:document.createElement("canvas"), +J=a.stencil!==void 0?a.stencil:!0,cb=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,db=a.antialias!==void 0?a.antialias:!1,$=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),Fa=a.clearAlpha!==void 0?a.clearAlpha:0,Wa=a.maxLights!==void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=za;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil= +this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var W,Ra=[],a=THREE.ShaderLib.depthRGBA,ab=THREE.UniformsUtils.clone(a.uniforms),Ua=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader, +vertexShader:a.vertexShader,uniforms:ab}),Za=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:ab,morphTargets:!0});Ua._shadowPass=!0;Za._shadowPass=!0;try{if(!(d=za.getContext("experimental-webgl",{antialias:db,stencil:J,preserveDrawingBuffer:cb})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+d.getParameter(d.VERSION)+" | "+d.getParameter(d.VENDOR)+" | "+d.getParameter(d.RENDERER)+" | "+d.getParameter(d.SHADING_LANGUAGE_VERSION))}catch(eb){console.error(eb)}d.clearColor(0, +0,0,1);d.clearDepth(1);d.clearStencil(0);d.enable(d.DEPTH_TEST);d.depthFunc(d.LEQUAL);d.frontFace(d.CCW);d.cullFace(d.BACK);d.enable(d.CULL_FACE);d.enable(d.BLEND);d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA);d.clearColor($.r,$.g,$.b,Fa);this.context=d;var bb=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,p={};p.vertices=new Float32Array(16);p.faces=new Uint16Array(6);J=0;p.vertices[J++]=-1;p.vertices[J++]=-1;p.vertices[J++]=0;p.vertices[J++]=1;p.vertices[J++]=1; +p.vertices[J++]=-1;p.vertices[J++]=1;p.vertices[J++]=1;p.vertices[J++]=1;p.vertices[J++]=1;p.vertices[J++]=1;p.vertices[J++]=0;p.vertices[J++]=-1;p.vertices[J++]=1;p.vertices[J++]=0;J=p.vertices[J++]=0;p.faces[J++]=0;p.faces[J++]=1;p.faces[J++]=2;p.faces[J++]=0;p.faces[J++]=2;p.faces[J++]=3;p.vertexBuffer=d.createBuffer();p.elementBuffer=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,p.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,p.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,p.elementBuffer); +d.bufferData(d.ELEMENT_ARRAY_BUFFER,p.faces,d.STATIC_DRAW);p.program=d.createProgram();d.attachShader(p.program,Q("fragment",THREE.ShaderLib.sprite.fragmentShader));d.attachShader(p.program,Q("vertex",THREE.ShaderLib.sprite.vertexShader));d.linkProgram(p.program);p.attributes={};p.uniforms={};p.attributes.position=d.getAttribLocation(p.program,"position");p.attributes.uv=d.getAttribLocation(p.program,"uv");p.uniforms.uvOffset=d.getUniformLocation(p.program,"uvOffset");p.uniforms.uvScale=d.getUniformLocation(p.program, +"uvScale");p.uniforms.rotation=d.getUniformLocation(p.program,"rotation");p.uniforms.scale=d.getUniformLocation(p.program,"scale");p.uniforms.alignment=d.getUniformLocation(p.program,"alignment");p.uniforms.color=d.getUniformLocation(p.program,"color");p.uniforms.map=d.getUniformLocation(p.program,"map");p.uniforms.opacity=d.getUniformLocation(p.program,"opacity");p.uniforms.useScreenCoordinates=d.getUniformLocation(p.program,"useScreenCoordinates");p.uniforms.affectedByDistance=d.getUniformLocation(p.program, +"affectedByDistance");p.uniforms.screenPosition=d.getUniformLocation(p.program,"screenPosition");p.uniforms.modelViewMatrix=d.getUniformLocation(p.program,"modelViewMatrix");p.uniforms.projectionMatrix=d.getUniformLocation(p.program,"projectionMatrix");var $a=!1;this.setSize=function(a,b){za.width=a;za.height=b;this.setViewport(0,0,za.width,za.height)};this.setViewport=function(a,b,c,e){Ca=a;Da=b;ua=c;Ia=e;d.viewport(Ca,Da,ua,Ia)};this.setScissor=function(a,b,c,e){d.scissor(a,b,c,e)};this.enableScissorTest= +function(a){a?d.enable(d.SCISSOR_TEST):d.disable(d.SCISSOR_TEST)};this.setClearColorHex=function(a,b){$.setHex(a);Fa=b;d.clearColor($.r,$.g,$.b,Fa)};this.setClearColor=function(a,b){$.copy(a);Fa=b;d.clearColor($.r,$.g,$.b,Fa)};this.getClearColor=function(){return $};this.getClearAlpha=function(){return Fa};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=d.COLOR_BUFFER_BIT;if(b===void 0||b)e|=d.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=d.STENCIL_BUFFER_BIT;d.clear(e)};this.getContext=function(){return d}; this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(g in a.geometry.geometryGroups){var b=a.geometry.geometryGroups[g];d.deleteBuffer(b.__webglVertexBuffer);d.deleteBuffer(b.__webglNormalBuffer);d.deleteBuffer(b.__webglTangentBuffer);d.deleteBuffer(b.__webglColorBuffer);d.deleteBuffer(b.__webglUVBuffer);d.deleteBuffer(b.__webglUV2Buffer);d.deleteBuffer(b.__webglSkinVertexABuffer); -d.deleteBuffer(b.__webglSkinVertexBBuffer);d.deleteBuffer(b.__webglSkinIndicesBuffer);d.deleteBuffer(b.__webglSkinWeightsBuffer);d.deleteBuffer(b.__webglFaceBuffer);d.deleteBuffer(b.__webglLineBuffer);if(b.numMorphTargets)for(var c=0,e=b.numMorphTargets;c=0&&d.enableVertexAttribArray(y.position);y.color>=0&&d.enableVertexAttribArray(y.color);y.normal>=0&&d.enableVertexAttribArray(y.normal); -y.tangent>=0&&d.enableVertexAttribArray(y.tangent);a.skinning&&y.skinVertexA>=0&&y.skinVertexB>=0&&y.skinIndex>=0&&y.skinWeight>=0&&(d.enableVertexAttribArray(y.skinVertexA),d.enableVertexAttribArray(y.skinVertexB),d.enableVertexAttribArray(y.skinIndex),d.enableVertexAttribArray(y.skinWeight));if(a.attributes)for(h in a.attributes)y[h]!==void 0&&y[h]>=0&&d.enableVertexAttribArray(y[h]);if(a.morphTargets)for(h=a.numSupportedMorphTargets=0;h=0&&(d.enableVertexAttribArray(y[v]), -a.numSupportedMorphTargets++);a.uniformsList=[];for(f in a.uniforms)a.uniformsList.push([a.uniforms[f],f])};this.clearTarget=function(a,b,c,d){C(a);this.clear(b,c,d)};this.updateShadowMap=function(a,b){A(a,b)};this.render=function(a,b,c,s){var Ga,K,Ra,u,t,p,Oa,Pa=a.lights,Aa=a.fog;J=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&A(a,b);F.info.render.calls=0;F.info.render.vertices=0;F.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), -a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(Ua);b.projectionMatrix.flattenToArray(Ta);Da.multiply(b.projectionMatrix,b.matrixWorldInverse);k(Da);C(c);(this.autoClear||s)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);Ra=a.__webglObjects.length;for(s=0;s=0;s--)if(t=a.__webglObjects[s],t.render&&(p=t.object,Oa=t.buffer,K=t.opaque))i(p),j(K.depthTest),l(K.depthWrite),m(K.polygonOffset, -K.polygonOffsetFactor,K.polygonOffsetUnits),f(b,Pa,Aa,K,Oa,p);for(s=0;s65535&&(s[l].counter+=1,q=s[l].hash+ -"_"+s[l].counter,j.geometryGroups[q]===void 0&&(j.geometryGroups[q]={faces:[],materialIndex:p,vertices:0,numMorphTargets:y})),j.geometryGroups[q].faces.push(k),j.geometryGroups[q].vertices+=m;j.geometryGroupsList=[];k=void 0;for(k in j.geometryGroups)j.geometryGroups[k].id=S++,j.geometryGroupsList.push(j.geometryGroups[k])}for(h in i.geometryGroups)if(j=i.geometryGroups[h],!j.__webglVertexBuffer){k=j;k.__webglVertexBuffer=d.createBuffer();k.__webglNormalBuffer=d.createBuffer();k.__webglTangentBuffer= -d.createBuffer();k.__webglColorBuffer=d.createBuffer();k.__webglUVBuffer=d.createBuffer();k.__webglUV2Buffer=d.createBuffer();k.__webglSkinVertexABuffer=d.createBuffer();k.__webglSkinVertexBBuffer=d.createBuffer();k.__webglSkinIndicesBuffer=d.createBuffer();k.__webglSkinWeightsBuffer=d.createBuffer();k.__webglFaceBuffer=d.createBuffer();k.__webglLineBuffer=d.createBuffer();if(k.numMorphTargets){p=o=void 0;k.__webglMorphTargetsBuffers=[];o=0;for(p=k.numMorphTargets;o0||y.faceVertexUvs.length>0)j.__uvArray=new Float32Array(k*2);if(y.faceUvs.length>1||y.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(k*2)}if(p.geometry.skinWeights.length&&p.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(k*4),j.__skinVertexBArray=new Float32Array(k* -4),j.__skinIndexArray=new Float32Array(k*4),j.__skinWeightArray=new Float32Array(k*4);j.__faceArray=new Uint16Array(l*3);j.__lineArray=new Uint16Array(q*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];y=0;for(v=j.numMorphTargets;y=0;i--)f[i]===h&&f.splice(i,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&va(f.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(f=a.__webglObjects.length;e0&&(d.bindBuffer(d.ARRAY_BUFFER,p.__webglColorBuffer),d.bufferData(d.ARRAY_BUFFER,pa,l));za&&(d.bindBuffer(d.ARRAY_BUFFER,p.__webglNormalBuffer),d.bufferData(d.ARRAY_BUFFER,V,l));Ba&&ra.hasTangents&&(d.bindBuffer(d.ARRAY_BUFFER,p.__webglTangentBuffer),d.bufferData(d.ARRAY_BUFFER,ca,l));ta&&X>0&&(d.bindBuffer(d.ARRAY_BUFFER, -p.__webglUVBuffer),d.bufferData(d.ARRAY_BUFFER,ja,l));ta&&aa>0&&(d.bindBuffer(d.ARRAY_BUFFER,p.__webglUV2Buffer),d.bufferData(d.ARRAY_BUFFER,ka,l));xa&&(d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,p.__webglFaceBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,ha,l),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,p.__webglLineBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,Y,l));x>0&&(d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinVertexABuffer),d.bufferData(d.ARRAY_BUFFER,da,l),d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinVertexBBuffer), -d.bufferData(d.ARRAY_BUFFER,ea,l),d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinIndicesBuffer),d.bufferData(d.ARRAY_BUFFER,fa,l),d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinWeightsBuffer),d.bufferData(d.ARRAY_BUFFER,ga,l));q&&(delete p.__inittedArrays,delete p.__colorArray,delete p.__normalArray,delete p.__tangentArray,delete p.__uvArray,delete p.__uv2Array,delete p.__faceArray,delete p.__vertexArray,delete p.__lineArray,delete p.__skinVertexAArray,delete p.__skinVertexBArray,delete p.__skinIndexArray,delete p.__skinWeightArray)}h.__dirtyVertices= -!1;h.__dirtyMorphTargets=!1;h.__dirtyElements=!1;h.__dirtyUvs=!1;h.__dirtyNormals=!1;h.__dirtyColors=!1;h.__dirtyTangents=!1;j.attributes&&sa(j)}else if(i instanceof THREE.Ribbon){if(h.__dirtyVertices||h.__dirtyColors){i=h;j=d.DYNAMIC_DRAW;k=s=q=q=void 0;y=i.vertices;o=i.colors;m=y.length;p=o.length;A=i.__vertexArray;l=i.__colorArray;B=i.__dirtyColors;if(i.__dirtyVertices){for(q=0;q=0&&d.enableVertexAttribArray(l.position);l.color>=0&&d.enableVertexAttribArray(l.color);l.normal>=0&&d.enableVertexAttribArray(l.normal); +l.tangent>=0&&d.enableVertexAttribArray(l.tangent);a.skinning&&l.skinVertexA>=0&&l.skinVertexB>=0&&l.skinIndex>=0&&l.skinWeight>=0&&(d.enableVertexAttribArray(l.skinVertexA),d.enableVertexAttribArray(l.skinVertexB),d.enableVertexAttribArray(l.skinIndex),d.enableVertexAttribArray(l.skinWeight));if(a.attributes)for(h in a.attributes)l[h]!==void 0&&l[h]>=0&&d.enableVertexAttribArray(l[h]);if(a.morphTargets)for(h=a.numSupportedMorphTargets=0;h=0&&(d.enableVertexAttribArray(l[t]), +a.numSupportedMorphTargets++);a.uniformsList=[];for(f in a.uniforms)a.uniformsList.push([a.uniforms[f],f])};this.clearTarget=function(a,b,c,d){C(a);this.clear(b,c,d)};this.updateShadowMap=function(a,b){A(a,b)};this.render=function(a,b,c,p){var wa,L,Qa,u,q,r,Oa,Ba=a.lights,G=a.fog;K=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);this.shadowMapEnabled&&this.shadowMapAutoUpdate&&A(a,b);E.info.render.calls=0;E.info.render.vertices=0;E.info.render.faces=0;b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), +a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(Ta);b.projectionMatrix.flattenToArray(Sa);Ea.multiply(b.projectionMatrix,b.matrixWorldInverse);k(Ea);C(c);(this.autoClear||p)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);Qa=a.__webglObjects.length;for(p=0;p=0;p--)if(q=a.__webglObjects[p],q.render&&(r=q.object,Oa=q.buffer,L=q.opaque))i(r),j(L.depthTest),m(L.depthWrite),l(L.polygonOffset,L.polygonOffsetFactor, +L.polygonOffsetUnits),f(b,Ba,G,L,Oa,r);for(p=0;p65535&&(p[l].counter+=1,o=p[l].hash+"_"+p[l].counter,j.geometryGroups[o]=== +void 0&&(j.geometryGroups[o]={faces:[],materialIndex:r,vertices:0,numMorphTargets:t})),j.geometryGroups[o].faces.push(k),j.geometryGroups[o].vertices+=q;j.geometryGroupsList=[];k=void 0;for(k in j.geometryGroups)j.geometryGroups[k].id=U++,j.geometryGroupsList.push(j.geometryGroups[k])}for(h in i.geometryGroups)if(j=i.geometryGroups[h],!j.__webglVertexBuffer){k=j;k.__webglVertexBuffer=d.createBuffer();k.__webglNormalBuffer=d.createBuffer();k.__webglTangentBuffer=d.createBuffer();k.__webglColorBuffer= +d.createBuffer();k.__webglUVBuffer=d.createBuffer();k.__webglUV2Buffer=d.createBuffer();k.__webglSkinVertexABuffer=d.createBuffer();k.__webglSkinVertexBBuffer=d.createBuffer();k.__webglSkinIndicesBuffer=d.createBuffer();k.__webglSkinWeightsBuffer=d.createBuffer();k.__webglFaceBuffer=d.createBuffer();k.__webglLineBuffer=d.createBuffer();if(k.numMorphTargets){r=m=void 0;k.__webglMorphTargetsBuffers=[];m=0;for(r=k.numMorphTargets;m0||t.faceVertexUvs.length>0)j.__uvArray=new Float32Array(k*2);if(t.faceUvs.length>1||t.faceVertexUvs.length>1)j.__uv2Array=new Float32Array(k*2)}if(r.geometry.skinWeights.length&&r.geometry.skinIndices.length)j.__skinVertexAArray=new Float32Array(k*4),j.__skinVertexBArray=new Float32Array(k* +4),j.__skinIndexArray=new Float32Array(k*4),j.__skinWeightArray=new Float32Array(k*4);j.__faceArray=new Uint16Array(l*3);j.__lineArray=new Uint16Array(o*2);if(j.numMorphTargets){j.__morphTargetsArrays=[];t=0;for(z=j.numMorphTargets;t=0;i--)f[i]===h&&f.splice(i,1)}else(e instanceof THREE.MarchingCubes||e.immediateRenderCallback)&&sa(f.__webglObjectsImmediate,e);e.__webglActive=!1;a.__objectsRemoved.splice(0,1)}e=0;for(f=a.__webglObjects.length;e0&&(d.bindBuffer(d.ARRAY_BUFFER,r.__webglColorBuffer),d.bufferData(d.ARRAY_BUFFER,ra,l));Aa&&(d.bindBuffer(d.ARRAY_BUFFER,r.__webglNormalBuffer),d.bufferData(d.ARRAY_BUFFER,T,l));Ca&&ta.hasTangents&&(d.bindBuffer(d.ARRAY_BUFFER,r.__webglTangentBuffer),d.bufferData(d.ARRAY_BUFFER,da,l));ua&&Y>0&&(d.bindBuffer(d.ARRAY_BUFFER, +r.__webglUVBuffer),d.bufferData(d.ARRAY_BUFFER,ia,l));ua&&Z>0&&(d.bindBuffer(d.ARRAY_BUFFER,r.__webglUV2Buffer),d.bufferData(d.ARRAY_BUFFER,ja,l));ya&&(d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,r.__webglFaceBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,ka,l),d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,r.__webglLineBuffer),d.bufferData(d.ELEMENT_ARRAY_BUFFER,$,l));w>0&&(d.bindBuffer(d.ARRAY_BUFFER,r.__webglSkinVertexABuffer),d.bufferData(d.ARRAY_BUFFER,ea,l),d.bindBuffer(d.ARRAY_BUFFER,r.__webglSkinVertexBBuffer), +d.bufferData(d.ARRAY_BUFFER,fa,l),d.bindBuffer(d.ARRAY_BUFFER,r.__webglSkinIndicesBuffer),d.bufferData(d.ARRAY_BUFFER,ga,l),d.bindBuffer(d.ARRAY_BUFFER,r.__webglSkinWeightsBuffer),d.bufferData(d.ARRAY_BUFFER,ha,l));o&&(delete r.__inittedArrays,delete r.__colorArray,delete r.__normalArray,delete r.__tangentArray,delete r.__uvArray,delete r.__uv2Array,delete r.__faceArray,delete r.__vertexArray,delete r.__lineArray,delete r.__skinVertexAArray,delete r.__skinVertexBArray,delete r.__skinIndexArray,delete r.__skinWeightArray)}h.__dirtyVertices= +!1;h.__dirtyMorphTargets=!1;h.__dirtyElements=!1;h.__dirtyUvs=!1;h.__dirtyNormals=!1;h.__dirtyColors=!1;h.__dirtyTangents=!1;j.attributes&&na(j)}else if(i instanceof THREE.Ribbon){if(h.__dirtyVertices||h.__dirtyColors){i=h;j=d.DYNAMIC_DRAW;k=p=o=o=void 0;t=i.vertices;m=i.colors;q=t.length;r=m.length;y=i.__vertexArray;l=i.__colorArray;A=i.__dirtyColors;if(i.__dirtyVertices){for(o=0;o 0 ) { - intersects[ 0 ].object.materials[ 0 ].color.setHex( Math.random() * 0xffffff ); + intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff ); var particle = new THREE.Particle( particleMaterial ); particle.position = intersects[ 0 ].point; diff --git a/src/core/Ray.js b/src/core/Ray.js index 37f46910..288555a8 100644 --- a/src/core/Ray.js +++ b/src/core/Ray.js @@ -38,6 +38,49 @@ THREE.Ray.prototype = { intersectObject: function ( object ) { + function distanceFromIntersection( origin, direction, position ) { + + var vector, dot, intersect, distance; + + vector = position.clone().subSelf( origin ); + dot = vector.dot( direction ); + + if ( dot <= 0 ) return null; // check if position behind origin. + + intersect = origin.clone().addSelf( direction.clone().multiplyScalar( dot ) ); + distance = position.distanceTo( intersect ); + + return distance; + + } + + // http://www.blackpawn.com/texts/pointinpoly/default.html + + var v0 = new THREE.Vector3(), v1 = new THREE.Vector3(), v2 = new THREE.Vector3(); + var dot00, dot01, dot02, dot11, dot12, invDenom, u, v; + + function pointInFace3( p, a, b, c ) { + + v0.copy( c ).subSelf( a ); + v1.copy( b ).subSelf( a ); + v2.copy( p ).subSelf( a ); + + dot00 = v0.dot( v0 ); + dot01 = v0.dot( v1 ); + dot02 = v0.dot( v2 ); + dot11 = v1.dot( v1 ); + dot12 = v1.dot( v2 ); + + invDenom = 1 / ( dot00 * dot11 - dot01 * dot01 ); + u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; + v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; + + return ( u >= 0 ) && ( v >= 0 ) && ( u + v < 1 ); + + } + + // + var intersect, intersects = []; for ( var i = 0, l = object.children.length; i < l; i ++ ) { @@ -167,39 +210,6 @@ THREE.Ray.prototype = { return intersects; - // - - function distanceFromIntersection( origin, direction, position ) { - - var vector, dot, intersect, distance; - - vector = position.clone().subSelf( origin ); - dot = vector.dot( direction ); - - if ( dot <= 0 ) return null; // check if position behind origin. - - intersect = origin.clone().addSelf( direction.clone().multiplyScalar( dot ) ); - distance = position.distanceTo( intersect ); - - return distance; - - } - - // http://www.blackpawn.com/texts/pointinpoly/default.html - - function pointInFace3( p, a, b, c ) { - - var v0 = c.clone().subSelf( a ), v1 = b.clone().subSelf( a ), v2 = p.clone().subSelf( a ), - dot00 = v0.dot( v0 ), dot01 = v0.dot( v1 ), dot02 = v0.dot( v2 ), dot11 = v1.dot( v1 ), dot12 = v1.dot( v2 ), - - invDenom = 1 / ( dot00 * dot11 - dot01 * dot01 ), - u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom, - v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; - - return ( u > 0 ) && ( v > 0 ) && ( u + v < 1 ); - - } - } };