From 3ded4a408fa341205e039a273dd79fcae73b1f98 Mon Sep 17 00:00:00 2001 From: alteredq Date: Sat, 19 Nov 2011 00:48:17 +0100 Subject: [PATCH] Changed Projector to use Frustum. Also some bugfixes in ShadowMapPlugin and SpritePlugin. --- build/Three.js | 712 +++++++++++++------------- build/custom/ThreeCanvas.js | 122 +++-- build/custom/ThreeDOM.js | 42 +- build/custom/ThreeExtras.js | 233 +++++---- build/custom/ThreeSVG.js | 66 ++- build/custom/ThreeWebGL.js | 349 +++++++------ src/core/Projector.js | 47 +- src/extras/plugins/ShadowMapPlugin.js | 16 +- src/extras/plugins/SpritePlugin.js | 1 - src/renderers/WebGLRenderer.js | 36 +- 10 files changed, 782 insertions(+), 842 deletions(-) diff --git a/build/Three.js b/build/Three.js index b6c8c4c9..ef631cc0 100644 --- a/build/Three.js +++ b/build/Three.js @@ -17,38 +17,38 @@ this.y=Math.asin(a.n13);Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b), THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}}; -THREE.Ray=function(a,b){function c(a,b,c){o.sub(c,a);s=o.dot(b);if(s<=0)return null;l=q.add(a,n.copy(b).multiplyScalar(s));return p=c.distanceTo(l)}function d(a,b,c,d){o.sub(d,b);q.sub(c,b);n.sub(a,b);r=o.dot(o);t=o.dot(q);v=o.dot(n);B=q.dot(q);I=q.dot(n);y=1/(r*B-t*t);G=(B*v-t*I)*y;u=(r*I-t*v)*y;return G>=0&&u>=0&&G+u<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, -c,d=[];b=0;for(c=a.length;bn.scale.x)return[];l={distance:o,point:n.position,face:null,object:n};s.push(l)}else if(n instanceof THREE.Mesh){o=c(this.origin,this.direction,n.matrixWorld.getPosition());if(o===null||o>n.geometry.boundingSphere.radius*Math.max(n.scale.x,Math.max(n.scale.y,n.scale.z)))return s;var p,r=n.geometry,t=r.vertices,k;n.matrixRotationWorld.extractRotation(n.matrixWorld);o=0;for(q=r.faces.length;o0:p<0)))if(p=m.dot(i.sub(e,a))/p,j.add(a,b.multiplyScalar(p)),l instanceof THREE.Face3)d(j, -e,g,f)&&(l={distance:a.distanceTo(j),point:j.clone(),face:l,object:n},s.push(l));else if(l instanceof THREE.Face4&&(d(j,e,g,h)||d(j,g,f,h)))l={distance:a.distanceTo(j),point:j.clone(),face:l,object:n},s.push(l)}return s};var o=new THREE.Vector3,q=new THREE.Vector3,n=new THREE.Vector3,s,l,p,r,t,v,B,I,y,G,u}; -THREE.Rectangle=function(){function a(){g=d-b;f=e-c}var b,c,d,e,g,f,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return g};this.getHeight=function(){return f};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(g,f,j,o){h=!1;b=g;c=f;d=j;e=o;a()};this.addPoint=function(g,f){h?(h=!1,b=g,c=f,d=g,e=f):(b=bg?d:g,e=e>f?e:f);a()};this.add3Points= -function(g,f,j,o,q,n){h?(h=!1,b=gj?g>q?g:q:j>q?j:q,e=f>o?f>n?f:n:o>n?o:n):(b=gj?g>q?g>d?g:d:q>d?q:d:j>q?j>d?j:d:q>d?q:d,e=f>o?f>n?f>e?f:e:n>e?n:e:o>n?o>e?o:e:n>e?n:e);a()};this.addRectangle=function(g){h?(h=!1,b=g.getLeft(),c=g.getTop(),d=g.getRight(),e=g.getBottom()):(b=bg.getRight()?d:g.getRight(),e=e> +THREE.Ray=function(a,b){function c(a,b,c){o.sub(c,a);q=o.dot(b);if(q<=0)return null;l=r.add(a,n.copy(b).multiplyScalar(q));return p=c.distanceTo(l)}function d(a,b,c,d){o.sub(d,b);r.sub(c,b);n.sub(a,b);s=o.dot(o);t=o.dot(r);v=o.dot(n);y=r.dot(r);I=r.dot(n);z=1/(s*y-t*t);G=(y*v-t*I)*z;u=(s*I-t*v)*z;return G>=0&&u>=0&&G+u<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, +c,d=[];b=0;for(c=a.length;bn.scale.x)return[];l={distance:o,point:n.position,face:null,object:n};q.push(l)}else if(n instanceof THREE.Mesh){o=c(this.origin,this.direction,n.matrixWorld.getPosition());if(o===null||o>n.geometry.boundingSphere.radius*Math.max(n.scale.x,Math.max(n.scale.y,n.scale.z)))return q;var p,s=n.geometry,t=s.vertices,j;n.matrixRotationWorld.extractRotation(n.matrixWorld);o=0;for(r=s.faces.length;o0:p<0)))if(p=m.dot(i.sub(e,a))/p,k.add(a,b.multiplyScalar(p)),l instanceof THREE.Face3)d(k, +e,g,f)&&(l={distance:a.distanceTo(k),point:k.clone(),face:l,object:n},q.push(l));else if(l instanceof THREE.Face4&&(d(k,e,g,h)||d(k,g,f,h)))l={distance:a.distanceTo(k),point:k.clone(),face:l,object:n},q.push(l)}return q};var o=new THREE.Vector3,r=new THREE.Vector3,n=new THREE.Vector3,q,l,p,s,t,v,y,I,z,G,u}; +THREE.Rectangle=function(){function a(){g=d-b;f=e-c}var b,c,d,e,g,f,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return g};this.getHeight=function(){return f};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(g,f,k,o){h=!1;b=g;c=f;d=k;e=o;a()};this.addPoint=function(g,f){h?(h=!1,b=g,c=f,d=g,e=f):(b=bg?d:g,e=e>f?e:f);a()};this.add3Points= +function(g,f,k,o,r,n){h?(h=!1,b=gk?g>r?g:r:k>r?k:r,e=f>o?f>n?f:n:o>n?o:n):(b=gk?g>r?g>d?g:d:r>d?r:d:k>r?k>d?k:d:r>d?r:d,e=f>o?f>n?f>e?f:e:n>e?n:e:o>n?o>e?o:e:n>e?n:e);a()};this.addRectangle=function(g){h?(h=!1,b=g.getLeft(),c=g.getTop(),d=g.getRight(),e=g.getBottom()):(b=bg.getRight()?d:g.getRight(),e=e> g.getBottom()?e:g.getBottom());a()};this.inflate=function(g){b-=g;c-=g;d+=g;e+=g;a()};this.minSelf=function(g){b=b>g.getLeft()?b:g.getLeft();c=c>g.getTop()?c:g.getTop();d=d=0&&Math.min(e,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}}; THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&g>=0&&f>=0&&h>=0?!0:e<0&&g<0||f<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-g)):g<0&&(d=Math.min(d,e/(e-g))),f<0?c=Math.max(c,f/(f-h)):h<0&&(d=Math.min(d,f/(f-h))),df&&h.positionScreen.z0&&G.z<1))f=B[v]=B[v]||new THREE.RenderableParticle,v++,t=f,t.x=G.x/G.w,t.y=G.y/G.w,t.z=G.z,t.rotation=W.rotation.z,t.scale.x=W.scale.x*Math.abs(t.x-(G.x+e.projectionMatrix.n11)/(G.w+e.projectionMatrix.n14)),t.scale.y=W.scale.y*Math.abs(t.y-(G.y+e.projectionMatrix.n22)/(G.w+e.projectionMatrix.n24)),t.material=W.material,I.elements.push(t); -g&&I.elements.sort(c);return I}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +k,o,r=[],n,q=[],l,p,s=[],t,v,y=[],I={objects:[],sprites:[],lights:[],elements:[]},z=new THREE.Vector3,G=new THREE.Vector4,u=new THREE.Matrix4,F=new THREE.Matrix4,A=new THREE.Frustum,x=new THREE.Vector4,B=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);u.multiply(b.projectionMatrix,b.matrixWorldInverse);u.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);u.multiply(b.matrixWorld, +b.projectionMatrixInverse);u.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectGraph=function(b,d){g=0;I.objects.length=0;I.sprites.length=0;I.lights.length=0;var f=function(b){if(b.visible!==!1){(b instanceof THREE.Mesh||b instanceof THREE.Line)&&(b.frustumCulled===!1||A.contains(b))?(u.multiplyVector3(z.copy(b.position)),e=a(),e.object= +b,e.z=z.z,I.objects.push(e)):b instanceof THREE.Sprite||b instanceof THREE.Particle?(u.multiplyVector3(z.copy(b.position)),e=a(),e.object=b,e.z=z.z,I.sprites.push(e)):b instanceof THREE.Light&&I.lights.push(b);for(var c=0,d=b.children.length;cf&&h.positionScreen.z0&&G.z<1))f=y[v]=y[v]||new THREE.RenderableParticle,v++,t=f,t.x= +G.x/G.w,t.y=G.y/G.w,t.z=G.z,t.rotation=V.rotation.z,t.scale.x=V.scale.x*Math.abs(t.x-(G.x+e.projectionMatrix.n11)/(G.w+e.projectionMatrix.n14)),t.scale.y=V.scale.y*Math.abs(t.y-(G.y+e.projectionMatrix.n22)/(G.w+e.projectionMatrix.n24)),t.material=V.material,I.elements.push(t);g&&I.elements.sort(c);return I}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-e),e=Math.sin(-e),g=Math.cos(c),c=Math.sin(c),f=a*b,h=d*e;this.w=f*g-h*c;this.x=f*c+h*g;this.y=d*b*g+a*e*c;this.z=a*e*g-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=a.n32-a.n23<0?-Math.abs(this.x):Math.abs(this.x);this.y=a.n13-a.n31<0?-Math.abs(this.y):Math.abs(this.y);this.z=a.n21-a.n12<0?-Math.abs(this.z):Math.abs(this.z); this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);a===0?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,d=this.z,e=this.w,g=a.x,f=a.y,h=a.z,a=a.w;this.x=b*a+e*g+c*h-d*f;this.y=c*a+e*f+d*g-b*h;this.z=d*a+e*h+b*f-c*g;this.w=e*a-b*g-c*f-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,e=a.z,g=this.x,f=this.y,h=this.z,i=this.w,m=i*c+f*e-h*d,j=i*d+h*c-g*e,o=i*e+g*d-f*c,c=-g* -c-f*d-h*e;b.x=m*i+c*-g+j*-h-o*-f;b.y=j*i+c*-f+o*-g-m*-h;b.z=o*i+c*-h+m*-f-j*-g;return b}}; +this.x,c=this.y,d=this.z,e=this.w,g=a.x,f=a.y,h=a.z,a=a.w;this.x=b*a+e*g+c*h-d*f;this.y=c*a+e*f+d*g-b*h;this.z=d*a+e*h+b*f-c*g;this.w=e*a-b*g-c*f-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,e=a.z,g=this.x,f=this.y,h=this.z,i=this.w,m=i*c+f*e-h*d,k=i*d+h*c-g*e,o=i*e+g*d-f*c,c=-g* +c-f*d-h*e;b.x=m*i+c*-g+k*-h-o*-f;b.y=k*i+c*-f+o*-g-m*-h;b.z=o*i+c*-h+m*-f-k*-g;return b}}; THREE.Quaternion.slerp=function(a,b,c,d){var e=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;e<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,e=-e):c.copy(b);if(Math.abs(e)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var g=Math.acos(e),e=Math.sqrt(1-e*e);if(Math.abs(e)<0.0010)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)*g)/e;d=Math.sin(d*g)/e;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,e,g){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=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.Face4=function(a,b,c,d,e,g,f){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; @@ -85,15 +83,15 @@ b;a++)c=this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid b,c,d,e,g,f=new THREE.Vector3,h=new THREE.Vector3;a=0;for(b=this.faces.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a= 0,b=0,c=this.vertices.length;bthis.points.length-2?g:g+1;c[3]=g>this.points.length-3?g:g+2;m=this.points[c[0]];j=this.points[c[1]]; -o=this.points[c[2]];q=this.points[c[3]];h=f*f;i=f*h;d.x=b(m.x,j.x,o.x,q.x,f,h,i);d.y=b(m.y,j.y,o.y,q.y,f,h,i);d.z=b(m.z,j.z,o.z,q.z,f,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;athis.points.length-2?g:g+1;c[3]=g>this.points.length-3?g:g+2;m=this.points[c[0]];k=this.points[c[1]]; +o=this.points[c[2]];r=this.points[c[3]];h=f*f;i=f*h;d.x=b(m.x,k.x,o.x,r.x,f,h,i);d.y=b(m.y,k.y,o.y,r.y,f,h,i);d.z=b(m.z,k.z,o.z,r.z,f,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a0&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(p.r*255)+","+Math.floor(p.g*255)+","+Math.floor(p.b*255)+","+r+")"),l.fillRect(Math.floor(ta.getX()), -Math.floor(ta.getY()),Math.floor(ta.getWidth()),Math.floor(ta.getHeight()))),ta.empty())};this.render=function(a,j){function o(a){var b,c,d,e;wa.setRGB(0,0,0);Na.setRGB(0,0,0);Oa.setRGB(0,0,0);b=0;for(c=a.length;b>1,ma=i.height>>1,f=g.scale.x*n,k=g.scale.y*s,ga=f*j,h=k*ma,ua.set(a.x-ga,a.y-h,a.x+ga,a.y+h),S.intersects(ua)&&(l.save(),l.translate(a.x,a.y),l.rotate(-g.rotation),l.scale(f,-k),l.translate(-j,-ma),l.drawImage(i,0,0),l.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(ga=g.scale.x*n,h=g.scale.y*s,ua.set(a.x-ga,a.y-h,a.x+ga,a.y+h),S.intersects(ua)&&(d(f.color.getContextStyle()),e(f.color.getContextStyle()),l.save(),l.translate(a.x,a.y),l.rotate(-g.rotation),l.scale(ga,h),f.program(l), -l.restore()))}function r(a,e,g,f){b(f.opacity);c(f.blending);l.beginPath();l.moveTo(a.positionScreen.x,a.positionScreen.y);l.lineTo(e.positionScreen.x,e.positionScreen.y);l.closePath();if(f instanceof THREE.LineBasicMaterial){a=f.linewidth;if(y!=a)l.lineWidth=y=a;a=f.linecap;if(G!=a)l.lineCap=G=a;a=f.linejoin;if(u!=a)l.lineJoin=u=a;d(f.color.getContextStyle());l.stroke();ua.inflate(f.linewidth*2)}}function t(a,d,e,f,h,n,l,S){g.info.render.vertices+=3;g.info.render.faces++;b(S.opacity);c(S.blending); -Z=a.positionScreen.x;L=a.positionScreen.y;k=d.positionScreen.x;X=d.positionScreen.y;K=e.positionScreen.x;M=e.positionScreen.y;B(Z,L,k,X,K,M);if(S instanceof THREE.MeshBasicMaterial)if(S.map)S.map.mapping instanceof THREE.UVMapping&&(la=l.uvs[0],Q(Z,L,k,X,K,M,la[f].u,la[f].v,la[h].u,la[h].v,la[n].u,la[n].v,S.map));else if(S.envMap){if(S.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=j.matrixWorldInverse,ra.copy(l.vertexNormalsWorld[f]),ya=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,va= --(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,ra.copy(l.vertexNormalsWorld[h]),xa=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,Aa=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,ra.copy(l.vertexNormalsWorld[n]),ga=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,ma=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,Q(Z,L,k,X,K,M,ya,va,xa,Aa,ga,ma,S.envMap)}else S.wireframe?Ba(S.color,S.wireframeLinewidth,S.wireframeLinecap,S.wireframeLinejoin):N(S.color);else if(S instanceof THREE.MeshLambertMaterial)S.map&&!S.wireframe&& -(S.map.mapping instanceof THREE.UVMapping&&(la=l.uvs[0],Q(Z,L,k,X,K,M,la[f].u,la[f].v,la[h].u,la[h].v,la[n].u,la[n].v,S.map)),c(THREE.SubtractiveBlending)),Sa?!S.wireframe&&S.shading==THREE.SmoothShading&&l.vertexNormalsWorld.length==3?(V.r=T.r=ba.r=wa.r,V.g=T.g=ba.g=wa.g,V.b=T.b=ba.b=wa.b,q(i,l.v1.positionWorld,l.vertexNormalsWorld[0],V),q(i,l.v2.positionWorld,l.vertexNormalsWorld[1],T),q(i,l.v3.positionWorld,l.vertexNormalsWorld[2],ba),V.r=Math.max(0,Math.min(S.color.r*V.r,1)),V.g=Math.max(0,Math.min(S.color.g* -V.g,1)),V.b=Math.max(0,Math.min(S.color.b*V.b,1)),T.r=Math.max(0,Math.min(S.color.r*T.r,1)),T.g=Math.max(0,Math.min(S.color.g*T.g,1)),T.b=Math.max(0,Math.min(S.color.b*T.b,1)),ba.r=Math.max(0,Math.min(S.color.r*ba.r,1)),ba.g=Math.max(0,Math.min(S.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(S.color.b*ba.b,1)),$.r=(T.r+ba.r)*0.5,$.g=(T.g+ba.g)*0.5,$.b=(T.b+ba.b)*0.5,ja=Qa(V,T,ba,$),P(Z,L,k,X,K,M,0,0,1,0,0,1,ja)):(R.r=wa.r,R.g=wa.g,R.b=wa.b,q(i,l.centroidWorld,l.normalWorld,R),R.r=Math.max(0,Math.min(S.color.r* -R.r,1)),R.g=Math.max(0,Math.min(S.color.g*R.g,1)),R.b=Math.max(0,Math.min(S.color.b*R.b,1)),S.wireframe?Ba(R,S.wireframeLinewidth,S.wireframeLinecap,S.wireframeLinejoin):N(R)):S.wireframe?Ba(S.color,S.wireframeLinewidth,S.wireframeLinecap,S.wireframeLinejoin):N(S.color);else if(S instanceof THREE.MeshDepthMaterial)oa=j.near,sa=j.far,V.r=V.g=V.b=1-Fa(a.positionScreen.z,oa,sa),T.r=T.g=T.b=1-Fa(d.positionScreen.z,oa,sa),ba.r=ba.g=ba.b=1-Fa(e.positionScreen.z,oa,sa),$.r=(T.r+ba.r)*0.5,$.g=(T.g+ba.g)* -0.5,$.b=(T.b+ba.b)*0.5,ja=Qa(V,T,ba,$),P(Z,L,k,X,K,M,0,0,1,0,0,1,ja);else if(S instanceof THREE.MeshNormalMaterial)R.r=Ja(l.normalWorld.x),R.g=Ja(l.normalWorld.y),R.b=Ja(l.normalWorld.z),S.wireframe?Ba(R,S.wireframeLinewidth,S.wireframeLinecap,S.wireframeLinejoin):N(R)}function v(a,d,e,f,ga,h,S,l,n){g.info.render.vertices+=4;g.info.render.faces++;b(l.opacity);c(l.blending);if(l.map||l.envMap)t(a,d,f,0,1,3,S,l,n),t(ga,e,h,1,2,3,S,l,n);else if(Z=a.positionScreen.x,L=a.positionScreen.y,k=d.positionScreen.x, -X=d.positionScreen.y,K=e.positionScreen.x,M=e.positionScreen.y,C=f.positionScreen.x,O=f.positionScreen.y,ea=ga.positionScreen.x,Y=ga.positionScreen.y,fa=h.positionScreen.x,W=h.positionScreen.y,l instanceof THREE.MeshBasicMaterial)I(Z,L,k,X,K,M,C,O),l.wireframe?Ba(l.color,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):N(l.color);else if(l instanceof THREE.MeshLambertMaterial)Sa?!l.wireframe&&l.shading==THREE.SmoothShading&&S.vertexNormalsWorld.length==4?(V.r=T.r=ba.r=$.r=wa.r,V.g=T.g= -ba.g=$.g=wa.g,V.b=T.b=ba.b=$.b=wa.b,q(i,S.v1.positionWorld,S.vertexNormalsWorld[0],V),q(i,S.v2.positionWorld,S.vertexNormalsWorld[1],T),q(i,S.v4.positionWorld,S.vertexNormalsWorld[3],ba),q(i,S.v3.positionWorld,S.vertexNormalsWorld[2],$),V.r=Math.max(0,Math.min(l.color.r*V.r,1)),V.g=Math.max(0,Math.min(l.color.g*V.g,1)),V.b=Math.max(0,Math.min(l.color.b*V.b,1)),T.r=Math.max(0,Math.min(l.color.r*T.r,1)),T.g=Math.max(0,Math.min(l.color.g*T.g,1)),T.b=Math.max(0,Math.min(l.color.b*T.b,1)),ba.r=Math.max(0, -Math.min(l.color.r*ba.r,1)),ba.g=Math.max(0,Math.min(l.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(l.color.b*ba.b,1)),$.r=Math.max(0,Math.min(l.color.r*$.r,1)),$.g=Math.max(0,Math.min(l.color.g*$.g,1)),$.b=Math.max(0,Math.min(l.color.b*$.b,1)),ja=Qa(V,T,ba,$),B(Z,L,k,X,C,O),P(Z,L,k,X,C,O,0,0,1,0,0,1,ja),B(ea,Y,K,M,fa,W),P(ea,Y,K,M,fa,W,1,0,1,1,0,1,ja)):(R.r=wa.r,R.g=wa.g,R.b=wa.b,q(i,S.centroidWorld,S.normalWorld,R),R.r=Math.max(0,Math.min(l.color.r*R.r,1)),R.g=Math.max(0,Math.min(l.color.g*R.g,1)), -R.b=Math.max(0,Math.min(l.color.b*R.b,1)),I(Z,L,k,X,K,M,C,O),l.wireframe?Ba(R,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):N(R)):(I(Z,L,k,X,K,M,C,O),l.wireframe?Ba(l.color,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):N(l.color));else if(l instanceof THREE.MeshNormalMaterial)R.r=Ja(S.normalWorld.x),R.g=Ja(S.normalWorld.y),R.b=Ja(S.normalWorld.z),I(Z,L,k,X,K,M,C,O),l.wireframe?Ba(R,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):N(R);else if(l instanceof -THREE.MeshDepthMaterial)oa=j.near,sa=j.far,V.r=V.g=V.b=1-Fa(a.positionScreen.z,oa,sa),T.r=T.g=T.b=1-Fa(d.positionScreen.z,oa,sa),ba.r=ba.g=ba.b=1-Fa(f.positionScreen.z,oa,sa),$.r=$.g=$.b=1-Fa(e.positionScreen.z,oa,sa),ja=Qa(V,T,ba,$),B(Z,L,k,X,C,O),P(Z,L,k,X,C,O,0,0,1,0,0,1,ja),B(ea,Y,K,M,fa,W),P(ea,Y,K,M,fa,W,1,0,1,1,0,1,ja)}function B(a,b,c,d,e,g){l.beginPath();l.moveTo(a,b);l.lineTo(c,d);l.lineTo(e,g);l.lineTo(a,b);l.closePath()}function I(a,b,c,d,e,g,f,ga){l.beginPath();l.moveTo(a,b);l.lineTo(c, -d);l.lineTo(e,g);l.lineTo(f,ga);l.lineTo(a,b);l.closePath()}function Ba(a,b,c,e){if(y!=b)l.lineWidth=y=b;if(G!=c)l.lineCap=G=c;if(u!=e)l.lineJoin=u=e;d(a.getContextStyle());l.stroke();ua.inflate(b*2)}function N(a){e(a.getContextStyle());l.fill()}function Q(a,b,c,d,g,f,ga,h,k,i,S,j,n){if(n.image.width!=0){if(n.needsUpdate==!0||qa[n.id]==void 0){var ma=n.wrapS==THREE.RepeatWrapping,m=n.wrapT==THREE.RepeatWrapping;qa[n.id]=l.createPattern(n.image,ma&&m?"repeat":ma&&!m?"repeat-x":!ma&&m?"repeat-y":"no-repeat"); -n.needsUpdate=!1}e(qa[n.id]);var ma=n.offset.x/n.repeat.x,m=n.offset.y/n.repeat.y,ta=n.image.width*n.repeat.x,o=n.image.height*n.repeat.y,ga=(ga+ma)*ta,h=(h+m)*o,k=(k+ma)*ta,i=(i+m)*o,S=(S+ma)*ta,j=(j+m)*o;c-=a;d-=b;g-=a;f-=b;k-=ga;i-=h;S-=ga;j-=h;ma=k*j-S*i;if(ma==0){if(da[n.id]==void 0)b=document.createElement("canvas"),b.width=n.image.width,b.height=n.image.height,a=b.getContext("2d"),a.drawImage(n.image,0,0),da[n.id]=a.getImageData(0,0,n.image.width,n.image.height).data,delete b;b=da[n.id];ga= -(Math.floor(ga)+Math.floor(h)*n.image.width)*4;R.setRGB(b[ga]/255,b[ga+1]/255,b[ga+2]/255);N(R)}else ma=1/ma,n=(j*c-i*g)*ma,i=(j*d-i*f)*ma,c=(k*g-S*c)*ma,d=(k*f-S*d)*ma,a=a-n*ga-c*h,ga=b-i*ga-d*h,l.save(),l.transform(n,i,c,d,a,ga),l.fill(),l.restore()}}function P(a,b,c,d,e,g,f,ga,h,k,i,S,n){var j,ma;j=n.width-1;ma=n.height-1;f*=j;ga*=ma;h*=j;k*=ma;i*=j;S*=ma;c-=a;d-=b;e-=a;g-=b;h-=f;k-=ga;i-=f;S-=ga;ma=1/(h*S-i*k);j=(S*c-k*e)*ma;k=(S*d-k*g)*ma;c=(h*e-i*c)*ma;d=(h*g-i*d)*ma;a=a-j*f-c*ga;b=b-k*f-d* -ga;l.save();l.transform(j,k,c,d,a,b);l.clip();l.drawImage(n,0,0);l.restore()}function Qa(a,b,c,d){var e=~~(a.r*255),g=~~(a.g*255),a=~~(a.b*255),f=~~(b.r*255),ga=~~(b.g*255),b=~~(b.b*255),h=~~(c.r*255),k=~~(c.g*255),c=~~(c.b*255),i=~~(d.r*255),l=~~(d.g*255),d=~~(d.b*255);za[0]=e<0?0:e>255?255:e;za[1]=g<0?0:g>255?255:g;za[2]=a<0?0:a>255?255:a;za[4]=f<0?0:f>255?255:f;za[5]=ga<0?0:ga>255?255:ga;za[6]=b<0?0:b>255?255:b;za[8]=h<0?0:h>255?255:h;za[9]=k<0?0:k>255?255:k;za[10]=c<0?0:c>255?255:c;za[12]=i<0? -0:i>255?255:i;za[13]=l<0?0:l>255?255:l;za[14]=d<0?0:d>255?255:d;La.putImageData(D,0,0);Pa.drawImage(Ka,0,0);return Ma}function Fa(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Ja(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Ca(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 Ra,Ta,U,aa;this.autoClear?this.clear():l.setTransform(1,0,0,-1,n,s);g.info.render.vertices=0;g.info.render.faces=0;f=m.projectScene(a,j,this.sortElements);h=f.elements; -i=f.lights;(Sa=i.length>0)&&o(i);Ra=0;for(Ta=h.length;Ra1?1:a}var d=this,e,g,f,h=new THREE.Projector,i=document.createElementNS("http://www.w3.org/2000/svg","svg"),m,j,o,q,n,s,l,p,r=new THREE.Rectangle,t=new THREE.Rectangle,v=!1,B=new THREE.Color,I=new THREE.Color,y=new THREE.Color,G=new THREE.Color,u,F=new THREE.Vector3,A=[],x=[],J,z,ca,Z=1;this.domElement=i;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, -faces:0}};this.setQuality=function(a){switch(a){case "high":Z=1;break;case "low":Z=0}};this.setSize=function(a,b){m=a;j=b;o=m/2;q=j/2;i.setAttribute("viewBox",-o+" "+-q+" "+m+" "+j);i.setAttribute("width",m);i.setAttribute("height",j);r.set(-o,-q,o,q)};this.clear=function(){for(;i.childNodes.length>0;)i.removeChild(i.childNodes[0])};this.render=function(j,k){var m,A,M,C;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;e=h.projectScene(j,k,this.sortElements);g=e.elements; -f=e.lights;ca=z=0;if(v=f.length>0){I.setRGB(0,0,0);y.setRGB(0,0,0);G.setRGB(0,0,0);m=0;for(A=f.length;m0&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(p.r*255)+","+Math.floor(p.g*255)+","+Math.floor(p.b* +255)+","+s+")"),l.fillRect(Math.floor(ta.getX()),Math.floor(ta.getY()),Math.floor(ta.getWidth()),Math.floor(ta.getHeight()))),ta.empty())};this.render=function(a,k){function o(a){var b,c,d,e;wa.setRGB(0,0,0);Na.setRGB(0,0,0);Oa.setRGB(0,0,0);b=0;for(c=a.length;b>1,ma=i.height>>1,f=g.scale.x*n,j=g.scale.y*q,ga=f*k,h=j*ma,ua.set(a.x-ga,a.y-h,a.x+ga,a.y+h),ca.intersects(ua)&&(l.save(),l.translate(a.x,a.y),l.rotate(-g.rotation),l.scale(f,-j),l.translate(-k,-ma),l.drawImage(i,0,0),l.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(ga=g.scale.x*n,h=g.scale.y*q,ua.set(a.x-ga,a.y-h,a.x+ga,a.y+h),ca.intersects(ua)&&(d(f.color.getContextStyle()),e(f.color.getContextStyle()),l.save(),l.translate(a.x,a.y),l.rotate(-g.rotation),l.scale(ga, +h),f.program(l),l.restore()))}function s(a,e,g,f){b(f.opacity);c(f.blending);l.beginPath();l.moveTo(a.positionScreen.x,a.positionScreen.y);l.lineTo(e.positionScreen.x,e.positionScreen.y);l.closePath();if(f instanceof THREE.LineBasicMaterial){a=f.linewidth;if(z!=a)l.lineWidth=z=a;a=f.linecap;if(G!=a)l.lineCap=G=a;a=f.linejoin;if(u!=a)l.lineJoin=u=a;d(f.color.getContextStyle());l.stroke();ua.inflate(f.linewidth*2)}}function t(a,d,e,f,h,n,ca,l){g.info.render.vertices+=3;g.info.render.faces++;b(l.opacity); +c(l.blending);Y=a.positionScreen.x;K=a.positionScreen.y;j=d.positionScreen.x;W=d.positionScreen.y;J=e.positionScreen.x;L=e.positionScreen.y;y(Y,K,j,W,J,L);if(l instanceof THREE.MeshBasicMaterial)if(l.map)l.map.mapping instanceof THREE.UVMapping&&(la=ca.uvs[0],Q(Y,K,j,W,J,L,la[f].u,la[f].v,la[h].u,la[h].v,la[n].u,la[n].v,l.map));else if(l.envMap){if(l.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,ra.copy(ca.vertexNormalsWorld[f]),ya=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)* +0.5+0.5,va=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,ra.copy(ca.vertexNormalsWorld[h]),xa=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,Aa=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,ra.copy(ca.vertexNormalsWorld[n]),ga=(ra.x*a.n11+ra.y*a.n12+ra.z*a.n13)*0.5+0.5,ma=-(ra.x*a.n21+ra.y*a.n22+ra.z*a.n23)*0.5+0.5,Q(Y,K,j,W,J,L,ya,va,xa,Aa,ga,ma,l.envMap)}else l.wireframe?Ba(l.color,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):M(l.color);else if(l instanceof THREE.MeshLambertMaterial)l.map&& +!l.wireframe&&(l.map.mapping instanceof THREE.UVMapping&&(la=ca.uvs[0],Q(Y,K,j,W,J,L,la[f].u,la[f].v,la[h].u,la[h].v,la[n].u,la[n].v,l.map)),c(THREE.SubtractiveBlending)),Sa?!l.wireframe&&l.shading==THREE.SmoothShading&&ca.vertexNormalsWorld.length==3?(U.r=S.r=aa.r=wa.r,U.g=S.g=aa.g=wa.g,U.b=S.b=aa.b=wa.b,r(i,ca.v1.positionWorld,ca.vertexNormalsWorld[0],U),r(i,ca.v2.positionWorld,ca.vertexNormalsWorld[1],S),r(i,ca.v3.positionWorld,ca.vertexNormalsWorld[2],aa),U.r=Math.max(0,Math.min(l.color.r*U.r, +1)),U.g=Math.max(0,Math.min(l.color.g*U.g,1)),U.b=Math.max(0,Math.min(l.color.b*U.b,1)),S.r=Math.max(0,Math.min(l.color.r*S.r,1)),S.g=Math.max(0,Math.min(l.color.g*S.g,1)),S.b=Math.max(0,Math.min(l.color.b*S.b,1)),aa.r=Math.max(0,Math.min(l.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(l.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(l.color.b*aa.b,1)),Z.r=(S.r+aa.r)*0.5,Z.g=(S.g+aa.g)*0.5,Z.b=(S.b+aa.b)*0.5,ja=Qa(U,S,aa,Z),P(Y,K,j,W,J,L,0,0,1,0,0,1,ja)):(R.r=wa.r,R.g=wa.g,R.b=wa.b,r(i,ca.centroidWorld,ca.normalWorld, +R),R.r=Math.max(0,Math.min(l.color.r*R.r,1)),R.g=Math.max(0,Math.min(l.color.g*R.g,1)),R.b=Math.max(0,Math.min(l.color.b*R.b,1)),l.wireframe?Ba(R,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):M(R)):l.wireframe?Ba(l.color,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):M(l.color);else if(l instanceof THREE.MeshDepthMaterial)oa=k.near,sa=k.far,U.r=U.g=U.b=1-Fa(a.positionScreen.z,oa,sa),S.r=S.g=S.b=1-Fa(d.positionScreen.z,oa,sa),aa.r=aa.g=aa.b=1-Fa(e.positionScreen.z,oa,sa), +Z.r=(S.r+aa.r)*0.5,Z.g=(S.g+aa.g)*0.5,Z.b=(S.b+aa.b)*0.5,ja=Qa(U,S,aa,Z),P(Y,K,j,W,J,L,0,0,1,0,0,1,ja);else if(l instanceof THREE.MeshNormalMaterial)R.r=Ja(ca.normalWorld.x),R.g=Ja(ca.normalWorld.y),R.b=Ja(ca.normalWorld.z),l.wireframe?Ba(R,l.wireframeLinewidth,l.wireframeLinecap,l.wireframeLinejoin):M(R)}function v(a,d,e,f,ga,h,l,n,ca){g.info.render.vertices+=4;g.info.render.faces++;b(n.opacity);c(n.blending);if(n.map||n.envMap)t(a,d,f,0,1,3,l,n,ca),t(ga,e,h,1,2,3,l,n,ca);else if(Y=a.positionScreen.x, +K=a.positionScreen.y,j=d.positionScreen.x,W=d.positionScreen.y,J=e.positionScreen.x,L=e.positionScreen.y,C=f.positionScreen.x,O=f.positionScreen.y,ea=ga.positionScreen.x,X=ga.positionScreen.y,fa=h.positionScreen.x,V=h.positionScreen.y,n instanceof THREE.MeshBasicMaterial)I(Y,K,j,W,J,L,C,O),n.wireframe?Ba(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):M(n.color);else if(n instanceof THREE.MeshLambertMaterial)Sa?!n.wireframe&&n.shading==THREE.SmoothShading&&l.vertexNormalsWorld.length== +4?(U.r=S.r=aa.r=Z.r=wa.r,U.g=S.g=aa.g=Z.g=wa.g,U.b=S.b=aa.b=Z.b=wa.b,r(i,l.v1.positionWorld,l.vertexNormalsWorld[0],U),r(i,l.v2.positionWorld,l.vertexNormalsWorld[1],S),r(i,l.v4.positionWorld,l.vertexNormalsWorld[3],aa),r(i,l.v3.positionWorld,l.vertexNormalsWorld[2],Z),U.r=Math.max(0,Math.min(n.color.r*U.r,1)),U.g=Math.max(0,Math.min(n.color.g*U.g,1)),U.b=Math.max(0,Math.min(n.color.b*U.b,1)),S.r=Math.max(0,Math.min(n.color.r*S.r,1)),S.g=Math.max(0,Math.min(n.color.g*S.g,1)),S.b=Math.max(0,Math.min(n.color.b* +S.b,1)),aa.r=Math.max(0,Math.min(n.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(n.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(n.color.b*aa.b,1)),Z.r=Math.max(0,Math.min(n.color.r*Z.r,1)),Z.g=Math.max(0,Math.min(n.color.g*Z.g,1)),Z.b=Math.max(0,Math.min(n.color.b*Z.b,1)),ja=Qa(U,S,aa,Z),y(Y,K,j,W,C,O),P(Y,K,j,W,C,O,0,0,1,0,0,1,ja),y(ea,X,J,L,fa,V),P(ea,X,J,L,fa,V,1,0,1,1,0,1,ja)):(R.r=wa.r,R.g=wa.g,R.b=wa.b,r(i,l.centroidWorld,l.normalWorld,R),R.r=Math.max(0,Math.min(n.color.r*R.r,1)),R.g=Math.max(0,Math.min(n.color.g* +R.g,1)),R.b=Math.max(0,Math.min(n.color.b*R.b,1)),I(Y,K,j,W,J,L,C,O),n.wireframe?Ba(R,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):M(R)):(I(Y,K,j,W,J,L,C,O),n.wireframe?Ba(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):M(n.color));else if(n instanceof THREE.MeshNormalMaterial)R.r=Ja(l.normalWorld.x),R.g=Ja(l.normalWorld.y),R.b=Ja(l.normalWorld.z),I(Y,K,j,W,J,L,C,O),n.wireframe?Ba(R,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):M(R);else if(n instanceof +THREE.MeshDepthMaterial)oa=k.near,sa=k.far,U.r=U.g=U.b=1-Fa(a.positionScreen.z,oa,sa),S.r=S.g=S.b=1-Fa(d.positionScreen.z,oa,sa),aa.r=aa.g=aa.b=1-Fa(f.positionScreen.z,oa,sa),Z.r=Z.g=Z.b=1-Fa(e.positionScreen.z,oa,sa),ja=Qa(U,S,aa,Z),y(Y,K,j,W,C,O),P(Y,K,j,W,C,O,0,0,1,0,0,1,ja),y(ea,X,J,L,fa,V),P(ea,X,J,L,fa,V,1,0,1,1,0,1,ja)}function y(a,b,c,d,e,g){l.beginPath();l.moveTo(a,b);l.lineTo(c,d);l.lineTo(e,g);l.lineTo(a,b);l.closePath()}function I(a,b,c,d,e,g,f,ga){l.beginPath();l.moveTo(a,b);l.lineTo(c, +d);l.lineTo(e,g);l.lineTo(f,ga);l.lineTo(a,b);l.closePath()}function Ba(a,b,c,e){if(z!=b)l.lineWidth=z=b;if(G!=c)l.lineCap=G=c;if(u!=e)l.lineJoin=u=e;d(a.getContextStyle());l.stroke();ua.inflate(b*2)}function M(a){e(a.getContextStyle());l.fill()}function Q(a,b,c,d,g,f,ga,h,j,i,n,k,ca){if(ca.image.width!=0){if(ca.needsUpdate==!0||qa[ca.id]==void 0){var ma=ca.wrapS==THREE.RepeatWrapping,m=ca.wrapT==THREE.RepeatWrapping;qa[ca.id]=l.createPattern(ca.image,ma&&m?"repeat":ma&&!m?"repeat-x":!ma&&m?"repeat-y": +"no-repeat");ca.needsUpdate=!1}e(qa[ca.id]);var ma=ca.offset.x/ca.repeat.x,m=ca.offset.y/ca.repeat.y,ta=ca.image.width*ca.repeat.x,o=ca.image.height*ca.repeat.y,ga=(ga+ma)*ta,h=(h+m)*o,j=(j+ma)*ta,i=(i+m)*o,n=(n+ma)*ta,k=(k+m)*o;c-=a;d-=b;g-=a;f-=b;j-=ga;i-=h;n-=ga;k-=h;ma=j*k-n*i;if(ma==0){if(da[ca.id]==void 0)b=document.createElement("canvas"),b.width=ca.image.width,b.height=ca.image.height,a=b.getContext("2d"),a.drawImage(ca.image,0,0),da[ca.id]=a.getImageData(0,0,ca.image.width,ca.image.height).data, +delete b;b=da[ca.id];ga=(Math.floor(ga)+Math.floor(h)*ca.image.width)*4;R.setRGB(b[ga]/255,b[ga+1]/255,b[ga+2]/255);M(R)}else ma=1/ma,ca=(k*c-i*g)*ma,i=(k*d-i*f)*ma,c=(j*g-n*c)*ma,d=(j*f-n*d)*ma,a=a-ca*ga-c*h,ga=b-i*ga-d*h,l.save(),l.transform(ca,i,c,d,a,ga),l.fill(),l.restore()}}function P(a,b,c,d,e,g,f,ga,h,j,i,n,k){var ca,ma;ca=k.width-1;ma=k.height-1;f*=ca;ga*=ma;h*=ca;j*=ma;i*=ca;n*=ma;c-=a;d-=b;e-=a;g-=b;h-=f;j-=ga;i-=f;n-=ga;ma=1/(h*n-i*j);ca=(n*c-j*e)*ma;j=(n*d-j*g)*ma;c=(h*e-i*c)*ma;d=(h* +g-i*d)*ma;a=a-ca*f-c*ga;b=b-j*f-d*ga;l.save();l.transform(ca,j,c,d,a,b);l.clip();l.drawImage(k,0,0);l.restore()}function Qa(a,b,c,d){var e=~~(a.r*255),g=~~(a.g*255),a=~~(a.b*255),f=~~(b.r*255),ga=~~(b.g*255),b=~~(b.b*255),h=~~(c.r*255),j=~~(c.g*255),c=~~(c.b*255),i=~~(d.r*255),n=~~(d.g*255),d=~~(d.b*255);za[0]=e<0?0:e>255?255:e;za[1]=g<0?0:g>255?255:g;za[2]=a<0?0:a>255?255:a;za[4]=f<0?0:f>255?255:f;za[5]=ga<0?0:ga>255?255:ga;za[6]=b<0?0:b>255?255:b;za[8]=h<0?0:h>255?255:h;za[9]=j<0?0:j>255?255:j; +za[10]=c<0?0:c>255?255:c;za[12]=i<0?0:i>255?255:i;za[13]=n<0?0:n>255?255:n;za[14]=d<0?0:d>255?255:d;La.putImageData(D,0,0);Pa.drawImage(Ka,0,0);return Ma}function Fa(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Ja(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Ca(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 Ra,Ta,T,$;this.autoClear?this.clear():l.setTransform(1,0,0,-1,n,q);g.info.render.vertices=0;g.info.render.faces=0;f=m.projectScene(a, +k,this.sortElements);h=f.elements;i=f.lights;(Sa=i.length>0)&&o(i);Ra=0;for(Ta=h.length;Ra1?1:a}var d=this,e,g,f,h=new THREE.Projector,i=document.createElementNS("http://www.w3.org/2000/svg","svg"),m,k,o,r,n,q,l,p,s=new THREE.Rectangle,t=new THREE.Rectangle,v=!1,y=new THREE.Color,I=new THREE.Color,z=new THREE.Color,G=new THREE.Color,u,F=new THREE.Vector3,A=[],x=[],B,N,ba,Y=1;this.domElement=i;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0, +faces:0}};this.setQuality=function(a){switch(a){case "high":Y=1;break;case "low":Y=0}};this.setSize=function(a,b){m=a;k=b;o=m/2;r=k/2;i.setAttribute("viewBox",-o+" "+-r+" "+m+" "+k);i.setAttribute("width",m);i.setAttribute("height",k);s.set(-o,-r,o,r)};this.clear=function(){for(;i.childNodes.length>0;)i.removeChild(i.childNodes[0])};this.render=function(k,j){var m,A,L,C;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;e=h.projectScene(k,j,this.sortElements);g=e.elements; +f=e.lights;ba=N=0;if(v=f.length>0){I.setRGB(0,0,0);z.setRGB(0,0,0);G.setRGB(0,0,0);m=0;for(A=f.length;m=0)return a.geometry.materials[b.materialIndex]}function d(a){if(a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial)return!1;return a&&a.shading!==void 0&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function e(a){if(a.vertexColors)return a.vertexColors;return!1}function g(a){if(a.map||a.lightMap||a instanceof THREE.ShaderMaterial)return!0; -return!1}function f(a,b,c){var d,e,f,g,h=a.vertices;g=h.length;var i=a.colors,l=i.length,j=a.__vertexArray,n=a.__colorArray,m=a.__sortArray,o=a.__dirtyVertices,q=a.__dirtyColors,s=a.__webglCustomAttributesList;if(c.sortParticles){ya.multiplySelf(c.matrixWorld);for(d=0;d=0;c--)a[c].object===b&&a.splice(c,1)}function s(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function l(a,b,c,d,e){d.program||L.initMaterial(d,b,c,e);if(d.morphTargets&&!e.__webglMorphTargetInfluences){e.__webglMorphTargetInfluences= -new Float32Array(L.maxMorphTargets);for(var f=0,g=L.maxMorphTargets;f -0;this.getContext=function(){return k};this.supportsVertexTextures=function(){return Aa};this.setSize=function(a,b){u.width=a;u.height=b;this.setViewport(0,0,u.width,u.height)};this.setViewport=function(a,b,c,d){da=a;oa=b;sa=c;ja=d;k.viewport(da,oa,sa,ja)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex=function(a,b){z.setHex(a);ca=b;k.clearColor(z.r,z.g,z.b,ca)};this.setClearColor= -function(a,b){z.copy(a);ca=b;k.clearColor(z.r,z.g,z.b,ca)};this.getClearColor=function(){return z};this.getClearAlpha=function(){return ca};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=k.COLOR_BUFFER_BIT;if(b===void 0||b)d|=k.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this); -this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];k.deleteBuffer(c.__webglVertexBuffer);k.deleteBuffer(c.__webglNormalBuffer);k.deleteBuffer(c.__webglTangentBuffer);k.deleteBuffer(c.__webglColorBuffer);k.deleteBuffer(c.__webglUVBuffer);k.deleteBuffer(c.__webglUV2Buffer); -k.deleteBuffer(c.__webglSkinVertexABuffer);k.deleteBuffer(c.__webglSkinVertexBBuffer);k.deleteBuffer(c.__webglSkinIndicesBuffer);k.deleteBuffer(c.__webglSkinWeightsBuffer);k.deleteBuffer(c.__webglFaceBuffer);k.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d=0,e=c.numMorphTargets;d=0)a&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),k.vertexAttribPointer(b.position,3,k.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;f.morphTargetBase!==-1?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]), -k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0)):c.position>=0&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer),k.vertexAttribPointer(c.position,3,k.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){g=0;var i=f.morphTargetForcedOrder;for(h=f.morphTargetInfluences;gj&&(n=m,j=h[n]);k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[n]);k.vertexAttribPointer(c["morphTarget"+g],3,k.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=j;i[n]=1;j=-1;g++}}d.program.uniforms.morphTargetInfluences!==null&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g= -0;for(h=e.__webglCustomAttributesList.length;g=0&&(k.bindBuffer(k.ARRAY_BUFFER,c.buffer),k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,!1,0,0))}b.color>=0&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglColorBuffer),k.vertexAttribPointer(b.color,3,k.FLOAT,!1,0,0));b.normal>=0&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer),k.vertexAttribPointer(b.normal,3,k.FLOAT,!1,0,0));b.tangent>=0&&(k.bindBuffer(k.ARRAY_BUFFER, -e.__webglTangentBuffer),k.vertexAttribPointer(b.tangent,4,k.FLOAT,!1,0,0));b.uv>=0&&(e.__webglUVBuffer?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer),k.vertexAttribPointer(b.uv,2,k.FLOAT,!1,0,0),k.enableVertexAttribArray(b.uv)):k.disableVertexAttribArray(b.uv));b.uv2>=0&&(e.__webglUV2Buffer?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer),k.vertexAttribPointer(b.uv2,2,k.FLOAT,!1,0,0),k.enableVertexAttribArray(b.uv2)):k.disableVertexAttribArray(b.uv2));d.skinning&&b.skinVertexA>=0&&b.skinVertexB>= -0&&b.skinIndex>=0&&b.skinWeight>=0&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexABuffer),k.vertexAttribPointer(b.skinVertexA,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexBBuffer),k.vertexAttribPointer(b.skinVertexB,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe? -(d=d.wireframeLinewidth,d!==qa&&(k.lineWidth(d),qa=d),a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)):(a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)),L.info.render.calls++,L.info.render.vertices+=e.__webglFaceCount,L.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES,d=d.linewidth,d!== -qa&&(k.lineWidth(d),qa=d),k.drawArrays(f,0,e.__webglLineCount),L.info.render.calls++):f instanceof THREE.ParticleSystem?(k.drawArrays(k.POINTS,0,e.__webglParticleCount),L.info.render.calls++):f instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount),L.info.render.calls++)}};this.render=function(a,b,c,d){var e,f,g,j,l=a.lights,n=a.fog;C=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), -a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();if(this.renderPluginsPre.length){e=0;for(f=this.renderPluginsPre.length;e=0)x=q.geometry.materials[x],x.transparent?(o.transparent=x,o.opaque=null):(o.opaque=x,o.transparent=null)}else if(x)x.transparent?(o.transparent=x,o.opaque=null):(o.opaque=x,o.transparent=null);g.render=!0;if(this.sortObjects)j.renderDepth?g.z=j.renderDepth:(va.copy(j.position),ya.multiplyVector3(va),g.z=va.z)}this.sortObjects&&d.sort(h);d=a.__webglObjectsImmediate;e=0;for(f=d.length;e65535&&(z[J].counter+=1,D=z[J].hash+"_"+z[J].counter,p.geometryGroups[D]===void 0&&(p.geometryGroups[D]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:B})),x instanceof THREE.Face3?p.geometryGroups[D].faces3.push(r): -p.geometryGroups[D].faces4.push(r),p.geometryGroups[D].vertices+=A;p.geometryGroupsList=[];r=void 0;for(r in p.geometryGroups)p.geometryGroups[r].id=ea++,p.geometryGroupsList.push(p.geometryGroups[r])}for(l in m.geometryGroups)if(p=m.geometryGroups[l],!p.__webglVertexBuffer){r=p;r.__webglVertexBuffer=k.createBuffer();r.__webglNormalBuffer=k.createBuffer();r.__webglTangentBuffer=k.createBuffer();r.__webglColorBuffer=k.createBuffer();r.__webglUVBuffer=k.createBuffer();r.__webglUV2Buffer=k.createBuffer(); -r.__webglSkinVertexABuffer=k.createBuffer();r.__webglSkinVertexBBuffer=k.createBuffer();r.__webglSkinIndicesBuffer=k.createBuffer();r.__webglSkinWeightsBuffer=k.createBuffer();r.__webglFaceBuffer=k.createBuffer();r.__webglLineBuffer=k.createBuffer();if(r.numMorphTargets){x=t=void 0;r.__webglMorphTargetsBuffers=[];t=0;for(x=r.numMorphTargets;t0||A.faceVertexUvs.length>0)p.__uvArray=new Float32Array(r*2);if(A.faceUvs.length>1||A.faceVertexUvs.length>1)p.__uv2Array=new Float32Array(r*2)}if(v.geometry.skinWeights.length&&v.geometry.skinIndices.length)p.__skinVertexAArray= -new Float32Array(r*4),p.__skinVertexBArray=new Float32Array(r*4),p.__skinIndexArray=new Float32Array(r*4),p.__skinWeightArray=new Float32Array(r*4);p.__faceArray=new Uint16Array(x*3);p.__lineArray=new Uint16Array(J*2);if(p.numMorphTargets){p.__morphTargetsArrays=[];v=0;for(A=p.numMorphTargets;v0&&(k.bindBuffer(k.ARRAY_BUFFER,t.__webglSkinVertexABuffer),k.bufferData(k.ARRAY_BUFFER,X,x),k.bindBuffer(k.ARRAY_BUFFER,t.__webglSkinVertexBBuffer),k.bufferData(k.ARRAY_BUFFER, -T,x),k.bindBuffer(k.ARRAY_BUFFER,t.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,K,x),k.bindBuffer(k.ARRAY_BUFFER,t.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,pa,x))}if(ya&&J){D=0;for(z=C.length;D0&&(k.bindBuffer(k.ARRAY_BUFFER,t.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,W,x))}if(ca&&V.hasTangents){D=0;for(z=C.length;D0&&(k.bindBuffer(k.ARRAY_BUFFER,t.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,fa,x))}if(va&&Aa&&M){D=0;for(z=C.length;D0&&(k.bindBuffer(k.ARRAY_BUFFER,t.__webglUV2Buffer), -k.bufferData(k.ARRAY_BUFFER,E,x))}if(sa){D=0;for(z=C.length;D=0&&k.enableVertexAttribArray(o.position);o.color>=0&&k.enableVertexAttribArray(o.color);o.normal>=0&&k.enableVertexAttribArray(o.normal); -o.tangent>=0&&k.enableVertexAttribArray(o.tangent);a.skinning&&o.skinVertexA>=0&&o.skinVertexB>=0&&o.skinIndex>=0&&o.skinWeight>=0&&(k.enableVertexAttribArray(o.skinVertexA),k.enableVertexAttribArray(o.skinVertexB),k.enableVertexAttribArray(o.skinIndex),k.enableVertexAttribArray(o.skinWeight));if(a.attributes)for(f in a.attributes)o[f]!==void 0&&o[f]>=0&&k.enableVertexAttribArray(o[f]);if(a.morphTargets)for(f=a.numSupportedMorphTargets=0;f=0&&(k.enableVertexAttribArray(o[q]), -a.numSupportedMorphTargets++);a.uniformsList=[];for(e in a.uniforms)a.uniformsList.push([a.uniforms[e],e])};this.setFaceCulling=function(a,b){a?(!b||b==="ccw"?k.frontFace(k.CCW):k.frontFace(k.CW),a==="back"?k.cullFace(k.BACK):a==="front"?k.cullFace(k.FRONT):k.cullFace(k.FRONT_AND_BACK),k.enable(k.CULL_FACE)):k.disable(k.CULL_FACE)};this.setObjectFaces=function(a){if(Y!==a.doubleSided)a.doubleSided?k.disable(k.CULL_FACE):k.enable(k.CULL_FACE),Y=a.doubleSided;if(fa!==a.flipSided)a.flipSided?k.frontFace(k.CW): -k.frontFace(k.CCW),fa=a.flipSided};this.setDepthTest=function(a){R!==a&&(a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST),R=a)};this.setBlending=function(a){if(a!==W){switch(a){case THREE.AdditiveBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE);break;case THREE.SubtractiveBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:k.blendEquation(k.FUNC_ADD);k.blendFunc(k.ZERO,k.SRC_COLOR);break;default:k.blendEquationSeparate(k.FUNC_ADD, -k.FUNC_ADD),k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)}W=a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=k.createTexture(),L.info.memory.textures++;k.activeTexture(k.TEXTURE0+b);k.bindTexture(k.TEXTURE_2D,a.__webglTexture);var c=B(k.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?k.texImage2D(k.TEXTURE_2D,0,G(a.format),a.image.width,a.image.height,0,G(a.format),k.UNSIGNED_BYTE,a.image.data):k.texImage2D(k.TEXTURE_2D, -0,k.RGBA,k.RGBA,k.UNSIGNED_BYTE,a.image);c&&k.generateMipmap(k.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else k.activeTexture(k.TEXTURE0+b),k.bindTexture(k.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=k.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];k.bindTexture(k.TEXTURE_CUBE_MAP, -a.__webglTexture);B(k.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=k.createFramebuffer();a.__webglRenderbuffer[c]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,G(a.format),a.width,a.height,0,G(a.format),G(a.type),null);var d=a,e=k.TEXTURE_CUBE_MAP_POSITIVE_X+c;k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer[c]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,e,d.__webglTexture,0);I(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=k.createFramebuffer(), -a.__webglRenderbuffer=k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),B(k.TEXTURE_2D,a,a),k.texImage2D(k.TEXTURE_2D,0,G(a.format),a.width,a.height,0,G(a.format),G(a.type),null),c=k.TEXTURE_2D,k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,c,a.__webglTexture,0),I(a.__webglRenderbuffer,a);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER, -null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=sa,a=ja,d=da,e=oa);b!==M&&(k.bindFramebuffer(k.FRAMEBUFFER,b),k.viewport(d,e,c,a),M=b)};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; +return!1}function f(a,b,c){var d,e,f,g,h=a.vertices;g=h.length;var i=a.colors,n=i.length,k=a.__vertexArray,l=a.__colorArray,m=a.__sortArray,o=a.__dirtyVertices,r=a.__dirtyColors,q=a.__webglCustomAttributesList;if(c.sortParticles){ya.multiplySelf(c.matrixWorld);for(d=0;d=0;c--)a[c].object===b&&a.splice(c,1)}function q(a,b){for(var c=a.length-1;c>=0;c--)a[c]===b&&a.splice(c,1)}function l(a,b,c,d,e){d.program||K.initMaterial(d,b,c,e);if(d.morphTargets&&!e.__webglMorphTargetInfluences){e.__webglMorphTargetInfluences=new Float32Array(K.maxMorphTargets);for(var f=0,g=K.maxMorphTargets;f0;this.getContext=function(){return j};this.supportsVertexTextures= +function(){return Aa};this.setSize=function(a,b){u.width=a;u.height=b;this.setViewport(0,0,u.width,u.height)};this.setViewport=function(a,b,c,d){da=a;oa=b;sa=c;ja=d;j.viewport(da,oa,sa,ja)};this.setScissor=function(a,b,c,d){j.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?j.enable(j.SCISSOR_TEST):j.disable(j.SCISSOR_TEST)};this.setClearColorHex=function(a,b){N.setHex(a);ba=b;j.clearColor(N.r,N.g,N.b,ba)};this.setClearColor=function(a,b){N.copy(a);ba=b;j.clearColor(N.r,N.g,N.b,ba)};this.getClearColor= +function(){return N};this.getClearAlpha=function(){return ba};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=j.COLOR_BUFFER_BIT;if(b===void 0||b)d|=j.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=j.STENCIL_BUFFER_BIT;j.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit= +!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];j.deleteBuffer(c.__webglVertexBuffer);j.deleteBuffer(c.__webglNormalBuffer);j.deleteBuffer(c.__webglTangentBuffer);j.deleteBuffer(c.__webglColorBuffer);j.deleteBuffer(c.__webglUVBuffer);j.deleteBuffer(c.__webglUV2Buffer);j.deleteBuffer(c.__webglSkinVertexABuffer);j.deleteBuffer(c.__webglSkinVertexBBuffer); +j.deleteBuffer(c.__webglSkinIndicesBuffer);j.deleteBuffer(c.__webglSkinWeightsBuffer);j.deleteBuffer(c.__webglFaceBuffer);j.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d=0,e=c.numMorphTargets;d=0)a&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglVertexBuffer),j.vertexAttribPointer(b.position,3,j.FLOAT,!1,0,0));else if(f.morphTargetBase){c=d.program.attributes;f.morphTargetBase!==-1?(j.bindBuffer(j.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]),j.vertexAttribPointer(c.position, +3,j.FLOAT,!1,0,0)):c.position>=0&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglVertexBuffer),j.vertexAttribPointer(c.position,3,j.FLOAT,!1,0,0));if(f.morphTargetForcedOrder.length){g=0;var i=f.morphTargetForcedOrder;for(h=f.morphTargetInfluences;gn&&(k=m,n=h[k]);j.bindBuffer(j.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[k]);j.vertexAttribPointer(c["morphTarget"+g],3,j.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=n;i[k]=1;n=-1;g++}}d.program.uniforms.morphTargetInfluences!==null&&j.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=0;for(h= +e.__webglCustomAttributesList.length;g=0&&(j.bindBuffer(j.ARRAY_BUFFER,c.buffer),j.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,j.FLOAT,!1,0,0))}b.color>=0&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglColorBuffer),j.vertexAttribPointer(b.color,3,j.FLOAT,!1,0,0));b.normal>=0&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglNormalBuffer),j.vertexAttribPointer(b.normal,3,j.FLOAT,!1,0,0));b.tangent>=0&&(j.bindBuffer(j.ARRAY_BUFFER, +e.__webglTangentBuffer),j.vertexAttribPointer(b.tangent,4,j.FLOAT,!1,0,0));b.uv>=0&&(e.__webglUVBuffer?(j.bindBuffer(j.ARRAY_BUFFER,e.__webglUVBuffer),j.vertexAttribPointer(b.uv,2,j.FLOAT,!1,0,0),j.enableVertexAttribArray(b.uv)):j.disableVertexAttribArray(b.uv));b.uv2>=0&&(e.__webglUV2Buffer?(j.bindBuffer(j.ARRAY_BUFFER,e.__webglUV2Buffer),j.vertexAttribPointer(b.uv2,2,j.FLOAT,!1,0,0),j.enableVertexAttribArray(b.uv2)):j.disableVertexAttribArray(b.uv2));d.skinning&&b.skinVertexA>=0&&b.skinVertexB>= +0&&b.skinIndex>=0&&b.skinWeight>=0&&(j.bindBuffer(j.ARRAY_BUFFER,e.__webglSkinVertexABuffer),j.vertexAttribPointer(b.skinVertexA,4,j.FLOAT,!1,0,0),j.bindBuffer(j.ARRAY_BUFFER,e.__webglSkinVertexBBuffer),j.vertexAttribPointer(b.skinVertexB,4,j.FLOAT,!1,0,0),j.bindBuffer(j.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),j.vertexAttribPointer(b.skinIndex,4,j.FLOAT,!1,0,0),j.bindBuffer(j.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),j.vertexAttribPointer(b.skinWeight,4,j.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe? +(d=d.wireframeLinewidth,d!==qa&&(j.lineWidth(d),qa=d),a&&j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),j.drawElements(j.LINES,e.__webglLineCount,j.UNSIGNED_SHORT,0)):(a&&j.bindBuffer(j.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),j.drawElements(j.TRIANGLES,e.__webglFaceCount,j.UNSIGNED_SHORT,0)),K.info.render.calls++,K.info.render.vertices+=e.__webglFaceCount,K.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?j.LINE_STRIP:j.LINES,d=d.linewidth,d!== +qa&&(j.lineWidth(d),qa=d),j.drawArrays(f,0,e.__webglLineCount),K.info.render.calls++):f instanceof THREE.ParticleSystem?(j.drawArrays(j.POINTS,0,e.__webglParticleCount),K.info.render.calls++):f instanceof THREE.Ribbon&&(j.drawArrays(j.TRIANGLE_STRIP,0,e.__webglVertexCount),K.info.render.calls++)}};this.render=function(a,b,c,d){var e,f,g,n,k=a.lights,l=a.fog;C=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), +a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();if(this.renderPluginsPre.length){e=0;for(f=this.renderPluginsPre.length;e=0)x=q.geometry.materials[x],x.transparent?(o.transparent=x,o.opaque=null):(o.opaque=x,o.transparent=null)}else if(x)x.transparent?(o.transparent=x,o.opaque=null):(o.opaque=x,o.transparent=null);g.render=!0;if(this.sortObjects)n.renderDepth?g.z=n.renderDepth:(va.copy(n.position),ya.multiplyVector3(va),g.z=va.z)}this.sortObjects&&d.sort(h);d=a.__webglObjectsImmediate;e=0;for(f=d.length;e65535&&(A[y].counter+= +1,D=A[y].hash+"_"+A[y].counter,p.geometryGroups[D]===void 0&&(p.geometryGroups[D]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:N})),x instanceof THREE.Face3?p.geometryGroups[D].faces3.push(s):p.geometryGroups[D].faces4.push(s),p.geometryGroups[D].vertices+=B;p.geometryGroupsList=[];s=void 0;for(s in p.geometryGroups)p.geometryGroups[s].id=ea++,p.geometryGroupsList.push(p.geometryGroups[s])}for(l in m.geometryGroups)if(p=m.geometryGroups[l],!p.__webglVertexBuffer){s=p;s.__webglVertexBuffer= +j.createBuffer();s.__webglNormalBuffer=j.createBuffer();s.__webglTangentBuffer=j.createBuffer();s.__webglColorBuffer=j.createBuffer();s.__webglUVBuffer=j.createBuffer();s.__webglUV2Buffer=j.createBuffer();s.__webglSkinVertexABuffer=j.createBuffer();s.__webglSkinVertexBBuffer=j.createBuffer();s.__webglSkinIndicesBuffer=j.createBuffer();s.__webglSkinWeightsBuffer=j.createBuffer();s.__webglFaceBuffer=j.createBuffer();s.__webglLineBuffer=j.createBuffer();if(s.numMorphTargets){x=t=void 0;s.__webglMorphTargetsBuffers= +[];t=0;for(x=s.numMorphTargets;t0||B.faceVertexUvs.length>0)p.__uvArray= +new Float32Array(s*2);if(B.faceUvs.length>1||B.faceVertexUvs.length>1)p.__uv2Array=new Float32Array(s*2)}if(v.geometry.skinWeights.length&&v.geometry.skinIndices.length)p.__skinVertexAArray=new Float32Array(s*4),p.__skinVertexBArray=new Float32Array(s*4),p.__skinIndexArray=new Float32Array(s*4),p.__skinWeightArray=new Float32Array(s*4);p.__faceArray=new Uint16Array(x*3);p.__lineArray=new Uint16Array(y*2);if(p.numMorphTargets){p.__morphTargetsArrays=[];v=0;for(B=p.numMorphTargets;v0&&(j.bindBuffer(j.ARRAY_BUFFER,t.__webglSkinVertexABuffer),j.bufferData(j.ARRAY_BUFFER,W,x),j.bindBuffer(j.ARRAY_BUFFER,t.__webglSkinVertexBBuffer),j.bufferData(j.ARRAY_BUFFER,S,x),j.bindBuffer(j.ARRAY_BUFFER,t.__webglSkinIndicesBuffer),j.bufferData(j.ARRAY_BUFFER,J,x),j.bindBuffer(j.ARRAY_BUFFER,t.__webglSkinWeightsBuffer),j.bufferData(j.ARRAY_BUFFER,pa,x))}if(ya&&y){D=0;for(A=C.length;D0&&(j.bindBuffer(j.ARRAY_BUFFER,t.__webglColorBuffer),j.bufferData(j.ARRAY_BUFFER,V, +x))}if(ba&&U.hasTangents){D=0;for(A=C.length;D0&&(j.bindBuffer(j.ARRAY_BUFFER,t.__webglUVBuffer),j.bufferData(j.ARRAY_BUFFER,fa,x))}if(va&&Aa&&L){D=0;for(A=C.length;D0&&(j.bindBuffer(j.ARRAY_BUFFER,t.__webglUV2Buffer),j.bufferData(j.ARRAY_BUFFER,E,x))}if(sa){D=0;for(A=C.length;D=0&&j.enableVertexAttribArray(o.position);o.color>=0&&j.enableVertexAttribArray(o.color);o.normal>=0&&j.enableVertexAttribArray(o.normal); +o.tangent>=0&&j.enableVertexAttribArray(o.tangent);a.skinning&&o.skinVertexA>=0&&o.skinVertexB>=0&&o.skinIndex>=0&&o.skinWeight>=0&&(j.enableVertexAttribArray(o.skinVertexA),j.enableVertexAttribArray(o.skinVertexB),j.enableVertexAttribArray(o.skinIndex),j.enableVertexAttribArray(o.skinWeight));if(a.attributes)for(f in a.attributes)o[f]!==void 0&&o[f]>=0&&j.enableVertexAttribArray(o[f]);if(a.morphTargets)for(f=a.numSupportedMorphTargets=0;f=0&&(j.enableVertexAttribArray(o[q]), +a.numSupportedMorphTargets++);a.uniformsList=[];for(e in a.uniforms)a.uniformsList.push([a.uniforms[e],e])};this.setFaceCulling=function(a,b){a?(!b||b==="ccw"?j.frontFace(j.CCW):j.frontFace(j.CW),a==="back"?j.cullFace(j.BACK):a==="front"?j.cullFace(j.FRONT):j.cullFace(j.FRONT_AND_BACK),j.enable(j.CULL_FACE)):j.disable(j.CULL_FACE)};this.setObjectFaces=function(a){if(X!==a.doubleSided)a.doubleSided?j.disable(j.CULL_FACE):j.enable(j.CULL_FACE),X=a.doubleSided;if(fa!==a.flipSided)a.flipSided?j.frontFace(j.CW): +j.frontFace(j.CCW),fa=a.flipSided};this.setDepthTest=function(a){R!==a&&(a?j.enable(j.DEPTH_TEST):j.disable(j.DEPTH_TEST),R=a)};this.setBlending=function(a){if(a!==V){switch(a){case THREE.AdditiveBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.SRC_ALPHA,j.ONE);break;case THREE.SubtractiveBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.ZERO,j.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:j.blendEquation(j.FUNC_ADD);j.blendFunc(j.ZERO,j.SRC_COLOR);break;default:j.blendEquationSeparate(j.FUNC_ADD, +j.FUNC_ADD),j.blendFuncSeparate(j.SRC_ALPHA,j.ONE_MINUS_SRC_ALPHA,j.ONE,j.ONE_MINUS_SRC_ALPHA)}V=a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=j.createTexture(),K.info.memory.textures++;j.activeTexture(j.TEXTURE0+b);j.bindTexture(j.TEXTURE_2D,a.__webglTexture);var c=y(j.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?j.texImage2D(j.TEXTURE_2D,0,G(a.format),a.image.width,a.image.height,0,G(a.format),j.UNSIGNED_BYTE,a.image.data):j.texImage2D(j.TEXTURE_2D, +0,j.RGBA,j.RGBA,j.UNSIGNED_BYTE,a.image);c&&j.generateMipmap(j.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else j.activeTexture(j.TEXTURE0+b),j.bindTexture(j.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=j.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];j.bindTexture(j.TEXTURE_CUBE_MAP, +a.__webglTexture);y(j.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=j.createFramebuffer();a.__webglRenderbuffer[c]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,G(a.format),a.width,a.height,0,G(a.format),G(a.type),null);var d=a,e=j.TEXTURE_CUBE_MAP_POSITIVE_X+c;j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer[c]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,e,d.__webglTexture,0);I(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=j.createFramebuffer(), +a.__webglRenderbuffer=j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),y(j.TEXTURE_2D,a,a),j.texImage2D(j.TEXTURE_2D,0,G(a.format),a.width,a.height,0,G(a.format),G(a.type),null),c=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer),j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,c,a.__webglTexture,0),I(a.__webglRenderbuffer,a);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER,null);j.bindFramebuffer(j.FRAMEBUFFER, +null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=sa,a=ja,d=da,e=oa);b!==L&&(j.bindFramebuffer(j.FRAMEBUFFER,b),j.viewport(d,e,c,a),L=b)};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=c.wrapS!==void 0?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=c.wrapT!==void 0?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=c.magFilter!==void 0?c.magFilter:THREE.LinearFilter;this.minFilter=c.minFilter!==void 0?c.minFilter:THREE.LinearMipMapLinearFilter;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=c.format!==void 0?c.format:THREE.RGBAFormat;this.type=c.type!==void 0?c.type: THREE.UnsignedByteType;this.depthBuffer=c.depthBuffer!==void 0?c.depthBuffer:!0;this.stencilBuffer=c.stencilBuffer!==void 0?c.stencilBuffer:!0}; THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;return a};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0}; @@ -341,19 +340,19 @@ THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new 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}; THREE.ColorUtils={adjustHSV:function(a,b,c,d){var e=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,e);e.h=THREE.Math.clamp(e.h+b,0,1);e.s=THREE.Math.clamp(e.s+c,0,1);e.v=THREE.Math.clamp(e.v+d,0,1);a.setHSV(e.h,e.s,e.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,e=a.b,g=Math.max(Math.max(c,d),e),f=Math.min(Math.min(c,d),e);if(f===g)f=c=0;else{var h=g-f,f=h/g,c=c===g?(d-e)/h:d===g?2+(e-c)/h:4+(c-d)/h;c/=6;c<0&&(c+=1);c>1&&(c-=1)}b===void 0&&(b={h:0,s:0,v:0});b.h=c;b.s=f;b.v=g;return b}}; THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(a,b){for(var c,d,e=a.vertices.length,g=b instanceof THREE.Mesh?b.geometry:b,f=a.vertices,h=g.vertices,i=a.faces,m=g.faces,j=a.faceVertexUvs[0],o=g.faceVertexUvs[0],q={},n=0;n1&&(d=1-d,e=1-e);g=1-d-e;f.copy(a);f.multiplyScalar(d);h.copy(b);h.multiplyScalar(e);f.addSelf(h);h.copy(c);h.multiplyScalar(g);f.addSelf(h);return f},randomPointInFace:function(a,b,c){var d,e,g;if(a instanceof THREE.Face3)return d=b.vertices[a.a].position,e=b.vertices[a.b].position, g=b.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(d,e,g);else if(a instanceof THREE.Face4){d=b.vertices[a.a].position;e=b.vertices[a.b].position;g=b.vertices[a.c].position;var b=b.vertices[a.d].position,f;c?a._area1&&a._area2?(c=a._area1,f=a._area2):(c=THREE.GeometryUtils.triangleArea(d,e,b),f=THREE.GeometryUtils.triangleArea(e,g,b),a._area1=c,a._area2=f):(c=THREE.GeometryUtils.triangleArea(d,e,b),f=THREE.GeometryUtils.triangleArea(e,g,b));return THREE.GeometryUtils.random()*(c+ -f)a?b(c,e-1):m[e]a?b(c,e-1):m[e]0?(f=c[c.length-1],n=f.x,s=f.y):(f=this.actions[d-1].args,n=f[f.length-2],s=f[f.length-1]);for(f=1;f<=a;f++)l=f/a,g=THREE.Shape.Utils.b2(l,n,o,h),l=THREE.Shape.Utils.b2(l,s,q, -i),c.push(new THREE.Vector2(g,l));break;case THREE.PathActions.BEZIER_CURVE_TO:h=g[4];i=g[5];o=g[0];q=g[1];m=g[2];j=g[3];c.length>0?(f=c[c.length-1],n=f.x,s=f.y):(f=this.actions[d-1].args,n=f[f.length-2],s=f[f.length-1]);for(f=1;f<=a;f++)l=f/a,g=THREE.Shape.Utils.b3(l,n,o,m,h),l=THREE.Shape.Utils.b3(l,s,q,j,i),c.push(new THREE.Vector2(g,l));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[d-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];l=a*g[0].length;f=f.concat(g[0]);g=new THREE.SplineCurve(f); -for(f=1;f<=l;f++)c.push(g.getPointAt(f/l));break;case THREE.PathActions.ARC:f=this.actions[d-1].args;h=g[0];i=g[1];m=g[2];o=g[3];l=g[4];q=!!g[5];j=f[f.length-2];n=f[f.length-1];f.length==0&&(j=n=0);s=l-o;var p=a*2;for(f=1;f<=p;f++)l=f/p,q||(l=1-l),l=o+l*s,g=j+h+m*Math.cos(l),l=n+i+m*Math.sin(l),c.push(new THREE.Vector2(g,l))}b&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(a,b){this.getBoundingBox();return this.getWrapPoints(this.getPoints(b),a)}; -THREE.Path.prototype.nltransform=function(a,b,c,d,e,g){var f=this.getPoints(),h,i,m,j,o;h=0;for(i=f.length;h0?(f=c[c.length-1],n=f.x,q=f.y):(f=this.actions[d-1].args,n=f[f.length-2],q=f[f.length-1]);for(f=1;f<=a;f++)l=f/a,g=THREE.Shape.Utils.b2(l,n,o,h),l=THREE.Shape.Utils.b2(l,q,r, +i),c.push(new THREE.Vector2(g,l));break;case THREE.PathActions.BEZIER_CURVE_TO:h=g[4];i=g[5];o=g[0];r=g[1];m=g[2];k=g[3];c.length>0?(f=c[c.length-1],n=f.x,q=f.y):(f=this.actions[d-1].args,n=f[f.length-2],q=f[f.length-1]);for(f=1;f<=a;f++)l=f/a,g=THREE.Shape.Utils.b3(l,n,o,m,h),l=THREE.Shape.Utils.b3(l,q,r,k,i),c.push(new THREE.Vector2(g,l));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[d-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];l=a*g[0].length;f=f.concat(g[0]);g=new THREE.SplineCurve(f); +for(f=1;f<=l;f++)c.push(g.getPointAt(f/l));break;case THREE.PathActions.ARC:f=this.actions[d-1].args;h=g[0];i=g[1];m=g[2];o=g[3];l=g[4];r=!!g[5];k=f[f.length-2];n=f[f.length-1];f.length==0&&(k=n=0);q=l-o;var p=a*2;for(f=1;f<=p;f++)l=f/p,r||(l=1-l),l=o+l*q,g=k+h+m*Math.cos(l),l=n+i+m*Math.sin(l),c.push(new THREE.Vector2(g,l))}b&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(a,b){this.getBoundingBox();return this.getWrapPoints(this.getPoints(b),a)}; +THREE.Path.prototype.nltransform=function(a,b,c,d,e,g){var f=this.getPoints(),h,i,m,k,o;h=0;for(i=f.length;h=0?h-1:c.length-1;g=f-1>=0?f-1:m.length-1;var l=[m[f],c[h],c[e]];o=THREE.FontUtils.Triangulate.area(l);var p=[m[f],m[g],c[h]];q=THREE.FontUtils.Triangulate.area(p);n=h;j=f;h+=1;f+=-1;h< -0&&(h+=c.length);h%=c.length;f<0&&(f+=m.length);f%=m.length;e=h-1>=0?h-1:c.length-1;g=f-1>=0?f-1:m.length-1;l=[m[f],c[h],c[e]];l=THREE.FontUtils.Triangulate.area(l);p=[m[f],m[g],c[h]];p=THREE.FontUtils.Triangulate.area(p);o+q>l+p&&(h=n,f=j,h<0&&(h+=c.length),h%=c.length,f<0&&(f+=m.length),f%=m.length,e=h-1>=0?h-1:c.length-1,g=f-1>=0?f-1:m.length-1);o=c.slice(0,h);q=c.slice(h);n=m.slice(f);j=m.slice(0,f);g=[m[f],m[g],c[h]];s.push([m[f],c[h],c[e]]);s.push(g);c=o.concat(n).concat(j).concat(q)}return{shape:c, -isolatedPts:s,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),g,f,h,i,m={};g=0;for(f=d.length;g=0?h-1:c.length-1;g=f-1>=0?f-1:m.length-1;var l=[m[f],c[h],c[e]];o=THREE.FontUtils.Triangulate.area(l);var p=[m[f],m[g],c[h]];r=THREE.FontUtils.Triangulate.area(p);n=h;k=f;h+=1;f+=-1;h< +0&&(h+=c.length);h%=c.length;f<0&&(f+=m.length);f%=m.length;e=h-1>=0?h-1:c.length-1;g=f-1>=0?f-1:m.length-1;l=[m[f],c[h],c[e]];l=THREE.FontUtils.Triangulate.area(l);p=[m[f],m[g],c[h]];p=THREE.FontUtils.Triangulate.area(p);o+r>l+p&&(h=n,f=k,h<0&&(h+=c.length),h%=c.length,f<0&&(f+=m.length),f%=m.length,e=h-1>=0?h-1:c.length-1,g=f-1>=0?f-1:m.length-1);o=c.slice(0,h);r=c.slice(h);n=m.slice(f);k=m.slice(0,f);g=[m[f],m[g],c[h]];q.push([m[f],c[h],c[e]]);q.push(g);c=o.concat(n).concat(k).concat(r)}return{shape:c, +isolatedPts:q,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),g,f,h,i,m={};g=0;for(f=d.length;g1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+n),d=d<0?0:1;if(c==="pos")if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= this.getPrevKeyWith("pos",n,f.index-1).pos,this.points[1]=e,this.points[2]=g,this.points[3]=this.getNextKeyWith("pos",n,h.index+1).pos,d=d*0.33+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=this.interpolateCatmullRom(this.points,d*1.01),this.target.set(d[0],d[1],d[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0)}else if(c=== -"rot")THREE.Quaternion.slerp(e,g,a.quaternion,d);else if(c==="scl")c=a.scale,c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d}}if(this.JITCompile&&j[0][m]===void 0){this.hierarchy[0].update(null,!0);for(n=0;na.length-2?g:g+1;c[3]=g>a.length-3?g:g+2;g=a[c[0]];h=a[c[1]];i=a[c[2]];m=a[c[3]];c=e*e;f=e*c;d[0]=this.interpolate(g[0],h[0],i[0],m[0],e,c,f);d[1]=this.interpolate(g[1],h[1],i[1],m[1],e,c,f);d[2]=this.interpolate(g[2],h[2],i[2],m[2],e,c,f);return d}; THREE.Animation.prototype.interpolate=function(a,b,c,d,e,g,f){a=(c-a)*0.5;d=(d-b)*0.5;return(2*(b-c)+a+d)*f+(-3*(b-c)-2*a-d)*g+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){var d=this.data.hierarchy[b].keys;for(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c=c0?c:0:c>=0?c:c+d.length;c>=0;c--)if(d[c][a]!==void 0)return d[c];return this.data.hierarchy[b].keys[d.length-1]}; @@ -450,7 +449,7 @@ function(a){switch(a.keyCode){case 38:case 87:this.moveForward=!0;break;case 37: this.object.translateX(b);this.moveUp&&this.object.translateY(b);this.moveDown&&this.object.translateY(-b);c=a*this.lookSpeed;this.activeLook||(c=0);this.lon+=this.mouseX*c;this.lookVertical&&(this.lat-=this.mouseY*c);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;a=this.target;b=this.object.position;a.x=b.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=b.y+100*Math.cos(this.phi);a.z=b.z+100*Math.sin(this.phi)*Math.sin(this.theta)}a= 1;this.constrainVertical&&(a=Math.PI/(this.verticalMax-this.verticalMin));this.lon+=this.mouseX*c;this.lookVertical&&(this.lat-=this.mouseY*c*a);this.lat=Math.max(-85,Math.min(85,this.lat));this.phi=(90-this.lat)*Math.PI/180;this.theta=this.lon*Math.PI/180;if(this.constrainVertical)this.phi=THREE.Math.mapLinear(this.phi,0,Math.PI,this.verticalMin,this.verticalMax);a=this.target;b=this.object.position;a.x=b.x+100*Math.sin(this.phi)*Math.cos(this.theta);a.y=b.y+100*Math.cos(this.phi);a.z=b.z+100*Math.sin(this.phi)* Math.sin(this.theta);this.object.lookAt(a)};this.domElement.addEventListener("contextmenu",function(a){a.preventDefault()},!1);this.domElement.addEventListener("mousemove",c(this,this.onMouseMove),!1);this.domElement.addEventListener("mousedown",c(this,this.onMouseDown),!1);this.domElement.addEventListener("mouseup",c(this,this.onMouseUp),!1);this.domElement.addEventListener("keydown",c(this,this.onKeyDown),!1);this.domElement.addEventListener("keyup",c(this,this.onKeyUp),!1)}; -THREE.PathControls=function(a,b){function c(a){if((a*=2)<1)return 0.5*a*a;return-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function e(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),p=g.length,r=0;f=p-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:g[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[f]={time:d,pos:g[f],rot:[0,0,0,1],scl:[1,1,1]};for(f=1;f=0?a:a+f;b=this.verticalAngleMap.srcRange; @@ -468,42 +467,42 @@ THREE.FlyControls=function(a,b){function c(a,b){return function(){b.apply(a,argu 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",c(this,this.mousemove),!1);this.domElement.addEventListener("mousedown",c(this,this.mousedown),!1);this.domElement.addEventListener("mouseup",c(this, this.mouseup),!1);this.domElement.addEventListener("keydown",c(this,this.keydown),!1);this.domElement.addEventListener("keyup",c(this,this.keyup),!1);this.updateMovementVector();this.updateRotationVector()}; -THREE.RollControls=function(a,b){this.object=a;this.domElement=b!==void 0?b: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 c=new THREE.Vector3,d=new THREE.Vector3,e=new THREE.Vector3,g=new THREE.Matrix4,f=!1,h=1,i=0,m=0,j=0,o=0,q=0,n=window.innerWidth/2,s=window.innerHeight/2;this.update=function(a){if(this.mouseLook){var b=a*this.lookSpeed; -this.rotateHorizontally(b*o);this.rotateVertically(b*q)}b=a*this.movementSpeed;this.object.translateZ(-b*(i>0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*m);this.object.translateY(b*j);f&&(this.roll+=this.rollSpeed*a*h);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*m);this.object.translateY(b*k);f&&(this.roll+=this.rollSpeed*a*h);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y1?d.normalize():d.z=Math.sqrt(1-e*e);f.copy(c.object.position).subSelf(c.target);e=c.object.up.clone().setLength(d.y);e.addSelf(c.object.up.clone().crossSelf(f).setLength(d.x));e.addSelf(f.setLength(d.z));return e};this.rotateCamera=function(){var a=Math.acos(h.dot(i)/h.length()/i.length());if(a){var b=(new THREE.Vector3).cross(h,i).normalize(),d=new THREE.Quaternion;a*=c.rotateSpeed;d.setFromAxisAngle(b, --a);d.multiplyVector3(f);d.multiplyVector3(c.object.up);d.multiplyVector3(i);c.staticMoving?h=i:(d.setFromAxisAngle(b,a*(c.dynamicDampingFactor-1)),d.multiplyVector3(h))}};this.zoomCamera=function(){var a=1+(j.y-m.y)*c.zoomSpeed;a!==1&&a>0&&(f.multiplyScalar(a),c.staticMoving?m=j:m.y+=(j.y-m.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=q.clone().subSelf(o);if(a.lengthSq()){a.multiplyScalar(f.length()*c.panSpeed);var b=f.clone().crossSelf(c.object.up).setLength(a.x);b.addSelf(c.object.up.clone().setLength(a.y)); -c.object.position.addSelf(b);c.target.addSelf(b);c.staticMoving?o=q:o.addSelf(a.sub(q,o).multiplyScalar(c.dynamicDampingFactor))}};this.checkDistances=function(){if(!c.noZoom||!c.noPan)c.object.position.lengthSq()>c.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()0&&(f.multiplyScalar(a),c.staticMoving?m=k:m.y+=(k.y-m.y)*this.dynamicDampingFactor)};this.panCamera=function(){var a=r.clone().subSelf(o);if(a.lengthSq()){a.multiplyScalar(f.length()*c.panSpeed);var b=f.clone().crossSelf(c.object.up).setLength(a.x);b.addSelf(c.object.up.clone().setLength(a.y)); +c.object.position.addSelf(b);c.target.addSelf(b);c.staticMoving?o=r:o.addSelf(a.sub(r,o).multiplyScalar(c.dynamicDampingFactor))}};this.checkDistances=function(){if(!c.noZoom||!c.noPan)c.object.position.lengthSq()>c.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()0?1:-1;for(h=0;h0?1:-1;for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;ha&&(a+=Math.PI*2),a=(b+a)/2,new THREE.Vector2(-Math.cos(a),-Math.sin(a));return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(x=a.length;--x>=0;){ea=x;Y=x-1;Y<0&&(Y=a.length-1);for(var b= -0,c=n+j*2,b=0;b=0;z--){ca=z/j;Z=i*(1-ca);ca=m*Math.sin(ca*Math.PI/2);x=0;for(J=t.length;xa&&(a+=Math.PI*2),a=(b+a)/2,new THREE.Vector2(-Math.cos(a),-Math.sin(a));return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(x=a.length;--x>=0;){ea=x;X=x-1;X<0&&(X=a.length-1);for(var b= +0,c=n+k*2,b=0;b=0;N--){ba=N/k;Y=i*(1-ba);ba=m*Math.sin(ba*Math.PI/2);x=0;for(B=t.length;x0)for(m=0;m2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=m;e<=i&&(i=0);m=i+1;e<=m&&(m=0);j=m+1;e<=j&&(j=0);var q;a:{q=a;var n=i,s=m,l=j,p=e,r=f,t=void 0,v=void 0,B=void 0, -I=void 0,y=void 0,G=void 0,u=void 0,F=void 0,A=void 0,v=q[r[n]].x,B=q[r[n]].y,I=q[r[s]].x,y=q[r[s]].y,G=q[r[l]].x,u=q[r[l]].y;if(1.0E-10>(I-v)*(u-B)-(y-B)*(G-v))q=!1;else{for(t=0;t=0&&z>=0&&Z>=0){q=!1;break a}}q= -!0}}if(q){g.push([a[f[i]],a[f[m]],a[f[j]]]);h.push([f[i],f[m],f[j]]);i=m;for(j=m+1;j0)for(m=0;m2;){if(o--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=m;e<=i&&(i=0);m=i+1;e<=m&&(m=0);k=m+1;e<=k&&(k=0);var r;a:{r=a;var n=i,q=m,l=k,p=e,s=f,t=void 0,v=void 0,y=void 0, +I=void 0,z=void 0,G=void 0,u=void 0,F=void 0,A=void 0,v=r[s[n]].x,y=r[s[n]].y,I=r[s[q]].x,z=r[s[q]].y,G=r[s[l]].x,u=r[s[l]].y;if(1.0E-10>(I-v)*(u-y)-(z-y)*(G-v))r=!1;else{for(t=0;t=0&&N>=0&&Y>=0){r=!1;break a}}r= +!0}}if(r){g.push([a[f[i]],a[f[m]],a[f[k]]]);h.push([f[i],f[m],f[k]]);i=m;for(k=m+1;k0;)this.smooth(a)}; -THREE.SubdivisionModifier.prototype.smooth=function(a){function b(a,b,c,d,h,i){var l=new THREE.Face4(a,b,c,d,null,h.color,h.material);if(f.useOldVertexColors){l.vertexColors=[];for(var j,n,m,o=0;o<4;o++){m=i[o];j=new THREE.Color;j.setRGB(0,0,0);for(var p=0;p=0){p=i.invBindMatrices[m];j.invBindMatrix=p;j.skinningMatrix=new THREE.Matrix4;j.skinningMatrix.multiply(j.world,p);j.weights=[];for(p=0;p=0){p=i.invBindMatrices[n];j.invBindMatrix=p;j.skinningMatrix=new THREE.Matrix4;j.skinningMatrix.multiply(j.world,p);j.weights=[];for(p=0;p1){j=new THREE.MeshFaceMaterial;for(h=0;h1?b.add(j):b=j}}b.name=a.id||"";a.matrix.decompose(b.position,b.rotation,b.scale);for(f=0;f1?c[1].substr(0,b):"0";c[1].length1?c[1].substr(0,b):"0";c[1].length=0,g=e.indexOf("(")>=0,h;if(f)d=e.split("."),e=d.shift(),d.shift();else if(g){h=e.split("(");e=h.shift();for(d=0;db){k=j.output[i];break}g=k!==void 0?k instanceof THREE.Matrix4?g.multiply(g,k):g.multiply(g,h.matrix):g.multiply(g,h.matrix)}else g=g.multiply(g,h.matrix);b=g;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};o.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};A.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c];if(d instanceof F)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(d=$[this.effect.surface.init_from]))a.map= +this.name=a.getAttribute("name");for(var b=0;b0&&(this[c.nodeName]=parseFloat(d[0].textContent))}}this.create();return this};A.prototype.create=function(){var a={},b=this.transparency!==void 0&&this.transparency<1,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c];if(d instanceof F)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid&&(d=Z[this.effect.surface.init_from]))a.map= THREE.ImageUtils.loadTexture(ya+d.init_from),a.map.wrapS=THREE.RepeatWrapping,a.map.wrapT=THREE.RepeatWrapping,a.map.repeat.x=1,a.map.repeat.y=-1}else c=="diffuse"?a.color=d.color.getHex():b||(a[c]=d.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=Aa;return this.material=new THREE.MeshLambertMaterial(a)};x.prototype.parse=function(a){for(var b=0;b=0,d=a.indexOf("(")>=0,e,f;if(c)b=a.split("."),a=b.shift(),f=b.shift();else if(d){e=a.split("(");a=e.shift();for(b=0;b=0,d=a.indexOf("(")>=0,e,f;if(c)b=a.split("."),a=b.shift(),f=b.shift();else if(d){e=a.split("(");a=e.shift();for(b=0;b1&&(J=new THREE.MeshFaceMaterial); -a=new THREE.Mesh(F,J);a.name=q;a.position.set(B[0],B[1],B[2]);y?(a.quaternion.set(y[0],y[1],y[2],y[3]),a.useQuaternion=!0):a.rotation.set(I[0],I[1],I[2]);a.scale.set(G[0],G[1],G[2]);a.visible=r.visible;K.scene.add(a);K.objects[q]=a;if(r.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);K.scene.collisions.colliders.push(b)}if(r.castsShadow)b=new THREE.ShadowVolume(F),K.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;r.trigger&&r.trigger.toLowerCase()!="none"&&(b= -{type:r.trigger,object:r},K.triggers[a.name]=b)}}else B=r.position,I=r.rotation,y=r.quaternion,G=r.scale,y=0,a=new THREE.Object3D,a.name=q,a.position.set(B[0],B[1],B[2]),y?(a.quaternion.set(y[0],y[1],y[2],y[3]),a.useQuaternion=!0):a.rotation.set(I[0],I[1],I[2]),a.scale.set(G[0],G[1],G[2]),a.visible=r.visible!==void 0?r.visible:!1,K.scene.add(a),K.objects[q]=a,K.empties[q]=a,r.trigger&&r.trigger.toLowerCase()!="none"&&(b={type:r.trigger,object:r},K.triggers[a.name]=b)}function g(a){return function(b){K.geometries[a]= -b;e();Z-=1;i.onLoadComplete();h()}}function f(a){return function(b){K.geometries[a]=b}}function h(){i.callbackProgress({totalModels:k,totalTextures:X,loadedModels:k-Z,loadedTextures:X-L},K);i.onLoadProgress();Z==0&&L==0&&b(K)}var i=this,m=THREE.Loader.prototype.extractUrlbase(c),j,o,q,n,s,l,p,r,t,v,B,I,y,G,u,F,A,x,J,z,ca,Z,L,k,X,K;z=a;c=new THREE.BinaryLoader;ca=new THREE.JSONLoader;L=Z=0;K={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, -empties:{}};a=!1;for(q in z.objects)if(r=z.objects[q],r.meshCollider){a=!0;break}if(a)K.scene.collisions=new THREE.CollisionSystem;if(z.transform){a=z.transform.position;t=z.transform.rotation;var M=z.transform.scale;a&&K.scene.position.set(a[0],a[1],a[2]);t&&K.scene.rotation.set(t[0],t[1],t[2]);M&&K.scene.scale.set(M[0],M[1],M[2]);(a||t||M)&&K.scene.updateMatrix()}a=function(){L-=1;h();i.onLoadComplete()};for(s in z.cameras)t=z.cameras[s],t.type=="perspective"?A=new THREE.PerspectiveCamera(t.fov, -t.aspect,t.near,t.far):t.type=="ortho"&&(A=new THREE.OrthographicCamera(t.left,t.right,t.top,t.bottom,t.near,t.far)),B=t.position,t=t.target,A.position.set(B[0],B[1],B[2]),A.target=new THREE.Vector3(t[0],t[1],t[2]),K.cameras[s]=A;for(n in z.lights)t=z.lights[n],s=t.color!==void 0?t.color:16777215,A=t.intensity!==void 0?t.intensity:1,t.type=="directional"?(B=t.direction,v=new THREE.DirectionalLight(s,A),v.position.set(B[0],B[1],B[2]),v.position.normalize()):t.type=="point"?(B=t.position,v=t.distance, -v=new THREE.PointLight(s,A,v),v.position.set(B[0],B[1],B[2])):t.type=="ambient"&&(v=new THREE.AmbientLight(s)),K.scene.add(v),K.lights[n]=v;for(l in z.fogs)n=z.fogs[l],n.type=="linear"?x=new THREE.Fog(0,n.near,n.far):n.type=="exp2"&&(x=new THREE.FogExp2(0,n.density)),t=n.color,x.color.setRGB(t[0],t[1],t[2]),K.fogs[l]=x;if(K.cameras&&z.defaults.camera)K.currentCamera=K.cameras[z.defaults.camera];if(K.fogs&&z.defaults.fog)K.scene.fog=K.fogs[z.defaults.fog];t=z.defaults.bgcolor;K.bgColor=new THREE.Color; -K.bgColor.setRGB(t[0],t[1],t[2]);K.bgColorAlpha=z.defaults.bgalpha;for(j in z.geometries)if(l=z.geometries[j],l.type=="bin_mesh"||l.type=="ascii_mesh")Z+=1,i.onLoadStart();k=Z;for(j in z.geometries)l=z.geometries[j],l.type=="cube"?(F=new THREE.CubeGeometry(l.width,l.height,l.depth,l.segmentsWidth,l.segmentsHeight,l.segmentsDepth,null,l.flipped,l.sides),K.geometries[j]=F):l.type=="plane"?(F=new THREE.PlaneGeometry(l.width,l.height,l.segmentsWidth,l.segmentsHeight),K.geometries[j]=F):l.type=="sphere"? -(F=new THREE.SphereGeometry(l.radius,l.segmentsWidth,l.segmentsHeight),K.geometries[j]=F):l.type=="cylinder"?(F=new THREE.CylinderGeometry(l.topRad,l.botRad,l.height,l.radSegs,l.heightSegs),K.geometries[j]=F):l.type=="torus"?(F=new THREE.TorusGeometry(l.radius,l.tube,l.segmentsR,l.segmentsT),K.geometries[j]=F):l.type=="icosahedron"?(F=new THREE.IcosahedronGeometry(l.subdivisions),K.geometries[j]=F):l.type=="bin_mesh"?c.load(d(l.url,z.urlBaseType),g(j)):l.type=="ascii_mesh"?ca.load(d(l.url,z.urlBaseType), -g(j)):l.type=="embedded_mesh"&&(l=z.embeds[l.id])&&ca.createModel(l,f(j),"");for(p in z.textures)if(j=z.textures[p],j.url instanceof Array){L+=j.url.length;for(l=0;l1&&(B=new THREE.MeshFaceMaterial); +a=new THREE.Mesh(F,B);a.name=r;a.position.set(y[0],y[1],y[2]);z?(a.quaternion.set(z[0],z[1],z[2],z[3]),a.useQuaternion=!0):a.rotation.set(I[0],I[1],I[2]);a.scale.set(G[0],G[1],G[2]);a.visible=s.visible;J.scene.add(a);J.objects[r]=a;if(s.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);J.scene.collisions.colliders.push(b)}if(s.castsShadow)b=new THREE.ShadowVolume(F),J.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;s.trigger&&s.trigger.toLowerCase()!="none"&&(b= +{type:s.trigger,object:s},J.triggers[a.name]=b)}}else y=s.position,I=s.rotation,z=s.quaternion,G=s.scale,z=0,a=new THREE.Object3D,a.name=r,a.position.set(y[0],y[1],y[2]),z?(a.quaternion.set(z[0],z[1],z[2],z[3]),a.useQuaternion=!0):a.rotation.set(I[0],I[1],I[2]),a.scale.set(G[0],G[1],G[2]),a.visible=s.visible!==void 0?s.visible:!1,J.scene.add(a),J.objects[r]=a,J.empties[r]=a,s.trigger&&s.trigger.toLowerCase()!="none"&&(b={type:s.trigger,object:s},J.triggers[a.name]=b)}function g(a){return function(b){J.geometries[a]= +b;e();Y-=1;i.onLoadComplete();h()}}function f(a){return function(b){J.geometries[a]=b}}function h(){i.callbackProgress({totalModels:j,totalTextures:W,loadedModels:j-Y,loadedTextures:W-K},J);i.onLoadProgress();Y==0&&K==0&&b(J)}var i=this,m=THREE.Loader.prototype.extractUrlbase(c),k,o,r,n,q,l,p,s,t,v,y,I,z,G,u,F,A,x,B,N,ba,Y,K,j,W,J;N=a;c=new THREE.BinaryLoader;ba=new THREE.JSONLoader;K=Y=0;J={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, +empties:{}};a=!1;for(r in N.objects)if(s=N.objects[r],s.meshCollider){a=!0;break}if(a)J.scene.collisions=new THREE.CollisionSystem;if(N.transform){a=N.transform.position;t=N.transform.rotation;var L=N.transform.scale;a&&J.scene.position.set(a[0],a[1],a[2]);t&&J.scene.rotation.set(t[0],t[1],t[2]);L&&J.scene.scale.set(L[0],L[1],L[2]);(a||t||L)&&J.scene.updateMatrix()}a=function(){K-=1;h();i.onLoadComplete()};for(q in N.cameras)t=N.cameras[q],t.type=="perspective"?A=new THREE.PerspectiveCamera(t.fov, +t.aspect,t.near,t.far):t.type=="ortho"&&(A=new THREE.OrthographicCamera(t.left,t.right,t.top,t.bottom,t.near,t.far)),y=t.position,t=t.target,A.position.set(y[0],y[1],y[2]),A.target=new THREE.Vector3(t[0],t[1],t[2]),J.cameras[q]=A;for(n in N.lights)t=N.lights[n],q=t.color!==void 0?t.color:16777215,A=t.intensity!==void 0?t.intensity:1,t.type=="directional"?(y=t.direction,v=new THREE.DirectionalLight(q,A),v.position.set(y[0],y[1],y[2]),v.position.normalize()):t.type=="point"?(y=t.position,v=t.distance, +v=new THREE.PointLight(q,A,v),v.position.set(y[0],y[1],y[2])):t.type=="ambient"&&(v=new THREE.AmbientLight(q)),J.scene.add(v),J.lights[n]=v;for(l in N.fogs)n=N.fogs[l],n.type=="linear"?x=new THREE.Fog(0,n.near,n.far):n.type=="exp2"&&(x=new THREE.FogExp2(0,n.density)),t=n.color,x.color.setRGB(t[0],t[1],t[2]),J.fogs[l]=x;if(J.cameras&&N.defaults.camera)J.currentCamera=J.cameras[N.defaults.camera];if(J.fogs&&N.defaults.fog)J.scene.fog=J.fogs[N.defaults.fog];t=N.defaults.bgcolor;J.bgColor=new THREE.Color; +J.bgColor.setRGB(t[0],t[1],t[2]);J.bgColorAlpha=N.defaults.bgalpha;for(k in N.geometries)if(l=N.geometries[k],l.type=="bin_mesh"||l.type=="ascii_mesh")Y+=1,i.onLoadStart();j=Y;for(k in N.geometries)l=N.geometries[k],l.type=="cube"?(F=new THREE.CubeGeometry(l.width,l.height,l.depth,l.segmentsWidth,l.segmentsHeight,l.segmentsDepth,null,l.flipped,l.sides),J.geometries[k]=F):l.type=="plane"?(F=new THREE.PlaneGeometry(l.width,l.height,l.segmentsWidth,l.segmentsHeight),J.geometries[k]=F):l.type=="sphere"? +(F=new THREE.SphereGeometry(l.radius,l.segmentsWidth,l.segmentsHeight),J.geometries[k]=F):l.type=="cylinder"?(F=new THREE.CylinderGeometry(l.topRad,l.botRad,l.height,l.radSegs,l.heightSegs),J.geometries[k]=F):l.type=="torus"?(F=new THREE.TorusGeometry(l.radius,l.tube,l.segmentsR,l.segmentsT),J.geometries[k]=F):l.type=="icosahedron"?(F=new THREE.IcosahedronGeometry(l.subdivisions),J.geometries[k]=F):l.type=="bin_mesh"?c.load(d(l.url,N.urlBaseType),g(k)):l.type=="ascii_mesh"?ba.load(d(l.url,N.urlBaseType), +g(k)):l.type=="embedded_mesh"&&(l=N.embeds[l.id])&&ba.createModel(l,f(k),"");for(p in N.textures)if(k=N.textures[p],k.url instanceof Array){K+=k.url.length;for(l=0;l=57344&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;e<8;e++){for(var g=0,f=0;f>1^-(h&1);c[8*f+e]=g}d+=b}b=a.length-d;g=new Uint16Array(b);for(e=f=0;e=this.maxCount-3&&h(this)};this.begin=function(){this.count=0; -this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var b=this.count*3;bthis.size-1&&(i=this.size-1);var q=Math.floor(m-h);q<1&&(q=1);m=Math.floor(m+h);m>this.size-1&&(m=this.size-1);var n=Math.floor(j-h);n<1&&(n=1);h=Math.floor(j+h);h>this.size-1&&(h=this.size- -1);for(var s,l,p,r,t,v;o0&&(this.field[p+s]+=r)}}};this.addPlaneX=function(a,b){var e,g,f,h,i,m=this.size,j=this.yd,o=this.zd,q=this.field,n=m*Math.sqrt(a/b);n>m&&(n=m);for(e=0;e0)for(g=0;gj&&(s=j);for(g=0;g0){i=g*o;for(e=0;ej&&(s=j);for(f=0;f0){i=q*f;for(g=0;gthis.size-1&&(i=this.size-1);var r=Math.floor(m-h);r<1&&(r=1);m=Math.floor(m+h);m>this.size-1&&(m=this.size-1);var n=Math.floor(k-h);n<1&&(n=1);h=Math.floor(k+h);h>this.size-1&&(h=this.size- +1);for(var q,l,p,s,t,v;o0&&(this.field[p+q]+=s)}}};this.addPlaneX=function(a,b){var e,g,f,h,i,m=this.size,k=this.yd,o=this.zd,r=this.field,n=m*Math.sqrt(a/b);n>m&&(n=m);for(e=0;e0)for(g=0;gk&&(q=k);for(g=0;g0){i=g*o;for(e=0;ek&&(q=k);for(f=0;f0){i=r*f;for(g=0;g0&&p.x0&&p.y0.0010&&y.scale>0.0010)l.x=y.x,l.y=y.y,l.z=y.z,n=y.size*y.scale/ -h,s.x=n*j,s.y=n,b.uniform3f(r.screenPosition,l.x,l.y,l.z),b.uniform2f(r.scale,s.x,s.y),b.uniform1f(r.rotation,y.rotation),b.uniform1f(r.opacity,y.opacity),b.uniform3f(r.color,y.color.r,y.color.g,y.color.b),c.setBlending(y.blending),c.setTexture(y.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}}; +"color");d.uniforms.scale=b.getUniformLocation(d.program,"scale");d.uniforms.rotation=b.getUniformLocation(d.program,"rotation");d.uniforms.screenPosition=b.getUniformLocation(d.program,"screenPosition");d.attributesEnabled=!1};this.render=function(a,g,f,h){var a=a.__webglFlares,i=a.length;if(i){var m=new THREE.Vector3,k=h/f,o=f*0.5,r=h*0.5,n=16/h,q=new THREE.Vector2(n*k,n),l=new THREE.Vector3(1,1,0),p=new THREE.Vector2(1,1),s=d.uniforms,n=d.attributes;b.useProgram(d.program);if(!d.attributesEnabled)b.enableVertexAttribArray(d.attributes.vertex), +b.enableVertexAttribArray(d.attributes.uv),d.attributesEnabled=!0;b.uniform1i(s.occlusionMap,0);b.uniform1i(s.map,1);b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.vertexAttribPointer(n.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(n.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.disable(b.CULL_FACE);b.depthMask(!1);var t,v,y,I,z;for(t=0;t0&&p.x0&&p.y0.0010&&z.scale>0.0010)l.x=z.x,l.y=z.y,l.z=z.z,n=z.size*z.scale/ +h,q.x=n*k,q.y=n,b.uniform3f(s.screenPosition,l.x,l.y,l.z),b.uniform2f(s.scale,q.x,q.y),b.uniform1f(s.rotation,z.rotation),b.uniform1f(s.opacity,z.opacity),b.uniform3f(s.color,z.color.r,z.color.g,z.color.b),c.setBlending(z.blending),c.setTexture(z.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}}; THREE.ShadowMapPlugin=function(){var a,b,c,d,e,g=new THREE.Frustum,f=new THREE.Matrix4;this.shadowMatrix=[];this.shadowMap=[];this.init=function(e){a=e.context;b=e;var e=THREE.ShaderLib.depthRGBA,f=THREE.UniformsUtils.clone(e.uniforms);c=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f});d=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f,morphTargets:!0});c._shadowPass=!0;d._shadowPass=!0};this.render= -function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(h){var i,m,j,o,q,n,s,l,p=0,r=h.lights;e||(e=new THREE.PerspectiveCamera(b.shadowCameraFov,b.shadowMapWidth/b.shadowMapHeight,b.shadowCameraNear,b.shadowCameraFar));i=0;for(m=r.length;i1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b), THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}}; -THREE.Ray=function(a,b){function c(a,b,c){i.sub(c,a);p=i.dot(b);if(p<=0)return null;k=n.add(a,o.copy(b).multiplyScalar(p));return s=c.distanceTo(k)}function d(a,b,c,d){i.sub(d,b);n.sub(c,b);o.sub(a,b);K=i.dot(i);C=i.dot(n);Q=i.dot(o);O=n.dot(n);w=n.dot(o);F=1/(K*O-C*C);z=(O*Q-C*w)*F;D=(K*w-C*Q)*F;return z>=0&&D>=0&&z+D<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, -c,d=[];b=0;for(c=a.length;bk.scale.x)return[];i={distance:n,point:k.position,face:null,object:k};o.push(i)}else if(k instanceof THREE.Mesh){n=c(this.origin,this.direction,k.matrixWorld.getPosition());if(n===null||n>k.geometry.boundingSphere.radius*Math.max(k.scale.x,Math.max(k.scale.y,k.scale.z)))return o;var p,G=k.geometry,H=G.vertices,I;k.matrixRotationWorld.extractRotation(k.matrixWorld);n=0;for(W=G.faces.length;n0:p<0)))if(p=l.dot(m.sub(f,a))/p,j.add(a,b.multiplyScalar(p)),i instanceof THREE.Face3)d(j, -f,e,g)&&(i={distance:a.distanceTo(j),point:j.clone(),face:i,object:k},o.push(i));else if(i instanceof THREE.Face4&&(d(j,f,e,h)||d(j,e,g,h)))i={distance:a.distanceTo(j),point:j.clone(),face:i,object:k},o.push(i)}return o};var i=new THREE.Vector3,n=new THREE.Vector3,o=new THREE.Vector3,p,k,s,K,C,Q,O,w,F,z,D}; +THREE.Ray=function(a,b){function c(a,b,c){i.sub(c,a);q=i.dot(b);if(q<=0)return null;k=n.add(a,o.copy(b).multiplyScalar(q));return r=c.distanceTo(k)}function d(a,b,c,d){i.sub(d,b);n.sub(c,b);o.sub(a,b);K=i.dot(i);C=i.dot(n);Q=i.dot(o);O=n.dot(n);v=n.dot(o);F=1/(K*O-C*C);y=(O*Q-C*v)*F;D=(K*v-C*Q)*F;return y>=0&&D>=0&&y+D<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, +c,d=[];b=0;for(c=a.length;bk.scale.x)return[];i={distance:n,point:k.position,face:null,object:k};o.push(i)}else if(k instanceof THREE.Mesh){n=c(this.origin,this.direction,k.matrixWorld.getPosition());if(n===null||n>k.geometry.boundingSphere.radius*Math.max(k.scale.x,Math.max(k.scale.y,k.scale.z)))return o;var V,H=k.geometry,I=H.vertices,G;k.matrixRotationWorld.extractRotation(k.matrixWorld);n=0;for(q=H.faces.length;n0:V<0)))if(V=l.dot(m.sub(f,a))/V,j.add(a,b.multiplyScalar(V)),i instanceof THREE.Face3)d(j, +f,e,g)&&(i={distance:a.distanceTo(j),point:j.clone(),face:i,object:k},o.push(i));else if(i instanceof THREE.Face4&&(d(j,f,e,h)||d(j,e,g,h)))i={distance:a.distanceTo(j),point:j.clone(),face:i,object:k},o.push(i)}return o};var i=new THREE.Vector3,n=new THREE.Vector3,o=new THREE.Vector3,q,k,r,K,C,Q,O,v,F,y,D}; 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,n,o){h?(h=!1,b=ej?e>n?e:n:j>n?j:n,f=g>i?g>o?g:o:i>o?i:o):(b=ej?e>n?e>d?e:d:n>d?n:d:j>n?j>d?j:d:n>d?n: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&&z.z<1))g=O[Q]=O[Q]||new THREE.RenderableParticle,Q++,C=g,C.x=z.x/z.w,C.y=z.y/z.w,C.z=z.z,C.rotation=J.rotation.z,C.scale.x=J.scale.x*Math.abs(C.x-(z.x+e.projectionMatrix.n11)/(z.w+e.projectionMatrix.n14)),C.scale.y=J.scale.y*Math.abs(C.y-(z.y+e.projectionMatrix.n22)/(z.w+e.projectionMatrix.n24)),C.material=J.material,w.elements.push(C); -f&&w.elements.sort(c);return w}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,d!==void 0?d:1)}; +j,i,n=[],o,q=[],k,r,K=[],C,Q,O=[],v={objects:[],sprites:[],lights:[],elements:[]},F=new THREE.Vector3,y=new THREE.Vector4,D=new THREE.Matrix4,t=new THREE.Matrix4,A=new THREE.Frustum,E=new THREE.Vector4,N=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);D.multiply(b.projectionMatrix,b.matrixWorldInverse);D.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);D.multiply(b.matrixWorld, +b.projectionMatrixInverse);D.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){e=0;v.objects.length=0;v.sprites.length=0;v.lights.length=0;var g=function(b){if(b.visible!==!1){(b instanceof THREE.Mesh||b instanceof THREE.Line)&&(b.frustumCulled===!1||A.contains(b))?(D.multiplyVector3(F.copy(b.position)),f=a(),f.object= +b,f.z=F.z,v.objects.push(f)):b instanceof THREE.Sprite||b instanceof THREE.Particle?(D.multiplyVector3(F.copy(b.position)),f=a(),f.object=b,f.z=F.z,v.sprites.push(f)):b instanceof THREE.Light&&v.lights.push(b);for(var c=0,d=b.children.length;cg&&h.positionScreen.z0&&y.z<1))g=O[Q]=O[Q]||new THREE.RenderableParticle,Q++,C=g,C.x=y.x/y.w,C.y=y.y/y.w,C.z=y.z,C.rotation= +J.rotation.z,C.scale.x=J.scale.x*Math.abs(C.x-(y.x+e.projectionMatrix.n11)/(y.w+e.projectionMatrix.n14)),C.scale.y=J.scale.y*Math.abs(C.y-(y.y+e.projectionMatrix.n22)/(y.w+e.projectionMatrix.n24)),C.material=J.material,v.elements.push(C);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.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= @@ -82,9 +80,9 @@ b;a++)c=this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid b,c,d,f,e,g=new THREE.Vector3,h=new THREE.Vector3;a=0;for(b=this.faces.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a= 0,b=0,c=this.vertices.length;b0&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(s.r*255)+","+Math.floor(s.g*255)+","+Math.floor(s.b*255)+","+K+")"),k.fillRect(Math.floor(Z.getX()), +THREE.CanvasRenderer=function(a){function b(a){if(C!=a)k.globalAlpha=C=a}function c(a){if(Q!=a){switch(a){case THREE.NormalBlending:k.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:k.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:k.globalCompositeOperation="darker"}Q=a}}function d(a){if(O!=a)k.strokeStyle=O=a}function f(a){if(v!=a)k.fillStyle=v=a}var e=this,g,h,m,l=new THREE.Projector,a=a||{},j=a.canvas!==void 0?a.canvas:document.createElement("canvas"), +i,n,o,q,k=j.getContext("2d"),r=new THREE.Color(0),K=0,C=1,Q=0,O=null,v=null,F=null,y=null,D=null,t,A,E,N,aa=new THREE.RenderableVertex,V=new THREE.RenderableVertex,H,I,G,Y,L,B,S,u,R,P,W,J,s=new THREE.Color,z=new THREE.Color,w=new THREE.Color,x=new THREE.Color,M=new THREE.Color,la=[],fa=[],ga,ha,ea,ba,Ba,Ca,Da,Ea,Fa,Ga,ma=new THREE.Rectangle,Z=new THREE.Rectangle,X=new THREE.Rectangle,ya=!1,$=new THREE.Color,ta=new THREE.Color,ua=new THREE.Color,T=new THREE.Vector3,qa,ra,za,ca,sa,va,a=16;qa=document.createElement("canvas"); +qa.width=qa.height=2;ra=qa.getContext("2d");ra.fillStyle="rgba(0,0,0,1)";ra.fillRect(0,0,2,2);za=ra.getImageData(0,0,2,2);ca=za.data;sa=document.createElement("canvas");sa.width=sa.height=a;va=sa.getContext("2d");va.translate(-a/2,-a/2);va.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;n=b;o=Math.floor(i/2);q=Math.floor(n/2);j.width=i;j.height=n;ma.set(-o,-q,o,q);Z.set(-o,-q,o,q);C=1;Q=0; +D=y=F=v=O=null};this.setClearColor=function(a,b){r.copy(a);K=b;Z.set(-o,-q,o,q)};this.setClearColorHex=function(a,b){r.setHex(a);K=b;Z.set(-o,-q,o,q)};this.clear=function(){k.setTransform(1,0,0,-1,o,q);Z.isEmpty()||(Z.minSelf(ma),Z.inflate(2),K<1&&k.clearRect(Math.floor(Z.getX()),Math.floor(Z.getY()),Math.floor(Z.getWidth()),Math.floor(Z.getHeight())),K>0&&(c(THREE.NormalBlending),b(1),f("rgba("+Math.floor(r.r*255)+","+Math.floor(r.g*255)+","+Math.floor(r.b*255)+","+K+")"),k.fillRect(Math.floor(Z.getX()), Math.floor(Z.getY()),Math.floor(Z.getWidth()),Math.floor(Z.getHeight()))),Z.empty())};this.render=function(a,j){function i(a){var b,c,d,e;$.setRGB(0,0,0);ta.setRGB(0,0,0);ua.setRGB(0,0,0);b=0;for(c=a.length;b>1,n=m.height>> -1,g=e.scale.x*o,i=e.scale.y*p,h=g*q,j=i*n,X.set(a.x-h,a.y-j,a.x+h,a.y+j),ma.intersects(X)&&(k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(g,-i),k.translate(-q,-n),k.drawImage(m,0,0),k.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=e.scale.x*o,j=e.scale.y*p,X.set(a.x-h,a.y-j,a.x+h,a.y+j),ma.intersects(X)&&(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 w(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(z!=a)k.lineCap=z=a;a=g.linejoin;if(D!=a)k.lineJoin=D=a;d(g.color.getContextStyle());k.stroke();X.inflate(g.linewidth*2)}}function C(a,d,f,g,h,k,i,q){e.info.render.vertices+=3;e.info.render.faces++;b(q.opacity);c(q.blending);G=a.positionScreen.x;H=a.positionScreen.y; -I=d.positionScreen.x;Y=d.positionScreen.y;L=f.positionScreen.x;B=f.positionScreen.y;K(G,H,I,Y,L,B);if(q instanceof THREE.MeshBasicMaterial)if(q.map)q.map.mapping instanceof THREE.UVMapping&&(aa=i.uvs[0],Aa(G,H,I,Y,L,B,aa[g].u,aa[g].v,aa[h].u,aa[h].v,aa[k].u,aa[k].v,q.map));else if(q.envMap){if(q.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=j.matrixWorldInverse,T.copy(i.vertexNormalsWorld[g]),Ba=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ca=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,T.copy(i.vertexNormalsWorld[h]), -Da=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ea=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,T.copy(i.vertexNormalsWorld[k]),Fa=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ga=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,Aa(G,H,I,Y,L,B,Ba,Ca,Da,Ea,Fa,Ga,q.envMap)}else q.wireframe?ja(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&&(aa=i.uvs[0],Aa(G,H,I,Y,L,B,aa[g].u,aa[g].v, -aa[h].u,aa[h].v,aa[k].u,aa[k].v,q.map)),c(THREE.SubtractiveBlending)),ya?!q.wireframe&&q.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==3?(A.r=x.r=y.r=$.r,A.g=x.g=y.g=$.g,A.b=x.b=y.b=$.b,n(m,i.v1.positionWorld,i.vertexNormalsWorld[0],A),n(m,i.v2.positionWorld,i.vertexNormalsWorld[1],x),n(m,i.v3.positionWorld,i.vertexNormalsWorld[2],y),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)),x.r=Math.max(0,Math.min(q.color.r* -x.r,1)),x.g=Math.max(0,Math.min(q.color.g*x.g,1)),x.b=Math.max(0,Math.min(q.color.b*x.b,1)),y.r=Math.max(0,Math.min(q.color.r*y.r,1)),y.g=Math.max(0,Math.min(q.color.g*y.g,1)),y.b=Math.max(0,Math.min(q.color.b*y.b,1)),M.r=(x.r+y.r)*0.5,M.g=(x.g+y.g)*0.5,M.b=(x.b+y.b)*0.5,ea=wa(A,x,y,M),oa(G,H,I,Y,L,B,0,0,1,0,0,1,ea)):(t.r=$.r,t.g=$.g,t.b=$.b,n(m,i.centroidWorld,i.normalWorld,t),t.r=Math.max(0,Math.min(q.color.r*t.r,1)),t.g=Math.max(0,Math.min(q.color.g*t.g,1)),t.b=Math.max(0,Math.min(q.color.b*t.b, -1)),q.wireframe?ja(t,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(t)):q.wireframe?ja(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(q.color);else if(q instanceof THREE.MeshDepthMaterial)ga=j.near,ha=j.far,A.r=A.g=A.b=1-na(a.positionScreen.z,ga,ha),x.r=x.g=x.b=1-na(d.positionScreen.z,ga,ha),y.r=y.g=y.b=1-na(f.positionScreen.z,ga,ha),M.r=(x.r+y.r)*0.5,M.g=(x.g+y.g)*0.5,M.b=(x.b+y.b)*0.5,ea=wa(A,x,y,M),oa(G,H,I,Y,L,B,0,0,1,0,0,1,ea);else if(q instanceof THREE.MeshNormalMaterial)t.r= -pa(i.normalWorld.x),t.g=pa(i.normalWorld.y),t.b=pa(i.normalWorld.z),q.wireframe?ja(t,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(t)}function Q(a,d,f,g,h,k,i,q,o){e.info.render.vertices+=4;e.info.render.faces++;b(q.opacity);c(q.blending);if(q.map||q.envMap)C(a,d,g,0,1,3,i,q,o),C(h,f,k,1,2,3,i,q,o);else if(G=a.positionScreen.x,H=a.positionScreen.y,I=d.positionScreen.x,Y=d.positionScreen.y,L=f.positionScreen.x,B=f.positionScreen.y,S=g.positionScreen.x,v=g.positionScreen.y,R=h.positionScreen.x, -P=h.positionScreen.y,V=k.positionScreen.x,J=k.positionScreen.y,q instanceof THREE.MeshBasicMaterial)O(G,H,I,Y,L,B,S,v),q.wireframe?ja(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(q.color);else if(q instanceof THREE.MeshLambertMaterial)ya?!q.wireframe&&q.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==4?(A.r=x.r=y.r=M.r=$.r,A.g=x.g=y.g=M.g=$.g,A.b=x.b=y.b=M.b=$.b,n(m,i.v1.positionWorld,i.vertexNormalsWorld[0],A),n(m,i.v2.positionWorld,i.vertexNormalsWorld[1],x), -n(m,i.v4.positionWorld,i.vertexNormalsWorld[3],y),n(m,i.v3.positionWorld,i.vertexNormalsWorld[2],M),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)),x.r=Math.max(0,Math.min(q.color.r*x.r,1)),x.g=Math.max(0,Math.min(q.color.g*x.g,1)),x.b=Math.max(0,Math.min(q.color.b*x.b,1)),y.r=Math.max(0,Math.min(q.color.r*y.r,1)),y.g=Math.max(0,Math.min(q.color.g*y.g,1)),y.b=Math.max(0,Math.min(q.color.b*y.b,1)),M.r=Math.max(0,Math.min(q.color.r* -M.r,1)),M.g=Math.max(0,Math.min(q.color.g*M.g,1)),M.b=Math.max(0,Math.min(q.color.b*M.b,1)),ea=wa(A,x,y,M),K(G,H,I,Y,S,v),oa(G,H,I,Y,S,v,0,0,1,0,0,1,ea),K(R,P,L,B,V,J),oa(R,P,L,B,V,J,1,0,1,1,0,1,ea)):(t.r=$.r,t.g=$.g,t.b=$.b,n(m,i.centroidWorld,i.normalWorld,t),t.r=Math.max(0,Math.min(q.color.r*t.r,1)),t.g=Math.max(0,Math.min(q.color.g*t.g,1)),t.b=Math.max(0,Math.min(q.color.b*t.b,1)),O(G,H,I,Y,L,B,S,v),q.wireframe?ja(t,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(t)):(O(G,H,I, -Y,L,B,S,v),q.wireframe?ja(q.color,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(q.color));else if(q instanceof THREE.MeshNormalMaterial)t.r=pa(i.normalWorld.x),t.g=pa(i.normalWorld.y),t.b=pa(i.normalWorld.z),O(G,H,I,Y,L,B,S,v),q.wireframe?ja(t,q.wireframeLinewidth,q.wireframeLinecap,q.wireframeLinejoin):ia(t);else if(q instanceof THREE.MeshDepthMaterial)ga=j.near,ha=j.far,A.r=A.g=A.b=1-na(a.positionScreen.z,ga,ha),x.r=x.g=x.b=1-na(d.positionScreen.z,ga,ha),y.r=y.g=y.b=1-na(g.positionScreen.z, -ga,ha),M.r=M.g=M.b=1-na(f.positionScreen.z,ga,ha),ea=wa(A,x,y,M),K(G,H,I,Y,S,v),oa(G,H,I,Y,S,v,0,0,1,0,0,1,ea),K(R,P,L,B,V,J),oa(R,P,L,B,V,J,1,0,1,1,0,1,ea)}function K(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 O(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 ja(a,b,c,e){if(F!=b)k.lineWidth=F=b;if(z!=c)k.lineCap=z=c;if(D!=e)k.lineJoin=D=e;d(a.getContextStyle()); -k.stroke();X.inflate(b*2)}function ia(a){f(a.getContextStyle());k.fill()}function Aa(a,b,c,d,e,g,h,i,j,m,o,n,l){if(l.image.width!=0){if(l.needsUpdate==!0||la[l.id]==void 0){var p=l.wrapS==THREE.RepeatWrapping,r=l.wrapT==THREE.RepeatWrapping;la[l.id]=k.createPattern(l.image,p&&r?"repeat":p&&!r?"repeat-x":!p&&r?"repeat-y":"no-repeat");l.needsUpdate=!1}f(la[l.id]);var p=l.offset.x/l.repeat.x,r=l.offset.y/l.repeat.y,s=l.image.width*l.repeat.x,u=l.image.height*l.repeat.y,h=(h+p)*s,i=(i+r)*u,j=(j+p)*s, -m=(m+r)*u,o=(o+p)*s,n=(n+r)*u;c-=a;d-=b;e-=a;g-=b;j-=h;m-=i;o-=h;n-=i;p=j*n-o*m;if(p==0){if(fa[l.id]==void 0)b=document.createElement("canvas"),b.width=l.image.width,b.height=l.image.height,a=b.getContext("2d"),a.drawImage(l.image,0,0),fa[l.id]=a.getImageData(0,0,l.image.width,l.image.height).data,delete b;b=fa[l.id];h=(Math.floor(h)+Math.floor(i)*l.image.width)*4;t.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);ia(t)}else p=1/p,l=(n*c-m*e)*p,m=(n*d-m*g)*p,c=(j*e-o*c)*p,d=(j*g-o*d)*p,a=a-l*h-c*i,h=b-m*h- -d*i,k.save(),k.transform(l,m,c,d,a,h),k.fill(),k.restore()}}function oa(a,b,c,d,e,f,g,h,i,j,l,m,o){var n,p;n=o.width-1;p=o.height-1;g*=n;h*=p;i*=n;j*=p;l*=n;m*=p;c-=a;d-=b;e-=a;f-=b;i-=g;j-=h;l-=g;m-=h;p=1/(i*m-l*j);n=(m*c-j*e)*p;j=(m*d-j*f)*p;c=(i*e-l*c)*p;d=(i*f-l*d)*p;a=a-n*g-c*h;b=b-j*g-d*h;k.save();k.transform(n,j,c,d,a,b);k.clip();k.drawImage(o,0,0);k.restore()}function wa(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;ra.putImageData(za,0,0);va.drawImage(qa,0,0);return sa}function na(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function pa(a){a=(a+1)*0.5;return a<0?0:a> -1?1:a}function ka(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 xa,Ha,U,ca;this.autoClear?this.clear():k.setTransform(1,0,0,-1,o,p);e.info.render.vertices=0;e.info.render.faces=0;g=l.projectScene(a,j,this.sortElements);h=g.elements;m=g.lights;(ya=m.length>0)&&i(m);xa=0;for(Ha=h.length;xa>1,n=m.height>> +1,g=e.scale.x*o,i=e.scale.y*q,h=g*p,j=i*n,X.set(a.x-h,a.y-j,a.x+h,a.y+j),ma.intersects(X)&&(k.save(),k.translate(a.x,a.y),k.rotate(-e.rotation),k.scale(g,-i),k.translate(-p,-n),k.drawImage(m,0,0),k.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=e.scale.x*o,j=e.scale.y*q,X.set(a.x-h,a.y-j,a.x+h,a.y+j),ma.intersects(X)&&(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 v(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(y!=a)k.lineCap=y=a;a=g.linejoin;if(D!=a)k.lineJoin=D=a;d(g.color.getContextStyle());k.stroke();X.inflate(g.linewidth*2)}}function C(a,d,f,g,h,k,i,p){e.info.render.vertices+=3;e.info.render.faces++;b(p.opacity);c(p.blending);H=a.positionScreen.x;I=a.positionScreen.y; +G=d.positionScreen.x;Y=d.positionScreen.y;L=f.positionScreen.x;B=f.positionScreen.y;K(H,I,G,Y,L,B);if(p instanceof THREE.MeshBasicMaterial)if(p.map)p.map.mapping instanceof THREE.UVMapping&&(ba=i.uvs[0],Aa(H,I,G,Y,L,B,ba[g].u,ba[g].v,ba[h].u,ba[h].v,ba[k].u,ba[k].v,p.map));else if(p.envMap){if(p.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=j.matrixWorldInverse,T.copy(i.vertexNormalsWorld[g]),Ba=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ca=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,T.copy(i.vertexNormalsWorld[h]), +Da=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ea=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,T.copy(i.vertexNormalsWorld[k]),Fa=(T.x*a.n11+T.y*a.n12+T.z*a.n13)*0.5+0.5,Ga=-(T.x*a.n21+T.y*a.n22+T.z*a.n23)*0.5+0.5,Aa(H,I,G,Y,L,B,Ba,Ca,Da,Ea,Fa,Ga,p.envMap)}else p.wireframe?ja(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(p.color);else if(p instanceof THREE.MeshLambertMaterial)p.map&&!p.wireframe&&(p.map.mapping instanceof THREE.UVMapping&&(ba=i.uvs[0],Aa(H,I,G,Y,L,B,ba[g].u,ba[g].v, +ba[h].u,ba[h].v,ba[k].u,ba[k].v,p.map)),c(THREE.SubtractiveBlending)),ya?!p.wireframe&&p.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==3?(z.r=w.r=x.r=$.r,z.g=w.g=x.g=$.g,z.b=w.b=x.b=$.b,n(m,i.v1.positionWorld,i.vertexNormalsWorld[0],z),n(m,i.v2.positionWorld,i.vertexNormalsWorld[1],w),n(m,i.v3.positionWorld,i.vertexNormalsWorld[2],x),z.r=Math.max(0,Math.min(p.color.r*z.r,1)),z.g=Math.max(0,Math.min(p.color.g*z.g,1)),z.b=Math.max(0,Math.min(p.color.b*z.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)),M.r=(w.r+x.r)*0.5,M.g=(w.g+x.g)*0.5,M.b=(w.b+x.b)*0.5,ea=wa(z,w,x,M),oa(H,I,G,Y,L,B,0,0,1,0,0,1,ea)):(s.r=$.r,s.g=$.g,s.b=$.b,n(m,i.centroidWorld,i.normalWorld,s),s.r=Math.max(0,Math.min(p.color.r*s.r,1)),s.g=Math.max(0,Math.min(p.color.g*s.g,1)),s.b=Math.max(0,Math.min(p.color.b*s.b, +1)),p.wireframe?ja(s,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(s)):p.wireframe?ja(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(p.color);else if(p instanceof THREE.MeshDepthMaterial)ga=j.near,ha=j.far,z.r=z.g=z.b=1-na(a.positionScreen.z,ga,ha),w.r=w.g=w.b=1-na(d.positionScreen.z,ga,ha),x.r=x.g=x.b=1-na(f.positionScreen.z,ga,ha),M.r=(w.r+x.r)*0.5,M.g=(w.g+x.g)*0.5,M.b=(w.b+x.b)*0.5,ea=wa(z,w,x,M),oa(H,I,G,Y,L,B,0,0,1,0,0,1,ea);else if(p instanceof THREE.MeshNormalMaterial)s.r= +pa(i.normalWorld.x),s.g=pa(i.normalWorld.y),s.b=pa(i.normalWorld.z),p.wireframe?ja(s,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(s)}function Q(a,d,f,g,h,k,i,p,o){e.info.render.vertices+=4;e.info.render.faces++;b(p.opacity);c(p.blending);if(p.map||p.envMap)C(a,d,g,0,1,3,i,p,o),C(h,f,k,1,2,3,i,p,o);else if(H=a.positionScreen.x,I=a.positionScreen.y,G=d.positionScreen.x,Y=d.positionScreen.y,L=f.positionScreen.x,B=f.positionScreen.y,S=g.positionScreen.x,u=g.positionScreen.y,R=h.positionScreen.x, +P=h.positionScreen.y,W=k.positionScreen.x,J=k.positionScreen.y,p instanceof THREE.MeshBasicMaterial)O(H,I,G,Y,L,B,S,u),p.wireframe?ja(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(p.color);else if(p instanceof THREE.MeshLambertMaterial)ya?!p.wireframe&&p.shading==THREE.SmoothShading&&i.vertexNormalsWorld.length==4?(z.r=w.r=x.r=M.r=$.r,z.g=w.g=x.g=M.g=$.g,z.b=w.b=x.b=M.b=$.b,n(m,i.v1.positionWorld,i.vertexNormalsWorld[0],z),n(m,i.v2.positionWorld,i.vertexNormalsWorld[1],w), +n(m,i.v4.positionWorld,i.vertexNormalsWorld[3],x),n(m,i.v3.positionWorld,i.vertexNormalsWorld[2],M),z.r=Math.max(0,Math.min(p.color.r*z.r,1)),z.g=Math.max(0,Math.min(p.color.g*z.g,1)),z.b=Math.max(0,Math.min(p.color.b*z.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)),M.r=Math.max(0,Math.min(p.color.r* +M.r,1)),M.g=Math.max(0,Math.min(p.color.g*M.g,1)),M.b=Math.max(0,Math.min(p.color.b*M.b,1)),ea=wa(z,w,x,M),K(H,I,G,Y,S,u),oa(H,I,G,Y,S,u,0,0,1,0,0,1,ea),K(R,P,L,B,W,J),oa(R,P,L,B,W,J,1,0,1,1,0,1,ea)):(s.r=$.r,s.g=$.g,s.b=$.b,n(m,i.centroidWorld,i.normalWorld,s),s.r=Math.max(0,Math.min(p.color.r*s.r,1)),s.g=Math.max(0,Math.min(p.color.g*s.g,1)),s.b=Math.max(0,Math.min(p.color.b*s.b,1)),O(H,I,G,Y,L,B,S,u),p.wireframe?ja(s,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(s)):(O(H,I,G, +Y,L,B,S,u),p.wireframe?ja(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(p.color));else if(p instanceof THREE.MeshNormalMaterial)s.r=pa(i.normalWorld.x),s.g=pa(i.normalWorld.y),s.b=pa(i.normalWorld.z),O(H,I,G,Y,L,B,S,u),p.wireframe?ja(s,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):ia(s);else if(p instanceof THREE.MeshDepthMaterial)ga=j.near,ha=j.far,z.r=z.g=z.b=1-na(a.positionScreen.z,ga,ha),w.r=w.g=w.b=1-na(d.positionScreen.z,ga,ha),x.r=x.g=x.b=1-na(g.positionScreen.z, +ga,ha),M.r=M.g=M.b=1-na(f.positionScreen.z,ga,ha),ea=wa(z,w,x,M),K(H,I,G,Y,S,u),oa(H,I,G,Y,S,u,0,0,1,0,0,1,ea),K(R,P,L,B,W,J),oa(R,P,L,B,W,J,1,0,1,1,0,1,ea)}function K(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 O(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 ja(a,b,c,e){if(F!=b)k.lineWidth=F=b;if(y!=c)k.lineCap=y=c;if(D!=e)k.lineJoin=D=e;d(a.getContextStyle()); +k.stroke();X.inflate(b*2)}function ia(a){f(a.getContextStyle());k.fill()}function Aa(a,b,c,d,e,g,h,i,j,m,o,n,l){if(l.image.width!=0){if(l.needsUpdate==!0||la[l.id]==void 0){var q=l.wrapS==THREE.RepeatWrapping,r=l.wrapT==THREE.RepeatWrapping;la[l.id]=k.createPattern(l.image,q&&r?"repeat":q&&!r?"repeat-x":!q&&r?"repeat-y":"no-repeat");l.needsUpdate=!1}f(la[l.id]);var q=l.offset.x/l.repeat.x,r=l.offset.y/l.repeat.y,t=l.image.width*l.repeat.x,u=l.image.height*l.repeat.y,h=(h+q)*t,i=(i+r)*u,j=(j+q)*t, +m=(m+r)*u,o=(o+q)*t,n=(n+r)*u;c-=a;d-=b;e-=a;g-=b;j-=h;m-=i;o-=h;n-=i;q=j*n-o*m;if(q==0){if(fa[l.id]==void 0)b=document.createElement("canvas"),b.width=l.image.width,b.height=l.image.height,a=b.getContext("2d"),a.drawImage(l.image,0,0),fa[l.id]=a.getImageData(0,0,l.image.width,l.image.height).data,delete b;b=fa[l.id];h=(Math.floor(h)+Math.floor(i)*l.image.width)*4;s.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);ia(s)}else q=1/q,l=(n*c-m*e)*q,m=(n*d-m*g)*q,c=(j*e-o*c)*q,d=(j*g-o*d)*q,a=a-l*h-c*i,h=b-m*h- +d*i,k.save(),k.transform(l,m,c,d,a,h),k.fill(),k.restore()}}function oa(a,b,c,d,e,f,g,h,i,j,l,m,o){var n,q;n=o.width-1;q=o.height-1;g*=n;h*=q;i*=n;j*=q;l*=n;m*=q;c-=a;d-=b;e-=a;f-=b;i-=g;j-=h;l-=g;m-=h;q=1/(i*m-l*j);n=(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-n*g-c*h;b=b-j*g-d*h;k.save();k.transform(n,j,c,d,a,b);k.clip();k.drawImage(o,0,0);k.restore()}function wa(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;ra.putImageData(za,0,0);va.drawImage(qa,0,0);return sa}function na(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function pa(a){a=(a+1)*0.5;return a<0?0:a> +1?1:a}function ka(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 xa,Ha,U,da;this.autoClear?this.clear():k.setTransform(1,0,0,-1,o,q);e.info.render.vertices=0;e.info.render.faces=0;g=l.projectScene(a,j,this.sortElements);h=g.elements;m=g.lights;(ya=m.length>0)&&i(m);xa=0;for(Ha=h.length;xa1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b), THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}}; -THREE.Ray=function(a,b){function c(a,b,c){i.sub(c,a);p=i.dot(b);if(p<=0)return null;o=l.add(a,n.copy(b).multiplyScalar(p));return r=c.distanceTo(o)}function d(a,b,c,d){i.sub(d,b);l.sub(c,b);n.sub(a,b);I=i.dot(i);u=i.dot(l);D=i.dot(n);J=l.dot(l);s=l.dot(n);A=1/(I*J-u*u);t=(J*D-u*s)*A;w=(I*s-u*D)*A;return t>=0&&w>=0&&t+w<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, -c,d=[];b=0;for(c=a.length;bi.scale.x)return[];l={distance:o,point:i.position,face:null,object:i};n.push(l)}else if(i instanceof THREE.Mesh){o=c(this.origin,this.direction,i.matrixWorld.getPosition());if(o===null||o>i.geometry.boundingSphere.radius*Math.max(i.scale.x,Math.max(i.scale.y,i.scale.z)))return n;var E,p=i.geometry,M=p.vertices,K;i.matrixRotationWorld.extractRotation(i.matrixWorld);o=0;for(P=p.faces.length;o0:E<0)))if(E=m.dot(k.sub(e,a))/E,j.add(a,b.multiplyScalar(E)),l instanceof THREE.Face3)d(j, -e,f,g)&&(l={distance:a.distanceTo(j),point:j.clone(),face:l,object:i},n.push(l));else if(l instanceof THREE.Face4&&(d(j,e,f,h)||d(j,f,g,h)))l={distance:a.distanceTo(j),point:j.clone(),face:l,object:i},n.push(l)}return n};var i=new THREE.Vector3,l=new THREE.Vector3,n=new THREE.Vector3,p,o,r,I,u,D,J,s,A,t,w}; +THREE.Ray=function(a,b){function c(a,b,c){i.sub(c,a);p=i.dot(b);if(p<=0)return null;o=l.add(a,n.copy(b).multiplyScalar(p));return q=c.distanceTo(o)}function d(a,b,c,d){i.sub(d,b);l.sub(c,b);n.sub(a,b);H=i.dot(i);u=i.dot(l);C=i.dot(n);I=l.dot(l);s=l.dot(n);A=1/(H*I-u*u);t=(I*C-u*s)*A;w=(H*s-u*C)*A;return t>=0&&w>=0&&t+w<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, +c,d=[];b=0;for(c=a.length;bi.scale.x)return[];l={distance:o,point:i.position,face:null,object:i};n.push(l)}else if(i instanceof THREE.Mesh){o=c(this.origin,this.direction,i.matrixWorld.getPosition());if(o===null||o>i.geometry.boundingSphere.radius*Math.max(i.scale.x,Math.max(i.scale.y,i.scale.z)))return n;var D,p=i.geometry,K=p.vertices,q;i.matrixRotationWorld.extractRotation(i.matrixWorld);o=0;for(N=p.faces.length;o0:D<0)))if(D=m.dot(k.sub(e,a))/D,j.add(a,b.multiplyScalar(D)),l instanceof THREE.Face3)d(j, +e,f,g)&&(l={distance:a.distanceTo(j),point:j.clone(),face:l,object:i},n.push(l));else if(l instanceof THREE.Face4&&(d(j,e,f,h)||d(j,f,g,h)))l={distance:a.distanceTo(j),point:j.clone(),face:l,object:i},n.push(l)}return n};var i=new THREE.Vector3,l=new THREE.Vector3,n=new THREE.Vector3,p,o,q,H,u,C,I,s,A,t,w}; 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(k,f,g,i){h=!1;b=k;c=f;d=g;e=i;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,j,i,l,n){h?(h=!1,b=fj?f>l?f:l:j>l?j:l,e=g>i?g>n?g:n:i>n?i:n):(b=fj?f>l?f>d?f:d:l>d?l:d:j>l?j>d?j:d:l>d?l:d,e=g>i?g>n?g>e?g:e:n>e?n:e:i>n?i>e?i:e:n>e?n: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}}; @@ -26,9 +26,9 @@ THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b=this.m;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}}; THREE.Matrix4=function(a,b,c,d,e,f,g,h,k,m,j,i,l,n,p,o){this.set(a!==void 0?a:1,b||0,c||0,d||0,e||0,f!==void 0?f:1,g||0,h||0,k||0,m||0,j!==void 0?j:1,i||0,l||0,n||0,p||0,o!==void 0?o:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,k,m,j,i,l,n,p,o){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=e;this.n22=f;this.n23=g;this.n24=h;this.n31=k;this.n32=m;this.n33=j;this.n34=i;this.n41=l;this.n42=n;this.n43=p;this.n44=o;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, -b,c){var d=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,f=THREE.Matrix4.__v3;f.sub(a,b).normalize();if(f.length()===0)f.z=1;d.cross(c,f).normalize();d.length()===0&&(f.x+=1.0E-4,d.cross(c,f).normalize());e.cross(f,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=f.x;this.n21=d.y;this.n22=e.y;this.n23=f.y;this.n31=d.z;this.n32=e.z;this.n33=f.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,e=a.n13,f=a.n14,g=a.n21,h=a.n22,k=a.n23,m=a.n24,j=a.n31,i=a.n32,l=a.n33,n=a.n34,p=a.n41,o=a.n42,r=a.n43, -I=a.n44,u=b.n11,D=b.n12,J=b.n13,s=b.n14,A=b.n21,t=b.n22,w=b.n23,O=b.n24,z=b.n31,G=b.n32,H=b.n33,P=b.n34,E=b.n41,S=b.n42,M=b.n43,K=b.n44;this.n11=c*u+d*A+e*z+f*E;this.n12=c*D+d*t+e*G+f*S;this.n13=c*J+d*w+e*H+f*M;this.n14=c*s+d*O+e*P+f*K;this.n21=g*u+h*A+k*z+m*E;this.n22=g*D+h*t+k*G+m*S;this.n23=g*J+h*w+k*H+m*M;this.n24=g*s+h*O+k*P+m*K;this.n31=j*u+i*A+l*z+n*E;this.n32=j*D+i*t+l*G+n*S;this.n33=j*J+i*w+l*H+n*M;this.n34=j*s+i*O+l*P+n*K;this.n41=p*u+o*A+r*z+I*E;this.n42=p*D+o*t+r*G+I*S;this.n43=p*J+o* -w+r*H+I*M;this.n44=p*s+o*O+r*P+I*K;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= +b,c){var d=THREE.Matrix4.__v1,e=THREE.Matrix4.__v2,f=THREE.Matrix4.__v3;f.sub(a,b).normalize();if(f.length()===0)f.z=1;d.cross(c,f).normalize();d.length()===0&&(f.x+=1.0E-4,d.cross(c,f).normalize());e.cross(f,d).normalize();this.n11=d.x;this.n12=e.x;this.n13=f.x;this.n21=d.y;this.n22=e.y;this.n23=f.y;this.n31=d.z;this.n32=e.z;this.n33=f.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,e=a.n13,f=a.n14,g=a.n21,h=a.n22,k=a.n23,m=a.n24,j=a.n31,i=a.n32,l=a.n33,n=a.n34,p=a.n41,o=a.n42,q=a.n43, +H=a.n44,u=b.n11,C=b.n12,I=b.n13,s=b.n14,A=b.n21,t=b.n22,w=b.n23,M=b.n24,O=b.n31,F=b.n32,G=b.n33,N=b.n34,D=b.n41,R=b.n42,K=b.n43,S=b.n44;this.n11=c*u+d*A+e*O+f*D;this.n12=c*C+d*t+e*F+f*R;this.n13=c*I+d*w+e*G+f*K;this.n14=c*s+d*M+e*N+f*S;this.n21=g*u+h*A+k*O+m*D;this.n22=g*C+h*t+k*F+m*R;this.n23=g*I+h*w+k*G+m*K;this.n24=g*s+h*M+k*N+m*S;this.n31=j*u+i*A+l*O+n*D;this.n32=j*C+i*t+l*F+n*R;this.n33=j*I+i*w+l*G+n*K;this.n34=j*s+i*M+l*N+n*S;this.n41=p*u+o*A+q*O+H*D;this.n42=p*C+o*t+q*F+H*R;this.n43=p*I+o* +w+q*G+H*K;this.n44=p*s+o*M+q*N+H*S;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,e=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*e;a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*e;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*e;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,e=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*e;a.y=this.n21*b+this.n22* c+this.n23*d+this.n24*e;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*e;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*e;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33* a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,e=this.n21,f=this.n22,g=this.n23,h=this.n24,k=this.n31,m=this.n32,j=this.n33,i=this.n34,l=this.n41,n=this.n42,p=this.n43,o=this.n44;return d*g*m*l-c*h*m*l-d*f*j*l+b*h*j*l+c*f*i*l-b*g*i*l-d*g*k*n+c*h*k*n+d*e*j*n-a*h*j*n-c*e*i*n+a*g*i*n+d*f*k*p-b*h*k*p-d*e*m*p+a*h*m*p+b*e*i*p-a*f*i*p-c*f*k*o+b*g*k*o+c*e*m*o-a*g*m*o-b*e*j*o+a*f*j*o},transpose:function(){var a; @@ -37,8 +37,8 @@ a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]=this.n11 a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42;a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,b){a[b]=this.n11;a[b+1]=this.n21;a[b+2]=this.n31;a[b+3]=this.n41;a[b+4]=this.n12;a[b+5]=this.n22;a[b+6]=this.n32;a[b+7]=this.n42;a[b+8]=this.n13;a[b+9]=this.n23;a[b+10]=this.n33;a[b+11]=this.n43;a[b+12]=this.n14;a[b+13]=this.n24;a[b+14]=this.n34;a[b+15]=this.n44;return a}, setTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},setScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},setRotationX:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},setRotationY:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},setRotationZ:function(a){var b=Math.cos(a),a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this}, setRotationAxis:function(a,b){var c=Math.cos(b),d=Math.sin(b),e=1-c,f=a.x,g=a.y,h=a.z,k=e*f,m=e*g;this.set(k*f+c,k*g-d*h,k*h+d*g,0,k*g+d*h,m*g+c,m*h-d*f,0,k*h-d*g,m*h+d*f,e*h*h+c,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},getPosition:function(){return THREE.Matrix4.__v1.set(this.n14,this.n24,this.n34)},getColumnX:function(){return THREE.Matrix4.__v1.set(this.n11,this.n21,this.n31)},getColumnY:function(){return THREE.Matrix4.__v1.set(this.n12, -this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(a){var b=a.n11,c=a.n12,d=a.n13,e=a.n14,f=a.n21,g=a.n22,h=a.n23,k=a.n24,m=a.n31,j=a.n32,i=a.n33,l=a.n34,n=a.n41,p=a.n42,o=a.n43,r=a.n44;this.n11=h*l*p-k*i*p+k*j*o-g*l*o-h*j*r+g*i*r;this.n12=e*i*p-d*l*p-e*j*o+c*l*o+d*j*r-c*i*r;this.n13=d*k*p-e*h*p+e*g*o-c*k*o-d*g*r+c*h*r;this.n14=e*h*j-d*k*j-e*g*i+c*k*i+d*g*l-c*h*l;this.n21=k*i*n-h*l*n-k*m*o+f*l*o+h*m*r-f*i*r;this.n22=d*l*n-e*i*n+ -e*m*o-b*l*o-d*m*r+b*i*r;this.n23=e*h*n-d*k*n-e*f*o+b*k*o+d*f*r-b*h*r;this.n24=d*k*m-e*h*m+e*f*i-b*k*i-d*f*l+b*h*l;this.n31=g*l*n-k*j*n+k*m*p-f*l*p-g*m*r+f*j*r;this.n32=e*j*n-c*l*n-e*m*p+b*l*p+c*m*r-b*j*r;this.n33=d*k*n-e*g*n+e*f*p-b*k*p-c*f*r+b*g*r;this.n34=e*g*m-c*k*m-e*f*j+b*k*j+c*f*l-b*g*l;this.n41=h*j*n-g*i*n-h*m*p+f*i*p+g*m*o-f*j*o;this.n42=c*i*n-d*j*n+d*m*p-b*i*p-c*m*o+b*j*o;this.n43=d*g*n-c*h*n-d*f*p+b*h*p+c*f*o-b*g*o;this.n44=c*h*m-d*g*m+d*f*j-b*h*j-c*f*i+b*g*i;this.multiplyScalar(1/a.determinant()); +this.n22,this.n32)},getColumnZ:function(){return THREE.Matrix4.__v1.set(this.n13,this.n23,this.n33)},getInverse:function(a){var b=a.n11,c=a.n12,d=a.n13,e=a.n14,f=a.n21,g=a.n22,h=a.n23,k=a.n24,m=a.n31,j=a.n32,i=a.n33,l=a.n34,n=a.n41,p=a.n42,o=a.n43,q=a.n44;this.n11=h*l*p-k*i*p+k*j*o-g*l*o-h*j*q+g*i*q;this.n12=e*i*p-d*l*p-e*j*o+c*l*o+d*j*q-c*i*q;this.n13=d*k*p-e*h*p+e*g*o-c*k*o-d*g*q+c*h*q;this.n14=e*h*j-d*k*j-e*g*i+c*k*i+d*g*l-c*h*l;this.n21=k*i*n-h*l*n-k*m*o+f*l*o+h*m*q-f*i*q;this.n22=d*l*n-e*i*n+ +e*m*o-b*l*o-d*m*q+b*i*q;this.n23=e*h*n-d*k*n-e*f*o+b*k*o+d*f*q-b*h*q;this.n24=d*k*m-e*h*m+e*f*i-b*k*i-d*f*l+b*h*l;this.n31=g*l*n-k*j*n+k*m*p-f*l*p-g*m*q+f*j*q;this.n32=e*j*n-c*l*n-e*m*p+b*l*p+c*m*q-b*j*q;this.n33=d*k*n-e*g*n+e*f*p-b*k*p-c*f*q+b*g*q;this.n34=e*g*m-c*k*m-e*f*j+b*k*j+c*f*l-b*g*l;this.n41=h*j*n-g*i*n-h*m*p+f*i*p+g*m*o-f*j*o;this.n42=c*i*n-d*j*n+d*m*p-b*i*p-c*m*o+b*j*o;this.n43=d*g*n-c*h*n-d*f*p+b*h*p+c*f*o-b*g*o;this.n44=c*h*m-d*g*m+d*f*j-b*h*j-c*f*i+b*g*i;this.multiplyScalar(1/a.determinant()); return this},setRotationFromEuler:function(a,b){var c=a.x,d=a.y,e=a.z,f=Math.cos(c),c=Math.sin(c),g=Math.cos(d),d=Math.sin(d),h=Math.cos(e),e=Math.sin(e);switch(b){case "YXZ":var k=g*h,m=g*e,j=d*h,i=d*e;this.n11=k+i*c;this.n12=j*c-m;this.n13=f*d;this.n21=f*e;this.n22=f*h;this.n23=-c;this.n31=m*c-j;this.n32=i+k*c;this.n33=f*g;break;case "ZXY":k=g*h;m=g*e;j=d*h;i=d*e;this.n11=k-i*c;this.n12=-f*e;this.n13=j+m*c;this.n21=m+j*c;this.n22=f*h;this.n23=i-k*c;this.n31=-f*d;this.n32=c;this.n33=f*g;break;case "ZYX":k= f*h;m=f*e;j=c*h;i=c*e;this.n11=g*h;this.n12=j*d-m;this.n13=k*d+i;this.n21=g*e;this.n22=i*d+k;this.n23=m*d-j;this.n31=-d;this.n32=c*g;this.n33=f*g;break;case "YZX":k=f*g;m=f*d;j=c*g;i=c*d;this.n11=g*h;this.n12=i-k*e;this.n13=j*e+m;this.n21=e;this.n22=f*h;this.n23=-c*h;this.n31=-d*h;this.n32=m*e+j;this.n33=k-i*e;break;case "XZY":k=f*g;m=f*d;j=c*g;i=c*d;this.n11=g*h;this.n12=-e;this.n13=d*h;this.n21=k*e+i;this.n22=f*h;this.n23=m*e-j;this.n31=j*e-m;this.n32=c*h;this.n33=i*e+k;break;default:k=f*h,m=f* e,j=c*h,i=c*e,this.n11=g*h,this.n12=-g*e,this.n13=d,this.n21=m+j*d,this.n22=k-i*d,this.n23=-c*g,this.n31=i-k*d,this.n32=j+m*d,this.n33=f*g}return this},setRotationFromQuaternion:function(a){var b=a.x,c=a.y,d=a.z,e=a.w,f=b+b,g=c+c,h=d+d,a=b*f,k=b*g;b*=h;var m=c*g;c*=h;d*=h;f*=e;g*=e;e*=h;this.n11=1-(m+d);this.n12=k-e;this.n13=b+g;this.n21=k+e;this.n22=1-(a+d);this.n23=c-f;this.n31=b-g;this.n32=c+f;this.n33=1-(a+m);return this},scale:function(a){var b=a.x,c=a.y,a=a.z;this.n11*=b;this.n12*=c;this.n13*= @@ -55,18 +55,16 @@ THREE.Object3D.prototype={constructor:THREE.Object3D,translate:function(a,b){thi if(b&&(e=e.getChildByName(a,b),e!==void 0))return e}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation,this.eulerOrder);if(this.scale.x!==1||this.scale.y!==1||this.scale.z!==1)this.matrix.scale(this.scale),this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z));this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){this.matrixAutoUpdate&& this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)this.parent?this.matrixWorld.multiply(this.parent.matrixWorld,this.matrix):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=0,c=this.children.length;b=0&&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&&t.z<1))g=J[D]=J[D]||new THREE.RenderableParticle,D++,u=g,u.x=t.x/t.w,u.y=t.y/t.w,u.z=t.z,u.rotation=v.rotation.z,u.scale.x=v.scale.x*Math.abs(u.x-(t.x+e.projectionMatrix.n11)/(t.w+e.projectionMatrix.n14)),u.scale.y=v.scale.y*Math.abs(u.y-(t.y+e.projectionMatrix.n22)/(t.w+e.projectionMatrix.n24)),u.material=v.material,s.elements.push(u);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)}; +j,i,l=[],n,p=[],o,q,H=[],u,C,I=[],s={objects:[],sprites:[],lights:[],elements:[]},A=new THREE.Vector3,t=new THREE.Vector4,w=new THREE.Matrix4,M=new THREE.Matrix4,O=new THREE.Frustum,F=new THREE.Vector4,G=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);w.multiply(b.projectionMatrix,b.matrixWorldInverse);w.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);w.multiply(b.matrixWorld, +b.projectionMatrixInverse);w.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;s.objects.length=0;s.sprites.length=0;s.lights.length=0;var g=function(b){if(b.visible!==!1){(b instanceof THREE.Mesh||b instanceof THREE.Line)&&(b.frustumCulled===!1||O.contains(b))?(w.multiplyVector3(A.copy(b.position)),e=a(),e.object= +b,e.z=A.z,s.objects.push(e)):b instanceof THREE.Sprite||b instanceof THREE.Particle?(w.multiplyVector3(A.copy(b.position)),e=a(),e.object=b,e.z=A.z,s.sprites.push(e)):b instanceof THREE.Light&&s.lights.push(b);for(var c=0,d=b.children.length;cg&&h.positionScreen.z0&&t.z<1))g=I[C]=I[C]||new THREE.RenderableParticle,C++,u=g,u.x=t.x/t.w,u.y=t.y/t.w,u.z=t.z,u.rotation=v.rotation.z,u.scale.x= +v.scale.x*Math.abs(u.x-(t.x+e.projectionMatrix.n11)/(t.w+e.projectionMatrix.n14)),u.scale.y=v.scale.y*Math.abs(u.y-(t.y+e.projectionMatrix.n22)/(t.w+e.projectionMatrix.n24)),u.material=v.material,s.elements.push(u);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)}; 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= diff --git a/build/custom/ThreeExtras.js b/build/custom/ThreeExtras.js index 5bf9165e..ed653259 100644 --- a/build/custom/ThreeExtras.js +++ b/build/custom/ThreeExtras.js @@ -1,9 +1,9 @@ // ThreeExtras.js r47dev - http://github.com/mrdoob/three.js THREE.ColorUtils={adjustHSV:function(a,b,c,d){var e=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,e);e.h=THREE.Math.clamp(e.h+b,0,1);e.s=THREE.Math.clamp(e.s+c,0,1);e.v=THREE.Math.clamp(e.v+d,0,1);a.setHSV(e.h,e.s,e.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,e=a.b,g=Math.max(Math.max(c,d),e),f=Math.min(Math.min(c,d),e);if(f===g)f=c=0;else{var h=g-f,f=h/g,c=c===g?(d-e)/h:d===g?2+(e-c)/h:4+(c-d)/h;c/=6;c<0&&(c+=1);c>1&&(c-=1)}b===void 0&&(b={h:0,s:0,v:0});b.h=c;b.s=f;b.v=g;return b}}; THREE.ColorUtils.__hsv={h:0,s:0,v:0}; -THREE.GeometryUtils={merge:function(a,b){for(var c,d,e=a.vertices.length,g=b instanceof THREE.Mesh?b.geometry:b,f=a.vertices,h=g.vertices,i=a.faces,k=g.faces,j=a.faceVertexUvs[0],r=g.faceVertexUvs[0],o={},m=0;m1&&(d=1-d,e=1-e);g=1-d-e;f.copy(a);f.multiplyScalar(d);h.copy(b);h.multiplyScalar(e);f.addSelf(h);h.copy(c);h.multiplyScalar(g);f.addSelf(h);return f},randomPointInFace:function(a,b,c){var d,e,g;if(a instanceof THREE.Face3)return d=b.vertices[a.a].position,e=b.vertices[a.b].position, g=b.vertices[a.c].position,THREE.GeometryUtils.randomPointInTriangle(d,e,g);else if(a instanceof THREE.Face4){d=b.vertices[a.a].position;e=b.vertices[a.b].position;g=b.vertices[a.c].position;var b=b.vertices[a.d].position,f;c?a._area1&&a._area2?(c=a._area1,f=a._area2):(c=THREE.GeometryUtils.triangleArea(d,e,b),f=THREE.GeometryUtils.triangleArea(e,g,b),a._area1=c,a._area2=f):(c=THREE.GeometryUtils.triangleArea(d,e,b),f=THREE.GeometryUtils.triangleArea(e,g,b));return THREE.GeometryUtils.random()*(c+ @@ -11,9 +11,9 @@ f)0?(f=c[c.length-1],m=f.x,q=f.y):(f=this.actions[d-1].args,m=f[f.length-2],q=f[f.length-1]);for(f=1;f<=a;f++)l=f/a,g=THREE.Shape.Utils.b2(l,m,r,h),l=THREE.Shape.Utils.b2(l,q,o, -i),c.push(new THREE.Vector2(g,l));break;case THREE.PathActions.BEZIER_CURVE_TO:h=g[4];i=g[5];r=g[0];o=g[1];k=g[2];j=g[3];c.length>0?(f=c[c.length-1],m=f.x,q=f.y):(f=this.actions[d-1].args,m=f[f.length-2],q=f[f.length-1]);for(f=1;f<=a;f++)l=f/a,g=THREE.Shape.Utils.b3(l,m,r,k,h),l=THREE.Shape.Utils.b3(l,q,o,j,i),c.push(new THREE.Vector2(g,l));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[d-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];l=a*g[0].length;f=f.concat(g[0]);g=new THREE.SplineCurve(f); -for(f=1;f<=l;f++)c.push(g.getPointAt(f/l));break;case THREE.PathActions.ARC:f=this.actions[d-1].args;h=g[0];i=g[1];k=g[2];r=g[3];l=g[4];o=!!g[5];j=f[f.length-2];m=f[f.length-1];f.length==0&&(j=m=0);q=l-r;var p=a*2;for(f=1;f<=p;f++)l=f/p,o||(l=1-l),l=r+l*q,g=j+h+k*Math.cos(l),l=m+i+k*Math.sin(l),c.push(new THREE.Vector2(g,l))}b&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(a,b){this.getBoundingBox();return this.getWrapPoints(this.getPoints(b),a)}; +THREE.Path.prototype.getPoints=function(a,b){var a=a||12,c=[],d,e,g,f,h,i,k,j,r,o,m,l,n;d=0;for(e=this.actions.length;d0?(f=c[c.length-1],m=f.x,l=f.y):(f=this.actions[d-1].args,m=f[f.length-2],l=f[f.length-1]);for(f=1;f<=a;f++)n=f/a,g=THREE.Shape.Utils.b2(n,m,r,h),n=THREE.Shape.Utils.b2(n,l,o, +i),c.push(new THREE.Vector2(g,n));break;case THREE.PathActions.BEZIER_CURVE_TO:h=g[4];i=g[5];r=g[0];o=g[1];k=g[2];j=g[3];c.length>0?(f=c[c.length-1],m=f.x,l=f.y):(f=this.actions[d-1].args,m=f[f.length-2],l=f[f.length-1]);for(f=1;f<=a;f++)n=f/a,g=THREE.Shape.Utils.b3(n,m,r,k,h),n=THREE.Shape.Utils.b3(n,l,o,j,i),c.push(new THREE.Vector2(g,n));break;case THREE.PathActions.CSPLINE_THRU:f=this.actions[d-1].args;f=[new THREE.Vector2(f[f.length-2],f[f.length-1])];n=a*g[0].length;f=f.concat(g[0]);g=new THREE.SplineCurve(f); +for(f=1;f<=n;f++)c.push(g.getPointAt(f/n));break;case THREE.PathActions.ARC:f=this.actions[d-1].args;h=g[0];i=g[1];k=g[2];r=g[3];n=g[4];o=!!g[5];j=f[f.length-2];m=f[f.length-1];f.length==0&&(j=m=0);l=n-r;var q=a*2;for(f=1;f<=q;f++)n=f/q,o||(n=1-n),n=r+n*l,g=j+h+k*Math.cos(n),n=m+i+k*Math.sin(n),c.push(new THREE.Vector2(g,n))}b&&c.push(c[0]);return c};THREE.Path.prototype.transform=function(a,b){this.getBoundingBox();return this.getWrapPoints(this.getPoints(b),a)}; THREE.Path.prototype.nltransform=function(a,b,c,d,e,g){var f=this.getPoints(),h,i,k,j,r;h=0;for(i=f.length;h=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;var l=[k[f],c[h],c[e]];r=THREE.FontUtils.Triangulate.area(l);var p=[k[f],k[g],c[h]];o=THREE.FontUtils.Triangulate.area(p);m=h;j=f;h+=1;f+=-1;h< -0&&(h+=c.length);h%=c.length;f<0&&(f+=k.length);f%=k.length;e=h-1>=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;l=[k[f],c[h],c[e]];l=THREE.FontUtils.Triangulate.area(l);p=[k[f],k[g],c[h]];p=THREE.FontUtils.Triangulate.area(p);r+o>l+p&&(h=m,f=j,h<0&&(h+=c.length),h%=c.length,f<0&&(f+=k.length),f%=k.length,e=h-1>=0?h-1:c.length-1,g=f-1>=0?f-1:k.length-1);r=c.slice(0,h);o=c.slice(h);m=k.slice(f);j=k.slice(0,f);g=[k[f],k[g],c[h]];q.push([k[f],c[h],c[e]]);q.push(g);c=r.concat(m).concat(j).concat(o)}return{shape:c, -isolatedPts:q,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),g,f,h,i,k={};g=0;for(f=d.length;g=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;var n=[k[f],c[h],c[e]];r=THREE.FontUtils.Triangulate.area(n);var q=[k[f],k[g],c[h]];o=THREE.FontUtils.Triangulate.area(q);m=h;j=f;h+=1;f+=-1;h< +0&&(h+=c.length);h%=c.length;f<0&&(f+=k.length);f%=k.length;e=h-1>=0?h-1:c.length-1;g=f-1>=0?f-1:k.length-1;n=[k[f],c[h],c[e]];n=THREE.FontUtils.Triangulate.area(n);q=[k[f],k[g],c[h]];q=THREE.FontUtils.Triangulate.area(q);r+o>n+q&&(h=m,f=j,h<0&&(h+=c.length),h%=c.length,f<0&&(f+=k.length),f%=k.length,e=h-1>=0?h-1:c.length-1,g=f-1>=0?f-1:k.length-1);r=c.slice(0,h);o=c.slice(h);m=k.slice(f);j=k.slice(0,f);g=[k[f],k[g],c[h]];l.push([k[f],c[h],c[e]]);l.push(g);c=r.concat(m).concat(j).concat(o)}return{shape:c, +isolatedPts:l,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),g,f,h,i,k={};g=0;for(f=d.length;g1)console.log("THREE.Animation.update: Warning! Scale out of bounds:"+d+" on bone "+m),d=d<0?0:1;if(c==="pos")if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= this.getPrevKeyWith("pos",m,f.index-1).pos,this.points[1]=e,this.points[2]=g,this.points[3]=this.getNextKeyWith("pos",m,h.index+1).pos,d=d*0.33+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=this.interpolateCatmullRom(this.points,d*1.01),this.target.set(d[0],d[1],d[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0)}else if(c=== "rot")THREE.Quaternion.slerp(e,g,a.quaternion,d);else if(c==="scl")c=a.scale,c.x=e[0]+(g[0]-e[0])*d,c.y=e[1]+(g[1]-e[1])*d,c.z=e[2]+(g[2]-e[2])*d}}if(this.JITCompile&&j[0][k]===void 0){this.hierarchy[0].update(null,!0);for(m=0;m=0?a:a+f;b=this.verticalAngleMap.srcRange; @@ -128,12 +128,12 @@ THREE.FlyControls=function(a,b){function c(a,b){return function(){b.apply(a,argu 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",c(this,this.mousemove),!1);this.domElement.addEventListener("mousedown",c(this,this.mousedown),!1);this.domElement.addEventListener("mouseup",c(this, this.mouseup),!1);this.domElement.addEventListener("keydown",c(this,this.keydown),!1);this.domElement.addEventListener("keyup",c(this,this.keyup),!1);this.updateMovementVector();this.updateRotationVector()}; -THREE.RollControls=function(a,b){this.object=a;this.domElement=b!==void 0?b: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 c=new THREE.Vector3,d=new THREE.Vector3,e=new THREE.Vector3,g=new THREE.Matrix4,f=!1,h=1,i=0,k=0,j=0,r=0,o=0,m=window.innerWidth/2,q=window.innerHeight/2;this.update=function(a){if(this.mouseLook){var b=a*this.lookSpeed; +THREE.RollControls=function(a,b){this.object=a;this.domElement=b!==void 0?b: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 c=new THREE.Vector3,d=new THREE.Vector3,e=new THREE.Vector3,g=new THREE.Matrix4,f=!1,h=1,i=0,k=0,j=0,r=0,o=0,m=window.innerWidth/2,l=window.innerHeight/2;this.update=function(a){if(this.mouseLook){var b=a*this.lookSpeed; this.rotateHorizontally(b*r);this.rotateVertically(b*o)}b=a*this.movementSpeed;this.object.translateZ(-b*(i>0||this.autoForward&&!(i<0)?1:i));this.object.translateX(b*k);this.object.translateY(b*j);f&&(this.roll+=this.rollSpeed*a*h);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.y0?1:-1;for(h=0;h0?1:-1;for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,f,0)));for(h=0;h0){this.vertices.push(new THREE.Vertex(new THREE.Vector3(0,-f,0)));for(h=0;ha&&(a+=Math.PI*2),a=(b+a)/2,new THREE.Vector2(-Math.cos(a),-Math.sin(a));return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(v=a.length;--v>=0;){J=v;N=v-1;N<0&&(N=a.length-1);for(var b= -0,c=m+j*2,b=0;b=0;B--){G=B/j;I=i*(1-G);G=k*Math.sin(G*Math.PI/2);v=0;for(D=s.length;v=0;B--){G=B/j;I=i*(1-G);G=k*Math.sin(G*Math.PI/2);v=0;for(D=s.length;v0)for(k=0;k2;){if(r--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);j=k+1;e<=j&&(j=0);var o;a:{o=a;var m=i,q=k,l=j,p=e,n=f,s=void 0,t=void 0,w=void 0, -y=void 0,u=void 0,x=void 0,z=void 0,A=void 0,F=void 0,t=o[n[m]].x,w=o[n[m]].y,y=o[n[q]].x,u=o[n[q]].y,x=o[n[l]].x,z=o[n[l]].y;if(1.0E-10>(y-t)*(z-w)-(u-w)*(x-t))o=!1;else{for(s=0;s=0&&B>=0&&I>=0){o=!1;break a}}o=!0}}if(o){g.push([a[f[i]], +0,e=String(a).split(""),g=e.length,f=[],a=0;a0)for(k=0;k2;){if(r--<=0){console.log("Warning, unable to triangulate polygon!");if(d)return h;return g}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);j=k+1;e<=j&&(j=0);var o;a:{o=a;var m=i,l=k,n=j,q=e,p=f,s=void 0,t=void 0,w=void 0, +y=void 0,u=void 0,x=void 0,z=void 0,A=void 0,F=void 0,t=o[p[m]].x,w=o[p[m]].y,y=o[p[l]].x,u=o[p[l]].y,x=o[p[n]].x,z=o[p[n]].y;if(1.0E-10>(y-t)*(z-w)-(u-w)*(x-t))o=!1;else{for(s=0;s=0&&B>=0&&I>=0){o=!1;break a}}o=!0}}if(o){g.push([a[f[i]], a[f[k]],a[f[j]]]);h.push([f[i],f[k],f[j]]);i=k;for(j=k+1;j0;)this.smooth(a)}; -THREE.SubdivisionModifier.prototype.smooth=function(a){function b(a,b,c,d,h,i){var j=new THREE.Face4(a,b,c,d,null,h.color,h.material);if(f.useOldVertexColors){j.vertexColors=[];for(var l,k,m,n=0;n<4;n++){m=i[n];l=new THREE.Color;l.setRGB(0,0,0);for(var p=0;p=0){p=i.invBindMatrices[m];j.invBindMatrix=p;j.skinningMatrix=new THREE.Matrix4;j.skinningMatrix.multiply(j.world,p);j.weights=[];for(p=0;p1){j=new THREE.MeshFaceMaterial;for(h=0;h=0){o=i.invBindMatrices[n];j.invBindMatrix=o;j.skinningMatrix=new THREE.Matrix4;j.skinningMatrix.multiply(j.world,o);j.weights=[];for(o=0;o1){j=new THREE.MeshFaceMaterial;for(h=0;h1?b.add(j):b=j}}b.name=a.id||"";a.matrix.decompose(b.position,b.rotation,b.scale);for(f=0;f=0,g=e.indexOf("(")>=0,h;if(f)d=e.split("."),e=d.shift(),d.shift();else if(g){h=e.split("(");e=h.shift();for(d=0;db){k=j.output[i];break}g=k!==void 0?k instanceof THREE.Matrix4?g.multiply(g,k):g.multiply(g,h.matrix):g.multiply(g,h.matrix)}else g=g.multiply(g,h.matrix);b=g;c.push({time:a,pos:[b.n14,b.n24,b.n34],rotq:[0,0,0,1],scl:[1,1,1]})}this.keys=c}this.updateMatrix();return this};r.prototype.updateMatrix=function(){this.matrix.identity();for(var a=0;a1&&(D=new THREE.MeshFaceMaterial); -a=new THREE.Mesh(A,D);a.name=o;a.position.set(w[0],w[1],w[2]);u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]);a.scale.set(x[0],x[1],x[2]);a.visible=n.visible;C.scene.add(a);C.objects[o]=a;if(n.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);C.scene.collisions.colliders.push(b)}if(n.castsShadow)b=new THREE.ShadowVolume(A),C.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;n.trigger&&n.trigger.toLowerCase()!="none"&&(b= -{type:n.trigger,object:n},C.triggers[a.name]=b)}}else w=n.position,y=n.rotation,u=n.quaternion,x=n.scale,u=0,a=new THREE.Object3D,a.name=o,a.position.set(w[0],w[1],w[2]),u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]),a.scale.set(x[0],x[1],x[2]),a.visible=n.visible!==void 0?n.visible:!1,C.scene.add(a),C.objects[o]=a,C.empties[o]=a,n.trigger&&n.trigger.toLowerCase()!="none"&&(b={type:n.trigger,object:n},C.triggers[a.name]=b)}function g(a){return function(b){C.geometries[a]= -b;e();I-=1;i.onLoadComplete();h()}}function f(a){return function(b){C.geometries[a]=b}}function h(){i.callbackProgress({totalModels:K,totalTextures:O,loadedModels:K-I,loadedTextures:O-E},C);i.onLoadProgress();I==0&&E==0&&b(C)}var i=this,k=THREE.Loader.prototype.extractUrlbase(c),j,r,o,m,q,l,p,n,s,t,w,y,u,x,z,A,F,v,D,B,G,I,E,K,O,C;B=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;E=I=0;C={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, -empties:{}};a=!1;for(o in B.objects)if(n=B.objects[o],n.meshCollider){a=!0;break}if(a)C.scene.collisions=new THREE.CollisionSystem;if(B.transform){a=B.transform.position;s=B.transform.rotation;var L=B.transform.scale;a&&C.scene.position.set(a[0],a[1],a[2]);s&&C.scene.rotation.set(s[0],s[1],s[2]);L&&C.scene.scale.set(L[0],L[1],L[2]);(a||s||L)&&C.scene.updateMatrix()}a=function(){E-=1;h();i.onLoadComplete()};for(q in B.cameras)s=B.cameras[q],s.type=="perspective"?F=new THREE.PerspectiveCamera(s.fov, -s.aspect,s.near,s.far):s.type=="ortho"&&(F=new THREE.OrthographicCamera(s.left,s.right,s.top,s.bottom,s.near,s.far)),w=s.position,s=s.target,F.position.set(w[0],w[1],w[2]),F.target=new THREE.Vector3(s[0],s[1],s[2]),C.cameras[q]=F;for(m in B.lights)s=B.lights[m],q=s.color!==void 0?s.color:16777215,F=s.intensity!==void 0?s.intensity:1,s.type=="directional"?(w=s.direction,t=new THREE.DirectionalLight(q,F),t.position.set(w[0],w[1],w[2]),t.position.normalize()):s.type=="point"?(w=s.position,t=s.distance, -t=new THREE.PointLight(q,F,t),t.position.set(w[0],w[1],w[2])):s.type=="ambient"&&(t=new THREE.AmbientLight(q)),C.scene.add(t),C.lights[m]=t;for(l in B.fogs)m=B.fogs[l],m.type=="linear"?v=new THREE.Fog(0,m.near,m.far):m.type=="exp2"&&(v=new THREE.FogExp2(0,m.density)),s=m.color,v.color.setRGB(s[0],s[1],s[2]),C.fogs[l]=v;if(C.cameras&&B.defaults.camera)C.currentCamera=C.cameras[B.defaults.camera];if(C.fogs&&B.defaults.fog)C.scene.fog=C.fogs[B.defaults.fog];s=B.defaults.bgcolor;C.bgColor=new THREE.Color; -C.bgColor.setRGB(s[0],s[1],s[2]);C.bgColorAlpha=B.defaults.bgalpha;for(j in B.geometries)if(l=B.geometries[j],l.type=="bin_mesh"||l.type=="ascii_mesh")I+=1,i.onLoadStart();K=I;for(j in B.geometries)l=B.geometries[j],l.type=="cube"?(A=new THREE.CubeGeometry(l.width,l.height,l.depth,l.segmentsWidth,l.segmentsHeight,l.segmentsDepth,null,l.flipped,l.sides),C.geometries[j]=A):l.type=="plane"?(A=new THREE.PlaneGeometry(l.width,l.height,l.segmentsWidth,l.segmentsHeight),C.geometries[j]=A):l.type=="sphere"? -(A=new THREE.SphereGeometry(l.radius,l.segmentsWidth,l.segmentsHeight),C.geometries[j]=A):l.type=="cylinder"?(A=new THREE.CylinderGeometry(l.topRad,l.botRad,l.height,l.radSegs,l.heightSegs),C.geometries[j]=A):l.type=="torus"?(A=new THREE.TorusGeometry(l.radius,l.tube,l.segmentsR,l.segmentsT),C.geometries[j]=A):l.type=="icosahedron"?(A=new THREE.IcosahedronGeometry(l.subdivisions),C.geometries[j]=A):l.type=="bin_mesh"?c.load(d(l.url,B.urlBaseType),g(j)):l.type=="ascii_mesh"?G.load(d(l.url,B.urlBaseType), -g(j)):l.type=="embedded_mesh"&&(l=B.embeds[l.id])&&G.createModel(l,f(j),"");for(p in B.textures)if(j=B.textures[p],j.url instanceof Array){E+=j.url.length;for(l=0;l1&&(D=new THREE.MeshFaceMaterial); +a=new THREE.Mesh(A,D);a.name=o;a.position.set(w[0],w[1],w[2]);u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]);a.scale.set(x[0],x[1],x[2]);a.visible=p.visible;C.scene.add(a);C.objects[o]=a;if(p.meshCollider){var b=THREE.CollisionUtils.MeshColliderWBox(a);C.scene.collisions.colliders.push(b)}if(p.castsShadow)b=new THREE.ShadowVolume(A),C.scene.add(b),b.position=a.position,b.rotation=a.rotation,b.scale=a.scale;p.trigger&&p.trigger.toLowerCase()!="none"&&(b= +{type:p.trigger,object:p},C.triggers[a.name]=b)}}else w=p.position,y=p.rotation,u=p.quaternion,x=p.scale,u=0,a=new THREE.Object3D,a.name=o,a.position.set(w[0],w[1],w[2]),u?(a.quaternion.set(u[0],u[1],u[2],u[3]),a.useQuaternion=!0):a.rotation.set(y[0],y[1],y[2]),a.scale.set(x[0],x[1],x[2]),a.visible=p.visible!==void 0?p.visible:!1,C.scene.add(a),C.objects[o]=a,C.empties[o]=a,p.trigger&&p.trigger.toLowerCase()!="none"&&(b={type:p.trigger,object:p},C.triggers[a.name]=b)}function g(a){return function(b){C.geometries[a]= +b;e();I-=1;i.onLoadComplete();h()}}function f(a){return function(b){C.geometries[a]=b}}function h(){i.callbackProgress({totalModels:K,totalTextures:O,loadedModels:K-I,loadedTextures:O-E},C);i.onLoadProgress();I==0&&E==0&&b(C)}var i=this,k=THREE.Loader.prototype.extractUrlbase(c),j,r,o,m,l,n,q,p,s,t,w,y,u,x,z,A,F,v,D,B,G,I,E,K,O,C;B=a;c=new THREE.BinaryLoader;G=new THREE.JSONLoader;E=I=0;C={scene:new THREE.Scene,geometries:{},materials:{},textures:{},objects:{},cameras:{},lights:{},fogs:{},triggers:{}, +empties:{}};a=!1;for(o in B.objects)if(p=B.objects[o],p.meshCollider){a=!0;break}if(a)C.scene.collisions=new THREE.CollisionSystem;if(B.transform){a=B.transform.position;s=B.transform.rotation;var L=B.transform.scale;a&&C.scene.position.set(a[0],a[1],a[2]);s&&C.scene.rotation.set(s[0],s[1],s[2]);L&&C.scene.scale.set(L[0],L[1],L[2]);(a||s||L)&&C.scene.updateMatrix()}a=function(){E-=1;h();i.onLoadComplete()};for(l in B.cameras)s=B.cameras[l],s.type=="perspective"?F=new THREE.PerspectiveCamera(s.fov, +s.aspect,s.near,s.far):s.type=="ortho"&&(F=new THREE.OrthographicCamera(s.left,s.right,s.top,s.bottom,s.near,s.far)),w=s.position,s=s.target,F.position.set(w[0],w[1],w[2]),F.target=new THREE.Vector3(s[0],s[1],s[2]),C.cameras[l]=F;for(m in B.lights)s=B.lights[m],l=s.color!==void 0?s.color:16777215,F=s.intensity!==void 0?s.intensity:1,s.type=="directional"?(w=s.direction,t=new THREE.DirectionalLight(l,F),t.position.set(w[0],w[1],w[2]),t.position.normalize()):s.type=="point"?(w=s.position,t=s.distance, +t=new THREE.PointLight(l,F,t),t.position.set(w[0],w[1],w[2])):s.type=="ambient"&&(t=new THREE.AmbientLight(l)),C.scene.add(t),C.lights[m]=t;for(n in B.fogs)m=B.fogs[n],m.type=="linear"?v=new THREE.Fog(0,m.near,m.far):m.type=="exp2"&&(v=new THREE.FogExp2(0,m.density)),s=m.color,v.color.setRGB(s[0],s[1],s[2]),C.fogs[n]=v;if(C.cameras&&B.defaults.camera)C.currentCamera=C.cameras[B.defaults.camera];if(C.fogs&&B.defaults.fog)C.scene.fog=C.fogs[B.defaults.fog];s=B.defaults.bgcolor;C.bgColor=new THREE.Color; +C.bgColor.setRGB(s[0],s[1],s[2]);C.bgColorAlpha=B.defaults.bgalpha;for(j in B.geometries)if(n=B.geometries[j],n.type=="bin_mesh"||n.type=="ascii_mesh")I+=1,i.onLoadStart();K=I;for(j in B.geometries)n=B.geometries[j],n.type=="cube"?(A=new THREE.CubeGeometry(n.width,n.height,n.depth,n.segmentsWidth,n.segmentsHeight,n.segmentsDepth,null,n.flipped,n.sides),C.geometries[j]=A):n.type=="plane"?(A=new THREE.PlaneGeometry(n.width,n.height,n.segmentsWidth,n.segmentsHeight),C.geometries[j]=A):n.type=="sphere"? +(A=new THREE.SphereGeometry(n.radius,n.segmentsWidth,n.segmentsHeight),C.geometries[j]=A):n.type=="cylinder"?(A=new THREE.CylinderGeometry(n.topRad,n.botRad,n.height,n.radSegs,n.heightSegs),C.geometries[j]=A):n.type=="torus"?(A=new THREE.TorusGeometry(n.radius,n.tube,n.segmentsR,n.segmentsT),C.geometries[j]=A):n.type=="icosahedron"?(A=new THREE.IcosahedronGeometry(n.subdivisions),C.geometries[j]=A):n.type=="bin_mesh"?c.load(d(n.url,B.urlBaseType),g(j)):n.type=="ascii_mesh"?G.load(d(n.url,B.urlBaseType), +g(j)):n.type=="embedded_mesh"&&(n=B.embeds[n.id])&&G.createModel(n,f(j),"");for(q in B.textures)if(j=B.textures[q],j.url instanceof Array){E+=j.url.length;for(n=0;n=57344&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;e<8;e++){for(var g=0,f=0;f>1^-(h&1);c[8*f+e]=g}d+=b}b=a.length-d;g=new Uint16Array(b);for(e=f=0;e=this.maxCount-3&&h(this)};this.begin=function(){this.count=0; this.hasNormal=this.hasPos=!1};this.end=function(a){if(this.count!==0){for(var b=this.count*3;bthis.size-1&&(i=this.size-1);var o=Math.floor(k-h);o<1&&(o=1);k=Math.floor(k+h);k>this.size-1&&(k=this.size-1);var m=Math.floor(j-h);m<1&&(m=1);h=Math.floor(j+h);h>this.size-1&&(h=this.size- -1);for(var q,l,p,n,s,t;r0&&(this.field[p+q]+=n)}}};this.addPlaneX=function(a,b){var e,g,f,h,i,k=this.size,j=this.yd,r=this.zd,o=this.field,m=k*Math.sqrt(a/b);m>k&&(m=k);for(e=0;e0)for(g=0;gj&&(q=j);for(g=0;g0){i=g*r;for(e=0;ej&&(q=j);for(f=0;f0){i=o*f;for(g=0;g0&&(this.field[q+l]+=p)}}};this.addPlaneX=function(a,b){var e,g,f,h,i,k=this.size,j=this.yd,r=this.zd,o=this.field,m=k*Math.sqrt(a/b);m>k&&(m=k);for(e=0;e0)for(g=0;gj&&(l=j);for(g=0;g0){i=g*r;for(e=0;ej&&(l=j);for(f=0;f0){i=o*f;for(g=0;g0&&p.x0&&p.y0.0010&&u.scale>0.0010)l.x=u.x,l.y=u.y,l.z=u.z,m=u.size*u.scale/ -h,q.x=m*j,q.y=m,b.uniform3f(n.screenPosition,l.x,l.y,l.z),b.uniform2f(n.scale,q.x,q.y),b.uniform1f(n.rotation,u.rotation),b.uniform1f(n.opacity,u.opacity),b.uniform3f(n.color,u.color.r,u.color.g,u.color.b),c.setBlending(u.blending),c.setTexture(u.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}}; +"color");d.uniforms.scale=b.getUniformLocation(d.program,"scale");d.uniforms.rotation=b.getUniformLocation(d.program,"rotation");d.uniforms.screenPosition=b.getUniformLocation(d.program,"screenPosition");d.attributesEnabled=!1};this.render=function(a,g,f,h){var a=a.__webglFlares,i=a.length;if(i){var k=new THREE.Vector3,j=h/f,r=f*0.5,o=h*0.5,m=16/h,l=new THREE.Vector2(m*j,m),n=new THREE.Vector3(1,1,0),q=new THREE.Vector2(1,1),p=d.uniforms,m=d.attributes;b.useProgram(d.program);if(!d.attributesEnabled)b.enableVertexAttribArray(d.attributes.vertex), +b.enableVertexAttribArray(d.attributes.uv),d.attributesEnabled=!0;b.uniform1i(p.occlusionMap,0);b.uniform1i(p.map,1);b.bindBuffer(b.ARRAY_BUFFER,d.vertexBuffer);b.vertexAttribPointer(m.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(m.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,d.elementBuffer);b.disable(b.CULL_FACE);b.depthMask(!1);var s,t,w,y,u;for(s=0;s0&&q.x0&&q.y0.0010&&u.scale>0.0010)n.x=u.x,n.y=u.y,n.z=u.z,m=u.size*u.scale/ +h,l.x=m*j,l.y=m,b.uniform3f(p.screenPosition,n.x,n.y,n.z),b.uniform2f(p.scale,l.x,l.y),b.uniform1f(p.rotation,u.rotation),b.uniform1f(p.opacity,u.opacity),b.uniform3f(p.color,u.color.r,u.color.g,u.color.b),c.setBlending(u.blending),c.setTexture(u.texture,1),b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(!0)}}}; THREE.ShadowMapPlugin=function(){var a,b,c,d,e,g=new THREE.Frustum,f=new THREE.Matrix4;this.shadowMatrix=[];this.shadowMap=[];this.init=function(e){a=e.context;b=e;var e=THREE.ShaderLib.depthRGBA,f=THREE.UniformsUtils.clone(e.uniforms);c=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f});d=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f,morphTargets:!0});c._shadowPass=!0;d._shadowPass=!0};this.render= -function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(h){var i,k,j,r,o,m,q,l,p=0,n=h.lights;e||(e=new THREE.PerspectiveCamera(b.shadowCameraFov,b.shadowMapWidth/b.shadowMapHeight,b.shadowCameraNear,b.shadowCameraFar));i=0;for(k=n.length;i1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b), THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}}; -THREE.Ray=function(a,b){function c(a,b,c){j.sub(c,a);o=j.dot(b);if(o<=0)return null;p=n.add(a,k.copy(b).multiplyScalar(o));return u=c.distanceTo(p)}function d(a,b,c,d){j.sub(d,b);n.sub(c,b);k.sub(a,b);I=j.dot(j);v=j.dot(n);E=j.dot(k);s=n.dot(n);t=n.dot(k);C=1/(I*s-v*v);y=(s*E-v*t)*C;z=(I*t-v*E)*C;return y>=0&&z>=0&&y+z<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, -c,d=[];b=0;for(c=a.length;bj.scale.x)return[];k={distance:o,point:j.position,face:null,object:j};n.push(k)}else if(j instanceof THREE.Mesh){o=c(this.origin,this.direction,j.matrixWorld.getPosition());if(o===null||o>j.geometry.boundingSphere.radius*Math.max(j.scale.x,Math.max(j.scale.y,j.scale.z)))return n;var J,p=j.geometry,N=p.vertices,s;j.matrixRotationWorld.extractRotation(j.matrixWorld);o=0;for(K=p.faces.length;o0:J<0)))if(J=m.dot(l.sub(f,a))/J,i.add(a,b.multiplyScalar(J)),k instanceof THREE.Face3)d(i, -f,e,g)&&(k={distance:a.distanceTo(i),point:i.clone(),face:k,object:j},n.push(k));else if(k instanceof THREE.Face4&&(d(i,f,e,h)||d(i,e,g,h)))k={distance:a.distanceTo(i),point:i.clone(),face:k,object:j},n.push(k)}return n};var j=new THREE.Vector3,n=new THREE.Vector3,k=new THREE.Vector3,o,p,u,I,v,E,s,t,C,y,z}; +THREE.Ray=function(a,b){function c(a,b,c){j.sub(c,a);o=j.dot(b);if(o<=0)return null;p=n.add(a,k.copy(b).multiplyScalar(o));return u=c.distanceTo(p)}function d(a,b,c,d){j.sub(d,b);n.sub(c,b);k.sub(a,b);I=j.dot(j);v=j.dot(n);E=j.dot(k);s=n.dot(n);t=n.dot(k);C=1/(I*s-v*v);x=(s*E-v*t)*C;y=(I*t-v*E)*C;return x>=0&&y>=0&&x+y<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, +c,d=[];b=0;for(c=a.length;bj.scale.x)return[];k={distance:o,point:j.position,face:null,object:j};n.push(k)}else if(j instanceof THREE.Mesh){o=c(this.origin,this.direction,j.matrixWorld.getPosition());if(o===null||o>j.geometry.boundingSphere.radius*Math.max(j.scale.x,Math.max(j.scale.y,j.scale.z)))return n;var J,s=j.geometry,N=s.vertices,t;j.matrixRotationWorld.extractRotation(j.matrixWorld);o=0;for(p=s.faces.length;o0:J<0)))if(J=m.dot(l.sub(f,a))/J,i.add(a,b.multiplyScalar(J)),k instanceof THREE.Face3)d(i, +f,e,g)&&(k={distance:a.distanceTo(i),point:i.clone(),face:k,object:j},n.push(k));else if(k instanceof THREE.Face4&&(d(i,f,e,h)||d(i,e,g,h)))k={distance:a.distanceTo(i),point:i.clone(),face:k,object:j},n.push(k)}return n};var j=new THREE.Vector3,n=new THREE.Vector3,k=new THREE.Vector3,o,p,u,I,v,E,s,t,C,x,y}; 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,j){h=!1;b=e;c=g;d=i;f=j;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,j,n,k){h?(h=!1,b=ei?e>n?e:n:i>n?i:n,f=g>j?g>k?g:k:j>k?j:k):(b=ei?e>n?e>d?e:d:n>d?n:d:i>n?i>d?i:d:n>d?n:d,f=g>j?g>k?g>f?g:f:k>f?k:f:j>k?j>f?j:f:k>f?k: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}}; @@ -27,8 +27,8 @@ THREE.Matrix3.prototype={constructor:THREE.Matrix3,transpose:function(){var a,b= THREE.Matrix4=function(a,b,c,d,f,e,g,h,l,m,i,j,n,k,o,p){this.set(a!==void 0?a:1,b||0,c||0,d||0,f||0,e!==void 0?e:1,g||0,h||0,l||0,m||0,i!==void 0?i:1,j||0,n||0,k||0,o||0,p!==void 0?p:1);this.flat=Array(16);this.m33=new THREE.Matrix3}; THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,f,e,g,h,l,m,i,j,n,k,o,p){this.n11=a;this.n12=b;this.n13=c;this.n14=d;this.n21=f;this.n22=e;this.n23=g;this.n24=h;this.n31=l;this.n32=m;this.n33=i;this.n34=j;this.n41=n;this.n42=k;this.n43=o;this.n44=p;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a, b,c){var d=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,e=THREE.Matrix4.__v3;e.sub(a,b).normalize();if(e.length()===0)e.z=1;d.cross(c,e).normalize();d.length()===0&&(e.x+=1.0E-4,d.cross(c,e).normalize());f.cross(e,d).normalize();this.n11=d.x;this.n12=f.x;this.n13=e.x;this.n21=d.y;this.n22=f.y;this.n23=e.y;this.n31=d.z;this.n32=f.z;this.n33=e.z;return this},multiply:function(a,b){var c=a.n11,d=a.n12,f=a.n13,e=a.n14,g=a.n21,h=a.n22,l=a.n23,m=a.n24,i=a.n31,j=a.n32,n=a.n33,k=a.n34,o=a.n41,p=a.n42,u=a.n43, -I=a.n44,v=b.n11,E=b.n12,s=b.n13,t=b.n14,C=b.n21,y=b.n22,z=b.n23,G=b.n24,x=b.n31,H=b.n32,A=b.n33,K=b.n34,J=b.n41,M=b.n42,N=b.n43,S=b.n44;this.n11=c*v+d*C+f*x+e*J;this.n12=c*E+d*y+f*H+e*M;this.n13=c*s+d*z+f*A+e*N;this.n14=c*t+d*G+f*K+e*S;this.n21=g*v+h*C+l*x+m*J;this.n22=g*E+h*y+l*H+m*M;this.n23=g*s+h*z+l*A+m*N;this.n24=g*t+h*G+l*K+m*S;this.n31=i*v+j*C+n*x+k*J;this.n32=i*E+j*y+n*H+k*M;this.n33=i*s+j*z+n*A+k*N;this.n34=i*t+j*G+n*K+k*S;this.n41=o*v+p*C+u*x+I*J;this.n42=o*E+p*y+u*H+I*M;this.n43=o*s+p* -z+u*A+I*N;this.n44=o*t+p*G+u*K+I*S;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= +I=a.n44,v=b.n11,E=b.n12,s=b.n13,t=b.n14,C=b.n21,x=b.n22,y=b.n23,G=b.n24,B=b.n31,H=b.n32,z=b.n33,L=b.n34,J=b.n41,M=b.n42,N=b.n43,S=b.n44;this.n11=c*v+d*C+f*B+e*J;this.n12=c*E+d*x+f*H+e*M;this.n13=c*s+d*y+f*z+e*N;this.n14=c*t+d*G+f*L+e*S;this.n21=g*v+h*C+l*B+m*J;this.n22=g*E+h*x+l*H+m*M;this.n23=g*s+h*y+l*z+m*N;this.n24=g*t+h*G+l*L+m*S;this.n31=i*v+j*C+n*B+k*J;this.n32=i*E+j*x+n*H+k*M;this.n33=i*s+j*y+n*z+k*N;this.n34=i*t+j*G+n*L+k*S;this.n41=o*v+p*C+u*B+I*J;this.n42=o*E+p*x+u*H+I*M;this.n43=o*s+p* +y+u*z+I*N;this.n44=o*t+p*G+u*L+I*S;return this},multiplySelf:function(a){return this.multiply(this,a)},multiplyToArray:function(a,b,c){this.multiply(a,b);c[0]=this.n11;c[1]=this.n21;c[2]=this.n31;c[3]=this.n41;c[4]=this.n12;c[5]=this.n22;c[6]=this.n32;c[7]=this.n42;c[8]=this.n13;c[9]=this.n23;c[10]=this.n33;c[11]=this.n43;c[12]=this.n14;c[13]=this.n24;c[14]=this.n34;c[15]=this.n44;return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*= a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*=a;return this},multiplyVector3:function(a){var b=a.x,c=a.y,d=a.z,f=1/(this.n41*b+this.n42*c+this.n43*d+this.n44);a.x=(this.n11*b+this.n12*c+this.n13*d+this.n14)*f;a.y=(this.n21*b+this.n22*c+this.n23*d+this.n24)*f;a.z=(this.n31*b+this.n32*c+this.n33*d+this.n34)*f;return a},multiplyVector4:function(a){var b=a.x,c=a.y,d=a.z,f=a.w;a.x=this.n11*b+this.n12*c+this.n13*d+this.n14*f;a.y=this.n21*b+this.n22* c+this.n23*d+this.n24*f;a.z=this.n31*b+this.n32*c+this.n33*d+this.n34*f;a.w=this.n41*b+this.n42*c+this.n43*d+this.n44*f;return a},rotateAxis:function(a){var b=a.x,c=a.y,d=a.z;a.x=b*this.n11+c*this.n12+d*this.n13;a.y=b*this.n21+c*this.n22+d*this.n23;a.z=b*this.n31+c*this.n32+d*this.n33;a.normalize();return a},crossVector:function(a){var b=new THREE.Vector4;b.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;b.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;b.z=this.n31*a.x+this.n32*a.y+this.n33* a.z+this.n34*a.w;b.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return b},determinant:function(){var a=this.n11,b=this.n12,c=this.n13,d=this.n14,f=this.n21,e=this.n22,g=this.n23,h=this.n24,l=this.n31,m=this.n32,i=this.n33,j=this.n34,n=this.n41,k=this.n42,o=this.n43,p=this.n44;return d*g*m*n-c*h*m*n-d*e*i*n+b*h*i*n+c*e*j*n-b*g*j*n-d*g*l*k+c*h*l*k+d*f*i*k-a*h*i*k-c*f*j*k+a*g*j*k+d*e*l*o-b*h*l*o-d*f*m*o+a*h*m*o+b*f*j*o-a*e*j*o-c*e*l*p+b*g*l*p+c*f*m*p-a*g*m*p-b*f*i*p+a*e*i*p},transpose:function(){var a; @@ -55,18 +55,16 @@ THREE.Object3D.prototype={constructor:THREE.Object3D,translate:function(a,b){thi if(b&&(f=f.getChildByName(a,b),f!==void 0))return f}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation,this.eulerOrder);if(this.scale.x!==1||this.scale.y!==1||this.scale.z!==1)this.matrix.scale(this.scale),this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z));this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){this.matrixAutoUpdate&& this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)this.parent?this.matrixWorld.multiply(this.parent.matrixWorld,this.matrix):this.matrixWorld.copy(this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=0,c=this.children.length;b=0&&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&&y.z<1))g=s[E]=s[E]||new THREE.RenderableParticle,E++,v=g,v.x=y.x/y.w,v.y=y.y/y.w,v.z=y.z,v.rotation=F.rotation.z,v.scale.x=F.scale.x*Math.abs(v.x-(y.x+e.projectionMatrix.n11)/(y.w+e.projectionMatrix.n14)),v.scale.y=F.scale.y*Math.abs(v.y-(y.y+e.projectionMatrix.n22)/(y.w+e.projectionMatrix.n24)),v.material=F.material,t.elements.push(v);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)}; +i,j,n=[],k,o=[],p,u,I=[],v,E,s=[],t={objects:[],sprites:[],lights:[],elements:[]},C=new THREE.Vector3,x=new THREE.Vector4,y=new THREE.Matrix4,G=new THREE.Matrix4,B=new THREE.Frustum,H=new THREE.Vector4,z=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);y.multiply(b.projectionMatrix,b.matrixWorldInverse);y.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);y.multiply(b.matrixWorld, +b.projectionMatrixInverse);y.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){e=0;t.objects.length=0;t.sprites.length=0;t.lights.length=0;var g=function(b){if(b.visible!==!1){(b instanceof THREE.Mesh||b instanceof THREE.Line)&&(b.frustumCulled===!1||B.contains(b))?(y.multiplyVector3(C.copy(b.position)),f=a(),f.object= +b,f.z=C.z,t.objects.push(f)):b instanceof THREE.Sprite||b instanceof THREE.Particle?(y.multiplyVector3(C.copy(b.position)),f=a(),f.object=b,f.z=C.z,t.sprites.push(f)):b instanceof THREE.Light&&t.lights.push(b);for(var c=0,d=b.children.length;cg&&h.positionScreen.z0&&x.z<1))g=s[E]=s[E]||new THREE.RenderableParticle,E++,v=g,v.x=x.x/x.w,v.y=x.y/x.w,v.z=x.z,v.rotation=F.rotation.z,v.scale.x= +F.scale.x*Math.abs(v.x-(x.x+e.projectionMatrix.n11)/(x.w+e.projectionMatrix.n14)),v.scale.y=F.scale.y*Math.abs(v.y-(x.y+e.projectionMatrix.n22)/(x.w+e.projectionMatrix.n24)),v.material=F.material,t.elements.push(v);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= @@ -82,9 +80,9 @@ b;a++)c=this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid b,c,d,f,e,g=new THREE.Vector3,h=new THREE.Vector3;a=0;for(b=this.faces.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;b0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var b=1,c=this.vertices.length;bthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x;if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a= 0,b=0,c=this.vertices.length;b1?1:a}var d=this,f,e,g,h=new THREE.Projector,l=document.createElementNS("http://www.w3.org/2000/svg","svg"),m,i,j,n,k,o,p,u,I=new THREE.Rectangle,v=new THREE.Rectangle,E=!1,s=new THREE.Color,t=new THREE.Color,C=new THREE.Color,y=new THREE.Color,z,G=new THREE.Vector3,x=[],H=[],A,K,J,M=1;this.domElement=l;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){m=a;i=b;j=m/2;n=i/2;l.setAttribute("viewBox",-j+" "+-n+" "+m+" "+i);l.setAttribute("width",m);l.setAttribute("height",i);I.set(-j,-n,j,n)};this.clear=function(){for(;l.childNodes.length>0;)l.removeChild(l.childNodes[0])};this.render=function(i,m){var x,G,r,q;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;f=h.projectScene(i,m,this.sortElements);e=f.elements; -g=f.lights;J=K=0;if(E=g.length>0){t.setRGB(0,0,0);C.setRGB(0,0,0);y.setRGB(0,0,0);x=0;for(G=g.length;x1?1:a}var d=this,f,e,g,h=new THREE.Projector,l=document.createElementNS("http://www.w3.org/2000/svg","svg"),m,i,j,n,k,o,p,u,I=new THREE.Rectangle,v=new THREE.Rectangle,E=!1,s=new THREE.Color,t=new THREE.Color,C=new THREE.Color,x=new THREE.Color,y,G=new THREE.Vector3,B=[],H=[],z,L,J,M=1;this.domElement=l;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){m=a;i=b;j=m/2;n=i/2;l.setAttribute("viewBox",-j+" "+-n+" "+m+" "+i);l.setAttribute("width",m);l.setAttribute("height",i);I.set(-j,-n,j,n)};this.clear=function(){for(;l.childNodes.length>0;)l.removeChild(l.childNodes[0])};this.render=function(i,m){var B,G,r,q;this.autoClear&&this.clear();d.info.render.vertices=0;d.info.render.faces=0;f=h.projectScene(i,m,this.sortElements);e=f.elements; +g=f.lights;J=L=0;if(E=g.length>0){t.setRGB(0,0,0);C.setRGB(0,0,0);x.setRGB(0,0,0);B=0;for(G=g.length;B>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,b,c){this.r=a;this.g=b;this.b=c;return this},setHSV:function(a,b,c){var d,g,f;if(c===0)this.r=this.g=this.b=0;else switch(d=Math.floor(a*6),g=a*6-d,a=c*(1-b),f=c*(1- +b*g),b=c*(1-b*(1-g)),d){case 1:this.r=f;this.g=c;this.b=a;break;case 2:this.r=a;this.g=c;this.b=b;break;case 3:this.r=a;this.g=f;this.b=c;break;case 4:this.r=b;this.g=a;this.b=c;break;case 5:this.r=c;this.g=a;this.b=f;break;case 6:case 0:this.r=c,this.g=b,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,b){this.x=a||0;this.y=b||0}; THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;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,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.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 b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, @@ -14,87 +14,85 @@ this.y=Math.asin(a.n13);Math.abs(b)>1.0E-5?(this.x=Math.atan2(-a.n23/b,a.n33/b), THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w!==void 0?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}}; -THREE.Ray=function(a,b){function c(a,b,c){l.sub(c,a);H=l.dot(b);if(H<=0)return null;s=w.add(a,x.copy(b).multiplyScalar(H));return L=c.distanceTo(s)}function d(a,b,c,d){l.sub(d,b);w.sub(c,b);x.sub(a,b);ra=l.dot(l);T=l.dot(w);ma=l.dot(x);ja=w.dot(w);E=w.dot(x);Q=1/(ra*ja-T*T);I=(ja*ma-T*E)*Q;O=(ra*E-T*ma)*Q;return I>=0&&O>=0&&I+O<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, -c,d=[];b=0;for(c=a.length;bl.scale.x)return[];x={distance:w,point:l.position,face:null,object:l};H.push(x)}else if(l instanceof THREE.Mesh){w=c(this.origin,this.direction,l.matrixWorld.getPosition());if(w===null||w>l.geometry.boundingSphere.radius*Math.max(l.scale.x,Math.max(l.scale.y,l.scale.z)))return H;var s,L=l.geometry,F=L.vertices,e;l.matrixRotationWorld.extractRotation(l.matrixWorld);w=0;for(R=L.faces.length;w0:s<0)))if(s=p.dot(q.sub(f,a))/s,m.add(a,b.multiplyScalar(s)),x instanceof THREE.Face3)d(m, -f,g,h)&&(x={distance:a.distanceTo(m),point:m.clone(),face:x,object:l},H.push(x));else if(x instanceof THREE.Face4&&(d(m,f,g,i)||d(m,g,h,i)))x={distance:a.distanceTo(m),point:m.clone(),face:x,object:l},H.push(x)}return H};var l=new THREE.Vector3,w=new THREE.Vector3,x=new THREE.Vector3,H,s,L,ra,T,ma,ja,E,Q,I,O}; -THREE.Rectangle=function(){function a(){g=d-b;h=f-c}var b,c,d,f,g,h,i=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return g};this.getHeight=function(){return h};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return f};this.set=function(g,h,m,l){i=!1;b=g;c=h;d=m;f=l;a()};this.addPoint=function(g,h){i?(i=!1,b=g,c=h,d=g,f=h):(b=bg?d:g,f=f>h?f:h);a()};this.add3Points= -function(g,h,m,l,w,x){i?(i=!1,b=gm?g>w?g:w:m>w?m:w,f=h>l?h>x?h:x:l>x?l:x):(b=gm?g>w?g>d?g:d:w>d?w:d:m>w?m>d?m:d:w>d?w:d,f=h>l?h>x?h>f?h:f:x>f?x:f:l>x?l>f?l:f:x>f?x:f);a()};this.addRectangle=function(g){i?(i=!1,b=g.getLeft(),c=g.getTop(),d=g.getRight(),f=g.getBottom()):(b=bg.getRight()?d:g.getRight(),f=f> -g.getBottom()?f:g.getBottom());a()};this.inflate=function(g){b-=g;c-=g;d+=g;f+=g;a()};this.minSelf=function(g){b=b>g.getLeft()?b:g.getLeft();c=c>g.getTop()?c:g.getTop();d=d=0&&Math.min(f,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){i=!0;f=d=c=b=0;a()};this.isEmpty=function(){return i}}; -THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&M>=0&&H+M<1}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b, +c,d=[];b=0;for(c=a.length;bn.scale.x)return[];x={distance:w,point:n.position,face:null,object:n};G.push(x)}else if(n instanceof THREE.Mesh){w=c(this.origin,this.direction,n.matrixWorld.getPosition());if(w===null||w>n.geometry.boundingSphere.radius*Math.max(n.scale.x,Math.max(n.scale.y,n.scale.z)))return G;var ba,K=n.geometry,E=K.vertices,e;n.matrixRotationWorld.extractRotation(n.matrixWorld);w=0;for(u=K.faces.length;w0:ba<0)))if(ba=q.dot(p.sub(g,a))/ba,k.add(a,b.multiplyScalar(ba)),x instanceof THREE.Face3)d(k, +g,f,h)&&(x={distance:a.distanceTo(k),point:k.clone(),face:x,object:n},G.push(x));else if(x instanceof THREE.Face4&&(d(k,g,f,i)||d(k,f,h,i)))x={distance:a.distanceTo(k),point:k.clone(),face:x,object:n},G.push(x)}return G};var n=new THREE.Vector3,w=new THREE.Vector3,x=new THREE.Vector3,G,u,K,ta,O,ia,ea,D,P,H,M}; +THREE.Rectangle=function(){function a(){f=d-b;h=g-c}var b,c,d,g,f,h,i=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return h};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return g};this.set=function(f,h,k,n){i=!1;b=f;c=h;d=k;g=n;a()};this.addPoint=function(f,h){i?(i=!1,b=f,c=h,d=f,g=h):(b=bf?d:f,g=g>h?g:h);a()};this.add3Points= +function(f,h,k,n,w,x){i?(i=!1,b=fk?f>w?f:w:k>w?k:w,g=h>n?h>x?h:x:n>x?n:x):(b=fk?f>w?f>d?f:d:w>d?w:d:k>w?k>d?k:d:w>d?w:d,g=h>n?h>x?h>g?h:g:x>g?x:g:n>x?n>g?n:g:x>g?x:g);a()};this.addRectangle=function(f){i?(i=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),g=f.getBottom()):(b=bf.getRight()?d:f.getRight(),g=g> +f.getBottom()?g:f.getBottom());a()};this.inflate=function(f){b-=f;c-=f;d+=f;g+=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(g,a.getBottom())-Math.max(c,a.getTop())>=0};this.empty=function(){i=!0;g=d=c=b=0;a()};this.isEmpty=function(){return i}}; +THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=0&&g>=0&&f>=0&&h>=0?!0:e<0&&g<0||f<0&&h<0?!1:(e<0?c=Math.max(c,e/(e-g)):g<0&&(d=Math.min(d,e/(e-g))),f<0?c=Math.max(c,f/(f-h)):h<0&&(d=Math.min(d,f/(f-h))),dh&&i.positionScreen.z0&&I.z<1))h=ja[ma]=ja[ma]||new THREE.RenderableParticle,ma++,T=h,T.x=I.x/I.w,T.y=I.y/I.w,T.z=I.z,T.rotation=K.rotation.z,T.scale.x=K.scale.x*Math.abs(T.x-(I.x+g.projectionMatrix.n11)/(I.w+g.projectionMatrix.n14)),T.scale.y=K.scale.y*Math.abs(T.y- -(I.y+g.projectionMatrix.n22)/(I.w+g.projectionMatrix.n24)),T.material=K.material,E.elements.push(T);f&&E.elements.sort(c);return E}};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),g=Math.cos(c),c=Math.sin(c),h=a*b,i=d*f;this.w=h*g-i*c;this.x=h*c+i*g;this.y=d*b*g+a*f*c;this.z=a*f*g-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); +THREE.Projector=function(){function a(){var a=h[f]=h[f]||new THREE.RenderableObject;f++;return a}function b(){var a=q[p]=q[p]||new THREE.RenderableVertex;p++;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))),dh&&i.positionScreen.z0&&H.z< +1))h=ea[ia]=ea[ia]||new THREE.RenderableParticle,ia++,O=h,O.x=H.x/H.w,O.y=H.y/H.w,O.z=H.z,O.rotation=S.rotation.z,O.scale.x=S.scale.x*Math.abs(O.x-(H.x+g.projectionMatrix.n11)/(H.w+g.projectionMatrix.n14)),O.scale.y=S.scale.y*Math.abs(O.y-(H.y+g.projectionMatrix.n22)/(H.w+g.projectionMatrix.n24)),O.material=S.material,D.elements.push(O);f&&D.elements.sort(c);return D}};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,g=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-g),g=Math.sin(-g),f=Math.cos(c),c=Math.sin(c),h=a*b,i=d*g;this.w=h*f-i*c;this.x=h*c+i*f;this.y=d*b*f+a*g*c;this.z=a*g*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= -this.x,c=this.y,d=this.z,f=this.w,g=a.x,h=a.y,i=a.z,a=a.w;this.x=b*a+f*g+c*i-d*h;this.y=c*a+f*h+d*g-b*i;this.z=d*a+f*i+b*h-c*g;this.w=f*a-b*g-c*h-d*i;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,g=this.x,h=this.y,i=this.z,q=this.w,p=q*c+h*f-i*d,m=q*d+i*c-g*f,l=q*f+g*d-h*c,c=-g* -c-h*d-i*f;b.x=p*q+c*-g+m*-i-l*-h;b.y=m*q+c*-h+l*-g-p*-i;b.z=l*q+c*-i+p*-h-m*-g;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 g=Math.acos(f),f=Math.sqrt(1-f*f);if(Math.abs(f)<0.0010)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)*g)/f;d=Math.sin(d*g)/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,g){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=g;this.centroid=new THREE.Vector3}; -THREE.Face4=function(a,b,c,d,f,g,h){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=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materialIndex=h;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; +this.x,c=this.y,d=this.z,g=this.w,f=a.x,h=a.y,i=a.z,a=a.w;this.x=b*a+g*f+c*i-d*h;this.y=c*a+g*h+d*f-b*i;this.z=d*a+g*i+b*h-c*f;this.w=g*a-b*f-c*h-d*i;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,g=a.z,f=this.x,h=this.y,i=this.z,p=this.w,q=p*c+h*g-i*d,k=p*d+i*c-f*g,n=p*g+f*d-h*c,c=-f* +c-h*d-i*g;b.x=q*p+c*-f+k*-i-n*-h;b.y=k*p+c*-h+n*-f-q*-i;b.z=n*p+c*-i+q*-h-k*-f;return b}}; +THREE.Quaternion.slerp=function(a,b,c,d){var g=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;g<0?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,g=-g):c.copy(b);if(Math.abs(g)>=1)return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var f=Math.acos(g),g=Math.sqrt(1-g*g);if(Math.abs(g)<0.0010)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)*f)/g;d=Math.sin(d*f)/g;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,g,f){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=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,b,c,d,g,f,h){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];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,b){this.u=a||0;this.v=b||0}; THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;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 b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,d=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 b=1,c=this.vertices.length;b< +b,c,d,g,f,E){i=a.vertices[b].position;p=a.vertices[c].position;q=a.vertices[d].position;k=h[g];n=h[f];w=h[E];x=p.x-i.x;G=q.x-i.x;u=p.y-i.y;K=q.y-i.y;ta=p.z-i.z;O=q.z-i.z;ia=n.u-k.u;ea=w.u-k.u;D=n.v-k.v;P=w.v-k.v;H=1/(ia*P-ea*D);wa.set((P*x-D*G)*H,(P*u-D*K)*H,(P*ta-D*O)*H);sa.set((ia*G-ea*x)*H,(ia*K-ea*u)*H,(ia*O-ea*ta)*H);oa[b].addSelf(wa);oa[c].addSelf(wa);oa[d].addSelf(wa);pa[b].addSelf(sa);pa[c].addSelf(sa);pa[d].addSelf(sa)}var b,c,d,g,f,h,i,p,q,k,n,w,x,G,u,K,ta,O,ia,ea,D,P,H,M,oa=[],pa=[],wa= +new THREE.Vector3,sa=new THREE.Vector3,R=new THREE.Vector3,ba=new THREE.Vector3,ya=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;b< c;b++){a=this.vertices[b];if(a.position.xthis.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;bthis.points.length-2?g:g+1;c[3]=g>this.points.length-3?g:g+2;p=this.points[c[0]];m=this.points[c[1]]; -l=this.points[c[2]];w=this.points[c[3]];i=h*h;q=h*i;d.x=b(p.x,m.x,l.x,w.x,h,i,q);d.y=b(p.y,m.y,l.y,w.y,h,i,q);d.z=b(p.z,m.z,l.z,w.z,h,i,q);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;athis.points.length-2?f:f+1;c[3]=f>this.points.length-3?f:f+2;q=this.points[c[0]];k=this.points[c[1]]; +n=this.points[c[2]];w=this.points[c[3]];i=h*h;p=h*i;d.x=b(q.x,k.x,n.x,w.x,h,i,p);d.y=b(q.y,k.y,n.y,w.y,h,i,p);d.z=b(q.z,k.z,n.z,w.z,h,i,p);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a1){a.matrixWorldInverse.getInverse(a.matrixWorld);a=a.matrixWorldInverse;a=-(a.n31*this.position.x+a.n32*this.position.y+a.n33*this.position.z+a.n34);this.LODs[0].object3D.visible=!0;for(var b=1;b=this.LODs[b].visibleAtDistance)this.LODs[b-1].object3D.visible=!1,this.LODs[b].object3D.visible=!0;else break;for(;b= 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 b,c,d,f={};for(b=0;b=0)return a.geometry.materials[b.materialIndex]}function d(a){if(a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial)return!1;return a&&a.shading!==void 0&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function f(a){if(a.vertexColors)return a.vertexColors;return!1}function g(a){if(a.map||a.lightMap||a instanceof THREE.ShaderMaterial)return!0; -return!1}function h(a,b,c){var d,g,f,h,k=a.vertices;h=k.length;var D=a.colors,i=D.length,u=a.__vertexArray,l=a.__colorArray,j=a.__sortArray,o=a.__dirtyVertices,m=a.__dirtyColors,q=a.__webglCustomAttributesList;if(c.sortParticles){Fa.multiplySelf(c.matrixWorld);for(d=0;d=0;e--)a[e].object===b&&a.splice(e,1)}function H(a,b){for(var e=a.length-1;e>=0;e--)a[e]===b&&a.splice(e,1)}function s(a,b,c,d,f){d.program||F.initMaterial(d,b,c,f);if(d.morphTargets&&!f.__webglMorphTargetInfluences){f.__webglMorphTargetInfluences= -new Float32Array(F.maxMorphTargets);for(var g=0,h=F.maxMorphTargets;g0;this.getContext=function(){return e};this.supportsVertexTextures=function(){return La};this.setSize=function(a,b){O.width=a;O.height=b;this.setViewport(0,0,O.width,O.height)};this.setViewport=function(a,b,c,d){xa=a;Ja=b;Ga=c;Ha=d;e.viewport(xa,Ja,Ga,Ha)};this.setScissor=function(a,b,c,d){e.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?e.enable(e.SCISSOR_TEST):e.disable(e.SCISSOR_TEST)};this.setClearColorHex=function(a,b){R.setHex(a); -oa=b;e.clearColor(R.r,R.g,R.b,oa)};this.setClearColor=function(a,b){R.copy(a);oa=b;e.clearColor(R.r,R.g,R.b,oa)};this.getClearColor=function(){return R};this.getClearAlpha=function(){return oa};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=e.COLOR_BUFFER_BIT;if(b===void 0||b)d|=e.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=e.STENCIL_BUFFER_BIT;e.clear(d)};this.clearTarget=function(a,b,c,e){this.setRenderTarget(a);this.clear(b,c,e)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)}; -this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];e.deleteBuffer(c.__webglVertexBuffer);e.deleteBuffer(c.__webglNormalBuffer);e.deleteBuffer(c.__webglTangentBuffer);e.deleteBuffer(c.__webglColorBuffer); -e.deleteBuffer(c.__webglUVBuffer);e.deleteBuffer(c.__webglUV2Buffer);e.deleteBuffer(c.__webglSkinVertexABuffer);e.deleteBuffer(c.__webglSkinVertexBBuffer);e.deleteBuffer(c.__webglSkinIndicesBuffer);e.deleteBuffer(c.__webglSkinWeightsBuffer);e.deleteBuffer(c.__webglFaceBuffer);e.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d=0,f=c.numMorphTargets;d=0)a&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglVertexBuffer),e.vertexAttribPointer(b.position,3,e.FLOAT,!1,0,0));else if(g.morphTargetBase){c=d.program.attributes;g.morphTargetBase!==-1?(e.bindBuffer(e.ARRAY_BUFFER, -f.__webglMorphTargetsBuffers[g.morphTargetBase]),e.vertexAttribPointer(c.position,3,e.FLOAT,!1,0,0)):c.position>=0&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglVertexBuffer),e.vertexAttribPointer(c.position,3,e.FLOAT,!1,0,0));if(g.morphTargetForcedOrder.length){h=0;var i=g.morphTargetForcedOrder;for(k=g.morphTargetInfluences;hl&&(m=q,l=k[m]);e.bindBuffer(e.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[m]);e.vertexAttribPointer(c["morphTarget"+h],3,e.FLOAT,!1,0,0);g.__webglMorphTargetInfluences[h]=l;i[m]=1;l=-1;h++}}d.program.uniforms.morphTargetInfluences!==null&&e.uniform1fv(d.program.uniforms.morphTargetInfluences,g.__webglMorphTargetInfluences)}if(a){if(f.__webglCustomAttributesList){h= -0;for(k=f.__webglCustomAttributesList.length;h=0&&(e.bindBuffer(e.ARRAY_BUFFER,c.buffer),e.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,e.FLOAT,!1,0,0))}b.color>=0&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglColorBuffer),e.vertexAttribPointer(b.color,3,e.FLOAT,!1,0,0));b.normal>=0&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglNormalBuffer),e.vertexAttribPointer(b.normal,3,e.FLOAT,!1,0,0));b.tangent>=0&&(e.bindBuffer(e.ARRAY_BUFFER, +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 d(a){if(a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial)return!1;return a&&a.shading!==void 0&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function g(a){if(a.vertexColors)return a.vertexColors;return!1}function f(a){if(a.map||a.lightMap||a instanceof THREE.ShaderMaterial)return!0; +return!1}function h(a,b,c){var d,g,f,h,l=a.vertices;h=l.length;var I=a.colors,i=I.length,r=a.__vertexArray,n=a.__colorArray,j=a.__sortArray,o=a.__dirtyVertices,k=a.__dirtyColors,p=a.__webglCustomAttributesList;if(c.sortParticles){Ga.multiplySelf(c.matrixWorld);for(d=0;d=0;e--)a[e].object===b&&a.splice(e,1)}function G(a,b){for(var e=a.length-1;e>=0;e--)a[e]===b&&a.splice(e,1)}function u(a,b,c,d,f){d.program||E.initMaterial(d,b,c,f);if(d.morphTargets&&!f.__webglMorphTargetInfluences){f.__webglMorphTargetInfluences=new Float32Array(E.maxMorphTargets);for(var g=0,h=E.maxMorphTargets;g0;this.getContext=function(){return e}; +this.supportsVertexTextures=function(){return Ma};this.setSize=function(a,b){M.width=a;M.height=b;this.setViewport(0,0,M.width,M.height)};this.setViewport=function(a,b,c,d){za=a;Ja=b;Ha=c;Ia=d;e.viewport(za,Ja,Ha,Ia)};this.setScissor=function(a,b,c,d){e.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?e.enable(e.SCISSOR_TEST):e.disable(e.SCISSOR_TEST)};this.setClearColorHex=function(a,b){R.setHex(a);ba=b;e.clearColor(R.r,R.g,R.b,ba)};this.setClearColor=function(a,b){R.copy(a);ba=b;e.clearColor(R.r, +R.g,R.b,ba)};this.getClearColor=function(){return R};this.getClearAlpha=function(){return ba};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d|=e.COLOR_BUFFER_BIT;if(b===void 0||b)d|=e.DEPTH_BUFFER_BIT;if(c===void 0||c)d|=e.STENCIL_BUFFER_BIT;e.clear(d)};this.clearTarget=function(a,b,c,e){this.setRenderTarget(a);this.clear(b,c,e)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject= +function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];e.deleteBuffer(c.__webglVertexBuffer);e.deleteBuffer(c.__webglNormalBuffer);e.deleteBuffer(c.__webglTangentBuffer);e.deleteBuffer(c.__webglColorBuffer);e.deleteBuffer(c.__webglUVBuffer);e.deleteBuffer(c.__webglUV2Buffer);e.deleteBuffer(c.__webglSkinVertexABuffer); +e.deleteBuffer(c.__webglSkinVertexBBuffer);e.deleteBuffer(c.__webglSkinIndicesBuffer);e.deleteBuffer(c.__webglSkinWeightsBuffer);e.deleteBuffer(c.__webglFaceBuffer);e.deleteBuffer(c.__webglLineBuffer);if(c.numMorphTargets)for(var d=0,f=c.numMorphTargets;d=0)a&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglVertexBuffer),e.vertexAttribPointer(b.position,3,e.FLOAT,!1,0,0));else if(g.morphTargetBase){c=d.program.attributes;g.morphTargetBase!==-1?(e.bindBuffer(e.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[g.morphTargetBase]), +e.vertexAttribPointer(c.position,3,e.FLOAT,!1,0,0)):c.position>=0&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglVertexBuffer),e.vertexAttribPointer(c.position,3,e.FLOAT,!1,0,0));if(g.morphTargetForcedOrder.length){h=0;var k=g.morphTargetForcedOrder;for(i=g.morphTargetInfluences;hn&&(r=p,n=i[r]);e.bindBuffer(e.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[r]);e.vertexAttribPointer(c["morphTarget"+h],3,e.FLOAT,!1,0,0);g.__webglMorphTargetInfluences[h]=n;k[r]=1;n=-1;h++}}d.program.uniforms.morphTargetInfluences!==null&&e.uniform1fv(d.program.uniforms.morphTargetInfluences,g.__webglMorphTargetInfluences)}if(a){if(f.__webglCustomAttributesList){h= +0;for(i=f.__webglCustomAttributesList.length;h=0&&(e.bindBuffer(e.ARRAY_BUFFER,c.buffer),e.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,e.FLOAT,!1,0,0))}b.color>=0&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglColorBuffer),e.vertexAttribPointer(b.color,3,e.FLOAT,!1,0,0));b.normal>=0&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglNormalBuffer),e.vertexAttribPointer(b.normal,3,e.FLOAT,!1,0,0));b.tangent>=0&&(e.bindBuffer(e.ARRAY_BUFFER, f.__webglTangentBuffer),e.vertexAttribPointer(b.tangent,4,e.FLOAT,!1,0,0));b.uv>=0&&(f.__webglUVBuffer?(e.bindBuffer(e.ARRAY_BUFFER,f.__webglUVBuffer),e.vertexAttribPointer(b.uv,2,e.FLOAT,!1,0,0),e.enableVertexAttribArray(b.uv)):e.disableVertexAttribArray(b.uv));b.uv2>=0&&(f.__webglUV2Buffer?(e.bindBuffer(e.ARRAY_BUFFER,f.__webglUV2Buffer),e.vertexAttribPointer(b.uv2,2,e.FLOAT,!1,0,0),e.enableVertexAttribArray(b.uv2)):e.disableVertexAttribArray(b.uv2));d.skinning&&b.skinVertexA>=0&&b.skinVertexB>= 0&&b.skinIndex>=0&&b.skinWeight>=0&&(e.bindBuffer(e.ARRAY_BUFFER,f.__webglSkinVertexABuffer),e.vertexAttribPointer(b.skinVertexA,4,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),e.vertexAttribPointer(b.skinVertexB,4,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),e.vertexAttribPointer(b.skinIndex,4,e.FLOAT,!1,0,0),e.bindBuffer(e.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),e.vertexAttribPointer(b.skinWeight,4,e.FLOAT,!1,0,0))}g instanceof THREE.Mesh?(d.wireframe? -(d=d.wireframeLinewidth,d!==ya&&(e.lineWidth(d),ya=d),a&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),e.drawElements(e.LINES,f.__webglLineCount,e.UNSIGNED_SHORT,0)):(a&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),e.drawElements(e.TRIANGLES,f.__webglFaceCount,e.UNSIGNED_SHORT,0)),F.info.render.calls++,F.info.render.vertices+=f.__webglFaceCount,F.info.render.faces+=f.__webglFaceCount/3):g instanceof THREE.Line?(g=g.type===THREE.LineStrip?e.LINE_STRIP:e.LINES,d=d.linewidth,d!== -ya&&(e.lineWidth(d),ya=d),e.drawArrays(g,0,f.__webglLineCount),F.info.render.calls++):g instanceof THREE.ParticleSystem?(e.drawArrays(e.POINTS,0,f.__webglParticleCount),F.info.render.calls++):g instanceof THREE.Ribbon&&(e.drawArrays(e.TRIANGLE_STRIP,0,f.__webglVertexCount),F.info.render.calls++)}};this.render=function(a,b,c,d){var f,g,h,k,l=a.lights,m=a.fog;$=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), -a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();if(this.renderPluginsPre.length){f=0;for(g=this.renderPluginsPre.length;f=0)o=w.geometry.materials[o],o.transparent?(u.transparent=o,u.opaque=null):(u.opaque=o,u.transparent=null)}else if(o)o.transparent?(u.transparent=o,u.opaque=null):(u.opaque=o,u.transparent=null);h.render=!0;if(this.sortObjects)k.renderDepth?h.z=k.renderDepth:(Da.copy(k.position),Fa.multiplyVector3(Da),h.z=Da.z)}this.sortObjects&&d.sort(i);d=a.__webglObjectsImmediate;f=0;for(g=d.length;f65535&&(o[Y].counter+=1,j=o[Y].hash+"_"+o[Y].counter,B.geometryGroups[j]===void 0&&(B.geometryGroups[j]={faces3:[],faces4:[],materialIndex:aa,vertices:0,numMorphTargets:I})),D instanceof THREE.Face3?B.geometryGroups[j].faces3.push(C): -B.geometryGroups[j].faces4.push(C),B.geometryGroups[j].vertices+=u;B.geometryGroupsList=[];C=void 0;for(C in B.geometryGroups)B.geometryGroups[C].id=wa++,B.geometryGroupsList.push(B.geometryGroups[C])}for(p in s.geometryGroups)if(B=s.geometryGroups[p],!B.__webglVertexBuffer){C=B;C.__webglVertexBuffer=e.createBuffer();C.__webglNormalBuffer=e.createBuffer();C.__webglTangentBuffer=e.createBuffer();C.__webglColorBuffer=e.createBuffer();C.__webglUVBuffer=e.createBuffer();C.__webglUV2Buffer=e.createBuffer(); -C.__webglSkinVertexABuffer=e.createBuffer();C.__webglSkinVertexBBuffer=e.createBuffer();C.__webglSkinIndicesBuffer=e.createBuffer();C.__webglSkinWeightsBuffer=e.createBuffer();C.__webglFaceBuffer=e.createBuffer();C.__webglLineBuffer=e.createBuffer();if(C.numMorphTargets){D=k=void 0;C.__webglMorphTargetsBuffers=[];k=0;for(D=C.numMorphTargets;k0||u.faceVertexUvs.length>0)B.__uvArray=new Float32Array(C*2);if(u.faceUvs.length>1||u.faceVertexUvs.length>1)B.__uv2Array=new Float32Array(C*2)}if(aa.geometry.skinWeights.length&&aa.geometry.skinIndices.length)B.__skinVertexAArray= -new Float32Array(C*4),B.__skinVertexBArray=new Float32Array(C*4),B.__skinIndexArray=new Float32Array(C*4),B.__skinWeightArray=new Float32Array(C*4);B.__faceArray=new Uint16Array(D*3);B.__lineArray=new Uint16Array(Y*2);if(B.numMorphTargets){B.__morphTargetsArrays=[];aa=0;for(u=B.numMorphTargets;aa0&&(e.bindBuffer(e.ARRAY_BUFFER,k.__webglSkinVertexABuffer),e.bufferData(e.ARRAY_BUFFER,V,D),e.bindBuffer(e.ARRAY_BUFFER,k.__webglSkinVertexBBuffer), -e.bufferData(e.ARRAY_BUFFER,W,D),e.bindBuffer(e.ARRAY_BUFFER,k.__webglSkinIndicesBuffer),e.bufferData(e.ARRAY_BUFFER,U,D),e.bindBuffer(e.ARRAY_BUFFER,k.__webglSkinWeightsBuffer),e.bufferData(e.ARRAY_BUFFER,ka,D))}if(va&&Y){j=0;for(o=M.length;j0&&(e.bindBuffer(e.ARRAY_BUFFER,k.__webglColorBuffer),e.bufferData(e.ARRAY_BUFFER,ga,D))}if(O&&K.hasTangents){j=0;for(o=M.length;j0&&(e.bindBuffer(e.ARRAY_BUFFER,k.__webglUVBuffer),e.bufferData(e.ARRAY_BUFFER,ca,D))}if(qa&&ua&&L){j=0;for(o=M.length;j0&&(e.bindBuffer(e.ARRAY_BUFFER,k.__webglUV2Buffer),e.bufferData(e.ARRAY_BUFFER,r,D))}if(ra){j=0;for(o=M.length;j=0&&e.enableVertexAttribArray(o.position);o.color>=0&&e.enableVertexAttribArray(o.color);o.normal>=0&&e.enableVertexAttribArray(o.normal); -o.tangent>=0&&e.enableVertexAttribArray(o.tangent);a.skinning&&o.skinVertexA>=0&&o.skinVertexB>=0&&o.skinIndex>=0&&o.skinWeight>=0&&(e.enableVertexAttribArray(o.skinVertexA),e.enableVertexAttribArray(o.skinVertexB),e.enableVertexAttribArray(o.skinIndex),e.enableVertexAttribArray(o.skinWeight));if(a.attributes)for(g in a.attributes)o[g]!==void 0&&o[g]>=0&&e.enableVertexAttribArray(o[g]);if(a.morphTargets)for(g=a.numSupportedMorphTargets=0;g=0&&(e.enableVertexAttribArray(o[w]), -a.numSupportedMorphTargets++);a.uniformsList=[];for(f in a.uniforms)a.uniformsList.push([a.uniforms[f],f])};this.setFaceCulling=function(a,b){a?(!b||b==="ccw"?e.frontFace(e.CCW):e.frontFace(e.CW),a==="back"?e.cullFace(e.BACK):a==="front"?e.cullFace(e.FRONT):e.cullFace(e.FRONT_AND_BACK),e.enable(e.CULL_FACE)):e.disable(e.CULL_FACE)};this.setObjectFaces=function(a){if(ca!==a.doubleSided)a.doubleSided?e.disable(e.CULL_FACE):e.enable(e.CULL_FACE),ca=a.doubleSided;if(ta!==a.flipSided)a.flipSided?e.frontFace(e.CW): -e.frontFace(e.CCW),ta=a.flipSided};this.setDepthTest=function(a){na!==a&&(a?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),na=a)};this.setBlending=function(a){if(a!==K){switch(a){case THREE.AdditiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE);break;case THREE.SubtractiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.SRC_COLOR);break;default:e.blendEquationSeparate(e.FUNC_ADD, -e.FUNC_ADD),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA)}K=a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=e.createTexture(),F.info.memory.textures++;e.activeTexture(e.TEXTURE0+b);e.bindTexture(e.TEXTURE_2D,a.__webglTexture);var c=ja(e.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?e.texImage2D(e.TEXTURE_2D,0,I(a.format),a.image.width,a.image.height,0,I(a.format),e.UNSIGNED_BYTE,a.image.data):e.texImage2D(e.TEXTURE_2D, +(d=d.wireframeLinewidth,d!==Aa&&(e.lineWidth(d),Aa=d),a&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),e.drawElements(e.LINES,f.__webglLineCount,e.UNSIGNED_SHORT,0)):(a&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),e.drawElements(e.TRIANGLES,f.__webglFaceCount,e.UNSIGNED_SHORT,0)),E.info.render.calls++,E.info.render.vertices+=f.__webglFaceCount,E.info.render.faces+=f.__webglFaceCount/3):g instanceof THREE.Line?(g=g.type===THREE.LineStrip?e.LINE_STRIP:e.LINES,d=d.linewidth,d!== +Aa&&(e.lineWidth(d),Aa=d),e.drawArrays(g,0,f.__webglLineCount),E.info.render.calls++):g instanceof THREE.ParticleSystem?(e.drawArrays(e.POINTS,0,f.__webglParticleCount),E.info.render.calls++):g instanceof THREE.Ribbon&&(e.drawArrays(e.TRIANGLE_STRIP,0,f.__webglVertexCount),E.info.render.calls++)}};this.render=function(a,b,c,d){var f,g,h,l,k=a.lights,n=a.fog;ua=-1;this.autoUpdateObjects&&this.initWebGLObjects(a);b.parent===void 0&&(console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it..."), +a.add(b));this.autoUpdateScene&&a.updateMatrixWorld();if(this.renderPluginsPre.length){f=0;for(g=this.renderPluginsPre.length;f=0)o=w.geometry.materials[o],o.transparent?(r.transparent=o,r.opaque=null):(r.opaque=o,r.transparent=null)}else if(o)o.transparent?(r.transparent=o,r.opaque=null):(r.opaque=o,r.transparent=null);h.render=!0;if(this.sortObjects)l.renderDepth?h.z=l.renderDepth:(Ea.copy(l.position),Ga.multiplyVector3(Ea),h.z=Ea.z)}this.sortObjects&&d.sort(i);d=a.__webglObjectsImmediate;f=0;for(g=d.length;f65535&&(o[Y].counter+= +1,j=o[Y].hash+"_"+o[Y].counter,B.geometryGroups[j]===void 0&&(B.geometryGroups[j]={faces3:[],faces4:[],materialIndex:$,vertices:0,numMorphTargets:H})),I instanceof THREE.Face3?B.geometryGroups[j].faces3.push(C):B.geometryGroups[j].faces4.push(C),B.geometryGroups[j].vertices+=r;B.geometryGroupsList=[];C=void 0;for(C in B.geometryGroups)B.geometryGroups[C].id=xa++,B.geometryGroupsList.push(B.geometryGroups[C])}for(q in u.geometryGroups)if(B=u.geometryGroups[q],!B.__webglVertexBuffer){C=B;C.__webglVertexBuffer= +e.createBuffer();C.__webglNormalBuffer=e.createBuffer();C.__webglTangentBuffer=e.createBuffer();C.__webglColorBuffer=e.createBuffer();C.__webglUVBuffer=e.createBuffer();C.__webglUV2Buffer=e.createBuffer();C.__webglSkinVertexABuffer=e.createBuffer();C.__webglSkinVertexBBuffer=e.createBuffer();C.__webglSkinIndicesBuffer=e.createBuffer();C.__webglSkinWeightsBuffer=e.createBuffer();C.__webglFaceBuffer=e.createBuffer();C.__webglLineBuffer=e.createBuffer();if(C.numMorphTargets){I=l=void 0;C.__webglMorphTargetsBuffers= +[];l=0;for(I=C.numMorphTargets;l0||r.faceVertexUvs.length>0)B.__uvArray= +new Float32Array(C*2);if(r.faceUvs.length>1||r.faceVertexUvs.length>1)B.__uv2Array=new Float32Array(C*2)}if($.geometry.skinWeights.length&&$.geometry.skinIndices.length)B.__skinVertexAArray=new Float32Array(C*4),B.__skinVertexBArray=new Float32Array(C*4),B.__skinIndexArray=new Float32Array(C*4),B.__skinWeightArray=new Float32Array(C*4);B.__faceArray=new Uint16Array(I*3);B.__lineArray=new Uint16Array(Y*2);if(B.numMorphTargets){B.__morphTargetsArrays=[];$=0;for(r=B.numMorphTargets;$0&&(e.bindBuffer(e.ARRAY_BUFFER,l.__webglSkinVertexABuffer),e.bufferData(e.ARRAY_BUFFER,U,I),e.bindBuffer(e.ARRAY_BUFFER,l.__webglSkinVertexBBuffer),e.bufferData(e.ARRAY_BUFFER,V,I),e.bindBuffer(e.ARRAY_BUFFER,l.__webglSkinIndicesBuffer),e.bufferData(e.ARRAY_BUFFER,T,I),e.bindBuffer(e.ARRAY_BUFFER,l.__webglSkinWeightsBuffer),e.bufferData(e.ARRAY_BUFFER,ja,I))}if(wa&&Y){j=0;for(o=L.length;j0&&(e.bindBuffer(e.ARRAY_BUFFER,l.__webglColorBuffer), +e.bufferData(e.ARRAY_BUFFER,fa,I))}if(O&&ma.hasTangents){j=0;for(o=L.length;j0&&(e.bindBuffer(e.ARRAY_BUFFER,l.__webglUVBuffer),e.bufferData(e.ARRAY_BUFFER,ba,I))}if(ta&& +va&&K){j=0;for(o=L.length;j0&&(e.bindBuffer(e.ARRAY_BUFFER,l.__webglUV2Buffer),e.bufferData(e.ARRAY_BUFFER,s,I))}if(ua){j=0;for(o=L.length;j=0&&e.enableVertexAttribArray(o.position);o.color>=0&&e.enableVertexAttribArray(o.color);o.normal>=0&&e.enableVertexAttribArray(o.normal); +o.tangent>=0&&e.enableVertexAttribArray(o.tangent);a.skinning&&o.skinVertexA>=0&&o.skinVertexB>=0&&o.skinIndex>=0&&o.skinWeight>=0&&(e.enableVertexAttribArray(o.skinVertexA),e.enableVertexAttribArray(o.skinVertexB),e.enableVertexAttribArray(o.skinIndex),e.enableVertexAttribArray(o.skinWeight));if(a.attributes)for(g in a.attributes)o[g]!==void 0&&o[g]>=0&&e.enableVertexAttribArray(o[g]);if(a.morphTargets)for(g=a.numSupportedMorphTargets=0;g=0&&(e.enableVertexAttribArray(o[u]), +a.numSupportedMorphTargets++);a.uniformsList=[];for(f in a.uniforms)a.uniformsList.push([a.uniforms[f],f])};this.setFaceCulling=function(a,b){a?(!b||b==="ccw"?e.frontFace(e.CCW):e.frontFace(e.CW),a==="back"?e.cullFace(e.BACK):a==="front"?e.cullFace(e.FRONT):e.cullFace(e.FRONT_AND_BACK),e.enable(e.CULL_FACE)):e.disable(e.CULL_FACE)};this.setObjectFaces=function(a){if(ka!==a.doubleSided)a.doubleSided?e.disable(e.CULL_FACE):e.enable(e.CULL_FACE),ka=a.doubleSided;if(na!==a.flipSided)a.flipSided?e.frontFace(e.CW): +e.frontFace(e.CCW),na=a.flipSided};this.setDepthTest=function(a){qa!==a&&(a?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),qa=a)};this.setBlending=function(a){if(a!==S){switch(a){case THREE.AdditiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.SRC_ALPHA,e.ONE);break;case THREE.SubtractiveBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:e.blendEquation(e.FUNC_ADD);e.blendFunc(e.ZERO,e.SRC_COLOR);break;default:e.blendEquationSeparate(e.FUNC_ADD, +e.FUNC_ADD),e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA)}S=a}};this.setTexture=function(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=e.createTexture(),E.info.memory.textures++;e.activeTexture(e.TEXTURE0+b);e.bindTexture(e.TEXTURE_2D,a.__webglTexture);var c=ea(e.TEXTURE_2D,a,a.image);a instanceof THREE.DataTexture?e.texImage2D(e.TEXTURE_2D,0,H(a.format),a.image.width,a.image.height,0,H(a.format),e.UNSIGNED_BYTE,a.image.data):e.texImage2D(e.TEXTURE_2D, 0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,a.image);c&&e.generateMipmap(e.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdated)a.onUpdated()}else e.activeTexture(e.TEXTURE0+b),e.bindTexture(e.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=e.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];e.bindTexture(e.TEXTURE_CUBE_MAP, -a.__webglTexture);ja(e.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=e.createFramebuffer();a.__webglRenderbuffer[c]=e.createRenderbuffer();e.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,I(a.format),a.width,a.height,0,I(a.format),I(a.type),null);var d=a,f=e.TEXTURE_CUBE_MAP_POSITIVE_X+c;e.bindFramebuffer(e.FRAMEBUFFER,a.__webglFramebuffer[c]);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,f,d.__webglTexture,0);E(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer= -e.createFramebuffer(),a.__webglRenderbuffer=e.createRenderbuffer(),e.bindTexture(e.TEXTURE_2D,a.__webglTexture),ja(e.TEXTURE_2D,a,a),e.texImage2D(e.TEXTURE_2D,0,I(a.format),a.width,a.height,0,I(a.format),I(a.type),null),c=e.TEXTURE_2D,e.bindFramebuffer(e.FRAMEBUFFER,a.__webglFramebuffer),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,c,a.__webglTexture,0),E(a.__webglRenderbuffer,a);b?e.bindTexture(e.TEXTURE_CUBE_MAP,null):e.bindTexture(e.TEXTURE_2D,null);e.bindRenderbuffer(e.RENDERBUFFER, -null);e.bindFramebuffer(e.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=d=0):(b=null,c=Ga,a=Ha,d=xa,f=Ja);b!==fa&&(e.bindFramebuffer(e.FRAMEBUFFER,b),e.viewport(d,f,c,a),fa=b)};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; +a.__webglTexture);ea(e.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=e.createFramebuffer();a.__webglRenderbuffer[c]=e.createRenderbuffer();e.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,H(a.format),a.width,a.height,0,H(a.format),H(a.type),null);var d=a,f=e.TEXTURE_CUBE_MAP_POSITIVE_X+c;e.bindFramebuffer(e.FRAMEBUFFER,a.__webglFramebuffer[c]);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,f,d.__webglTexture,0);D(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer= +e.createFramebuffer(),a.__webglRenderbuffer=e.createRenderbuffer(),e.bindTexture(e.TEXTURE_2D,a.__webglTexture),ea(e.TEXTURE_2D,a,a),e.texImage2D(e.TEXTURE_2D,0,H(a.format),a.width,a.height,0,H(a.format),H(a.type),null),c=e.TEXTURE_2D,e.bindFramebuffer(e.FRAMEBUFFER,a.__webglFramebuffer),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,c,a.__webglTexture,0),D(a.__webglRenderbuffer,a);b?e.bindTexture(e.TEXTURE_CUBE_MAP,null):e.bindTexture(e.TEXTURE_2D,null);e.bindRenderbuffer(e.RENDERBUFFER, +null);e.bindFramebuffer(e.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=d=0):(b=null,c=Ha,a=Ia,d=za,f=Ja);b!==X&&(e.bindFramebuffer(e.FRAMEBUFFER,b),e.viewport(d,f,c,a),X=b)};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=c.wrapS!==void 0?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=c.wrapT!==void 0?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=c.magFilter!==void 0?c.magFilter:THREE.LinearFilter;this.minFilter=c.minFilter!==void 0?c.minFilter:THREE.LinearMipMapLinearFilter;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=c.format!==void 0?c.format:THREE.RGBAFormat;this.type=c.type!==void 0?c.type: THREE.UnsignedByteType;this.depthBuffer=c.depthBuffer!==void 0?c.depthBuffer:!0;this.stencilBuffer=c.stencilBuffer!==void 0?c.stencilBuffer:!0}; THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;return a};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0}; diff --git a/src/core/Projector.js b/src/core/Projector.js index 312937d1..db5a3f00 100644 --- a/src/core/Projector.js +++ b/src/core/Projector.js @@ -20,38 +20,13 @@ THREE.Projector = function() { _projScreenMatrix = new THREE.Matrix4(), _projScreenobjectMatrixWorld = new THREE.Matrix4(), - _frustum = [ - new THREE.Vector4(), - new THREE.Vector4(), - new THREE.Vector4(), - new THREE.Vector4(), - new THREE.Vector4(), - new THREE.Vector4() - ], + _frustum = new THREE.Frustum(), _clippedVertex1PositionScreen = new THREE.Vector4(), _clippedVertex2PositionScreen = new THREE.Vector4(), _face3VertexNormals; - this.computeFrustum = function ( m ) { - - _frustum[ 0 ].set( m.n41 - m.n11, m.n42 - m.n12, m.n43 - m.n13, m.n44 - m.n14 ); - _frustum[ 1 ].set( m.n41 + m.n11, m.n42 + m.n12, m.n43 + m.n13, m.n44 + m.n14 ); - _frustum[ 2 ].set( m.n41 + m.n21, m.n42 + m.n22, m.n43 + m.n23, m.n44 + m.n24 ); - _frustum[ 3 ].set( m.n41 - m.n21, m.n42 - m.n22, m.n43 - m.n23, m.n44 - m.n24 ); - _frustum[ 4 ].set( m.n41 - m.n31, m.n42 - m.n32, m.n43 - m.n33, m.n44 - m.n34 ); - _frustum[ 5 ].set( m.n41 + m.n31, m.n42 + m.n32, m.n43 + m.n33, m.n44 + m.n34 ); - - for ( var i = 0; i < 6; i ++ ) { - - var plane = _frustum[ i ]; - plane.divideScalar( Math.sqrt( plane.x * plane.x + plane.y * plane.y + plane.z * plane.z ) ); - - } - - } - this.projectVector = function ( vector, camera ) { camera.matrixWorldInverse.getInverse( camera.matrixWorld ); @@ -111,7 +86,7 @@ THREE.Projector = function() { if ( object.visible === false ) return; if ( ( object instanceof THREE.Mesh || object instanceof THREE.Line ) && - ( object.frustumCulled === false || isInFrustum( object ) ) ) { + ( object.frustumCulled === false || _frustum.contains( object ) ) ) { _projScreenMatrix.multiplyVector3( _vector3.copy( object.position ) ); @@ -182,7 +157,7 @@ THREE.Projector = function() { _projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse ); - this.computeFrustum( _projScreenMatrix ); + _frustum.setFromMatrix( _projScreenMatrix ); _renderData = this.projectGraph( scene, false ); @@ -474,22 +449,6 @@ THREE.Projector = function() { } - function isInFrustum( object ) { - - var distance, matrix = object.matrixWorld, - radius = - object.geometry.boundingSphere.radius * Math.max( object.scale.x, Math.max( object.scale.y, object.scale.z ) ); - - for ( var i = 0; i < 6; i ++ ) { - - distance = _frustum[ i ].x * matrix.n14 + _frustum[ i ].y * matrix.n24 + _frustum[ i ].z * matrix.n34 + _frustum[ i ].w; - if ( distance <= radius ) return false; - - } - - return true; - - }; - function clipLine( s1, s2 ) { var alpha1 = 0, alpha2 = 1, diff --git a/src/extras/plugins/ShadowMapPlugin.js b/src/extras/plugins/ShadowMapPlugin.js index 2c71e7f8..13c8953c 100644 --- a/src/extras/plugins/ShadowMapPlugin.js +++ b/src/extras/plugins/ShadowMapPlugin.js @@ -203,8 +203,6 @@ THREE.ShadowMapPlugin = function ( ) { if ( object.visible && object.castShadow ) { - _currentGeometryGroupHash = -1; - if( object.matrixAutoUpdate ) { object.matrixWorld.flattenToArray( object._objectMatrixArray ); @@ -213,19 +211,7 @@ THREE.ShadowMapPlugin = function ( ) { object._modelViewMatrix.multiplyToArray( _cameraLight.matrixWorldInverse, object.matrixWorld, object._modelViewMatrixArray ); - _renderer.setObjectFaces( object ); - - program = _renderer.setProgram( _cameraLight, lights, fog, _depthMaterial, object ); - - if ( object.immediateRenderCallback ) { - - object.immediateRenderCallback( program, _gl, _frustum ); - - } else { - - object.render( function( object ) { _renderer.renderBufferImmediate( object, program, _depthMaterial.shading ); } ); - - } + _renderer.renderImmediateObject( _cameraLight, lights, fog, _depthMaterial, object ); } diff --git a/src/extras/plugins/SpritePlugin.js b/src/extras/plugins/SpritePlugin.js index 662137ce..3b5cd633 100644 --- a/src/extras/plugins/SpritePlugin.js +++ b/src/extras/plugins/SpritePlugin.js @@ -92,7 +92,6 @@ THREE.SpritePlugin = function ( ) { // setup gl _gl.useProgram( _sprite.program ); - _currentProgram = _sprite.program; if ( ! _sprite.attributesEnabled ) { diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index a28680c2..666aeeca 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -3277,8 +3277,6 @@ THREE.WebGLRenderer = function ( parameters ) { if ( object.visible ) { - _currentGeometryGroupHash = -1; - if ( overrideMaterial ) { material = overrideMaterial; @@ -3297,19 +3295,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - _this.setObjectFaces( object ); - - program = setProgram( camera, lights, fog, material, object ); - - if ( object.immediateRenderCallback ) { - - object.immediateRenderCallback( program, _gl, _frustum ); - - } else { - - object.render( function( object ) { _this.renderBufferImmediate( object, program, material.shading ); } ); - - } + _this.renderImmediateObject( camera, lights, fog, material, object ); } @@ -3317,6 +3303,26 @@ THREE.WebGLRenderer = function ( parameters ) { }; + this.renderImmediateObject = function ( camera, lights, fog, material, object ) { + + var program = setProgram( camera, lights, fog, material, object ); + + _currentGeometryGroupHash = -1; + + _this.setObjectFaces( object ); + + if ( object.immediateRenderCallback ) { + + object.immediateRenderCallback( program, _gl, _frustum ); + + } else { + + object.render( function( object ) { _this.renderBufferImmediate( object, program, material.shading ); } ); + + } + + }; + function unrollImmediateBufferMaterial ( globject ) { var object = globject.object,