diff --git a/build/Three.js b/build/Three.js index c924473403deaf65cd4bb175b989a17e351aac48..c81c7ac472e31e190207f040682f5a4d82398fb7 100644 --- a/build/Three.js +++ b/build/Three.js @@ -19,42 +19,42 @@ this.y=Math.asin(a.n13);1.0E-5=r)return null;s=q.add(a,m.copy(b).multiplyScalar(r));return t=c.distanceTo(s)}function d(a,b,c,d){n.sub(d,b);q.sub(c,b);m.sub(a,b);u=n.dot(n);x=n.dot(q);v=n.dot(m);A=q.dot(q);D=q.dot(m);E=1/(u*A-x*x);C=(A*v-x*D)*E;F=(u*D-x*v)*E;return 0<=C&&0<=F&&1>C+F}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=[];for(b=0,c=a.length;ba.scale.x)return[];b={distance:n,point:a.position,face:null,object:a};m.push(b)}else if(a instanceof THREE.Mesh){n=c(this.origin,this.direction,a.matrixWorld.getPosition());if(null===n||n>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return m;var r,k=a.geometry,s=k.vertices,t;a.matrixRotationWorld.extractRotation(a.matrixWorld);for(n=0,q=k.faces.length;n=r)&&(e=t.multiplyVector3(e.copy(s[b.a].position)),f=t.multiplyVector3(f.copy(s[b.b].position)),g=t.multiplyVector3(g.copy(s[b.c].position)),b instanceof THREE.Face4&&(h=t.multiplyVector3(h.copy(s[b.d].position))),o=a.matrixRotationWorld.multiplyVector3(o.copy(b.normal)),r=j.dot(o),a.doubleSided||(a.flipSided?0r)))if(r=o.dot(l.sub(e,i))/r,p.add(i,j.multiplyScalar(r)),b instanceof THREE.Face3)d(p, -e,f,g)&&(b={distance:i.distanceTo(p),point:p.clone(),face:b,object:a},m.push(b));else if(b instanceof THREE.Face4&&(d(p,e,f,h)||d(p,f,g,h)))b={distance:i.distanceTo(p),point:p.clone(),face:b,object:a},m.push(b)}return m};var n=new THREE.Vector3,q=new THREE.Vector3,m=new THREE.Vector3,r,s,t,u,x,v,A,D,E,C,F}; -THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b,c,d,e,f,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,l,o){h=!1;b=f;c=g;d=l;e=o;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,l,o,p,n){h?(h=!1,b=fl?f>p?f:p:l>p?l:p,e=g>o?g>n?g:n:o>n?o:n):(b=fl?f>p?f>d?f:d:p>d?p:d:l>p?l>d?l:d:p>d?p:d,e=g>o?g>n?g>e?g:e:n>e?n:e:o>n?o>e?o: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> +THREE.Ray=function(a,b){function c(a,b,c){o.sub(c,a);r=o.dot(b);if(0>=r)return null;s=q.add(a,m.copy(b).multiplyScalar(r));return t=c.distanceTo(s)}function d(a,b,c,d){o.sub(d,b);q.sub(c,b);m.sub(a,b);u=o.dot(o);x=o.dot(q);v=o.dot(m);A=q.dot(q);D=q.dot(m);E=1/(u*A-x*x);C=(A*v-x*D)*E;F=(u*D-x*v)*E;return 0<=C&&0<=F&&1>C+F}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=[];for(b=0,c=a.length;ba.scale.x)return[];b={distance:o,point:a.position,face:null,object:a};m.push(b)}else if(a instanceof THREE.Mesh){o=c(this.origin,this.direction,a.matrixWorld.getPosition());if(null===o||o>a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)))return m;var r,k=a.geometry,s=k.vertices,t;a.matrixRotationWorld.extractRotation(a.matrixWorld);for(o=0,q=k.faces.length;o=r)&&(e=t.multiplyVector3(e.copy(s[b.a].position)),f=t.multiplyVector3(f.copy(s[b.b].position)),g=t.multiplyVector3(g.copy(s[b.c].position)),b instanceof THREE.Face4&&(h=t.multiplyVector3(h.copy(s[b.d].position))),p=a.matrixRotationWorld.multiplyVector3(p.copy(b.normal)),r=j.dot(p),a.doubleSided||(a.flipSided?0r)))if(r=p.dot(l.sub(e,i))/r,n.add(i,j.multiplyScalar(r)),b instanceof THREE.Face3)d(n, +e,f,g)&&(b={distance:i.distanceTo(n),point:n.clone(),face:b,object:a},m.push(b));else if(b instanceof THREE.Face4&&(d(n,e,f,h)||d(n,f,g,h)))b={distance:i.distanceTo(n),point:n.clone(),face:b,object:a},m.push(b)}return m};var o=new THREE.Vector3,q=new THREE.Vector3,m=new THREE.Vector3,r,s,t,u,x,v,A,D,E,C,F}; +THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b,c,d,e,f,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,l,p){h=!1;b=f;c=g;d=l;e=p;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,l,p,n,o){h?(h=!1,b=fl?f>n?f:n:l>n?l:n,e=g>p?g>o?g:o:p>o?p:o):(b=fl?f>n?f>d?f:d:n>d?n:d:l>n?l>d?l:d:n>d?n:d,e=g>p?g>o?g>e?g:e:o>e?o:e:p>o?p>e?p:e:o>e?o: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=da.getRight()||ea.getBottom()?!1:!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 ae&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(dg&&h.positionScreen.z(aa.positionScreen.x-O.positionScreen.x)*(T.positionScreen.y-O.positionScreen.y)-(aa.positionScreen.y-O.positionScreen.y)*(T.positionScreen.x- -O.positionScreen.x)))ga=p[o]=p[o]||new THREE.RenderableFace3,o++,l=ga,l.v1.copy(O),l.v2.copy(T),l.v3.copy(aa);else continue;else if(y instanceof THREE.Face4)if(O=j[y.a],T=j[y.b],aa=j[y.c],ga=j[y.d],O.visible&&T.visible&&aa.visible&&ga.visible&&(fa.doubleSided||fa.flipSided!=(0>(ga.positionScreen.x-O.positionScreen.x)*(T.positionScreen.y-O.positionScreen.y)-(ga.positionScreen.y-O.positionScreen.y)*(T.positionScreen.x-O.positionScreen.x)||0>(T.positionScreen.x-aa.positionScreen.x)*(ga.positionScreen.y- -aa.positionScreen.y)-(T.positionScreen.y-aa.positionScreen.y)*(ga.positionScreen.x-aa.positionScreen.x))))ja=q[n]=q[n]||new THREE.RenderableFace4,n++,l=ja,l.v1.copy(O),l.v2.copy(T),l.v3.copy(aa),l.v4.copy(ga);else continue;l.normalWorld.copy(y.normal);ba.multiplyVector3(l.normalWorld);l.centroidWorld.copy(y.centroid);S.multiplyVector3(l.centroidWorld);l.centroidScreen.copy(l.centroidWorld);E.multiplyVector3(l.centroidScreen);aa=y.vertexNormals;for(O=0,T=aa.length;O(ga.positionScreen.x-O.positionScreen.x)*(T.positionScreen.y-O.positionScreen.y)-(ga.positionScreen.y-O.positionScreen.y)*(T.positionScreen.x-O.positionScreen.x)||0>(T.positionScreen.x-aa.positionScreen.x)*(ga.positionScreen.y- +aa.positionScreen.y)-(T.positionScreen.y-aa.positionScreen.y)*(ga.positionScreen.x-aa.positionScreen.x))))ja=q[o]=q[o]||new THREE.RenderableFace4,o++,l=ja,l.v1.copy(O),l.v2.copy(T),l.v3.copy(aa),l.v4.copy(ga);else continue;l.normalWorld.copy(y.normal);ba.multiplyVector3(l.normalWorld);l.centroidWorld.copy(y.centroid);S.multiplyVector3(l.centroidWorld);l.centroidScreen.copy(l.centroidWorld);E.multiplyVector3(l.centroidScreen);aa=y.vertexNormals;for(O=0,T=aa.length;OD.z))g=x[u]=x[u]||new THREE.RenderableParticle,u++,t=g, t.x=D.x/D.w,t.y=D.y/D.w,t.z=D.z,t.rotation=fa.rotation.z,t.scale.x=fa.scale.x*Math.abs(t.x-(D.x+e.projectionMatrix.n11)/(D.w+e.projectionMatrix.n14)),t.scale.y=fa.scale.y*Math.abs(t.y-(D.y+e.projectionMatrix.n22)/(D.w+e.projectionMatrix.n24)),t.material=fa.material,v.elements.push(t);f&&v.elements.sort(c);return v}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,void 0!==d?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=0>a.n32-a.n23?-Math.abs(this.x):Math.abs(this.x);this.y=0>a.n13-a.n31?-Math.abs(this.y):Math.abs(this.y);this.z=0>a.n21-a.n12?-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);0===a?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,f=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+e*f+c*h-d*g;this.y=c*a+e*g+d*f-b*h;this.z=d*a+e*h+b*g-c*f;this.w=e*a-b*f-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,f=this.x,g=this.y,h=this.z,i=this.w,j=i*c+g*e-h*d,l=i*d+h*c-f*e,o=i*e+f*d-g*c,c=-f* -c-g*d-h*e;b.x=j*i+c*-f+l*-h-o*-g;b.y=l*i+c*-g+o*-f-j*-h;b.z=o*i+c*-h+j*-g-l*-f;return b}}; +this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+e*f+c*h-d*g;this.y=c*a+e*g+d*f-b*h;this.z=d*a+e*h+b*g-c*f;this.w=e*a-b*f-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,f=this.x,g=this.y,h=this.z,i=this.w,j=i*c+g*e-h*d,l=i*d+h*c-f*e,p=i*e+f*d-g*c,c=-f* +c-g*d-h*e;b.x=j*i+c*-f+l*-h-p*-g;b.y=l*i+c*-g+p*-f-j*-h;b.z=p*i+c*-h+j*-g-l*-f;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;0>e?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,e=-e):c.copy(b);if(1<=Math.abs(e))return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var f=Math.acos(e),e=Math.sqrt(1-e*e);if(0.0010>Math.abs(e))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)/e;d=Math.sin(d*f)/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,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=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3}; THREE.Face4=function(a,b,c,d,e,f,g){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=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.UV=function(a,b){this.u=a||0;this.v=b||0}; @@ -89,13 +89,13 @@ b;a++)c=this.faces[a],c.centroid.set(0,0,0),c instanceof THREE.Face3?(c.centroid b,c,d,e,f,g=new THREE.Vector3,h=new THREE.Vector3;for(a=0,b=this.faces.length;ae?-1:1,f.vertexTangents[d]=new THREE.Vector4(R.x,R.y,R.z,e)}this.hasTangents=!0},computeBoundingBox:function(){if(0c.x)c.x=a.x;if(a.yc.y)c.y=a.y;if(a.zc.z)c.z=a.z}}},computeBoundingSphere:function(){for(var a,b=0,c=0,d=this.vertices.length;cb&&(b=a);this.boundingSphere={radius:b}},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g;for(f=0,g=this.vertices.length;fthis.points.length-2?f:f+1;c[3]=f>this.points.length-3?f:f+2;j=this.points[c[0]];l=this.points[c[1]]; -o=this.points[c[2]];p=this.points[c[3]];h=g*g;i=g*h;d.x=b(j.x,l.x,o.x,p.x,g,h,i);d.y=b(j.y,l.y,o.y,p.y,g,h,i);d.z=b(j.z,l.z,o.z,p.z,g,h,i);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;j=this.points[c[0]];l=this.points[c[1]]; +p=this.points[c[2]];n=this.points[c[3]];h=g*g;i=g*h;d.x=b(j.x,l.x,p.x,n.x,g,h,i);d.y=b(j.y,l.y,p.y,n.y,g,h,i);d.z=b(j.z,l.z,p.z,n.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;as&&m.clearRect(Math.floor(Ma.getX()),Math.floor(Ma.getY()),Math.floor(Ma.getWidth()),Math.floor(Ma.getHeight())),0s&&m.clearRect(Math.floor(Ma.getX()),Math.floor(Ma.getY()),Math.floor(Ma.getWidth()),Math.floor(Ma.getHeight())),0=k||(k*=g.intensity,d.r+=Z.r*k,d.g+=Z.g*k,d.b+=Z.b*k)):g instanceof THREE.PointLight&&(h=g.matrixWorld.getPosition(),k=c.dot(Ia.sub(h,b).normalize()),0>=k||(k*=0==g.distance?1:1-Math.min(b.distanceTo(h)/g.distance,1),0!=k&&(k*=g.intensity,d.r+=Z.r*k,d.g+=Z.g*k,d.b+=Z.b*k)))}function r(a,f,g){b(g.opacity);c(g.blending);var Z,h,k,i,l,j;if(g instanceof THREE.ParticleBasicMaterial){if(g.map)i= -g.map.image,l=i.width>>1,j=i.height>>1,g=f.scale.x*n,k=f.scale.y*q,Z=g*l,h=k*j,xa.set(a.x-Z,a.y-h,a.x+Z,a.y+h),Aa.intersects(xa)&&(m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(g,-k),m.translate(-l,-j),m.drawImage(i,0,0),m.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(Z=f.scale.x*n,h=f.scale.y*q,xa.set(a.x-Z,a.y-h,a.x+Z,a.y+h),Aa.intersects(xa)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(Z,h),g.program(m), +g.map.image,l=i.width>>1,j=i.height>>1,g=f.scale.x*o,k=f.scale.y*q,Z=g*l,h=k*j,xa.set(a.x-Z,a.y-h,a.x+Z,a.y+h),Aa.intersects(xa)&&(m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(g,-k),m.translate(-l,-j),m.drawImage(i,0,0),m.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(Z=f.scale.x*o,h=f.scale.y*q,xa.set(a.x-Z,a.y-h,a.x+Z,a.y+h),Aa.intersects(xa)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(Z,h),g.program(m), m.restore()))}function s(a,e,f,g){b(g.opacity);c(g.blending);m.beginPath();m.moveTo(a.positionScreen.x,a.positionScreen.y);m.lineTo(e.positionScreen.x,e.positionScreen.y);m.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(A!=a)m.lineWidth=A=a;a=g.linecap;if(D!=a)m.lineCap=D=a;a=g.linejoin;if(E!=a)m.lineJoin=E=a;d(g.color.getContextStyle());m.stroke();xa.inflate(2*g.linewidth)}}function t(a,d,e,g,h,j,Q,m){f.info.render.vertices+=3;f.info.render.faces++;b(m.opacity);c(m.blending); P=a.positionScreen.x;B=a.positionScreen.y;k=d.positionScreen.x;H=d.positionScreen.y;V=e.positionScreen.x;y=e.positionScreen.y;x(P,B,k,H,V,y);if(m instanceof THREE.MeshBasicMaterial)if(m.map)m.map.mapping instanceof THREE.UVMapping&&(Fa=Q.uvs[0],Mc(P,B,k,H,V,y,Fa[g].u,Fa[g].v,Fa[h].u,Fa[h].v,Fa[j].u,Fa[j].v,m.map));else if(m.envMap){if(m.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=l.matrixWorldInverse,Ia.copy(Q.vertexNormalsWorld[g]),ab=0.5*(Ia.x*a.n11+Ia.y*a.n12+Ia.z*a.n13)+0.5,gb= 0.5*-(Ia.x*a.n21+Ia.y*a.n22+Ia.z*a.n23)+0.5,Ia.copy(Q.vertexNormalsWorld[h]),Ra=0.5*(Ia.x*a.n11+Ia.y*a.n12+Ia.z*a.n13)+0.5,Sa=0.5*-(Ia.x*a.n21+Ia.y*a.n22+Ia.z*a.n23)+0.5,Ia.copy(Q.vertexNormalsWorld[j]),bb=0.5*(Ia.x*a.n11+Ia.y*a.n12+Ia.z*a.n13)+0.5,Wa=0.5*-(Ia.x*a.n21+Ia.y*a.n22+Ia.z*a.n23)+0.5,Mc(P,B,k,H,V,y,ab,gb,Ra,Sa,bb,Wa,m.envMap)}else m.wireframe?Eb(m.color,m.wireframeLinewidth,m.wireframeLinecap,m.wireframeLinejoin):zb(m.color);else if(m instanceof THREE.MeshLambertMaterial)m.map&&!m.wireframe&& -(m.map.mapping instanceof THREE.UVMapping&&(Fa=Q.uvs[0],Mc(P,B,k,H,V,y,Fa[g].u,Fa[g].v,Fa[h].u,Fa[h].v,Fa[j].u,Fa[j].v,m.map)),c(THREE.SubtractiveBlending)),Sb?!m.wireframe&&m.shading==THREE.SmoothShading&&3==Q.vertexNormalsWorld.length?(ba.r=$.r=ca.r=Z.r,ba.g=$.g=ca.g=Z.g,ba.b=$.b=ca.b=Z.b,o(i,Q.v1.positionWorld,Q.vertexNormalsWorld[0],ba),o(i,Q.v2.positionWorld,Q.vertexNormalsWorld[1],$),o(i,Q.v3.positionWorld,Q.vertexNormalsWorld[2],ca),ba.r=Math.max(0,Math.min(m.color.r*ba.r,1)),ba.g=Math.max(0, -Math.min(m.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(m.color.b*ba.b,1)),$.r=Math.max(0,Math.min(m.color.r*$.r,1)),$.g=Math.max(0,Math.min(m.color.g*$.g,1)),$.b=Math.max(0,Math.min(m.color.b*$.b,1)),ca.r=Math.max(0,Math.min(m.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(m.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(m.color.b*ca.b,1)),ia.r=0.5*($.r+ca.r),ia.g=0.5*($.g+ca.g),ia.b=0.5*($.b+ca.b),Ga=vc(ba,$,ca,ia),Yb(P,B,k,H,V,y,0,0,1,0,0,1,Ga)):(S.r=Z.r,S.g=Z.g,S.b=Z.b,o(i,Q.centroidWorld,Q.normalWorld,S), +(m.map.mapping instanceof THREE.UVMapping&&(Fa=Q.uvs[0],Mc(P,B,k,H,V,y,Fa[g].u,Fa[g].v,Fa[h].u,Fa[h].v,Fa[j].u,Fa[j].v,m.map)),c(THREE.SubtractiveBlending)),Sb?!m.wireframe&&m.shading==THREE.SmoothShading&&3==Q.vertexNormalsWorld.length?(ba.r=$.r=ca.r=Z.r,ba.g=$.g=ca.g=Z.g,ba.b=$.b=ca.b=Z.b,p(i,Q.v1.positionWorld,Q.vertexNormalsWorld[0],ba),p(i,Q.v2.positionWorld,Q.vertexNormalsWorld[1],$),p(i,Q.v3.positionWorld,Q.vertexNormalsWorld[2],ca),ba.r=Math.max(0,Math.min(m.color.r*ba.r,1)),ba.g=Math.max(0, +Math.min(m.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(m.color.b*ba.b,1)),$.r=Math.max(0,Math.min(m.color.r*$.r,1)),$.g=Math.max(0,Math.min(m.color.g*$.g,1)),$.b=Math.max(0,Math.min(m.color.b*$.b,1)),ca.r=Math.max(0,Math.min(m.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(m.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(m.color.b*ca.b,1)),ia.r=0.5*($.r+ca.r),ia.g=0.5*($.g+ca.g),ia.b=0.5*($.b+ca.b),Ga=vc(ba,$,ca,ia),Yb(P,B,k,H,V,y,0,0,1,0,0,1,Ga)):(S.r=Z.r,S.g=Z.g,S.b=Z.b,p(i,Q.centroidWorld,Q.normalWorld,S), S.r=Math.max(0,Math.min(m.color.r*S.r,1)),S.g=Math.max(0,Math.min(m.color.g*S.g,1)),S.b=Math.max(0,Math.min(m.color.b*S.b,1)),m.wireframe?Eb(S,m.wireframeLinewidth,m.wireframeLinecap,m.wireframeLinejoin):zb(S)):m.wireframe?Eb(m.color,m.wireframeLinewidth,m.wireframeLinecap,m.wireframeLinejoin):zb(m.color);else if(m instanceof THREE.MeshDepthMaterial)za=l.near,qa=l.far,ba.r=ba.g=ba.b=1-Tb(a.positionScreen.z,za,qa),$.r=$.g=$.b=1-Tb(d.positionScreen.z,za,qa),ca.r=ca.g=ca.b=1-Tb(e.positionScreen.z,za, -qa),ia.r=0.5*($.r+ca.r),ia.g=0.5*($.g+ca.g),ia.b=0.5*($.b+ca.b),Ga=vc(ba,$,ca,ia),Yb(P,B,k,H,V,y,0,0,1,0,0,1,Ga);else if(m instanceof THREE.MeshNormalMaterial)S.r=Zb(Q.normalWorld.x),S.g=Zb(Q.normalWorld.y),S.b=Zb(Q.normalWorld.z),m.wireframe?Eb(S,m.wireframeLinewidth,m.wireframeLinecap,m.wireframeLinejoin):zb(S)}function u(a,d,e,g,h,j,m,Q,p){f.info.render.vertices+=4;f.info.render.faces++;b(Q.opacity);c(Q.blending);if(Q.map||Q.envMap)t(a,d,g,0,1,3,m,Q,p),t(h,e,j,1,2,3,m,Q,p);else if(P=a.positionScreen.x, +qa),ia.r=0.5*($.r+ca.r),ia.g=0.5*($.g+ca.g),ia.b=0.5*($.b+ca.b),Ga=vc(ba,$,ca,ia),Yb(P,B,k,H,V,y,0,0,1,0,0,1,Ga);else if(m instanceof THREE.MeshNormalMaterial)S.r=Zb(Q.normalWorld.x),S.g=Zb(Q.normalWorld.y),S.b=Zb(Q.normalWorld.z),m.wireframe?Eb(S,m.wireframeLinewidth,m.wireframeLinecap,m.wireframeLinejoin):zb(S)}function u(a,d,e,g,h,j,m,Q,n){f.info.render.vertices+=4;f.info.render.faces++;b(Q.opacity);c(Q.blending);if(Q.map||Q.envMap)t(a,d,g,0,1,3,m,Q,n),t(h,e,j,1,2,3,m,Q,n);else if(P=a.positionScreen.x, B=a.positionScreen.y,k=d.positionScreen.x,H=d.positionScreen.y,V=e.positionScreen.x,y=e.positionScreen.y,I=g.positionScreen.x,O=g.positionScreen.y,T=h.positionScreen.x,aa=h.positionScreen.y,ga=j.positionScreen.x,fa=j.positionScreen.y,Q instanceof THREE.MeshBasicMaterial)v(P,B,k,H,V,y,I,O),Q.wireframe?Eb(Q.color,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):zb(Q.color);else if(Q instanceof THREE.MeshLambertMaterial)Sb?!Q.wireframe&&Q.shading==THREE.SmoothShading&&4==m.vertexNormalsWorld.length? -(ba.r=$.r=ca.r=ia.r=Z.r,ba.g=$.g=ca.g=ia.g=Z.g,ba.b=$.b=ca.b=ia.b=Z.b,o(i,m.v1.positionWorld,m.vertexNormalsWorld[0],ba),o(i,m.v2.positionWorld,m.vertexNormalsWorld[1],$),o(i,m.v4.positionWorld,m.vertexNormalsWorld[3],ca),o(i,m.v3.positionWorld,m.vertexNormalsWorld[2],ia),ba.r=Math.max(0,Math.min(Q.color.r*ba.r,1)),ba.g=Math.max(0,Math.min(Q.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(Q.color.b*ba.b,1)),$.r=Math.max(0,Math.min(Q.color.r*$.r,1)),$.g=Math.max(0,Math.min(Q.color.g*$.g,1)),$.b=Math.max(0, -Math.min(Q.color.b*$.b,1)),ca.r=Math.max(0,Math.min(Q.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(Q.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(Q.color.b*ca.b,1)),ia.r=Math.max(0,Math.min(Q.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(Q.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(Q.color.b*ia.b,1)),Ga=vc(ba,$,ca,ia),x(P,B,k,H,I,O),Yb(P,B,k,H,I,O,0,0,1,0,0,1,Ga),x(T,aa,V,y,ga,fa),Yb(T,aa,V,y,ga,fa,1,0,1,1,0,1,Ga)):(S.r=Z.r,S.g=Z.g,S.b=Z.b,o(i,m.centroidWorld,m.normalWorld,S),S.r=Math.max(0,Math.min(Q.color.r* +(ba.r=$.r=ca.r=ia.r=Z.r,ba.g=$.g=ca.g=ia.g=Z.g,ba.b=$.b=ca.b=ia.b=Z.b,p(i,m.v1.positionWorld,m.vertexNormalsWorld[0],ba),p(i,m.v2.positionWorld,m.vertexNormalsWorld[1],$),p(i,m.v4.positionWorld,m.vertexNormalsWorld[3],ca),p(i,m.v3.positionWorld,m.vertexNormalsWorld[2],ia),ba.r=Math.max(0,Math.min(Q.color.r*ba.r,1)),ba.g=Math.max(0,Math.min(Q.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(Q.color.b*ba.b,1)),$.r=Math.max(0,Math.min(Q.color.r*$.r,1)),$.g=Math.max(0,Math.min(Q.color.g*$.g,1)),$.b=Math.max(0, +Math.min(Q.color.b*$.b,1)),ca.r=Math.max(0,Math.min(Q.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(Q.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(Q.color.b*ca.b,1)),ia.r=Math.max(0,Math.min(Q.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(Q.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(Q.color.b*ia.b,1)),Ga=vc(ba,$,ca,ia),x(P,B,k,H,I,O),Yb(P,B,k,H,I,O,0,0,1,0,0,1,Ga),x(T,aa,V,y,ga,fa),Yb(T,aa,V,y,ga,fa,1,0,1,1,0,1,Ga)):(S.r=Z.r,S.g=Z.g,S.b=Z.b,p(i,m.centroidWorld,m.normalWorld,S),S.r=Math.max(0,Math.min(Q.color.r* S.r,1)),S.g=Math.max(0,Math.min(Q.color.g*S.g,1)),S.b=Math.max(0,Math.min(Q.color.b*S.b,1)),v(P,B,k,H,V,y,I,O),Q.wireframe?Eb(S,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):zb(S)):(v(P,B,k,H,V,y,I,O),Q.wireframe?Eb(Q.color,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):zb(Q.color));else if(Q instanceof THREE.MeshNormalMaterial)S.r=Zb(m.normalWorld.x),S.g=Zb(m.normalWorld.y),S.b=Zb(m.normalWorld.z),v(P,B,k,H,V,y,I,O),Q.wireframe?Eb(S,Q.wireframeLinewidth,Q.wireframeLinecap, Q.wireframeLinejoin):zb(S);else if(Q instanceof THREE.MeshDepthMaterial)za=l.near,qa=l.far,ba.r=ba.g=ba.b=1-Tb(a.positionScreen.z,za,qa),$.r=$.g=$.b=1-Tb(d.positionScreen.z,za,qa),ca.r=ca.g=ca.b=1-Tb(g.positionScreen.z,za,qa),ia.r=ia.g=ia.b=1-Tb(e.positionScreen.z,za,qa),Ga=vc(ba,$,ca,ia),x(P,B,k,H,I,O),Yb(P,B,k,H,I,O,0,0,1,0,0,1,Ga),x(T,aa,V,y,ga,fa),Yb(T,aa,V,y,ga,fa,1,0,1,1,0,1,Ga)}function x(a,b,c,d,e,f){m.beginPath();m.moveTo(a,b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(a,b);m.closePath()}function v(a, -b,c,d,e,f,g,Z){m.beginPath();m.moveTo(a,b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(g,Z);m.lineTo(a,b);m.closePath()}function Eb(a,b,c,e){if(A!=b)m.lineWidth=A=b;if(D!=c)m.lineCap=D=c;if(E!=e)m.lineJoin=E=e;d(a.getContextStyle());m.stroke();xa.inflate(2*b)}function zb(a){e(a.getContextStyle());m.fill()}function Mc(a,b,c,d,f,g,Z,h,k,i,Q,l,j){if(0!=j.image.width){if(!0==j.needsUpdate||void 0==La[j.id]){var o=j.wrapS==THREE.RepeatWrapping,p=j.wrapT==THREE.RepeatWrapping;La[j.id]=m.createPattern(j.image, -o&&p?"repeat":o&&!p?"repeat-x":!o&&p?"repeat-y":"no-repeat");j.needsUpdate=!1}e(La[j.id]);var o=j.offset.x/j.repeat.x,p=j.offset.y/j.repeat.y,n=j.image.width*j.repeat.x,jb=j.image.height*j.repeat.y,Z=(Z+o)*n,h=(h+p)*jb,c=c-a,d=d-b,f=f-a,g=g-b,k=(k+o)*n-Z,i=(i+p)*jb-h,Q=(Q+o)*n-Z,l=(l+p)*jb-h,o=k*l-Q*i;if(0==o){if(void 0===ja[j.id])b=document.createElement("canvas"),b.width=j.image.width,b.height=j.image.height,b=b.getContext("2d"),b.drawImage(j.image,0,0),ja[j.id]=b.getImageData(0,0,j.image.width, -j.image.height).data;b=ja[j.id];Z=4*(Math.floor(Z)+Math.floor(h)*j.image.width);S.setRGB(b[Z]/255,b[Z+1]/255,b[Z+2]/255);zb(S)}else o=1/o,j=(l*c-i*f)*o,i=(l*d-i*g)*o,c=(k*f-Q*c)*o,d=(k*g-Q*d)*o,a=a-j*Z-c*h,Z=b-i*Z-d*h,m.save(),m.transform(j,i,c,d,a,Z),m.fill(),m.restore()}}function Yb(a,b,c,d,e,f,g,Z,h,k,i,j,Q){var l,o;l=Q.width-1;o=Q.height-1;g*=l;Z*=o;c-=a;d-=b;e-=a;f-=b;h=h*l-g;k=k*o-Z;i=i*l-g;j=j*o-Z;o=1/(h*j-i*k);l=(j*c-k*e)*o;k=(j*d-k*f)*o;c=(h*e-i*c)*o;d=(h*f-i*d)*o;a=a-l*g-c*Z;b=b-k*g-d*Z; +b,c,d,e,f,g,Z){m.beginPath();m.moveTo(a,b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(g,Z);m.lineTo(a,b);m.closePath()}function Eb(a,b,c,e){if(A!=b)m.lineWidth=A=b;if(D!=c)m.lineCap=D=c;if(E!=e)m.lineJoin=E=e;d(a.getContextStyle());m.stroke();xa.inflate(2*b)}function zb(a){e(a.getContextStyle());m.fill()}function Mc(a,b,c,d,f,g,Z,h,k,i,Q,l,j){if(0!=j.image.width){if(!0==j.needsUpdate||void 0==La[j.id]){var n=j.wrapS==THREE.RepeatWrapping,p=j.wrapT==THREE.RepeatWrapping;La[j.id]=m.createPattern(j.image, +n&&p?"repeat":n&&!p?"repeat-x":!n&&p?"repeat-y":"no-repeat");j.needsUpdate=!1}e(La[j.id]);var n=j.offset.x/j.repeat.x,p=j.offset.y/j.repeat.y,jb=j.image.width*j.repeat.x,o=j.image.height*j.repeat.y,Z=(Z+n)*jb,h=(h+p)*o,c=c-a,d=d-b,f=f-a,g=g-b,k=(k+n)*jb-Z,i=(i+p)*o-h,Q=(Q+n)*jb-Z,l=(l+p)*o-h,n=k*l-Q*i;if(0==n){if(void 0===ja[j.id])b=document.createElement("canvas"),b.width=j.image.width,b.height=j.image.height,b=b.getContext("2d"),b.drawImage(j.image,0,0),ja[j.id]=b.getImageData(0,0,j.image.width, +j.image.height).data;b=ja[j.id];Z=4*(Math.floor(Z)+Math.floor(h)*j.image.width);S.setRGB(b[Z]/255,b[Z+1]/255,b[Z+2]/255);zb(S)}else n=1/n,j=(l*c-i*f)*n,i=(l*d-i*g)*n,c=(k*f-Q*c)*n,d=(k*g-Q*d)*n,a=a-j*Z-c*h,Z=b-i*Z-d*h,m.save(),m.transform(j,i,c,d,a,Z),m.fill(),m.restore()}}function Yb(a,b,c,d,e,f,g,Z,h,k,i,j,Q){var l,n;l=Q.width-1;n=Q.height-1;g*=l;Z*=n;c-=a;d-=b;e-=a;f-=b;h=h*l-g;k=k*n-Z;i=i*l-g;j=j*n-Z;n=1/(h*j-i*k);l=(j*c-k*e)*n;k=(j*d-k*f)*n;c=(h*e-i*c)*n;d=(h*f-i*d)*n;a=a-l*g-c*Z;b=b-k*g-d*Z; m.save();m.transform(l,k,c,d,a,b);m.clip();m.drawImage(Q,0,0);m.restore()}function vc(a,b,c,d){var e=~~(255*a.r),f=~~(255*a.g),a=~~(255*a.b),g=~~(255*b.r),Z=~~(255*b.g),b=~~(255*b.b),h=~~(255*c.r),k=~~(255*c.g),c=~~(255*c.b),i=~~(255*d.r),j=~~(255*d.g),d=~~(255*d.b);cb[0]=0>e?0:255f?0:255a?0:255g?0:255Z?0:255b?0:255h?0:255k?0:255c?0:255i?0:255< -i?255:i;cb[13]=0>j?0:255d?0:255a?0:1j?0:255d?0:255a?0:1=j||(j*=g.intensity,d.r+=h.r*j,d.g+=h.g*j,d.b+=h.b*j)):g instanceof THREE.PointLight&&(i=g.matrixWorld.getPosition(),j=c.dot(C.sub(i,b).normalize()),0>=j||(j*=0==g.distance?1:1-Math.min(b.distanceTo(i)/g.distance,1),0!=j&&(j*=g.intensity,d.r+=h.r*j,d.g+=h.g*j,d.b+=h.b*j)))}function b(a){null==F[a]&&(F[a]=document.createElementNS("http://www.w3.org/2000/svg", -"path"),0==P&&F[a].setAttribute("shape-rendering","crispEdges"));return F[a]}function c(a){a=0.5*(a+1);return 0>a?0:1a?0:1o;o++){p=m;r=o;if(B.autoScaleCubemaps){if(s= -h.image[o],O=Aa,!(s.width<=O&&s.height<=O))u=Math.max(s.width,s.height),t=Math.floor(s.width*O/u),O=Math.floor(s.height*O/u),u=document.createElement("canvas"),u.width=t,u.height=O,u.getContext("2d").drawImage(s,0,0,s.width,s.height,0,0,t,O),s=u}else s=h.image[o];p[r]=s}p=x(k.TEXTURE_CUBE_MAP,h,m[0]);r=D(h.format);s=D(h.type);for(o=0;6>o;o++)k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+o,0,r,r,s,m[o]);p&&k.generateMipmap(k.TEXTURE_CUBE_MAP);h.needsUpdate=!1}else k.activeTexture(k.TEXTURE0+m),k.bindTexture(k.TEXTURE_CUBE_MAP, -h.image.__webglTextureCube)}else o instanceof THREE.WebGLRenderTargetCube?(h=o,k.activeTexture(k.TEXTURE0+m),k.bindTexture(k.TEXTURE_CUBE_MAP,h.__webglTexture)):B.setTexture(o,m)}else if("tv"===p){if(!h._array){h._array=[];for(p=0,r=h.texture.length;pn;n++){p=m;r=n;if(B.autoScaleCubemaps){if(s= +h.image[n],O=Aa,!(s.width<=O&&s.height<=O))u=Math.max(s.width,s.height),t=Math.floor(s.width*O/u),O=Math.floor(s.height*O/u),u=document.createElement("canvas"),u.width=t,u.height=O,u.getContext("2d").drawImage(s,0,0,s.width,s.height,0,0,t,O),s=u}else s=h.image[n];p[r]=s}p=x(k.TEXTURE_CUBE_MAP,h,m[0]);r=D(h.format);s=D(h.type);for(n=0;6>n;n++)k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+n,0,r,r,s,m[n]);p&&k.generateMipmap(k.TEXTURE_CUBE_MAP);h.needsUpdate=!1}else k.activeTexture(k.TEXTURE0+m),k.bindTexture(k.TEXTURE_CUBE_MAP, +h.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(h=n,k.activeTexture(k.TEXTURE0+m),k.bindTexture(k.TEXTURE_CUBE_MAP,h.__webglTexture)):B.setTexture(n,m)}else if("tv"===p){if(!h._array){h._array=[];for(p=0,r=h.texture.length;p -j&&(l=o,j=h[l]);k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[l]);k.vertexAttribPointer(c["morphTarget"+g],3,k.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=j;i[l]=1;j=-1;g++}}null!==d.program.uniforms.morphTargetInfluences&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(g=0,h=e.__webglCustomAttributesList.length;g +j&&(l=n,j=h[l]);k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[l]);k.vertexAttribPointer(c["morphTarget"+g],3,k.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=j;i[l]=1;j=-1;g++}}null!==d.program.uniforms.morphTargetInfluences&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(g=0,h=e.__webglCustomAttributesList.length;gc&&(c+=1);1a?b(c,e-1):j[e]a?b(c,e-1):j[e]o-1?e-1:o-1,n=(o+1)%e,q=0>l-1?d-1:l-1,m=(l+1)%d,r=[],s=[0,0,h[4*(o*d+l)]/255*b];r.push([-1,0,h[4*(o*d+q)]/255*b]);r.push([-1,-1,h[4*(p*d+q)]/255*b]);r.push([0,-1,h[4*(p*d+l)]/255*b]);r.push([1, --1,h[4*(p*d+m)]/255*b]);r.push([1,0,h[4*(o*d+m)]/255*b]);r.push([1,1,h[4*(n*d+m)]/255*b]);r.push([0,1,h[4*(n*d+l)]/255*b]);r.push([-1,1,h[4*(n*d+q)]/255*b]);p=[];q=r.length;for(n=0;np-1?e-1:p-1,o=(p+1)%e,q=0>l-1?d-1:l-1,m=(l+1)%d,r=[],s=[0,0,h[4*(p*d+l)]/255*b];r.push([-1,0,h[4*(p*d+q)]/255*b]);r.push([-1,-1,h[4*(n*d+q)]/255*b]);r.push([0,-1,h[4*(n*d+l)]/255*b]);r.push([1, +-1,h[4*(n*d+m)]/255*b]);r.push([1,0,h[4*(p*d+m)]/255*b]);r.push([1,1,h[4*(o*d+m)]/255*b]);r.push([0,1,h[4*(o*d+l)]/255*b]);r.push([-1,1,h[4*(o*d+q)]/255*b]);n=[];q=r.length;for(o=0;o -h&&(h+=c.length);h%=c.length;0>g&&(g+=j.length);g%=j.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:j.length-1;m=[j[g],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);r=[j[g],j[f],c[h]];r=THREE.FontUtils.Triangulate.area(r);o+p>m+r&&(h=n,g=l,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=j.length),g%=j.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:j.length-1);o=c.slice(0,h);p=c.slice(h);n=j.slice(g);l=j.slice(0,g);f=[j[g],j[f],c[h]];q.push([j[g],c[h],c[e]]);q.push(f);c=o.concat(n).concat(l).concat(p)}return{shape:c, +THREE.Shape.Utils={removeHoles:function(a,b){var c=a.concat(),d=c.concat(),e,f,g,h,i,j,l,p,n,o,q=[];for(i=0;i +h&&(h+=c.length);h%=c.length;0>g&&(g+=j.length);g%=j.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:j.length-1;m=[j[g],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);r=[j[g],j[f],c[h]];r=THREE.FontUtils.Triangulate.area(r);p+n>m+r&&(h=o,g=l,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=j.length),g%=j.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:j.length-1);p=c.slice(0,h);n=c.slice(h);o=j.slice(g);l=j.slice(0,g);f=[j[g],j[f],c[h]];q.push([j[g],c[h],c[e]]);q.push(f);c=p.concat(o).concat(l).concat(n)}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),f,g,h,i,j={};for(f=0,g=d.length;fd;d++)i=h[d].x+":"+h[d].y,i=j[i],void 0!==i&&(h[d]=i)}for(f=0,g=e.length;fd;d++)i=h[d].x+":"+h[d].y,i=j[i],void 0!==i&&(h[d]=i)}return c.concat(e)}, isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+ this.b3p3(a,e)}};THREE.TextPath=function(a,b){THREE.Path.call(this);this.parameters=b||{};this.set(a)};THREE.TextPath.prototype.set=function(a,b){b=b||this.parameters;this.text=a;var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",f=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f}; @@ -437,11 +437,11 @@ THREE.Animation.prototype.play=function(a,b){if(!this.isPlaying){this.isPlaying= THREE.Bone?e.skinMatrix:e.matrix;var f=e.animationCache.prevKey;e=e.animationCache.nextKey;f.pos=this.data.hierarchy[c].keys[0];f.rot=this.data.hierarchy[c].keys[0];f.scl=this.data.hierarchy[c].keys[0];e.pos=this.getNextKeyWith("pos",c,1);e.rot=this.getNextKeyWith("rot",c,1);e.scl=this.getNextKeyWith("scl",c,1)}this.update(0)}this.isPaused=!1;THREE.AnimationHandler.addToUpdate(this)}; THREE.Animation.prototype.pause=function(){this.isPaused?THREE.AnimationHandler.addToUpdate(this):THREE.AnimationHandler.removeFromUpdate(this);this.isPaused=!this.isPaused}; THREE.Animation.prototype.stop=function(){this.isPaused=this.isPlaying=!1;THREE.AnimationHandler.removeFromUpdate(this);for(var a=0;am;m++){c=b[m];g=i.prevKey[c];h=i.nextKey[c];if(h.time<=p){if(od||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[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,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",n,h.index+1).pos,d=0.33*d+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,1.01*d),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("rot"=== -c)THREE.Quaternion.slerp(e,f,a.quaternion,d);else if("scl"===c)c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d}}if(this.JITCompile&&void 0===l[0][j]){this.hierarchy[0].updateMatrixWorld(!0);for(n=0;nm;m++){c=b[m];g=i.prevKey[c];h=i.nextKey[c];if(h.time<=n){if(pd||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= +this.getPrevKeyWith("pos",o,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",o,h.index+1).pos,d=0.33*d+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,1.01*d),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("rot"=== +c)THREE.Quaternion.slerp(e,f,a.quaternion,d);else if("scl"===c)c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d}}if(this.JITCompile&&void 0===l[0][j]){this.hierarchy[0].updateMatrixWorld(!0);for(o=0;oa.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];h=a[c[1]];i=a[c[2]];j=a[c[3]];c=e*e;g=e*c;d[0]=this.interpolate(f[0],h[0],i[0],j[0],e,c,g);d[1]=this.interpolate(f[1],h[1],i[1],j[1],e,c,g);d[2]=this.interpolate(f[2],h[2],i[2],j[2],e,c,g);return d}; THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?ci)?1:i));this.object.translateX(b*j);this.object.translateY(b*l);g&&(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.yi)?1:i));this.object.translateX(b*j);this.object.translateY(b*l);g&&(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.yc.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()c.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()n;n++)this.materials.push(g)}n=0;r=1;q=2;s= -3;m=4;t=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var u in h)void 0!==this.sides[u]&&(this.sides[u]=h[u]);this.sides.px&&i("z","y",-1,-1,c,b,l,n);this.sides.nx&&i("z","y",1,-1,c,b,-l,r);this.sides.py&&i("x","z",1,1,a,c,o,q);this.sides.ny&&i("x","z",1,-1,a,c,-o,s);this.sides.pz&&i("x","y",1,-1,a,b,p,m);this.sides.nz&&i("x","y",-1,-1,a,b,-p,t);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry; +THREE.CubeGeometry=function(a,b,c,d,e,f,g,h){function i(a,b,c,g,h,i,l,m){var n,p=d||1,o=e||1,q=h/2,r=i/2,k=j.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)n="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)n="y",o=f||1;else if("z"===a&&"y"===b||"y"===a&&"z"===b)n="x",p=f||1;var s=p+1,t=o+1,u=h/p,I=i/o,O=new THREE.Vector3;O[n]=0o;o++)this.materials.push(g)}o=0;r=1;q=2;s= +3;m=4;t=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var u in h)void 0!==this.sides[u]&&(this.sides[u]=h[u]);this.sides.px&&i("z","y",-1,-1,c,b,l,o);this.sides.nx&&i("z","y",1,-1,c,b,-l,r);this.sides.py&&i("x","z",1,1,a,c,p,q);this.sides.ny&&i("x","z",1,-1,a,c,-p,s);this.sides.pz&&i("x","y",1,-1,a,b,n,m);this.sides.nz&&i("x","y",-1,-1,a,b,-n,t);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry; THREE.CubeGeometry.prototype.constructor=THREE.CubeGeometry; -THREE.CylinderGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);var a=void 0!==a?a:20,b=void 0!==b?b:20,c=void 0!==c?c:100,g=c/2,d=d||8,e=e||1,h,i,j=[],l=[];for(i=0;i<=e;i++){var o=[],p=[],n=i/e,q=n*(b-a)+a;for(h=0;h<=d;h++){var m=h/d,r=q*Math.sin(2*m*Math.PI),s=-n*c+g,t=q*Math.cos(2*m*Math.PI);this.vertices.push(new THREE.Vertex(new THREE.Vector3(r,s,t)));o.push(this.vertices.length-1);p.push(new THREE.UV(m,n))}j.push(o);l.push(p)}for(i=0;ig?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(H=a.length;0<=--H;){y=H;I=H-1;0>I&&(I=a.length-1);for(var b= -0,c=n+2*l,b=0;bh?(h=new THREE.Face3(a.index,b.index,c.index,[a.position,b.position,c.position]),h.centroid.addSelf(a.position).addSelf(b.position).addSelf(c.position).divideScalar(3),h.normal=h.centroid.clone().normalize(), @@ -536,18 +536,18 @@ g.faces.push(h),h=Math.atan2(h.centroid.z,-h.centroid.x),g.faceVertexUvs[0].push {radius:a}};THREE.OctahedronGeometry.prototype=new THREE.Geometry;THREE.OctahedronGeometry.prototype.constructor=THREE.OctahedronGeometry; THREE.PlaneGeometry=function(a,b,c,d){THREE.Geometry.call(this);for(var e=a/2,f=b/2,c=c||1,d=d||1,g=c+1,h=d+1,i=a/c,j=b/d,l=new THREE.Vector3(0,0,1),a=0;ae)return null;var f=[],g=[],h=[],i,j,l;if(0=o--){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);l=j+1;e<=l&&(l=0);var p;a:{p=a;var n=i,q=j,m=l,r=e,s=g,t=void 0,u=void 0,x=void 0,v=void 0,A=void 0, -D=void 0,E=void 0,C=void 0,F=void 0,u=p[s[n]].x,x=p[s[n]].y,v=p[s[q]].x,A=p[s[q]].y,D=p[s[m]].x,E=p[s[m]].y;if(1.0E-10>(v-u)*(E-x)-(A-x)*(D-u))p=!1;else{for(t=0;te)return null;var f=[],g=[],h=[],i,j,l;if(0=p--){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);l=j+1;e<=l&&(l=0);var n;a:{n=a;var o=i,q=j,m=l,r=e,s=g,t=void 0,u=void 0,x=void 0,v=void 0,A=void 0, +D=void 0,E=void 0,C=void 0,F=void 0,u=n[s[o]].x,x=n[s[o]].y,v=n[s[q]].x,A=n[s[q]].y,D=n[s[m]].x,E=n[s[m]].y;if(1.0E-10>(v-u)*(E-x)-(A-x)*(D-u))n=!1;else{for(t=0;tn;n++){o=i[n];l=new THREE.Color;l.setRGB(0,0,0);for(var q=0;qu.length&&(o[n]=!0)}for(n in q)if(u=q[n],s=u[0],u=u[1],v=n.split("_"),A=v[0],v=v[1],r=new THREE.Vector3,o[n]?(r.addSelf(h[A].position),r.addSelf(h[v].position),r.multiplyScalar(0.5)):(r.addSelf(j[s]),r.addSelf(j[u]),r.addSelf(h[A].position),r.addSelf(h[v].position),r.multiplyScalar(0.25)), -l[n]=t+d.length+x,i.push(new THREE.Vertex(r)),x++,g.supportUVs&&0!=p.length)u=new THREE.UV,u.u=p[A].u+p[v].u,u.v=p[A].v+p[v].v,u.u/=2,u.v/=2,p.push(u);var K,L;v=["123","12","2","23"];r=["123","23","3","31"];var C=["123","31","1","12"],F=["1234","12","2","23"],R=["1234","23","3","34"],N=["1234","34","4","41"],P=["1234","41","1","12"];for(n=0,q=j.length;np;p++){o=i[p];l=new THREE.Color;l.setRGB(0,0,0);for(var q=0;qu.length&&(p[o]=!0)}for(o in q)if(u=q[o],s=u[0],u=u[1],v=o.split("_"),A=v[0],v=v[1],r=new THREE.Vector3,p[o]?(r.addSelf(h[A].position),r.addSelf(h[v].position),r.multiplyScalar(0.5)):(r.addSelf(j[s]),r.addSelf(j[u]),r.addSelf(h[A].position),r.addSelf(h[v].position),r.multiplyScalar(0.25)), +l[o]=t+d.length+x,i.push(new THREE.Vertex(r)),x++,g.supportUVs&&0!=n.length)u=new THREE.UV,u.u=n[A].u+n[v].u,u.v=n[A].v+n[v].v,u.u/=2,u.v/=2,n.push(u);var K,L;v=["123","12","2","23"];r=["123","23","3","31"];var C=["123","31","1","12"],F=["1234","12","2","23"],R=["1234","23","3","34"],N=["1234","34","4","41"],P=["1234","41","1","12"];for(o=0,q=j.length;oa.length?"":a.join("/")+"/"},initMaterials:function(a,b,c){a.materials=[];for(var d=0;da.length?"":a.join("/")+"/");if((a=S.evaluate("//dae:asset",S,V,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(e=0;el)break}if(!r){r=new H(l);s=-1;t=0;for(u=d.length;t=l&&(s=t);l=s;d.splice(-1==l?d.length:l,0,r)}r.addTarget(f,j,g,q)}}else console.log('Could not find transform "'+b.sid+'" in node '+ this.id)}for(c=0;cr.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){l=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(l.uniforms);m=r.parameters.color;L=r.parameters.specular;c=r.parameters.ambient;P=r.parameters.shininess;a.tNormal.texture=y.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)a.uNormalScale.value= r.parameters.normalMapFactor;if(r.parameters.map)a.tDiffuse.texture=r.parameters.map,a.enableDiffuse.value=!0;if(r.parameters.lightMap)a.tAO.texture=r.parameters.lightMap,a.enableAO.value=!0;if(r.parameters.specularMap)a.tSpecular.texture=y.textures[r.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(L);a.uAmbientColor.value.setHex(c);a.uShininess.value=P;if(r.parameters.opacity)a.uOpacity.value=r.parameters.opacity;r=new THREE.ShaderMaterial({fragmentShader:l.fragmentShader, -vertexShader:l.vertexShader,uniforms:a,lights:!0,fog:!0})}else r=new THREE[r.type](r.parameters);y.materials[o]=r}e();i.callbackSync(y);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader; +vertexShader:l.vertexShader,uniforms:a,lights:!0,fog:!0})}else r=new THREE[r.type](r.parameters);y.materials[p]=r}e();i.callbackSync(y);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader; THREE.UTF8Loader.prototype.load=function(a,b,c){if(a instanceof Object)console.warn("DEPRECATED: UTF8Loader( parameters ) is now UTF8Loader( url, callback, metaData )."),c=a,a=c.model,b=c.callback,c={scale:c.scale,offsetX:c.offsetX,offsetY:c.offsetY,offsetZ:c.offsetZ};var d=new XMLHttpRequest,e=void 0!==c.scale?c.scale:1,f=void 0!==c.offsetX?c.offsetX:0,g=void 0!==c.offsetY?c.offsetY:0,h=void 0!==c.offsetZ?c.offsetZ:0;d.onreadystatechange=function(){4==d.readyState?200==d.status||0==d.status?THREE.UTF8Loader.prototype.createModel(d.responseText, b,e,f,g,h):alert("Couldn't load ["+a+"] ["+d.status+"]"):3!=d.readyState&&2==d.readyState&&d.getResponseHeader("Content-Length")};d.open("GET",a,!0);d.send(null)};THREE.UTF8Loader.prototype.decompressMesh=function(a){var b=a.charCodeAt(0);57344<=b&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;8>e;e++){for(var f=0,g=0;g>1^-(h&1));c[8*g+e]=f}d+=b}b=a.length-d;f=new Uint16Array(b);for(e=g=0;e=this.maxCount-3&&h(this)};this.begin=function(){this.count=0; -this.hasNormal=this.hasPos=!1};this.end=function(a){if(0!==this.count){for(var b=3*this.count;bo&&(o=1);i=Math.floor(i+h);i>this.size-1&&(i=this.size-1);var p=Math.floor(j-h);1>p&&(p=1);j=Math.floor(j+h);j>this.size-1&&(j=this.size-1);var n=Math.floor(l-h);1>n&&(n=1);h=Math.floor(l+h);h>this.size-1&&(h=this.size- -1);for(var q,m,r,s,t,u,x,l=o;lj&&(n=j);for(e=0;el&&(q=l);for(f=0;fl&&(q=l);for(g=0;gp&&(p=1);i=Math.floor(i+h);i>this.size-1&&(i=this.size-1);var n=Math.floor(j-h);1>n&&(n=1);j=Math.floor(j+h);j>this.size-1&&(j=this.size-1);var o=Math.floor(l-h);1>o&&(o=1);h=Math.floor(l+h);h>this.size-1&&(h=this.size- +1);for(var q,m,r,s,t,u,x,l=p;lj&&(o=j);for(e=0;el&&(q=l);for(f=0;fl&&(q=l);for(g=0;g=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(j=!1,l=a(THREE.ShaderFlares.lensFlare)):(j=!0,l=a(THREE.ShaderFlares.lensFlareVertexTexture));o={};p={};o.vertex=b.getAttribLocation(l,"position");o.uv=b.getAttribLocation(l,"uv");p.renderType=b.getUniformLocation(l,"renderType");p.map=b.getUniformLocation(l,"map");p.occlusionMap=b.getUniformLocation(l,"occlusionMap");p.opacity=b.getUniformLocation(l,"opacity");p.color=b.getUniformLocation(l, -"color");p.scale=b.getUniformLocation(l,"scale");p.rotation=b.getUniformLocation(l,"rotation");p.screenPosition=b.getUniformLocation(l,"screenPosition");n=!1};this.render=function(a,d,e,s){var a=a.__webglFlares,t=a.length;if(t){var u=new THREE.Vector3,x=s/e,v=0.5*e,A=0.5*s,D=16/s,E=new THREE.Vector2(D*x,D),C=new THREE.Vector3(1,1,0),F=new THREE.Vector2(1,1),K=p,D=o;b.useProgram(l);n||(b.enableVertexAttribArray(o.vertex),b.enableVertexAttribArray(o.uv),n=!0);b.uniform1i(K.occlusionMap,0);b.uniform1i(K.map, +b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);0>=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(j=!1,l=a(THREE.ShaderFlares.lensFlare)):(j=!0,l=a(THREE.ShaderFlares.lensFlareVertexTexture));p={};n={};p.vertex=b.getAttribLocation(l,"position");p.uv=b.getAttribLocation(l,"uv");n.renderType=b.getUniformLocation(l,"renderType");n.map=b.getUniformLocation(l,"map");n.occlusionMap=b.getUniformLocation(l,"occlusionMap");n.opacity=b.getUniformLocation(l,"opacity");n.color=b.getUniformLocation(l, +"color");n.scale=b.getUniformLocation(l,"scale");n.rotation=b.getUniformLocation(l,"rotation");n.screenPosition=b.getUniformLocation(l,"screenPosition");o=!1};this.render=function(a,d,e,s){var a=a.__webglFlares,t=a.length;if(t){var u=new THREE.Vector3,x=s/e,v=0.5*e,A=0.5*s,D=16/s,E=new THREE.Vector2(D*x,D),C=new THREE.Vector3(1,1,0),F=new THREE.Vector2(1,1),K=n,D=p;b.useProgram(l);o||(b.enableVertexAttribArray(p.vertex),b.enableVertexAttribArray(p.uv),o=!0);b.uniform1i(K.occlusionMap,0);b.uniform1i(K.map, 1);b.bindBuffer(b.ARRAY_BUFFER,f);b.vertexAttribPointer(D.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(D.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(!1);var L,R,N,P,B;for(L=0;Lc&&(c+=1);1c&&(c+=1);1a?b(c,e-1):k[e]a?b(c,e-1):k[e]o-1?e-1:o-1,n=(o+1)%e,p=0>j-1?d-1:j-1,m=(j+1)%d,q=[],r=[0,0,h[4*(o*d+j)]/255*b];q.push([-1,0,h[4*(o*d+p)]/255*b]);q.push([-1,-1,h[4*(l*d+p)]/255*b]);q.push([0,-1,h[4*(l*d+j)]/255*b]);q.push([1, --1,h[4*(l*d+m)]/255*b]);q.push([1,0,h[4*(o*d+m)]/255*b]);q.push([1,1,h[4*(n*d+m)]/255*b]);q.push([0,1,h[4*(n*d+j)]/255*b]);q.push([-1,1,h[4*(n*d+p)]/255*b]);l=[];p=q.length;for(n=0;no-1?e-1:o-1,n=(o+1)%e,p=0>j-1?d-1:j-1,m=(j+1)%d,q=[],r=[0,0,h[4*(o*d+j)]/255*b];q.push([-1,0,h[4*(o*d+p)]/255*b]);q.push([-1,-1,h[4*(l*d+p)]/255*b]);q.push([0,-1,h[4*(l*d+j)]/255*b]);q.push([1, +-1,h[4*(l*d+m)]/255*b]);q.push([1,0,h[4*(o*d+m)]/255*b]);q.push([1,1,h[4*(n*d+m)]/255*b]);q.push([0,1,h[4*(n*d+j)]/255*b]);q.push([-1,1,h[4*(n*d+p)]/255*b]);l=[];p=q.length;for(n=0;ni)g=d+1;else if(0i)f=d+1;else if(0b&&(b=0);1d.length-2?a:a+1;c[3]=a>d.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b};THREE.ArcCurve=function(a,b,c,d,e,f){this.aX=a;this.aY=b;this.aRadius=c;this.aStartAngle=d;this.aEndAngle=e;this.aClockwise=f}; +THREE.SplineCurve.prototype.getPoint=function(a){var b=new THREE.Vector2,c=[],d=this.points,e;e=(d.length-1)*a;a=Math.floor(e);e-=a;c[0]=0==a?a:a-1;c[1]=a;c[2]=a>d.length-2?a:a+1;c[3]=a>d.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b};THREE.ArcCurve=function(a,b,c,d,e,g){this.aX=a;this.aY=b;this.aRadius=c;this.aStartAngle=d;this.aEndAngle=e;this.aClockwise=g}; THREE.ArcCurve.prototype=new THREE.Curve;THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.ArcCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);b=this.aStartAngle+a*b;a=this.aX+this.aRadius*Math.cos(b);b=this.aY+this.aRadius*Math.sin(b);return new THREE.Vector2(a,b)}; -THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){var a=0.5*(c-a),d=0.5*(d-b),f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*f+a*e+b}}; +THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){var a=0.5*(c-a),d=0.5*(d-b),g=e*e;return(2*b-2*c+a+d)*e*g+(-3*b+3*c-2*a-d)*g+a*e+b}}; THREE.Curve.create=function(a,b){a.prototype=new THREE.Curve;a.prototype.constructor=a;a.prototype.getPoint=b;return a};THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.sub(this.v2,this.v1);b.multiplyScalar(a);b.addSelf(this.v1);return b}); THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)}); THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)}); @@ -50,31 +50,31 @@ THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},fu THREE.CurvePath=function(){this.curves=[];this.bends=[]};THREE.CurvePath.prototype=new THREE.Curve;THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){}; THREE.CurvePath.prototype.getPoint=function(a){for(var b=a*this.getLength(),c=this.getCurveLengths(),a=0;a=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,d=this.curves.length;for(c=0;cb)b=f.x;else if(f.xc)c=f.y;else if(f.yb)b=g.x;else if(g.xc)c=g.y;else if(g.y -h&&(h+=c.length);h%=c.length;0>g&&(g+=k.length);g%=k.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:k.length-1;m=[k[g],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);q=[k[g],k[f],c[h]];q=THREE.FontUtils.Triangulate.area(q);o+l>m+q&&(h=n,g=j,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=k.length),g%=k.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:k.length-1);o=c.slice(0,h);l=c.slice(h);n=k.slice(g);j=k.slice(0,g);f=[k[g],k[f],c[h]];p.push([k[g],c[h],c[e]]);p.push(f);c=o.concat(n).concat(j).concat(l)}return{shape:c, -isolatedPts:p,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),f,g,h,i,k={};for(f=0,g=d.length;fd;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}for(f=0,g=e.length;fd;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}return c.concat(e)}, +THREE.Shape.Utils={removeHoles:function(a,b){var c=a.concat(),d=c.concat(),e,g,f,h,i,k,j,o,l,n,p=[];for(i=0;i +h&&(h+=c.length);h%=c.length;0>f&&(f+=k.length);f%=k.length;e=0<=h-1?h-1:c.length-1;g=0<=f-1?f-1:k.length-1;m=[k[f],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);q=[k[f],k[g],c[h]];q=THREE.FontUtils.Triangulate.area(q);o+l>m+q&&(h=n,f=j,0>h&&(h+=c.length),h%=c.length,0>f&&(f+=k.length),f%=k.length,e=0<=h-1?h-1:c.length-1,g=0<=f-1?f-1:k.length-1);o=c.slice(0,h);l=c.slice(h);n=k.slice(f);j=k.slice(0,f);g=[k[f],k[g],c[h]];p.push([k[f],c[h],c[e]]);p.push(g);c=o.concat(n).concat(j).concat(l)}return{shape:c, +isolatedPts:p,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={};for(g=0,f=d.length;gd;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}for(g=0,f=e.length;gd;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}return c.concat(e)}, isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+ -this.b3p3(a,e)}};THREE.TextPath=function(a,b){THREE.Path.call(this);this.parameters=b||{};this.set(a)};THREE.TextPath.prototype.set=function(a,b){b=b||this.parameters;this.text=a;var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",f=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f}; +this.b3p3(a,e)}};THREE.TextPath=function(a,b){THREE.Path.call(this);this.parameters=b||{};this.set(a)};THREE.TextPath.prototype.set=function(a,b){b=b||this.parameters;this.text=a;var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",g=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=g}; THREE.TextPath.prototype.toShapes=function(){for(var a=THREE.FontUtils.drawText(this.text).paths,b=[],c=0,d=a.length;ca.hierarchy[c].keys[d].time)a.hierarchy[c].keys[d].time= 0;if(void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var h=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=new THREE.Quaternion(h[0],h[1],h[2],h[3])}}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){h={};for(d=0;dm;m++){c=b[m];g=i.prevKey[c];h=i.nextKey[c];if(h.time<=l){if(od||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[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,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",n,h.index+1).pos,d=0.33*d+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,1.01*d),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("rot"=== -c)THREE.Quaternion.slerp(e,f,a.quaternion,d);else if("scl"===c)c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d}}if(this.JITCompile&&void 0===j[0][k]){this.hierarchy[0].updateMatrixWorld(!0);for(n=0;na.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];h=a[c[1]];i=a[c[2]];k=a[c[3]];c=e*e;g=e*c;d[0]=this.interpolate(f[0],h[0],i[0],k[0],e,c,g);d[1]=this.interpolate(f[1],h[1],i[1],k[1],e,c,g);d[2]=this.interpolate(f[2],h[2],i[2],k[2],e,c,g);return d}; -THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?cm;m++){c=b[m];f=i.prevKey[c];h=i.nextKey[c];if(h.time<=l){if(od||1d?0:1;if("pos"===c)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=0.33*d+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,1.01*d),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("rot"=== +c)THREE.Quaternion.slerp(e,g,a.quaternion,d);else if("scl"===c)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&&void 0===j[0][k]){this.hierarchy[0].updateMatrixWorld(!0);for(n=0;na.length-2?g:g+1;c[3]=g>a.length-3?g:g+2;g=a[c[0]];h=a[c[1]];i=a[c[2]];k=a[c[3]];c=e*e;f=e*c;d[0]=this.interpolate(g[0],h[0],i[0],k[0],e,c,f);d[1]=this.interpolate(g[1],h[1],i[1],k[1],e,c,f);d[2]=this.interpolate(g[2],h[2],i[2],k[2],e,c,f);return d}; +THREE.Animation.prototype.interpolate=function(a,b,c,d,e,g,f){a=0.5*(c-a);d=0.5*(d-b);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){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function e(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),q=g.length,r=0;f=q-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:g[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[f]={time:d,pos:g[f],rot:[0,0,0,1],scl:[1,1,1]};for(f=1;fi)?1:i));this.object.translateX(b*k);this.object.translateY(b*j);g&&(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.yi)?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.yc.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()c.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),g.lengthSq()n;n++)this.materials.push(g)}n=0;q=1;p=2;r= -3;m=4;t=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var s in h)void 0!==this.sides[s]&&(this.sides[s]=h[s]);this.sides.px&&i("z","y",-1,-1,c,b,j,n);this.sides.nx&&i("z","y",1,-1,c,b,-j,q);this.sides.py&&i("x","z",1,1,a,c,o,p);this.sides.ny&&i("x","z",1,-1,a,c,-o,r);this.sides.pz&&i("x","y",1,-1,a,b,l,m);this.sides.nz&&i("x","y",-1,-1,a,b,-l,t);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry; +THREE.CubeGeometry=function(a,b,c,d,e,g,f,h){function i(a,b,c,f,h,i,j,o){var l,m=d||1,n=e||1,p=h/2,r=i/2,q=k.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)l="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)l="y",n=g||1;else if("z"===a&&"y"===b||"y"===a&&"z"===b)l="x",m=g||1;var s=m+1,t=n+1,C=h/m,L=i/n,N=new THREE.Vector3;N[l]=0n;n++)this.materials.push(f)}n=0;q=1;p=2;r= +3;m=4;s=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var t in h)void 0!==this.sides[t]&&(this.sides[t]=h[t]);this.sides.px&&i("z","y",-1,-1,c,b,j,n);this.sides.nx&&i("z","y",1,-1,c,b,-j,q);this.sides.py&&i("x","z",1,1,a,c,o,p);this.sides.ny&&i("x","z",1,-1,a,c,-o,r);this.sides.pz&&i("x","y",1,-1,a,b,l,m);this.sides.nz&&i("x","y",-1,-1,a,b,-l,s);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry; THREE.CubeGeometry.prototype.constructor=THREE.CubeGeometry; -THREE.CylinderGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);var a=void 0!==a?a:20,b=void 0!==b?b:20,c=void 0!==c?c:100,g=c/2,d=d||8,e=e||1,h,i,k=[],j=[];for(i=0;i<=e;i++){var o=[],l=[],n=i/e,p=n*(b-a)+a;for(h=0;h<=d;h++){var m=h/d,q=p*Math.sin(2*m*Math.PI),r=-n*c+g,t=p*Math.cos(2*m*Math.PI);this.vertices.push(new THREE.Vertex(new THREE.Vector3(q,r,t)));o.push(this.vertices.length-1);l.push(new THREE.UV(m,n))}k.push(o);j.push(l)}for(i=0;if?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(f).addSelf(h).subSelf(a).clone()}function e(a){for(y=a.length;0<=--y;){C=y;L=y-1;0>L&&(L=a.length-1);for(var b= -0,c=n+2*j,b=0;bg?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(y=a.length;0<=--y;){C=y;L=y-1;0>L&&(L=a.length-1);for(var b= +0,c=n+2*j,b=0;bh?(h=new THREE.Face3(a.index,b.index,c.index,[a.position,b.position,c.position]),h.centroid.addSelf(a.position).addSelf(b.position).addSelf(c.position).divideScalar(3),h.normal=h.centroid.clone().normalize(), -g.faces.push(h),h=Math.atan2(h.centroid.z,-h.centroid.x),g.faceVertexUvs[0].push([f(a.uv,a.position,h),f(b.uv,b.position,h),f(c.uv,c.position,h)])):(h-=1,d(a,e(a,b),e(a,c),h),d(e(a,b),b,e(b,c),h),d(e(a,c),e(b,c),c,h),d(e(a,b),e(b,c),e(a,c),h))}function e(a,b){h[a.index]||(h[a.index]=[]);h[b.index]||(h[b.index]=[]);var d=h[a.index][b.index];void 0===d&&(h[a.index][b.index]=h[b.index][a.index]=d=c((new THREE.Vector3).add(a.position,b.position).divideScalar(2)));return d}function f(a,b,c){0>c&&1===a.u&& -(a=new THREE.UV(a.u-1,a.v));0===b.x&&0===b.z&&(a=new THREE.UV(c/2/Math.PI+0.5,a.v));return a}THREE.Geometry.call(this);var b=b||0,g=this;c(new THREE.Vector3(1,0,0));c(new THREE.Vector3(-1,0,0));c(new THREE.Vector3(0,1,0));c(new THREE.Vector3(0,-1,0));c(new THREE.Vector3(0,0,1));c(new THREE.Vector3(0,0,-1));var h=[],i=this.vertices;d(i[0],i[2],i[4],b);d(i[0],i[4],i[3],b);d(i[0],i[3],i[5],b);d(i[0],i[5],i[2],b);d(i[1],i[2],i[5],b);d(i[1],i[5],i[3],b);d(i[1],i[3],i[4],b);d(i[1],i[4],i[2],b);this.boundingSphere= +THREE.OctahedronGeometry=function(a,b){function c(b){var c=b.clone().normalize(),c=new THREE.Vertex(c.clone().multiplyScalar(a));c.index=f.vertices.push(c)-1;var d=Math.atan2(b.z,-b.x)/2/Math.PI+0.5,b=Math.atan2(-b.y,Math.sqrt(b.x*b.x+b.z*b.z))/Math.PI+0.5;c.uv=new THREE.UV(d,b);return c}function d(a,b,c,h){1>h?(h=new THREE.Face3(a.index,b.index,c.index,[a.position,b.position,c.position]),h.centroid.addSelf(a.position).addSelf(b.position).addSelf(c.position).divideScalar(3),h.normal=h.centroid.clone().normalize(), +f.faces.push(h),h=Math.atan2(h.centroid.z,-h.centroid.x),f.faceVertexUvs[0].push([g(a.uv,a.position,h),g(b.uv,b.position,h),g(c.uv,c.position,h)])):(h-=1,d(a,e(a,b),e(a,c),h),d(e(a,b),b,e(b,c),h),d(e(a,c),e(b,c),c,h),d(e(a,b),e(b,c),e(a,c),h))}function e(a,b){h[a.index]||(h[a.index]=[]);h[b.index]||(h[b.index]=[]);var d=h[a.index][b.index];void 0===d&&(h[a.index][b.index]=h[b.index][a.index]=d=c((new THREE.Vector3).add(a.position,b.position).divideScalar(2)));return d}function g(a,b,c){0>c&&1===a.u&& +(a=new THREE.UV(a.u-1,a.v));0===b.x&&0===b.z&&(a=new THREE.UV(c/2/Math.PI+0.5,a.v));return a}THREE.Geometry.call(this);var b=b||0,f=this;c(new THREE.Vector3(1,0,0));c(new THREE.Vector3(-1,0,0));c(new THREE.Vector3(0,1,0));c(new THREE.Vector3(0,-1,0));c(new THREE.Vector3(0,0,1));c(new THREE.Vector3(0,0,-1));var h=[],i=this.vertices;d(i[0],i[2],i[4],b);d(i[0],i[4],i[3],b);d(i[0],i[3],i[5],b);d(i[0],i[5],i[2],b);d(i[1],i[2],i[5],b);d(i[1],i[5],i[3],b);d(i[1],i[3],i[4],b);d(i[1],i[4],i[2],b);this.boundingSphere= {radius:a}};THREE.OctahedronGeometry.prototype=new THREE.Geometry;THREE.OctahedronGeometry.prototype.constructor=THREE.OctahedronGeometry; -THREE.PlaneGeometry=function(a,b,c,d){THREE.Geometry.call(this);for(var e=a/2,f=b/2,c=c||1,d=d||1,g=c+1,h=d+1,i=a/c,k=b/d,j=new THREE.Vector3(0,0,1),a=0;ae)return null;var f=[],g=[],h=[],i,k,j;if(0=o--){console.log("Warning, unable to triangulate polygon!");break}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);j=k+1;e<=j&&(j=0);var l;a:{l=a;var n=i,p=k,m=j,q=e,r=g,t=void 0,s=void 0,v=void 0,u=void 0,w=void 0, -z=void 0,x=void 0,A=void 0,F=void 0,s=l[r[n]].x,v=l[r[n]].y,u=l[r[p]].x,w=l[r[p]].y,z=l[r[m]].x,x=l[r[m]].y;if(1.0E-10>(u-s)*(x-v)-(w-v)*(z-s))l=!1;else{for(t=0;te)return null;var g=[],f=[],h=[],i,k,j;if(0=o--){console.log("Warning, unable to triangulate polygon!");break}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);j=k+1;e<=j&&(j=0);var l;a:{l=a;var n=i,p=k,m=j,q=e,r=f,s=void 0,t=void 0,v=void 0,u=void 0,w=void 0, +z=void 0,x=void 0,A=void 0,F=void 0,t=l[r[n]].x,v=l[r[n]].y,u=l[r[p]].x,w=l[r[p]].y,z=l[r[m]].x,x=l[r[m]].y;if(1.0E-10>(u-t)*(x-v)-(w-v)*(z-t))l=!1;else{for(s=0;sn;n++){m=i[n];k=new THREE.Color;k.setRGB(0,0,0);for(var p=0;ps.length&&(o[n]=!0)}for(n in p)if(s=p[n],r=s[0],s=s[1],u=n.split("_"),w=u[0],u=u[1],q=new THREE.Vector3,o[n]?(q.addSelf(h[w].position),q.addSelf(h[u].position),q.multiplyScalar(0.5)):(q.addSelf(k[r]),q.addSelf(k[s]),q.addSelf(h[w].position),q.addSelf(h[u].position),q.multiplyScalar(0.25)), -j[n]=t+d.length+v,i.push(new THREE.Vertex(q)),v++,g.supportUVs&&0!=l.length)s=new THREE.UV,s.u=l[w].u+l[u].u,s.v=l[w].v+l[u].v,s.u/=2,s.v/=2,l.push(s);var E,I;u=["123","12","2","23"];q=["123","23","3","31"];var A=["123","31","1","12"],F=["1234","12","2","23"],J=["1234","23","3","34"],B=["1234","34","4","41"],G=["1234","41","1","12"];for(n=0,p=k.length;nn;n++){m=i[n];k=new THREE.Color;k.setRGB(0,0,0);for(var p=0;pt.length&&(o[n]=!0)}for(n in p)if(t=p[n],r=t[0],t=t[1],u=n.split("_"),w=u[0],u=u[1],q=new THREE.Vector3,o[n]?(q.addSelf(h[w].position),q.addSelf(h[u].position),q.multiplyScalar(0.5)):(q.addSelf(k[r]),q.addSelf(k[t]),q.addSelf(h[w].position),q.addSelf(h[u].position),q.multiplyScalar(0.25)), +j[n]=s+d.length+v,i.push(new THREE.Vertex(q)),v++,f.supportUVs&&0!=l.length)t=new THREE.UV,t.u=l[w].u+l[u].u,t.v=l[w].v+l[u].v,t.u/=2,t.v/=2,l.push(t);var E,I;u=["123","12","2","23"];q=["123","23","3","31"];var A=["123","31","1","12"],F=["1234","12","2","23"],J=["1234","23","3","34"],B=["1234","34","4","41"],G=["1234","41","1","12"];for(n=0,p=k.length;na.length?"":a.join("/")+"/"},initMaterials:function(a,b,c){a.materials=[];for(var d=0;da.opacity)k.transparent=a.transparent;if(void 0!==a.depthTest)k.depthTest=a.depthTest;if(void 0!==a.vertexColors)if("face"==a.vertexColors)k.vertexColors=THREE.FaceColors;else if(a.vertexColors)k.vertexColors= -THREE.VertexColors;if(a.colorDiffuse)k.color=g(a.colorDiffuse);else if(a.DbgColor)k.color=a.DbgColor;if(a.colorSpecular)k.specular=g(a.colorSpecular);if(a.colorAmbient)k.ambient=g(a.colorAmbient);if(a.transparency)k.opacity=a.transparency;if(a.specularCoef)k.shininess=a.specularCoef;a.mapDiffuse&&b&&f(k,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&f(k,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&f(k,"normalMap", -a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&f(k,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){var i=THREE.ShaderUtils.lib.normal,j=THREE.UniformsUtils.clone(i.uniforms);j.tNormal.texture=k.normalMap;if(a.mapNormalFactor)j.uNormalScale.value=a.mapNormalFactor;if(k.map)j.tDiffuse.texture=k.map,j.enableDiffuse.value=!0;if(k.specularMap)j.tSpecular.texture=k.specularMap,j.enableSpecular.value=!0;if(k.lightMap)j.tAO.texture= +THREE.VertexColors;if(a.colorDiffuse)k.color=f(a.colorDiffuse);else if(a.DbgColor)k.color=a.DbgColor;if(a.colorSpecular)k.specular=f(a.colorSpecular);if(a.colorAmbient)k.ambient=f(a.colorAmbient);if(a.transparency)k.opacity=a.transparency;if(a.specularCoef)k.shininess=a.specularCoef;a.mapDiffuse&&b&&g(k,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&g(k,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&g(k,"normalMap", +a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&g(k,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){var i=THREE.ShaderUtils.lib.normal,j=THREE.UniformsUtils.clone(i.uniforms);j.tNormal.texture=k.normalMap;if(a.mapNormalFactor)j.uNormalScale.value=a.mapNormalFactor;if(k.map)j.tDiffuse.texture=k.map,j.enableDiffuse.value=!0;if(k.specularMap)j.tSpecular.texture=k.specularMap,j.enableSpecular.value=!0;if(k.lightMap)j.tAO.texture= k.lightMap,j.enableAO.value=!0;j.uDiffuseColor.value.setHex(k.color);j.uSpecularColor.value.setHex(k.specular);j.uAmbientColor.value.setHex(k.ambient);j.uShininess.value=k.shininess;if(void 0!==k.opacity)j.uOpacity.value=k.opacity;k=new THREE.ShaderMaterial({fragmentShader:i.fragmentShader,vertexShader:i.vertexShader,uniforms:j,lights:!0,fog:!0})}else k=new THREE[i](k);if(void 0!==a.DbgName)k.name=a.DbgName;return k}};THREE.BinaryLoader=function(a){THREE.Loader.call(this,a)}; THREE.BinaryLoader.prototype=new THREE.Loader;THREE.BinaryLoader.prototype.constructor=THREE.BinaryLoader;THREE.BinaryLoader.prototype.supr=THREE.Loader.prototype; THREE.BinaryLoader.prototype.load=function(a,b,c,d){if(a instanceof Object)console.warn("DEPRECATED: BinaryLoader( parameters ) is now BinaryLoader( url, callback, texturePath, binaryPath )."),d=a,a=d.model,b=d.callback,c=d.texture_path,d=d.bin_path;var c=c?c:this.extractUrlbase(a),d=d?d:this.extractUrlbase(a),e=this.showProgress?THREE.Loader.prototype.updateProgress:null;this.onLoadStart();this.loadAjaxJSON(this,a,b,c,d,e)}; -THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,e,f){var g=new XMLHttpRequest;g.onreadystatechange=function(){if(4==g.readyState)if(200==g.status||0==g.status)try{var h=JSON.parse(g.responseText);void 0===h.metadata||void 0===h.metadata.formatVersion||3!==h.metadata.formatVersion?console.error("Deprecated file format."):a.loadAjaxBuffers(h,c,e,d,f)}catch(i){console.error(i),console.warn("DEPRECATED: ["+b+"] seems to be using old model format")}else console.error("Couldn't load ["+b+"] ["+ -g.status+"]")};g.open("GET",b,!0);g.overrideMimeType("text/plain; charset=x-user-defined");g.setRequestHeader("Content-Type","text/plain");g.send(null)}; -THREE.BinaryLoader.prototype.loadAjaxBuffers=function(a,b,c,d,e){var f=new XMLHttpRequest,g=c+"/"+a.buffers,h=0;f.onreadystatechange=function(){4==f.readyState?200==f.status||0==f.status?THREE.BinaryLoader.prototype.createBinModel(f.response,b,d,a.materials):console.error("Couldn't load ["+g+"] ["+f.status+"]"):3==f.readyState?e&&(0==h&&(h=f.getResponseHeader("Content-Length")),e({total:h,loaded:f.responseText.length})):2==f.readyState&&(h=f.getResponseHeader("Content-Length"))};f.open("GET",g,!0); -f.responseType="arraybuffer";f.send(null)}; -THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var e=function(b){var c,e,i,k,j,o,l,n,p,m,q,r,t,s,v,u;function w(a){return a%4?4-a%4:0}function z(a,b){return(new Uint8Array(a,b,1))[0]}function x(a,b){return(new Uint32Array(a,b,1))[0]}function A(b,c){var d,e,f,g,h,i,j,k,m=new Uint32Array(a,c,3*b);for(d=0;da.length?"":a.join("/")+"/");if((a=P.evaluate("//dae:asset",P,K,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(e=0;ethis.set)this.set=0;return this};z.prototype.parse=function(a){this.id=a.getAttribute("id");for(var b=0;bq.parameters.opacity)q.parameters.transparent=!0;if(q.parameters.normalMap){j=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(j.uniforms);m=q.parameters.color;I=q.parameters.specular;c=q.parameters.ambient;G=q.parameters.shininess;a.tNormal.texture=C.textures[q.parameters.normalMap];if(q.parameters.normalMapFactor)a.uNormalScale.value= q.parameters.normalMapFactor;if(q.parameters.map)a.tDiffuse.texture=q.parameters.map,a.enableDiffuse.value=!0;if(q.parameters.lightMap)a.tAO.texture=q.parameters.lightMap,a.enableAO.value=!0;if(q.parameters.specularMap)a.tSpecular.texture=C.textures[q.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(I);a.uAmbientColor.value.setHex(c);a.uShininess.value=G;if(q.parameters.opacity)a.uOpacity.value=q.parameters.opacity;q=new THREE.ShaderMaterial({fragmentShader:j.fragmentShader, vertexShader:j.vertexShader,uniforms:a,lights:!0,fog:!0})}else q=new THREE[q.type](q.parameters);C.materials[o]=q}e();i.callbackSync(C);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader; -THREE.UTF8Loader.prototype.load=function(a,b,c){if(a instanceof Object)console.warn("DEPRECATED: UTF8Loader( parameters ) is now UTF8Loader( url, callback, metaData )."),c=a,a=c.model,b=c.callback,c={scale:c.scale,offsetX:c.offsetX,offsetY:c.offsetY,offsetZ:c.offsetZ};var d=new XMLHttpRequest,e=void 0!==c.scale?c.scale:1,f=void 0!==c.offsetX?c.offsetX:0,g=void 0!==c.offsetY?c.offsetY:0,h=void 0!==c.offsetZ?c.offsetZ:0;d.onreadystatechange=function(){4==d.readyState?200==d.status||0==d.status?THREE.UTF8Loader.prototype.createModel(d.responseText, -b,e,f,g,h):alert("Couldn't load ["+a+"] ["+d.status+"]"):3!=d.readyState&&2==d.readyState&&d.getResponseHeader("Content-Length")};d.open("GET",a,!0);d.send(null)};THREE.UTF8Loader.prototype.decompressMesh=function(a){var b=a.charCodeAt(0);57344<=b&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;8>e;e++){for(var f=0,g=0;g>1^-(h&1));c[8*g+e]=f}d+=b}b=a.length-d;f=new Uint16Array(b);for(e=g=0;ee;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(0!==this.count){for(var b=3*this.count;bo&&(o=1);i=Math.floor(i+h);i>this.size-1&&(i=this.size-1);var l=Math.floor(k-h);1>l&&(l=1);k=Math.floor(k+h);k>this.size-1&&(k=this.size-1);var n=Math.floor(j-h);1>n&&(n=1);h=Math.floor(j+h);h>this.size-1&&(h=this.size- -1);for(var p,m,q,r,t,s,v,j=o;jk&&(n=k);for(e=0;ej&&(p=j);for(f=0;fj&&(p=j);for(g=0;g=this.maxCount-3&&h(this)};this.begin=function(){this.count=0; +this.hasNormal=this.hasPos=!1};this.end=function(a){if(0!==this.count){for(var b=3*this.count;bo&&(o=1);i=Math.floor(i+h);i>this.size-1&&(i=this.size-1);var l=Math.floor(k-h);1>l&&(l=1);k=Math.floor(k+h);k>this.size-1&&(k=this.size-1);var n=Math.floor(j-h);1>n&&(n=1);h=Math.floor(j+h);h>this.size-1&&(h=this.size- +1);for(var p,m,q,r,s,t,v,j=o;jk&&(n=k);for(e=0;ej&&(p=j);for(g=0;gj&&(p=j);for(f=0;f=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(k=!1,j=a(THREE.ShaderFlares.lensFlare)):(k=!0,j=a(THREE.ShaderFlares.lensFlareVertexTexture));o={};l={};o.vertex=b.getAttribLocation(j,"position");o.uv=b.getAttribLocation(j,"uv");l.renderType=b.getUniformLocation(j,"renderType");l.map=b.getUniformLocation(j,"map");l.occlusionMap=b.getUniformLocation(j,"occlusionMap");l.opacity=b.getUniformLocation(j,"opacity");l.color=b.getUniformLocation(j, -"color");l.scale=b.getUniformLocation(j,"scale");l.rotation=b.getUniformLocation(j,"rotation");l.screenPosition=b.getUniformLocation(j,"screenPosition");n=!1};this.render=function(a,d,e,r){var a=a.__webglFlares,t=a.length;if(t){var s=new THREE.Vector3,v=r/e,u=0.5*e,w=0.5*r,z=16/r,x=new THREE.Vector2(z*v,z),A=new THREE.Vector3(1,1,0),F=new THREE.Vector2(1,1),E=l,z=o;b.useProgram(j);n||(b.enableVertexAttribArray(o.vertex),b.enableVertexAttribArray(o.uv),n=!0);b.uniform1i(E.occlusionMap,0);b.uniform1i(E.map, -1);b.bindBuffer(b.ARRAY_BUFFER,f);b.vertexAttribPointer(z.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(z.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(!1);var I,J,B,G,D;for(I=0;I 0 ) {", + + "temp2 = compareDepths( readDepth( coord2 ), depth, far );", + "temp1 += ( 1.0 - temp1 ) * temp2;", + + "}", + + "return temp1;", + + "}", + + "void main() {", + + "vec2 noise = rand( vUv );", + "float depth = readDepth( vUv );", + + "float tt = clamp( depth, aoClamp, 1.0 );", + + "float w = ( 1.0 / width ) / tt + ( noise.x * ( 1.0 - noise.x ) );", + "float h = ( 1.0 / height ) / tt + ( noise.y * ( 1.0 - noise.y ) );", + + "float pw;", + "float ph;", + + "float ao;", + + "float dz = 1.0 / float( samples );", + "float z = 1.0 - dz / 2.0;", + "float l = 0.0;", + + "for ( int i = 0; i <= samples; i ++ ) {", + + "float r = sqrt( 1.0 - z );", + + "pw = cos( l ) * r;", + "ph = sin( l ) * r;", + "ao += calcAO( depth, pw * w, ph * h );", + "z = z - dz;", + "l = l + DL;", + + "}", + + "ao /= float( samples );", + "ao = 1.0 - ao;", + + "if ( fogEnabled ) {", + + "ao = mix( ao, 1.0, doFog() );", + + "}", + + "vec3 color = texture2D( tDiffuse, vUv ).rgb;", + + "vec3 lumcoeff = vec3( 0.299, 0.587, 0.114 );", + "float lum = dot( color.rgb, lumcoeff );", + "vec3 luminance = vec3( lum );", + + "vec3 final = vec3( color * mix( vec3( ao ), vec3( 1.0 ), luminance * lumInfluence ) );", // mix( color * ao, white, luminance ) + + "if ( onlyAO ) {", + + "final = vec3( mix( vec3( ao ), vec3( 1.0 ), luminance * lumInfluence ) );", // ambient occlusion only + + "}", + + "gl_FragColor = vec4( final, 1.0 );", + + "}" + + ].join("\n") + + }, + // METHODS buildKernel: function( sigma ) { diff --git a/examples/js/ctm/CTMLoader.js b/examples/js/ctm/CTMLoader.js index 462e1b1c3d7ccddac61df36593d0e267c9bfae31..b045648e81ea243573814171ab66bab3438924f5 100644 --- a/examples/js/ctm/CTMLoader.js +++ b/examples/js/ctm/CTMLoader.js @@ -75,7 +75,7 @@ THREE.CTMLoader.prototype.loadParts = function( url, callback, useWorker, useBuf } xhr.open( "GET", url, true ); - xhr.overrideMimeType( "text/plain; charset=x-user-defined" ); + if ( xhr.overrideMimeType ) xhr.overrideMimeType( "text/plain; charset=x-user-defined" ); xhr.setRequestHeader( "Content-Type", "text/plain" ); xhr.send( null ); diff --git a/examples/webgl_geometries.html b/examples/webgl_geometries.html index f4ea18e1cee591671974657e298bed79fd846ea6..68a60990a0977558a2068e95fee0a84f544705ff 100644 --- a/examples/webgl_geometries.html +++ b/examples/webgl_geometries.html @@ -52,7 +52,7 @@ materials = [ new THREE.MeshLambertMaterial( { ambient: 0xbbbbbb, map: THREE.ImageUtils.loadTexture( 'textures/ash_uvgrid01.jpg' ) } ), - new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe: true, transparent: true, opacity: 0.3 } ) + new THREE.MeshBasicMaterial( { color: 0xffffff, wireframe: true, transparent: true, opacity: 0.1 } ) ]; object = THREE.SceneUtils.createMultiMaterialObject( new THREE.CubeGeometry( 100, 100, 100, 4, 4, 4 ), materials ); @@ -69,6 +69,7 @@ scene.add( object ); object = THREE.SceneUtils.createMultiMaterialObject( new THREE.PlaneGeometry( 100, 100, 4, 4 ), materials ); + object.children[ 0 ].doubleSided = true; object.position.set( -200, 0, 0 ); scene.add( object ); @@ -85,6 +86,7 @@ } object = THREE.SceneUtils.createMultiMaterialObject( new THREE.LatheGeometry( points, 20 ), materials ); + object.children[ 0 ].doubleSided = true; object.position.set( 200, 0, 0 ); scene.add( object ); diff --git a/src/extras/geometries/IcosahedronGeometry.js b/src/extras/geometries/IcosahedronGeometry.js index d9dd88aca206b49b336399a146f7d269cfb5dc39..85ac9f7c20d1fbafec55f12f7fb5708ddeb6150d 100644 --- a/src/extras/geometries/IcosahedronGeometry.js +++ b/src/extras/geometries/IcosahedronGeometry.js @@ -1,5 +1,9 @@ /** * @author oosmoxiecode + * + * uvs are messed up in this one, and commented away for now. There is an ugly "seam" by the shared vertices + * when it "wraps" around, that needs to be fixed. It's because they share the first and the last vertices + * so it draws the entire texture on the seam-faces, I think... */ THREE.IcosahedronGeometry = function ( subdivisions ) { @@ -9,10 +13,11 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { var tempFaces; this.subdivisions = subdivisions || 0; - THREE.Geometry.call(this); + THREE.Geometry.call( this ); // create 12 vertices of a Icosahedron - var t = (1 + Math.sqrt(5)) / 2; + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; v(-1, t, 0); v( 1, t, 0); @@ -30,6 +35,7 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { v(-t, 0, 1); // 5 faces around point 0 + f3(0, 11, 5, tempScope); f3(0, 5, 1, tempScope); f3(0, 1, 7, tempScope); @@ -37,6 +43,7 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { f3(0, 10, 11, tempScope); // 5 adjacent faces + f3(1, 5, 9, tempScope); f3(5, 11, 4, tempScope); f3(11, 10, 2, tempScope); @@ -44,6 +51,7 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { f3(7, 1, 8, tempScope); // 5 faces around point 3 + f3(3, 9, 4, tempScope); f3(3, 4, 2, tempScope); f3(3, 2, 6, tempScope); @@ -51,6 +59,7 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { f3(3, 8, 9, tempScope); // 5 adjacent faces + f3(4, 9, 5, tempScope); f3(2, 4, 11, tempScope); f3(6, 2, 10, tempScope); @@ -58,21 +67,31 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { f3(9, 8, 1, tempScope); // subdivide faces to refine the triangles - for (var i=0; i < this.subdivisions; i++) { + + for ( var i = 0; i < this.subdivisions; i ++ ) { + tempFaces = new THREE.Geometry(); - for (var tri in tempScope.faces) { + + for ( var tri = 0; tri < tempScope.faces.length; tri ++ ) { + // replace each triangle by 4 triangles - var a = getMiddlePoint(tempScope.faces[tri].a, tempScope.faces[tri].b); - var b = getMiddlePoint(tempScope.faces[tri].b, tempScope.faces[tri].c); - var c = getMiddlePoint(tempScope.faces[tri].c, tempScope.faces[tri].a); - - f3(tempScope.faces[tri].a, a, c, tempFaces); - f3(tempScope.faces[tri].b, b, a, tempFaces); - f3(tempScope.faces[tri].c, c, b, tempFaces); - f3(a, b, c, tempFaces); + + var face = tempScope.faces[ tri ]; + + var a = getMiddlePoint( face.a, face.b ); + var b = getMiddlePoint( face.b, face.c ); + var c = getMiddlePoint( face.c, face.a ); + + f3( face.a, a, c, tempFaces ); + f3( face.b, b, a, tempFaces ); + f3( face.c, c, b, tempFaces ); + f3( a, b, c, tempFaces ); + } + tempScope.faces = tempFaces.faces; tempScope.faceVertexUvs[ 0 ] = tempFaces.faceVertexUvs[ 0 ]; + } scope.faces = tempScope.faces; @@ -84,7 +103,7 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { function v( x, y, z ) { - var length = Math.sqrt(x * x + y * y + z * z); + var length = Math.sqrt( x * x + y * y + z * z ); var i = scope.vertices.push( new THREE.Vertex( new THREE.Vector3( x/length, y/length, z/length ) ) ); return i-1; @@ -109,16 +128,18 @@ THREE.IcosahedronGeometry = function ( subdivisions ) { } - function getMiddlePoint(p1,p2) { - var pos1 = scope.vertices[p1].position; - var pos2 = scope.vertices[p2].position; + function getMiddlePoint( p1, p2 ) { - var x = (pos1.x + pos2.x) / 2; - var y = (pos1.y + pos2.y) / 2; - var z = (pos1.z + pos2.z) / 2; + var pos1 = scope.vertices[ p1 ].position; + var pos2 = scope.vertices[ p2 ].position; + + var x = ( pos1.x + pos2.x ) / 2; + var y = ( pos1.y + pos2.y ) / 2; + var z = ( pos1.z + pos2.z ) / 2; var i = v(x, y, z); return i; + } }