From 19f0b1f1e5c07b2260bd36f8ea1f177c41b702e1 Mon Sep 17 00:00:00 2001 From: alteredq Date: Tue, 27 Mar 2012 18:15:25 +0200 Subject: [PATCH] Cleaning up Blender scene exporter and SceneLoader. - removed not anymore existing ro.me specific remains (triggers, mesh colliders and shadow volumes) - added custom properties for setting shadow map casting and receiving, depthWrite, depthTest, blending, doubleSided - using Blender native "transparency" checkbox for setting out "transparent" property - better handling of messed up texture slots --- build/Three.js | 317 +++++++------- build/custom/ThreeExtras.js | 393 +++++++++--------- src/extras/loaders/Loader.js | 18 +- src/extras/loaders/SceneLoader.js | 49 +-- .../addons/io_mesh_threejs/__init__.py | 33 +- .../addons/io_mesh_threejs/export_threejs.py | 53 ++- 6 files changed, 432 insertions(+), 431 deletions(-) diff --git a/build/Three.js b/build/Three.js index fed093a032..927a7a4090 100644 --- a/build/Three.js +++ b/build/Three.js @@ -21,11 +21,11 @@ a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){ 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},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)}};THREE.Frustum=function(){this.planes=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4]}; THREE.Frustum.prototype.setFromMatrix=function(a){var b,c=this.planes;c[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);c[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);c[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);c[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);c[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);c[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(a=0;6>a;a++)b=c[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}; THREE.Frustum.prototype.contains=function(a){for(var b=this.planes,c=a.matrixWorld,d=THREE.Frustum.__v1.set(c.getColumnX().length(),c.getColumnY().length(),c.getColumnZ().length()),d=-a.geometry.boundingSphere.radius*Math.max(d.x,Math.max(d.y,d.z)),e=0;6>e;e++)if(a=b[e].x*c.n14+b[e].y*c.n24+b[e].z*c.n34+b[e].w,a<=d)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3; -THREE.Ray=function(a,b){function c(a,b,c){q.sub(c,a);s=q.dot(b);u=n.add(a,r.copy(b).multiplyScalar(s));return v=c.distanceTo(u)}function d(a,b,c,d){q.sub(d,b);n.sub(c,b);r.sub(a,b);t=q.dot(q);w=q.dot(n);z=q.dot(r);G=n.dot(n);D=n.dot(r);C=1/(t*G-w*w);I=(G*z-w*D)*C;K=(t*D-w*z)*C;return 0<=I&&0<=K&&1>I+K}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;var e=1.0E-4;this.setPrecision=function(a){e=a};var f=new THREE.Vector3,g=new THREE.Vector3,h=new THREE.Vector3,i=new THREE.Vector3, +THREE.Ray=function(a,b){function c(a,b,c){q.sub(c,a);s=q.dot(b);u=n.add(a,r.copy(b).multiplyScalar(s));return v=c.distanceTo(u)}function d(a,b,c,d){q.sub(d,b);n.sub(c,b);r.sub(a,b);t=q.dot(q);w=q.dot(n);z=q.dot(r);F=n.dot(n);C=n.dot(r);D=1/(t*F-w*w);I=(F*z-w*C)*D;K=(t*C-w*z)*D;return 0<=I&&0<=K&&1>I+K}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;var e=1.0E-4;this.setPrecision=function(a){e=a};var f=new THREE.Vector3,g=new THREE.Vector3,h=new THREE.Vector3,i=new THREE.Vector3, j=new THREE.Vector3,k=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector3,o=new THREE.Vector3;this.intersectObject=function(a){var b,n=[];if(a instanceof THREE.Particle){var q=c(this.origin,this.direction,a.matrixWorld.getPosition());if(q>a.scale.x)return[];b={distance:q,point:a.position,face:null,object:a};n.push(b)}else if(a instanceof THREE.Mesh){var q=c(this.origin,this.direction,a.matrixWorld.getPosition()),r=THREE.Frustum.__v1.set(a.matrixWorld.getColumnX().length(),a.matrixWorld.getColumnY().length(), a.matrixWorld.getColumnZ().length());if(q>a.geometry.boundingSphere.radius*Math.max(r.x,Math.max(r.y,r.z)))return n;var s,l,t=a.geometry,u=t.vertices,y;a.matrixRotationWorld.extractRotation(a.matrixWorld);for(q=0,r=t.faces.length;ql)&&(a.doubleSided||(a.flipSided? 0s))))if(o.add(j,k.multiplyScalar(l)),b instanceof THREE.Face3)f=y.multiplyVector3(f.copy(u[b.a].position)),g=y.multiplyVector3(g.copy(u[b.b].position)),h=y.multiplyVector3(h.copy(u[b.c].position)),d(o,f,g,h)&&(b={distance:j.distanceTo(o),point:o.clone(),face:b,object:a},n.push(b));else if(b instanceof THREE.Face4&&(f=y.multiplyVector3(f.copy(u[b.a].position)),g=y.multiplyVector3(g.copy(u[b.b].position)),h=y.multiplyVector3(h.copy(u[b.c].position)),i=y.multiplyVector3(i.copy(u[b.d].position)), -d(o,f,g,i)||d(o,g,h,i)))b={distance:j.distanceTo(o),point:o.clone(),face:b,object:a},n.push(b)}return n};this.intersectObjects=function(a){for(var b=[],c=0,d=a.length;cf?d:f,e=e>g?e:g);a()};this.add3Points= function(f,g,k,p,m,o){h?(h=!1,b=fk?f>m?f:m:k>m?k:m,e=g>p?g>o?g:o:p>o?p:o):(b=fk?f>m?f>d?f:d:m>d?m:d:k>m?k>d?k:d:m>d?m: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}}; @@ -33,8 +33,8 @@ THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b THREE.Matrix3.prototype={constructor:THREE.Matrix3,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,i,j,k,p,m,o,q,n){this.set(void 0!==a?a:1,b||0,c||0,d||0,e||0,void 0!==f?f:1,g||0,h||0,i||0,j||0,void 0!==k?k:1,p||0,m||0,o||0,q||0,void 0!==n?n:1);this.m33=new THREE.Matrix3}; THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,i,j,k,p,m,o,q,n){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=i;this.n32=j;this.n33=k;this.n34=p;this.n41=m;this.n42=o;this.n43=q;this.n44=n;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(0===f.length())f.z=1;d.cross(c,f).normalize();0===d.length()&&(f.x+=1.0E-4,d.cross(c,f).normalize());e.cross(f,d);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,i=a.n23,j=a.n24,k=a.n31,p=a.n32,m=a.n33,o=a.n34,q=a.n41,n=a.n42,r=a.n43,s=a.n44,u=b.n11, -v=b.n12,t=b.n13,w=b.n14,z=b.n21,G=b.n22,D=b.n23,C=b.n24,I=b.n31,K=b.n32,O=b.n33,Q=b.n34,L=b.n41,B=b.n42,N=b.n43,E=b.n44;this.n11=c*u+d*z+e*I+f*L;this.n12=c*v+d*G+e*K+f*B;this.n13=c*t+d*D+e*O+f*N;this.n14=c*w+d*C+e*Q+f*E;this.n21=g*u+h*z+i*I+j*L;this.n22=g*v+h*G+i*K+j*B;this.n23=g*t+h*D+i*O+j*N;this.n24=g*w+h*C+i*Q+j*E;this.n31=k*u+p*z+m*I+o*L;this.n32=k*v+p*G+m*K+o*B;this.n33=k*t+p*D+m*O+o*N;this.n34=k*w+p*C+m*Q+o*E;this.n41=q*u+n*z+r*I+s*L;this.n42=q*v+n*G+r*K+s*B;this.n43=q*t+n*D+r*O+s*N;this.n44= -q*w+n*C+r*Q+s*E;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; +v=b.n12,t=b.n13,w=b.n14,z=b.n21,F=b.n22,C=b.n23,D=b.n24,I=b.n31,K=b.n32,O=b.n33,Q=b.n34,L=b.n41,B=b.n42,N=b.n43,E=b.n44;this.n11=c*u+d*z+e*I+f*L;this.n12=c*v+d*F+e*K+f*B;this.n13=c*t+d*C+e*O+f*N;this.n14=c*w+d*D+e*Q+f*E;this.n21=g*u+h*z+i*I+j*L;this.n22=g*v+h*F+i*K+j*B;this.n23=g*t+h*C+i*O+j*N;this.n24=g*w+h*D+i*Q+j*E;this.n31=k*u+p*z+m*I+o*L;this.n32=k*v+p*F+m*K+o*B;this.n33=k*t+p*C+m*O+o*N;this.n34=k*w+p*D+m*Q+o*E;this.n41=q*u+n*z+r*I+s*L;this.n42=q*v+n*F+r*K+s*B;this.n43=q*t+n*C+r*O+s*N;this.n44= +q*w+n*D+r*Q+s*E;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,i=this.n31,j=this.n32,k=this.n33,p=this.n34,m=this.n41,o=this.n42,q=this.n43,n=this.n44;return d*g*j*m-c*h*j*m-d*f*k*m+b*h*k*m+c*f*p*m-b*g*p*m-d*g*i*o+c*h*i*o+d*e*k*o-a*h*k*o-c*e*p*o+a*g*p*o+d*f*i*q-b*h*i*q-d*e*j*q+a*h*j*q+b*e*p*q-a*f*p*q-c*f*i*n+b*g*i*n+c*e*j*n-a*g*j*n-b*e*k*n+a*f*k*n},transpose:function(){var a; @@ -65,16 +65,16 @@ this.children.indexOf(a);if(-1!==b){a.parent=void 0;this.children.splice(b,1);fo this.eulerOrder);if(1!==this.scale.x||1!==this.scale.y||1!==this.scale.z)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< c;b++)this.children[b].updateMatrixWorld(a)}};THREE.Object3DCount=0; THREE.Projector=function(){function a(){var a=g[f]=g[f]||new THREE.RenderableObject;f++;return a}function b(){var a=j[i]=j[i]||new THREE.RenderableVertex;i++;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;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&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(ja.positionScreen.x-P.positionScreen.x)*(Z.positionScreen.y-P.positionScreen.y)-(ja.positionScreen.y-P.positionScreen.y)*(Z.positionScreen.x-P.positionScreen.x), -R.doubleSided||l!=R.flipSided)ha=m[p]=m[p]||new THREE.RenderableFace3,p++,k=ha,k.v1.copy(P),k.v2.copy(Z),k.v3.copy(ja);else continue;else continue;else if(y instanceof THREE.Face4)if(P=j[y.a],Z=j[y.b],ja=j[y.c],ha=j[y.d],P.visible&&Z.visible&&ja.visible&&ha.visible)if(l=0>(ha.positionScreen.x-P.positionScreen.x)*(Z.positionScreen.y-P.positionScreen.y)-(ha.positionScreen.y-P.positionScreen.y)*(Z.positionScreen.x-P.positionScreen.x)||0>(Z.positionScreen.x-ja.positionScreen.x)*(ha.positionScreen.y-ja.positionScreen.y)- -(Z.positionScreen.y-ja.positionScreen.y)*(ha.positionScreen.x-ja.positionScreen.x),R.doubleSided||l!=R.flipSided)Ia=q[o]=q[o]||new THREE.RenderableFace4,o++,k=Ia,k.v1.copy(P),k.v2.copy(Z),k.v3.copy(ja),k.v4.copy(ha);else continue;else continue;k.normalWorld.copy(y.normal);!l&&(R.flipSided||R.doubleSided)&&k.normalWorld.negate();T.multiplyVector3(k.normalWorld);k.centroidWorld.copy(y.centroid);$.multiplyVector3(k.centroidWorld);k.centroidScreen.copy(k.centroidWorld);D.multiplyVector3(k.centroidScreen); -ja=y.vertexNormals;for(P=0,Z=ja.length;PG.z))g=t[v]=t[v]||new THREE.RenderableParticle,v++,u=g,u.x=G.x/G.w,u.y=G.y/G.w,u.z=G.z,u.rotation=R.rotation.z,u.scale.x=R.scale.x*Math.abs(u.x-(G.x+e.projectionMatrix.n11)/(G.w+e.projectionMatrix.n14)),u.scale.y=R.scale.y*Math.abs(u.y-(G.y+e.projectionMatrix.n22)/(G.w+e.projectionMatrix.n24)),u.material=R.material,w.elements.push(u);f&&w.elements.sort(c);return w}}; +var e,f,g=[],h,i,j=[],k,p,m=[],o,q=[],n,r,s=[],u,v,t=[],w={objects:[],sprites:[],lights:[],elements:[]},z=new THREE.Vector3,F=new THREE.Vector4,C=new THREE.Matrix4,D=new THREE.Matrix4,I=new THREE.Frustum,K=new THREE.Vector4,O=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);C.multiply(b.projectionMatrix,b.matrixWorldInverse);C.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);C.multiply(b.matrixWorld, +b.projectionMatrixInverse);C.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;w.objects.length=0;w.sprites.length=0;w.lights.length=0;var g=function(b){if(!1!==b.visible){(b instanceof THREE.Mesh||b instanceof THREE.Line)&&(!1===b.frustumCulled||I.contains(b))?(z.copy(b.matrixWorld.getPosition()),C.multiplyVector3(z), +e=a(),e.object=b,e.z=z.z,w.objects.push(e)):b instanceof THREE.Sprite||b instanceof THREE.Particle?(z.copy(b.matrixWorld.getPosition()),C.multiplyVector3(z),e=a(),e.object=b,e.z=z.z,w.sprites.push(e)):b instanceof THREE.Light&&w.lights.push(b);for(var c=0,d=b.children.length;cg&&h.positionScreen.z(ja.positionScreen.x-P.positionScreen.x)*(ea.positionScreen.y-P.positionScreen.y)-(ja.positionScreen.y-P.positionScreen.y)*(ea.positionScreen.x-P.positionScreen.x), +R.doubleSided||l!=R.flipSided)ha=m[p]=m[p]||new THREE.RenderableFace3,p++,k=ha,k.v1.copy(P),k.v2.copy(ea),k.v3.copy(ja);else continue;else continue;else if(y instanceof THREE.Face4)if(P=j[y.a],ea=j[y.b],ja=j[y.c],ha=j[y.d],P.visible&&ea.visible&&ja.visible&&ha.visible)if(l=0>(ha.positionScreen.x-P.positionScreen.x)*(ea.positionScreen.y-P.positionScreen.y)-(ha.positionScreen.y-P.positionScreen.y)*(ea.positionScreen.x-P.positionScreen.x)||0>(ea.positionScreen.x-ja.positionScreen.x)*(ha.positionScreen.y- +ja.positionScreen.y)-(ea.positionScreen.y-ja.positionScreen.y)*(ha.positionScreen.x-ja.positionScreen.x),R.doubleSided||l!=R.flipSided)Ia=q[o]=q[o]||new THREE.RenderableFace4,o++,k=Ia,k.v1.copy(P),k.v2.copy(ea),k.v3.copy(ja),k.v4.copy(ha);else continue;else continue;k.normalWorld.copy(y.normal);!l&&(R.flipSided||R.doubleSided)&&k.normalWorld.negate();S.multiplyVector3(k.normalWorld);k.centroidWorld.copy(y.centroid);Z.multiplyVector3(k.centroidWorld);k.centroidScreen.copy(k.centroidWorld);C.multiplyVector3(k.centroidScreen); +ja=y.vertexNormals;for(P=0,ea=ja.length;PF.z))g=t[v]=t[v]||new THREE.RenderableParticle,v++,u=g,u.x=F.x/F.w,u.y=F.y/F.w,u.z=F.z,u.rotation=R.rotation.z,u.scale.x=R.scale.x*Math.abs(u.x-(F.x+e.projectionMatrix.n11)/(F.w+e.projectionMatrix.n14)),u.scale.y=R.scale.y*Math.abs(u.y-(F.y+e.projectionMatrix.n22)/(F.w+e.projectionMatrix.n24)),u.material=R.material,w.elements.push(u);f&&w.elements.sort(c);return w}}; THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=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); @@ -96,9 +96,9 @@ d[c.c].addSelf(c.normal),d[c.d].addSelf(c.normal));for(a=0,b=this.vertices.lengt d;c++){e=this.faces[c];e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone();if(!e.__originalVertexNormals)e.__originalVertexNormals=[];for(a=0,b=e.vertexNormals.length;ae?-1:1,f.vertexTangents[d]=new THREE.Vector4(Q.x,Q.y,Q.z,e)}this.hasTangents=!0},computeBoundingBox:function(){if(!this.boundingBox)this.boundingBox={min:new THREE.Vector3,max:new THREE.Vector3};if(0e?-1:1,f.vertexTangents[d]=new THREE.Vector4(Q.x,Q.y,Q.z,e)}this.hasTangents=!0},computeBoundingBox:function(){if(!this.boundingBox)this.boundingBox={min:new THREE.Vector3,max:new THREE.Vector3};if(0c.x)c.x=a.x;if(a.yc.y)c.y=a.y;if(a.zc.z)c.z=a.z}}else this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){if(!this.boundingSphere)this.boundingSphere={radius:0};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;fa.length-2?a.length-1:f+1;c[3]=f>a.length-3?a.length-1:f+2;j=this.points[c[0]];k=this.points[c[1]]; @@ -168,44 +168,44 @@ THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){va THREE.Fog=function(a,b,c){this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.FogExp2=function(a,b){this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4}; THREE.DOMRenderer=function(){var a,b,c=new THREE.Projector,d,e,f,g;this.domElement=document.createElement("div");this.setSize=function(a,b){d=a;e=b;f=d/2;g=e/2};this.render=function(d,e){var j,k,p,m,o;a=c.projectScene(d,e);b=a.elements;for(j=0,k=b.length;js&&n.clearRect(Math.floor(ra.getX()),Math.floor(ra.getY()),Math.floor(ra.getWidth()),Math.floor(ra.getHeight())),0s&&n.clearRect(Math.floor(ra.getX()),Math.floor(ra.getY()),Math.floor(ra.getWidth()),Math.floor(ra.getHeight())),0=i||(i*=g.intensity,d.r+=h.r*i,d.g+=h.g*i,d.b+=h.b*i)):g instanceof THREE.PointLight&&(l=g.matrixWorld.getPosition(),i=c.dot(ba.sub(l,b).normalize()),0>=i||(i*=0==g.distance?1:1-Math.min(b.distanceTo(l)/g.distance,1),0!=i&&(i*=g.intensity,d.r+=h.r*i,d.g+=h.g*i,d.b+=h.b*i)))}function r(a,f,g){b(g.opacity);c(g.blending);var h,ba,i,l,ca,k;if(g instanceof THREE.ParticleBasicMaterial){if(g.map)l= -g.map.image,ca=l.width>>1,k=l.height>>1,g=f.scale.x*o,i=f.scale.y*q,h=g*ca,ba=i*k,Ba.set(a.x-h,a.y-ba,a.x+h,a.y+ba),Ga.intersects(Ba)&&(n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(g,-i),n.translate(-ca,-k),n.drawImage(l,0,0),n.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=f.scale.x*o,ba=f.scale.y*q,Ba.set(a.x-h,a.y-ba,a.x+h,a.y+ba),Ga.intersects(Ba)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(h, -ba),g.program(n),n.restore()))}function s(a,e,f,g){b(g.opacity);c(g.blending);n.beginPath();n.moveTo(a.positionScreen.x,a.positionScreen.y);n.lineTo(e.positionScreen.x,e.positionScreen.y);n.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(z!=a)n.lineWidth=z=a;a=g.linecap;if(G!=a)n.lineCap=G=a;a=g.linejoin;if(D!=a)n.lineJoin=D=a;d(g.color.getContextStyle());n.stroke();Ba.inflate(2*g.linewidth)}}function t(a,d,e,g,h,ca,j,n){f.info.render.vertices+=3;f.info.render.faces++;b(n.opacity); -c(n.blending);B=a.positionScreen.x;N=a.positionScreen.y;E=d.positionScreen.x;l=d.positionScreen.y;Y=e.positionScreen.x;F=e.positionScreen.y;v(B,N,E,l,Y,F);if(n instanceof THREE.MeshBasicMaterial)if(n.map)n.map.mapping instanceof THREE.UVMapping&&(ka=j.uvs[0],Uc(B,N,E,l,Y,F,ka[g].u,ka[g].v,ka[h].u,ka[h].v,ka[ca].u,ka[ca].v,n.map));else if(n.envMap){if(n.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,ba.copy(j.vertexNormalsWorld[g]),bb=0.5*(ba.x*a.n11+ba.y*a.n12+ba.z* -a.n13)+0.5,jb=0.5*-(ba.x*a.n21+ba.y*a.n22+ba.z*a.n23)+0.5,ba.copy(j.vertexNormalsWorld[h]),Va=0.5*(ba.x*a.n11+ba.y*a.n12+ba.z*a.n13)+0.5,cb=0.5*-(ba.x*a.n21+ba.y*a.n22+ba.z*a.n23)+0.5,ba.copy(j.vertexNormalsWorld[ca]),eb=0.5*(ba.x*a.n11+ba.y*a.n12+ba.z*a.n13)+0.5,db=0.5*-(ba.x*a.n21+ba.y*a.n22+ba.z*a.n23)+0.5,Uc(B,N,E,l,Y,F,bb,jb,Va,cb,eb,db,n.envMap)}else n.wireframe?Mb(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(n.color);else if(n instanceof THREE.MeshLambertMaterial)n.map&& -!n.wireframe&&(n.map.mapping instanceof THREE.UVMapping&&(ka=j.uvs[0],Uc(B,N,E,l,Y,F,ka[g].u,ka[g].v,ka[h].u,ka[h].v,ka[ca].u,ka[ca].v,n.map)),c(THREE.SubtractiveBlending)),Oa?!n.wireframe&&n.shading==THREE.SmoothShading&&3==j.vertexNormalsWorld.length?($.r=T.r=aa.r=sa.r,$.g=T.g=aa.g=sa.g,$.b=T.b=aa.b=sa.b,p(i,j.v1.positionWorld,j.vertexNormalsWorld[0],$),p(i,j.v2.positionWorld,j.vertexNormalsWorld[1],T),p(i,j.v3.positionWorld,j.vertexNormalsWorld[2],aa),$.r=Math.max(0,Math.min(n.color.r*$.r,1)), -$.g=Math.max(0,Math.min(n.color.g*$.g,1)),$.b=Math.max(0,Math.min(n.color.b*$.b,1)),T.r=Math.max(0,Math.min(n.color.r*T.r,1)),T.g=Math.max(0,Math.min(n.color.g*T.g,1)),T.b=Math.max(0,Math.min(n.color.b*T.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)),ea.r=0.5*(T.r+aa.r),ea.g=0.5*(T.g+aa.g),ea.b=0.5*(T.b+aa.b),Aa=Dc($,T,aa,ea),gc(B,N,E,l,Y,F,0,0,1,0,0,1,Aa)):(R.r=sa.r,R.g=sa.g,R.b=sa.b,p(i,j.centroidWorld,j.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)),n.wireframe?Mb(R,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(R)):n.wireframe?Mb(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(n.color);else if(n instanceof THREE.MeshDepthMaterial)oa=k.near,Fa=k.far,$.r=$.g=$.b=1-ac(a.positionScreen.z,oa,Fa),T.r=T.g=T.b=1-ac(d.positionScreen.z,oa,Fa),aa.r=aa.g=aa.b=1-ac(e.positionScreen.z,oa, -Fa),ea.r=0.5*(T.r+aa.r),ea.g=0.5*(T.g+aa.g),ea.b=0.5*(T.b+aa.b),Aa=Dc($,T,aa,ea),gc(B,N,E,l,Y,F,0,0,1,0,0,1,Aa);else if(n instanceof THREE.MeshNormalMaterial)R.r=hc(j.normalWorld.x),R.g=hc(j.normalWorld.y),R.b=hc(j.normalWorld.z),n.wireframe?Mb(R,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(R)}function u(a,d,e,g,h,ba,ca,j,n){f.info.render.vertices+=4;f.info.render.faces++;b(j.opacity);c(j.blending);if(j.map||j.envMap)t(a,d,g,0,1,3,ca,j,n),t(h,e,ba,1,2,3,ca,j,n);else if(B=a.positionScreen.x, -N=a.positionScreen.y,E=d.positionScreen.x,l=d.positionScreen.y,Y=e.positionScreen.x,F=e.positionScreen.y,y=g.positionScreen.x,S=g.positionScreen.y,P=h.positionScreen.x,Z=h.positionScreen.y,ja=ba.positionScreen.x,ha=ba.positionScreen.y,j instanceof THREE.MeshBasicMaterial)w(B,N,E,l,Y,F,y,S),j.wireframe?Mb(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Gb(j.color);else if(j instanceof THREE.MeshLambertMaterial)Oa?!j.wireframe&&j.shading==THREE.SmoothShading&&4==ca.vertexNormalsWorld.length? -($.r=T.r=aa.r=ea.r=sa.r,$.g=T.g=aa.g=ea.g=sa.g,$.b=T.b=aa.b=ea.b=sa.b,p(i,ca.v1.positionWorld,ca.vertexNormalsWorld[0],$),p(i,ca.v2.positionWorld,ca.vertexNormalsWorld[1],T),p(i,ca.v4.positionWorld,ca.vertexNormalsWorld[3],aa),p(i,ca.v3.positionWorld,ca.vertexNormalsWorld[2],ea),$.r=Math.max(0,Math.min(j.color.r*$.r,1)),$.g=Math.max(0,Math.min(j.color.g*$.g,1)),$.b=Math.max(0,Math.min(j.color.b*$.b,1)),T.r=Math.max(0,Math.min(j.color.r*T.r,1)),T.g=Math.max(0,Math.min(j.color.g*T.g,1)),T.b=Math.max(0, -Math.min(j.color.b*T.b,1)),aa.r=Math.max(0,Math.min(j.color.r*aa.r,1)),aa.g=Math.max(0,Math.min(j.color.g*aa.g,1)),aa.b=Math.max(0,Math.min(j.color.b*aa.b,1)),ea.r=Math.max(0,Math.min(j.color.r*ea.r,1)),ea.g=Math.max(0,Math.min(j.color.g*ea.g,1)),ea.b=Math.max(0,Math.min(j.color.b*ea.b,1)),Aa=Dc($,T,aa,ea),v(B,N,E,l,y,S),gc(B,N,E,l,y,S,0,0,1,0,0,1,Aa),v(P,Z,Y,F,ja,ha),gc(P,Z,Y,F,ja,ha,1,0,1,1,0,1,Aa)):(R.r=sa.r,R.g=sa.g,R.b=sa.b,p(i,ca.centroidWorld,ca.normalWorld,R),R.r=Math.max(0,Math.min(j.color.r* -R.r,1)),R.g=Math.max(0,Math.min(j.color.g*R.g,1)),R.b=Math.max(0,Math.min(j.color.b*R.b,1)),w(B,N,E,l,Y,F,y,S),j.wireframe?Mb(R,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Gb(R)):(w(B,N,E,l,Y,F,y,S),j.wireframe?Mb(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Gb(j.color));else if(j instanceof THREE.MeshNormalMaterial)R.r=hc(ca.normalWorld.x),R.g=hc(ca.normalWorld.y),R.b=hc(ca.normalWorld.z),w(B,N,E,l,Y,F,y,S),j.wireframe?Mb(R,j.wireframeLinewidth,j.wireframeLinecap, -j.wireframeLinejoin):Gb(R);else if(j instanceof THREE.MeshDepthMaterial)oa=k.near,Fa=k.far,$.r=$.g=$.b=1-ac(a.positionScreen.z,oa,Fa),T.r=T.g=T.b=1-ac(d.positionScreen.z,oa,Fa),aa.r=aa.g=aa.b=1-ac(g.positionScreen.z,oa,Fa),ea.r=ea.g=ea.b=1-ac(e.positionScreen.z,oa,Fa),Aa=Dc($,T,aa,ea),v(B,N,E,l,y,S),gc(B,N,E,l,y,S,0,0,1,0,0,1,Aa),v(P,Z,Y,F,ja,ha),gc(P,Z,Y,F,ja,ha,1,0,1,1,0,1,Aa)}function v(a,b,c,d,e,f){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(a,b);n.closePath()}function w(a, -b,c,d,e,f,g,h){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(g,h);n.lineTo(a,b);n.closePath()}function Mb(a,b,c,e){if(z!=b)n.lineWidth=z=b;if(G!=c)n.lineCap=G=c;if(D!=e)n.lineJoin=D=e;d(a.getContextStyle());n.stroke();Ba.inflate(2*b)}function Gb(a){e(a.getContextStyle());n.fill()}function Uc(a,b,c,d,f,g,h,ba,i,ca,l,j,k){if(0!=k.image.width){if(!0==k.needsUpdate||void 0==Ua[k.id]){var m=k.wrapS==THREE.RepeatWrapping,o=k.wrapT==THREE.RepeatWrapping;Ua[k.id]=n.createPattern(k.image, -m&&o?"repeat":m&&!o?"repeat-x":!m&&o?"repeat-y":"no-repeat");k.needsUpdate=!1}e(Ua[k.id]);var m=k.offset.x/k.repeat.x,o=k.offset.y/k.repeat.y,p=k.image.width*k.repeat.x,Fb=k.image.height*k.repeat.y,h=(h+m)*p,ba=(ba+o)*Fb,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+m)*p-h,ca=(ca+o)*Fb-ba,l=(l+m)*p-h,j=(j+o)*Fb-ba,m=i*j-l*ca;if(0==m){if(void 0===Ia[k.id])b=document.createElement("canvas"),b.width=k.image.width,b.height=k.image.height,b=b.getContext("2d"),b.drawImage(k.image,0,0),Ia[k.id]=b.getImageData(0,0,k.image.width, -k.image.height).data;b=Ia[k.id];h=4*(Math.floor(h)+Math.floor(ba)*k.image.width);R.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);Gb(R)}else m=1/m,k=(j*c-ca*f)*m,ca=(j*d-ca*g)*m,c=(i*f-l*c)*m,d=(i*g-l*d)*m,a=a-k*h-c*ba,h=b-ca*h-d*ba,n.save(),n.transform(k,ca,c,d,a,h),n.fill(),n.restore()}}function gc(a,b,c,d,e,f,g,h,ba,i,ca,l,j){var k,m;k=j.width-1;m=j.height-1;g*=k;h*=m;c-=a;d-=b;e-=a;f-=b;ba=ba*k-g;i=i*m-h;ca=ca*k-g;l=l*m-h;m=1/(ba*l-ca*i);k=(l*c-i*e)*m;i=(l*d-i*f)*m;c=(ba*e-ca*c)*m;d=(ba*f-ca*d)*m;a=a- -k*g-c*h;b=b-i*g-d*h;n.save();n.transform(k,i,c,d,a,b);n.clip();n.drawImage(j,0,0);n.restore()}function Dc(a,b,c,d){var e=~~(255*a.r),f=~~(255*a.g),a=~~(255*a.b),g=~~(255*b.r),h=~~(255*b.g),b=~~(255*b.b),ba=~~(255*c.r),i=~~(255*c.g),c=~~(255*c.b),l=~~(255*d.r),j=~~(255*d.g),d=~~(255*d.b);fb[0]=0>e?0:255f?0:255a?0:255g?0:255h?0:255b?0:255ba?0:255i?0:255c?0:255l?0:255j?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==I[a]&&(I[a]=document.createElementNS("http://www.w3.org/2000/svg", -"path"),0==B&&I[a].setAttribute("shape-rendering","crispEdges"));return I[a]}function c(a){a=0.5*(a+1);return 0>a?0:1=i||(i*=g.intensity,d.r+=h.r*i,d.g+=h.g*i,d.b+=h.b*i)):g instanceof THREE.PointLight&&(l=g.matrixWorld.getPosition(),i=c.dot(aa.sub(l,b).normalize()),0>=i||(i*=0==g.distance?1:1-Math.min(b.distanceTo(l)/g.distance,1),0!=i&&(i*=g.intensity,d.r+=h.r*i,d.g+=h.g*i,d.b+=h.b*i)))}function r(a,f,g){b(g.opacity);c(g.blending);var h,aa,i,l,ba,k;if(g instanceof THREE.ParticleBasicMaterial){if(g.map)l= +g.map.image,ba=l.width>>1,k=l.height>>1,g=f.scale.x*o,i=f.scale.y*q,h=g*ba,aa=i*k,Ba.set(a.x-h,a.y-aa,a.x+h,a.y+aa),Ga.intersects(Ba)&&(n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(g,-i),n.translate(-ba,-k),n.drawImage(l,0,0),n.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(h=f.scale.x*o,aa=f.scale.y*q,Ba.set(a.x-h,a.y-aa,a.x+h,a.y+aa),Ga.intersects(Ba)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),n.save(),n.translate(a.x,a.y),n.rotate(-f.rotation),n.scale(h, +aa),g.program(n),n.restore()))}function s(a,e,f,g){b(g.opacity);c(g.blending);n.beginPath();n.moveTo(a.positionScreen.x,a.positionScreen.y);n.lineTo(e.positionScreen.x,e.positionScreen.y);n.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(z!=a)n.lineWidth=z=a;a=g.linecap;if(F!=a)n.lineCap=F=a;a=g.linejoin;if(C!=a)n.lineJoin=C=a;d(g.color.getContextStyle());n.stroke();Ba.inflate(2*g.linewidth)}}function t(a,d,e,g,h,ba,j,n){f.info.render.vertices+=3;f.info.render.faces++;b(n.opacity); +c(n.blending);B=a.positionScreen.x;N=a.positionScreen.y;E=d.positionScreen.x;l=d.positionScreen.y;Y=e.positionScreen.x;G=e.positionScreen.y;v(B,N,E,l,Y,G);if(n instanceof THREE.MeshBasicMaterial)if(n.map)n.map.mapping instanceof THREE.UVMapping&&(ka=j.uvs[0],Uc(B,N,E,l,Y,G,ka[g].u,ka[g].v,ka[h].u,ka[h].v,ka[ba].u,ka[ba].v,n.map));else if(n.envMap){if(n.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,aa.copy(j.vertexNormalsWorld[g]),bb=0.5*(aa.x*a.n11+aa.y*a.n12+aa.z* +a.n13)+0.5,jb=0.5*-(aa.x*a.n21+aa.y*a.n22+aa.z*a.n23)+0.5,aa.copy(j.vertexNormalsWorld[h]),Va=0.5*(aa.x*a.n11+aa.y*a.n12+aa.z*a.n13)+0.5,cb=0.5*-(aa.x*a.n21+aa.y*a.n22+aa.z*a.n23)+0.5,aa.copy(j.vertexNormalsWorld[ba]),eb=0.5*(aa.x*a.n11+aa.y*a.n12+aa.z*a.n13)+0.5,db=0.5*-(aa.x*a.n21+aa.y*a.n22+aa.z*a.n23)+0.5,Uc(B,N,E,l,Y,G,bb,jb,Va,cb,eb,db,n.envMap)}else n.wireframe?Mb(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(n.color);else if(n instanceof THREE.MeshLambertMaterial)n.map&& +!n.wireframe&&(n.map.mapping instanceof THREE.UVMapping&&(ka=j.uvs[0],Uc(B,N,E,l,Y,G,ka[g].u,ka[g].v,ka[h].u,ka[h].v,ka[ba].u,ka[ba].v,n.map)),c(THREE.SubtractiveBlending)),Oa?!n.wireframe&&n.shading==THREE.SmoothShading&&3==j.vertexNormalsWorld.length?(Z.r=S.r=$.r=sa.r,Z.g=S.g=$.g=sa.g,Z.b=S.b=$.b=sa.b,p(i,j.v1.positionWorld,j.vertexNormalsWorld[0],Z),p(i,j.v2.positionWorld,j.vertexNormalsWorld[1],S),p(i,j.v3.positionWorld,j.vertexNormalsWorld[2],$),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)),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)),$.r=Math.max(0,Math.min(n.color.r*$.r,1)),$.g=Math.max(0,Math.min(n.color.g*$.g,1)),$.b=Math.max(0,Math.min(n.color.b*$.b,1)),da.r=0.5*(S.r+$.r),da.g=0.5*(S.g+$.g),da.b=0.5*(S.b+$.b),Aa=Dc(Z,S,$,da),gc(B,N,E,l,Y,G,0,0,1,0,0,1,Aa)):(R.r=sa.r,R.g=sa.g,R.b=sa.b,p(i,j.centroidWorld,j.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)),n.wireframe?Mb(R,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(R)):n.wireframe?Mb(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(n.color);else if(n instanceof THREE.MeshDepthMaterial)oa=k.near,Fa=k.far,Z.r=Z.g=Z.b=1-ac(a.positionScreen.z,oa,Fa),S.r=S.g=S.b=1-ac(d.positionScreen.z,oa,Fa),$.r=$.g=$.b=1-ac(e.positionScreen.z,oa,Fa),da.r= +0.5*(S.r+$.r),da.g=0.5*(S.g+$.g),da.b=0.5*(S.b+$.b),Aa=Dc(Z,S,$,da),gc(B,N,E,l,Y,G,0,0,1,0,0,1,Aa);else if(n instanceof THREE.MeshNormalMaterial)R.r=hc(j.normalWorld.x),R.g=hc(j.normalWorld.y),R.b=hc(j.normalWorld.z),n.wireframe?Mb(R,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):Gb(R)}function u(a,d,e,g,h,aa,ba,j,n){f.info.render.vertices+=4;f.info.render.faces++;b(j.opacity);c(j.blending);if(j.map||j.envMap)t(a,d,g,0,1,3,ba,j,n),t(h,e,aa,1,2,3,ba,j,n);else if(B=a.positionScreen.x, +N=a.positionScreen.y,E=d.positionScreen.x,l=d.positionScreen.y,Y=e.positionScreen.x,G=e.positionScreen.y,y=g.positionScreen.x,T=g.positionScreen.y,P=h.positionScreen.x,ea=h.positionScreen.y,ja=aa.positionScreen.x,ha=aa.positionScreen.y,j instanceof THREE.MeshBasicMaterial)w(B,N,E,l,Y,G,y,T),j.wireframe?Mb(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Gb(j.color);else if(j instanceof THREE.MeshLambertMaterial)Oa?!j.wireframe&&j.shading==THREE.SmoothShading&&4==ba.vertexNormalsWorld.length? +(Z.r=S.r=$.r=da.r=sa.r,Z.g=S.g=$.g=da.g=sa.g,Z.b=S.b=$.b=da.b=sa.b,p(i,ba.v1.positionWorld,ba.vertexNormalsWorld[0],Z),p(i,ba.v2.positionWorld,ba.vertexNormalsWorld[1],S),p(i,ba.v4.positionWorld,ba.vertexNormalsWorld[3],$),p(i,ba.v3.positionWorld,ba.vertexNormalsWorld[2],da),Z.r=Math.max(0,Math.min(j.color.r*Z.r,1)),Z.g=Math.max(0,Math.min(j.color.g*Z.g,1)),Z.b=Math.max(0,Math.min(j.color.b*Z.b,1)),S.r=Math.max(0,Math.min(j.color.r*S.r,1)),S.g=Math.max(0,Math.min(j.color.g*S.g,1)),S.b=Math.max(0, +Math.min(j.color.b*S.b,1)),$.r=Math.max(0,Math.min(j.color.r*$.r,1)),$.g=Math.max(0,Math.min(j.color.g*$.g,1)),$.b=Math.max(0,Math.min(j.color.b*$.b,1)),da.r=Math.max(0,Math.min(j.color.r*da.r,1)),da.g=Math.max(0,Math.min(j.color.g*da.g,1)),da.b=Math.max(0,Math.min(j.color.b*da.b,1)),Aa=Dc(Z,S,$,da),v(B,N,E,l,y,T),gc(B,N,E,l,y,T,0,0,1,0,0,1,Aa),v(P,ea,Y,G,ja,ha),gc(P,ea,Y,G,ja,ha,1,0,1,1,0,1,Aa)):(R.r=sa.r,R.g=sa.g,R.b=sa.b,p(i,ba.centroidWorld,ba.normalWorld,R),R.r=Math.max(0,Math.min(j.color.r* +R.r,1)),R.g=Math.max(0,Math.min(j.color.g*R.g,1)),R.b=Math.max(0,Math.min(j.color.b*R.b,1)),w(B,N,E,l,Y,G,y,T),j.wireframe?Mb(R,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Gb(R)):(w(B,N,E,l,Y,G,y,T),j.wireframe?Mb(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):Gb(j.color));else if(j instanceof THREE.MeshNormalMaterial)R.r=hc(ba.normalWorld.x),R.g=hc(ba.normalWorld.y),R.b=hc(ba.normalWorld.z),w(B,N,E,l,Y,G,y,T),j.wireframe?Mb(R,j.wireframeLinewidth,j.wireframeLinecap, +j.wireframeLinejoin):Gb(R);else if(j instanceof THREE.MeshDepthMaterial)oa=k.near,Fa=k.far,Z.r=Z.g=Z.b=1-ac(a.positionScreen.z,oa,Fa),S.r=S.g=S.b=1-ac(d.positionScreen.z,oa,Fa),$.r=$.g=$.b=1-ac(g.positionScreen.z,oa,Fa),da.r=da.g=da.b=1-ac(e.positionScreen.z,oa,Fa),Aa=Dc(Z,S,$,da),v(B,N,E,l,y,T),gc(B,N,E,l,y,T,0,0,1,0,0,1,Aa),v(P,ea,Y,G,ja,ha),gc(P,ea,Y,G,ja,ha,1,0,1,1,0,1,Aa)}function v(a,b,c,d,e,f){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(a,b);n.closePath()}function w(a, +b,c,d,e,f,g,h){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(e,f);n.lineTo(g,h);n.lineTo(a,b);n.closePath()}function Mb(a,b,c,e){if(z!=b)n.lineWidth=z=b;if(F!=c)n.lineCap=F=c;if(C!=e)n.lineJoin=C=e;d(a.getContextStyle());n.stroke();Ba.inflate(2*b)}function Gb(a){e(a.getContextStyle());n.fill()}function Uc(a,b,c,d,f,g,h,aa,i,ba,l,j,k){if(0!=k.image.width){if(!0==k.needsUpdate||void 0==Ua[k.id]){var m=k.wrapS==THREE.RepeatWrapping,o=k.wrapT==THREE.RepeatWrapping;Ua[k.id]=n.createPattern(k.image, +m&&o?"repeat":m&&!o?"repeat-x":!m&&o?"repeat-y":"no-repeat");k.needsUpdate=!1}e(Ua[k.id]);var m=k.offset.x/k.repeat.x,o=k.offset.y/k.repeat.y,p=k.image.width*k.repeat.x,Fb=k.image.height*k.repeat.y,h=(h+m)*p,aa=(aa+o)*Fb,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+m)*p-h,ba=(ba+o)*Fb-aa,l=(l+m)*p-h,j=(j+o)*Fb-aa,m=i*j-l*ba;if(0==m){if(void 0===Ia[k.id])b=document.createElement("canvas"),b.width=k.image.width,b.height=k.image.height,b=b.getContext("2d"),b.drawImage(k.image,0,0),Ia[k.id]=b.getImageData(0,0,k.image.width, +k.image.height).data;b=Ia[k.id];h=4*(Math.floor(h)+Math.floor(aa)*k.image.width);R.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);Gb(R)}else m=1/m,k=(j*c-ba*f)*m,ba=(j*d-ba*g)*m,c=(i*f-l*c)*m,d=(i*g-l*d)*m,a=a-k*h-c*aa,h=b-ba*h-d*aa,n.save(),n.transform(k,ba,c,d,a,h),n.fill(),n.restore()}}function gc(a,b,c,d,e,f,g,h,aa,i,ba,l,j){var k,m;k=j.width-1;m=j.height-1;g*=k;h*=m;c-=a;d-=b;e-=a;f-=b;aa=aa*k-g;i=i*m-h;ba=ba*k-g;l=l*m-h;m=1/(aa*l-ba*i);k=(l*c-i*e)*m;i=(l*d-i*f)*m;c=(aa*e-ba*c)*m;d=(aa*f-ba*d)*m;a=a- +k*g-c*h;b=b-i*g-d*h;n.save();n.transform(k,i,c,d,a,b);n.clip();n.drawImage(j,0,0);n.restore()}function Dc(a,b,c,d){var e=~~(255*a.r),f=~~(255*a.g),a=~~(255*a.b),g=~~(255*b.r),h=~~(255*b.g),b=~~(255*b.b),aa=~~(255*c.r),i=~~(255*c.g),c=~~(255*c.b),l=~~(255*d.r),j=~~(255*d.g),d=~~(255*d.b);fb[0]=0>e?0:255f?0:255a?0:255g?0:255h?0:255b?0:255aa?0:255i?0:255c?0:255l?0:255j?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(D.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==I[a]&&(I[a]=document.createElementNS("http://www.w3.org/2000/svg", +"path"),0==B&&I[a].setAttribute("shape-rendering","crispEdges"));return I[a]}function c(a){a=0.5*(a+1);return 0>a?0:1n h,m);for(n=0;6>n;n++)l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+n,0,r,r,s,k[n]);h.generateMipmaps&&m&&l.generateMipmap(l.TEXTURE_CUBE_MAP);h.needsUpdate=!1;if(h.onUpdate)h.onUpdate()}else l.activeTexture(l.TEXTURE0+k),l.bindTexture(l.TEXTURE_CUBE_MAP,h.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(h=n,l.activeTexture(l.TEXTURE0+k),l.bindTexture(l.TEXTURE_CUBE_MAP,h.__webglTexture)):E.setTexture(n,k)}else if("tv"===m){if(!h._array){h._array=[];for(m=0,r=h.texture.length;m< r;m++)h._array[m]=k+m}l.uniform1iv(n,h._array);for(m=0,r=h.texture.length;mc;c++){a.__webglFramebuffer[c]=l.createFramebuffer();a.__webglRenderbuffer[c]=l.createRenderbuffer();l.texImage2D(l.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,d,a.width,a.height,0,d,e,null);var f=a,g=l.TEXTURE_CUBE_MAP_POSITIVE_X+c;l.bindFramebuffer(l.FRAMEBUFFER,a.__webglFramebuffer[c]);l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,g,f.__webglTexture,0);t(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=l.createFramebuffer(),a.__webglRenderbuffer= @@ -542,8 +542,8 @@ b.addSelf(c.object.up.clone().setLength(a.y));c.object.position.addSelf(b);c.tar c.noRotate||c.rotateCamera();c.noZoom||c.zoomCamera();c.noPan||c.panCamera();c.object.position.add(c.target,g);c.checkDistances();c.object.lookAt(c.target);0o;o++)this.materials.push(g)}o=0;r=1;q=2;s= +THREE.CubeGeometry=function(a,b,c,d,e,f,g,h){function i(a,b,c,g,h,i,k,m){var n,o=d||1,p=e||1,q=h/2,r=i/2,s=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",p=f||1;else if("z"===a&&"y"===b||"y"===a&&"z"===b)n="x",o=f||1;var l=o+1,u=p+1,v=h/o,y=i/p,T=new THREE.Vector3;T[n]=0o;o++)this.materials.push(g)}o=0;r=1;q=2;s= 3;n=4;u=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var v in h)void 0!==this.sides[v]&&(this.sides[v]=h[v]);this.sides.px&&i("z","y",-1,-1,c,b,k,o);this.sides.nx&&i("z","y",1,-1,c,b,-k,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,m,n);this.sides.nz&&i("x","y",-1,-1,a,b,-m,u);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=[],k=[];for(i=0;i<=e;i++){var p=[],m=[],o=i/e,q=o*(b-a)+a;for(h=0;h<=d;h++){var n=h/d,r=q*Math.sin(2*n*Math.PI),s=-o*c+g,u=q*Math.cos(2*n*Math.PI);this.vertices.push(new THREE.Vertex(new THREE.Vector3(r,s,u)));p.push(this.vertices.length-1);m.push(new THREE.UV(n,o))}j.push(p);k.push(m)}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(c,d){var e,f;for(y=c.length;0<=--y;){e=y;f=y-1;0>f&&(f=c.length-1); -for(var g=0,h=o+2*k,g=0;gMath.abs(c-i)?[new THREE.UV(b,e),new THREE.UV(d,f),new THREE.UV(j,g),new THREE.UV(p,a)]:[new THREE.UV(c,e),new THREE.UV(i,f),new THREE.UV(k,g),new THREE.UV(m,a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2; THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2;THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2; @@ -576,7 +576,7 @@ THREE.FontUtils={faces:{},face:"helvetiker",weight:"normal",style:"normal",size: k));e.lineTo(i,k);break;case "q":i=b[a++]*c+d;k=b[a++]*c;o=b[a++]*c+d;q=b[a++]*c;e.quadraticCurveTo(o,q,i,k);if(g=f[f.length-1]){p=g.x;m=g.y;for(g=1,h=this.divisions;g<=h;g++){var u=g/h,v=THREE.Shape.Utils.b2(u,p,o,i),u=THREE.Shape.Utils.b2(u,m,q,k);f.push(new THREE.Vector2(v,u))}}break;case "b":if(i=b[a++]*c+d,k=b[a++]*c,o=b[a++]*c+d,q=b[a++]*-c,n=b[a++]*c+d,r=b[a++]*-c,e.bezierCurveTo(i,k,o,q,n,r),g=f[f.length-1]){p=g.x;m=g.y;for(g=1,h=this.divisions;g<=h;g++)u=g/h,v=THREE.Shape.Utils.b3(u,p,o, n,i),u=THREE.Shape.Utils.b3(u,m,q,r,k),f.push(new THREE.Vector2(v,u))}}}return{offset:s.ha*c,points:f,path:e}}}}; (function(a){var b=function(a){for(var b=a.length,e=0,f=b-1,g=0;ge)return null;var f=[],g=[],h=[],i,j,k;if(0=p--){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);k=j+1;e<=k&&(k=0);var m;a:{m=a;var o=i,q=j,n=k,r=e,s=g,u=void 0,v=void 0,t=void 0,w=void 0,z=void 0, -G=void 0,D=void 0,C=void 0,I=void 0,v=m[s[o]].x,t=m[s[o]].y,w=m[s[q]].x,z=m[s[q]].y,G=m[s[n]].x,D=m[s[n]].y;if(1.0E-10>(w-v)*(D-t)-(z-t)*(G-v))m=!1;else{for(u=0;u(w-v)*(C-t)-(z-t)*(F-v))m=!1;else{for(u=0;uo;o++){p=i[o];k=new THREE.Color;k.setRGB(0,0,0);for(var q=0;qv.length&&(p[o]=!0)}for(o in q)if(v=q[o],s=v[0],v=v[1],w=o.split("_"),z=w[0],w=w[1],r=new THREE.Vector3,p[o]?(r.addSelf(h[z].position),r.addSelf(h[w].position),r.multiplyScalar(0.5)):(r.addSelf(j[s]),r.addSelf(j[v]),r.addSelf(h[z].position),r.addSelf(h[w].position),r.multiplyScalar(0.25)), -k[o]=u+d.length+t,i.push(new THREE.Vertex(r)),t++,g.supportUVs&&0!=m.length)v=new THREE.UV,v.u=m[z].u+m[w].u,v.v=m[z].v+m[w].v,v.u/=2,v.v/=2,m.push(v);var K,O;w=["123","12","2","23"];r=["123","23","3","31"];var C=["123","31","1","12"],I=["1234","12","2","23"],Q=["1234","23","3","34"],L=["1234","34","4","41"],B=["1234","41","1","12"];for(o=0,q=j.length;ov.length&&(p[o]=!0)}for(o in q)if(v=q[o],s=v[0],v=v[1],w=o.split("_"),z=w[0],w=w[1],r=new THREE.Vector3,p[o]?(r.addSelf(h[z].position),r.addSelf(h[w].position),r.multiplyScalar(0.5)):(r.addSelf(j[s]),r.addSelf(j[v]),r.addSelf(h[z].position),r.addSelf(h[w].position),r.multiplyScalar(0.25)), +k[o]=u+d.length+t,i.push(new THREE.Vertex(r)),t++,g.supportUVs&&0!=m.length)v=new THREE.UV,v.u=m[z].u+m[w].u,v.v=m[z].v+m[w].v,v.u/=2,v.v/=2,m.push(v);var K,O;w=["123","12","2","23"];r=["123","23","3","31"];var D=["123","31","1","12"],I=["1234","12","2","23"],Q=["1234","23","3","34"],L=["1234","34","4","41"],B=["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.opacity)j.transparent=a.transparent;if(void 0!==a.depthTest)j.depthTest=a.depthTest;if(void 0!==a.vertexColors)if("face"==a.vertexColors)j.vertexColors=THREE.FaceColors;else if(a.vertexColors)j.vertexColors= -THREE.VertexColors;if(a.colorDiffuse)j.color=g(a.colorDiffuse);else if(a.DbgColor)j.color=a.DbgColor;if(a.colorSpecular)j.specular=g(a.colorSpecular);if(a.colorAmbient)j.ambient=g(a.colorAmbient);if(a.transparency)j.opacity=a.transparency;if(a.specularCoef)j.shininess=a.specularCoef;a.mapDiffuse&&b&&f(j,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&f(j,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&f(j,"normalMap", -a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&f(j,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){var i=THREE.ShaderUtils.lib.normal,k=THREE.UniformsUtils.clone(i.uniforms);k.tNormal.texture=j.normalMap;if(a.mapNormalFactor)k.uNormalScale.value=a.mapNormalFactor;if(j.map)k.tDiffuse.texture=j.map,k.enableDiffuse.value=!0;if(j.specularMap)k.tSpecular.texture=j.specularMap,k.enableSpecular.value=!0;if(j.lightMap)k.tAO.texture= -j.lightMap,k.enableAO.value=!0;k.uDiffuseColor.value.setHex(j.color);k.uSpecularColor.value.setHex(j.specular);k.uAmbientColor.value.setHex(j.ambient);k.uShininess.value=j.shininess;if(void 0!==j.opacity)k.uOpacity.value=j.opacity;j=new THREE.ShaderMaterial({fragmentShader:i.fragmentShader,vertexShader:i.vertexShader,uniforms:k,lights:!0,fog:!0})}else j=new THREE[i](j);if(void 0!==a.DbgName)j.name=a.DbgName;return j}};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){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)}; +if(f){a[c].repeat.set(f[0],f[1]);if(1!=f[0])a[c].wrapS=THREE.RepeatWrapping;if(1!=f[1])a[c].wrapT=THREE.RepeatWrapping}g&&a[c].offset.set(g[0],g[1]);if(h){f={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping};if(void 0!==f[h[0]])a[c].wrapS=f[h[0]];if(void 0!==f[h[1]])a[c].wrapT=f[h[1]]}e(a[c],b+"/"+d)}function g(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]}var h=this,i="MeshLambertMaterial",j={color:15658734,opacity:1,map:null,lightMap:null,normalMap:null,wireframe:a.wireframe};if(a.shading){var k= +a.shading.toLowerCase();"phong"===k?i="MeshPhongMaterial":"basic"===k&&(i="MeshBasicMaterial")}if(void 0!==a.blending&&void 0!==THREE[a.blending])j.blending=THREE[a.blending];if(void 0!==a.transparent||1>a.opacity)j.transparent=a.transparent;if(void 0!==a.depthTest)j.depthTest=a.depthTest;if(void 0!==a.depthWrite)j.depthWrite=a.depthWrite;if(void 0!==a.vertexColors)if("face"==a.vertexColors)j.vertexColors=THREE.FaceColors;else if(a.vertexColors)j.vertexColors=THREE.VertexColors;if(a.colorDiffuse)j.color= +g(a.colorDiffuse);else if(a.DbgColor)j.color=a.DbgColor;if(a.colorSpecular)j.specular=g(a.colorSpecular);if(a.colorAmbient)j.ambient=g(a.colorAmbient);if(a.transparency)j.opacity=a.transparency;if(a.specularCoef)j.shininess=a.specularCoef;a.mapDiffuse&&b&&f(j,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&f(j,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&f(j,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset, +a.mapNormalWrap);a.mapSpecular&&b&&f(j,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){i=THREE.ShaderUtils.lib.normal;k=THREE.UniformsUtils.clone(i.uniforms);k.tNormal.texture=j.normalMap;if(a.mapNormalFactor)k.uNormalScale.value=a.mapNormalFactor;if(j.map)k.tDiffuse.texture=j.map,k.enableDiffuse.value=!0;if(j.specularMap)k.tSpecular.texture=j.specularMap,k.enableSpecular.value=!0;if(j.lightMap)k.tAO.texture=j.lightMap,k.enableAO.value=!0;k.uDiffuseColor.value.setHex(j.color); +k.uSpecularColor.value.setHex(j.specular);k.uAmbientColor.value.setHex(j.ambient);k.uShininess.value=j.shininess;if(void 0!==j.opacity)k.uOpacity.value=j.opacity;j=new THREE.ShaderMaterial({fragmentShader:i.fragmentShader,vertexShader:i.vertexShader,uniforms:k,lights:!0,fog:!0})}else j=new THREE[i](j);if(void 0!==a.DbgName)j.name=a.DbgName;return j}};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){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){var h=JSON.parse(g.responseText);a.loadAjaxBuffers(h,c,e,d,f)}else console.error("THREE.BinaryLoader: Couldn't load ["+b+"] ["+g.status+"]")};g.open("GET",b,!0);g.overrideMimeType&&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("THREE.BinaryLoader: 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,j,k,p,m,o,q,n,r,s,u,v,t;function w(a){return a%4?4-a%4:0}function z(a,b){return(new Uint8Array(a,b,1))[0]}function G(a,b){return(new Uint32Array(a,b,1))[0]}function D(b,c){var d,e,f,g,h,i,j,k,l=new Uint32Array(a,c,3*b);for(d=0;da.length?".":a.join("/"))+"/");if((a=T.evaluate("//dae:asset",T,y,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(e=0;ea.length?".":a.join("/"))+"/");if((a=S.evaluate("//dae:asset",S,y,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(e=0;eq)break}if(!s){s=new l(q);t=-1;u=0;for(v=d.length;u=q&&(t=u);q=t;d.splice(-1==q?d.length: q,0,s)}s.addTarget(f,j,g,r)}}else console.log('Could not find transform "'+b.sid+'" in node '+this.id)}for(c=0;cthis.set)this.set=0;return this};G.prototype.parse=function(a){this.id=a.getAttribute("id");for(var b=0;bthis.set)this.set=0;return this};F.prototype.parse=function(a){this.id=a.getAttribute("id");for(var b=0;bthis.transparency,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c]; -if(d instanceof C)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid){var e=oa[this.effect.surface.init_from];if(e)e=THREE.ImageUtils.loadTexture(db+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else"diffuse"== +(new D).parse(c);break;case "shininess":case "reflectivity":case "transparency":var d;d=S.evaluate(".//dae:float",c,y,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);for(var e=d.iterateNext(),f=[];e;)f.push(e),e=d.iterateNext();d=f;0this.transparency,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c]; +if(d instanceof D)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid){var e=oa[this.effect.surface.init_from];if(e)e=THREE.ImageUtils.loadTexture(db+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else"diffuse"== c?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=Ba;return this.material=new THREE.MeshLambertMaterial(a)};K.prototype.parse=function(a){for(var b=0;bf||1f?0:1;if(h.length)for(var e=[],i=0;ir.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){a=THREE.ShaderUtils.lib.normal;k=THREE.UniformsUtils.clone(a.uniforms);n=r.parameters.color;Q=r.parameters.specular;c=r.parameters.ambient;B=r.parameters.shininess;k.tNormal.texture=F.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)k.uNormalScale.value=r.parameters.normalMapFactor;if(r.parameters.map)k.tDiffuse.texture=r.parameters.map,k.enableDiffuse.value=!0;if(r.parameters.lightMap)k.tAO.texture= -r.parameters.lightMap,k.enableAO.value=!0;if(r.parameters.specularMap)k.tSpecular.texture=F.textures[r.parameters.specularMap],k.enableSpecular.value=!0;k.uDiffuseColor.value.setHex(n);k.uSpecularColor.value.setHex(Q);k.uAmbientColor.value.setHex(c);k.uShininess.value=B;if(r.parameters.opacity)k.uOpacity.value=r.parameters.opacity;K=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:k,lights:!0,fog:!0})}else K=new THREE[r.type](r.parameters);F.materials[p]= -K}e();i.callbackSync(F);h()};THREE.UTF8Loader=function(){}; +THREE.SceneLoader.prototype.createScene=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:j+"/"+a}function e(){var a;for(m in L.objects)if(!G.objects[m])if(s=L.objects[m],void 0!==s.geometry){if(I=G.geometries[s.geometry])a=!1,K=G.materials[s.materials[0]],(a=K instanceof THREE.ShaderMaterial)&&I.computeTangents(),t=s.position,w=s.rotation,z=s.quaternion,F=s.scale,z=0,0==s.materials.length&&(K=new THREE.MeshFaceMaterial),1r.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){a=THREE.ShaderUtils.lib.normal;k=THREE.UniformsUtils.clone(a.uniforms);n=r.parameters.color;Q=r.parameters.specular; +c=r.parameters.ambient;B=r.parameters.shininess;k.tNormal.texture=G.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)k.uNormalScale.value=r.parameters.normalMapFactor;if(r.parameters.map)k.tDiffuse.texture=r.parameters.map,k.enableDiffuse.value=!0;if(r.parameters.lightMap)k.tAO.texture=r.parameters.lightMap,k.enableAO.value=!0;if(r.parameters.specularMap)k.tSpecular.texture=G.textures[r.parameters.specularMap],k.enableSpecular.value=!0;k.uDiffuseColor.value.setHex(n);k.uSpecularColor.value.setHex(Q); +k.uAmbientColor.value.setHex(c);k.uShininess.value=B;if(r.parameters.opacity)k.uOpacity.value=r.parameters.opacity;K=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:k,lights:!0,fog:!0})}else K=new THREE[r.type](r.parameters);G.materials[p]=K}e();i.callbackSync(G);h()};THREE.UTF8Loader=function(){}; THREE.UTF8Loader.prototype.load=function(a,b,c){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):console.error("THREE.UTF8Loader: 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;bp&&(p=1);i=Math.floor(i+h);i>this.size-1&&(i=this.size-1);var m=Math.floor(j-h);1>m&&(m=1);j=Math.floor(j+h);j>this.size-1&&(j=this.size-1);var o=Math.floor(k-h);1>o&&(o=1);h=Math.floor(k+h);h>this.size-1&&(h=this.size- 1);for(var q,n,r,s,u,v,t,k=p;kj&&(o=j);for(e=0;e=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(j=!1,k=a(THREE.ShaderFlares.lensFlare)):(j=!0,k=a(THREE.ShaderFlares.lensFlareVertexTexture));p={};m={};p.vertex=b.getAttribLocation(k,"position");p.uv=b.getAttribLocation(k,"uv");m.renderType=b.getUniformLocation(k,"renderType");m.map=b.getUniformLocation(k,"map");m.occlusionMap=b.getUniformLocation(k,"occlusionMap");m.opacity=b.getUniformLocation(k,"opacity");m.color=b.getUniformLocation(k, -"color");m.scale=b.getUniformLocation(k,"scale");m.rotation=b.getUniformLocation(k,"rotation");m.screenPosition=b.getUniformLocation(k,"screenPosition");o=!1};this.render=function(a,d,e,s){var a=a.__webglFlares,u=a.length;if(u){var v=new THREE.Vector3,t=s/e,w=0.5*e,z=0.5*s,G=16/s,D=new THREE.Vector2(G*t,G),C=new THREE.Vector3(1,1,0),I=new THREE.Vector2(1,1),K=m,G=p;b.useProgram(k);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(G.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(G.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(!1);var O,Q,L,B,N;for(O=0;Oc&&(c+=1);1a?b(c,f-1):k[f]a?b(c,f-1):k[f]b||r>b||l>b){i=a.vertices.length;s=f.clone();u=f.clone();n>=r&&n>=l?(k=k.clone(),k.position.lerpSelf(j.position,0.5),s.a=e,s.b=i,s.c=h,u.a=i,u.b=g,u.c=h,3===f.vertexNormals.length&&(e=f.vertexNormals[0].clone(),e.lerpSelf(f.vertexNormals[1],0.5),s.vertexNormals[1].copy(e),u.vertexNormals[0].copy(e)),3===f.vertexColors.length&&(e=f.vertexColors[0].clone(),e.lerpSelf(f.vertexColors[1],0.5), -s.vertexColors[1].copy(e),u.vertexColors[0].copy(e)),f=0):r>=n&&r>=l?(k=j.clone(),k.position.lerpSelf(o.position,0.5),s.a=e,s.b=g,s.c=i,u.a=i,u.b=h,u.c=e,3===f.vertexNormals.length&&(e=f.vertexNormals[1].clone(),e.lerpSelf(f.vertexNormals[2],0.5),s.vertexNormals[2].copy(e),u.vertexNormals[0].copy(e),u.vertexNormals[1].copy(f.vertexNormals[2]),u.vertexNormals[2].copy(f.vertexNormals[0])),3===f.vertexColors.length&&(e=f.vertexColors[1].clone(),e.lerpSelf(f.vertexColors[2],0.5),s.vertexColors[2].copy(e), -u.vertexColors[0].copy(e),u.vertexColors[1].copy(f.vertexColors[2]),u.vertexColors[2].copy(f.vertexColors[0])),f=1):(k=k.clone(),k.position.lerpSelf(o.position,0.5),s.a=e,s.b=g,s.c=i,u.a=i,u.b=g,u.c=h,3===f.vertexNormals.length&&(e=f.vertexNormals[0].clone(),e.lerpSelf(f.vertexNormals[2],0.5),s.vertexNormals[2].copy(e),u.vertexNormals[0].copy(e)),3===f.vertexColors.length&&(e=f.vertexColors[0].clone(),e.lerpSelf(f.vertexColors[2],0.5),s.vertexColors[2].copy(e),u.vertexColors[0].copy(e)),f=2);v.push(s, -u);a.vertices.push(k);for(e=0,g=a.faceVertexUvs.length;eb||r>b||m>b||p>b){q=a.vertices.length;t=a.vertices.length+1;s=f.clone();u=f.clone();n>=r&&n>=m&&n>=p||m>=r&&m>=n&&m>=p?(n=k.clone(),n.position.lerpSelf(j.position,0.5),j=o.clone(),j.position.lerpSelf(l.position,0.5),s.a=e,s.b= -q,s.c=t,s.d=i,u.a=q,u.b=g,u.c=h,u.d=t,4===f.vertexNormals.length&&(e=f.vertexNormals[0].clone(),e.lerpSelf(f.vertexNormals[1],0.5),g=f.vertexNormals[2].clone(),g.lerpSelf(f.vertexNormals[3],0.5),s.vertexNormals[1].copy(e),s.vertexNormals[2].copy(g),u.vertexNormals[0].copy(e),u.vertexNormals[3].copy(g)),4===f.vertexColors.length&&(e=f.vertexColors[0].clone(),e.lerpSelf(f.vertexColors[1],0.5),g=f.vertexColors[2].clone(),g.lerpSelf(f.vertexColors[3],0.5),s.vertexColors[1].copy(e),s.vertexColors[2].copy(g), -u.vertexColors[0].copy(e),u.vertexColors[3].copy(g)),f=0):(n=j.clone(),n.position.lerpSelf(o.position,0.5),j=l.clone(),j.position.lerpSelf(k.position,0.5),s.a=e,s.b=g,s.c=q,s.d=t,u.a=t,u.b=q,u.c=h,u.d=i,4===f.vertexNormals.length&&(e=f.vertexNormals[1].clone(),e.lerpSelf(f.vertexNormals[2],0.5),g=f.vertexNormals[3].clone(),g.lerpSelf(f.vertexNormals[0],0.5),s.vertexNormals[2].copy(e),s.vertexNormals[3].copy(g),u.vertexNormals[0].copy(g),u.vertexNormals[1].copy(e)),4===f.vertexColors.length&&(e=f.vertexColors[1].clone(), -e.lerpSelf(f.vertexColors[2],0.5),g=f.vertexColors[3].clone(),g.lerpSelf(f.vertexColors[0],0.5),s.vertexColors[2].copy(e),s.vertexColors[3].copy(g),u.vertexColors[0].copy(g),u.vertexColors[1].copy(e)),f=1);v.push(s,u);a.vertices.push(n,j);for(e=0,g=a.faceVertexUvs.length;eb||p>b||l>b){j=a.vertices.length;s=f.clone();u=f.clone();n>=p&&n>=l?(k=k.clone(),k.position.lerpSelf(i.position,0.5),s.a=e,s.b=j,s.c=h,u.a=j,u.b=g,u.c=h,3===f.vertexNormals.length&&(e=f.vertexNormals[0].clone(),e.lerpSelf(f.vertexNormals[1],0.5),s.vertexNormals[1].copy(e),u.vertexNormals[0].copy(e)),3===f.vertexColors.length&&(e=f.vertexColors[0].clone(),e.lerpSelf(f.vertexColors[1],0.5), +s.vertexColors[1].copy(e),u.vertexColors[0].copy(e)),f=0):p>=n&&p>=l?(k=i.clone(),k.position.lerpSelf(o.position,0.5),s.a=e,s.b=g,s.c=j,u.a=j,u.b=h,u.c=e,3===f.vertexNormals.length&&(e=f.vertexNormals[1].clone(),e.lerpSelf(f.vertexNormals[2],0.5),s.vertexNormals[2].copy(e),u.vertexNormals[0].copy(e),u.vertexNormals[1].copy(f.vertexNormals[2]),u.vertexNormals[2].copy(f.vertexNormals[0])),3===f.vertexColors.length&&(e=f.vertexColors[1].clone(),e.lerpSelf(f.vertexColors[2],0.5),s.vertexColors[2].copy(e), +u.vertexColors[0].copy(e),u.vertexColors[1].copy(f.vertexColors[2]),u.vertexColors[2].copy(f.vertexColors[0])),f=1):(k=k.clone(),k.position.lerpSelf(o.position,0.5),s.a=e,s.b=g,s.c=j,u.a=j,u.b=g,u.c=h,3===f.vertexNormals.length&&(e=f.vertexNormals[0].clone(),e.lerpSelf(f.vertexNormals[2],0.5),s.vertexNormals[2].copy(e),u.vertexNormals[0].copy(e)),3===f.vertexColors.length&&(e=f.vertexColors[0].clone(),e.lerpSelf(f.vertexColors[2],0.5),s.vertexColors[2].copy(e),u.vertexColors[0].copy(e)),f=2);v.push(s, +u);a.vertices.push(k);for(e=0,g=a.faceVertexUvs.length;eb||p>b||m>b||r>b){q=a.vertices.length;t=a.vertices.length+1;s=f.clone();u=f.clone();n>=p&&n>=m&&n>=r||m>=p&&m>=n&&m>=r?(n=k.clone(),n.position.lerpSelf(i.position,0.5),i=o.clone(),i.position.lerpSelf(l.position,0.5),s.a=e,s.b= +q,s.c=t,s.d=j,u.a=q,u.b=g,u.c=h,u.d=t,4===f.vertexNormals.length&&(e=f.vertexNormals[0].clone(),e.lerpSelf(f.vertexNormals[1],0.5),g=f.vertexNormals[2].clone(),g.lerpSelf(f.vertexNormals[3],0.5),s.vertexNormals[1].copy(e),s.vertexNormals[2].copy(g),u.vertexNormals[0].copy(e),u.vertexNormals[3].copy(g)),4===f.vertexColors.length&&(e=f.vertexColors[0].clone(),e.lerpSelf(f.vertexColors[1],0.5),g=f.vertexColors[2].clone(),g.lerpSelf(f.vertexColors[3],0.5),s.vertexColors[1].copy(e),s.vertexColors[2].copy(g), +u.vertexColors[0].copy(e),u.vertexColors[3].copy(g)),f=0):(n=i.clone(),n.position.lerpSelf(o.position,0.5),i=l.clone(),i.position.lerpSelf(k.position,0.5),s.a=e,s.b=g,s.c=q,s.d=t,u.a=t,u.b=q,u.c=h,u.d=j,4===f.vertexNormals.length&&(e=f.vertexNormals[1].clone(),e.lerpSelf(f.vertexNormals[2],0.5),g=f.vertexNormals[3].clone(),g.lerpSelf(f.vertexNormals[0],0.5),s.vertexNormals[2].copy(e),s.vertexNormals[3].copy(g),u.vertexNormals[0].copy(g),u.vertexNormals[1].copy(e)),4===f.vertexColors.length&&(e=f.vertexColors[1].clone(), +e.lerpSelf(f.vertexColors[2],0.5),g=f.vertexColors[3].clone(),g.lerpSelf(f.vertexColors[0],0.5),s.vertexColors[2].copy(e),s.vertexColors[3].copy(g),u.vertexColors[0].copy(g),u.vertexColors[1].copy(e)),f=1);v.push(s,u);a.vertices.push(n,i);for(e=0,g=a.faceVertexUvs.length;eo-1?f-1:o-1,n=(o+1)%f,r=0>j-1?d-1:j-1,m=(j+1)%d,p=[],q=[0,0,h[4*(o*d+j)]/255*b];p.push([-1,0,h[4*(o*d+r)]/255*b]);p.push([-1,-1,h[4*(l*d+r)]/255*b]);p.push([0,-1, -h[4*(l*d+j)]/255*b]);p.push([1,-1,h[4*(l*d+m)]/255*b]);p.push([1,0,h[4*(o*d+m)]/255*b]);p.push([1,1,h[4*(n*d+m)]/255*b]);p.push([0,1,h[4*(n*d+j)]/255*b]);p.push([-1,1,h[4*(n*d+r)]/255*b]);l=[];r=p.length;for(n=0;no-1?f-1:o-1,n=(o+1)%f,p=0>i-1?d-1:i-1,m=(i+1)%d,r=[],q=[0,0,h[4*(o*d+i)]/255*b];r.push([-1,0,h[4*(o*d+p)]/255*b]);r.push([-1,-1,h[4*(l*d+p)]/255*b]);r.push([0,-1, +h[4*(l*d+i)]/255*b]);r.push([1,-1,h[4*(l*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+i)]/255*b]);r.push([-1,1,h[4*(n*d+p)]/255*b]);l=[];p=r.length;for(n=0;ni)g=d+1;else if(0j)g=d+1;else if(0b&&(b=0);1=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=e.x;else if(e.xc)c=e.y;else if(e.yb)b=e.x;else if(e.xc)c=e.y;else if(e.yMath.abs(d.x-c[0].x)&&1.0E-10>Math.abs(d.y-c[0].y)&&c.splice(c.length-1,1);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,f,e){var g=this.getPoints(),h,i,k,j,o;for(h=0,i=g.length;hMath.abs(d.x-c[0].x)&&1.0E-10>Math.abs(d.y-c[0].y)&&c.splice(c.length-1,1);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,f,e){var g=this.getPoints(),h,j,k,i,o;for(h=0,j=g.length;h -h&&(h+=c.length);h%=c.length;0>g&&(g+=k.length);g%=k.length;f=0<=h-1?h-1:c.length-1;e=0<=g-1?g-1:k.length-1;m=[k[g],c[h],c[f]];m=THREE.FontUtils.Triangulate.area(m);p=[k[g],k[e],c[h]];p=THREE.FontUtils.Triangulate.area(p);o+l>m+p&&(h=n,g=j,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=k.length),g%=k.length,f=0<=h-1?h-1:c.length-1,e=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);e=[k[g],k[e],c[h]];r.push([k[g],c[h],c[f]]);r.push(e);c=o.concat(n).concat(j).concat(l)}return{shape:c, -isolatedPts:r,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,f=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),e,g,h,i,k={};for(e=0,g=d.length;ed;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}for(e=0,g=f.length;ed;d++)i=h[d].x+":"+h[d].y,i=k[i],void 0!==i&&(h[d]=i)}return c.concat(f)}, +THREE.Shape.Utils={removeHoles:function(a,b){var c=a.concat(),d=c.concat(),f,e,g,h,j,k,i,o,l,n,p=[];for(j=0;j +h&&(h+=c.length);h%=c.length;0>g&&(g+=k.length);g%=k.length;f=0<=h-1?h-1:c.length-1;e=0<=g-1?g-1:k.length-1;m=[k[g],c[h],c[f]];m=THREE.FontUtils.Triangulate.area(m);r=[k[g],k[e],c[h]];r=THREE.FontUtils.Triangulate.area(r);o+l>m+r&&(h=n,g=i,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=k.length),g%=k.length,f=0<=h-1?h-1:c.length-1,e=0<=g-1?g-1:k.length-1);o=c.slice(0,h);l=c.slice(h);n=k.slice(g);i=k.slice(0,g);e=[k[g],k[e],c[h]];p.push([k[g],c[h],c[f]]);p.push(e);c=o.concat(n).concat(i).concat(l)}return{shape:c, +isolatedPts:p,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,f=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),e,g,h,j,k={};for(e=0,g=d.length;ed;d++)j=h[d].x+":"+h[d].y,j=k[j],void 0!==j&&(h[d]=j)}for(e=0,g=f.length;ed;d++)j=h[d].x+":"+h[d].y,j=k[j],void 0!==j&&(h[d]=j)}return c.concat(f)}, 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,f){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+ this.b3p3(a,f)}};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",f=void 0!==b.weight?b.weight:"normal",e=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=f;THREE.FontUtils.style=e}; 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=f[0]+(e[0]-f[0])*d,c.y=f[1]+(e[1]-f[1])*d,c.z=f[2]+(e[2]-f[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= +THREE.Animation.prototype.update=function(a){if(this.isPlaying){var b=["pos","rot","scl"],c,d,f,e,g,h,j,k,i=this.data.JIT.hierarchy,o,l;l=this.currentTime+=a*this.timeScale;o=this.currentTime%=this.data.length;k=parseInt(Math.min(o*this.data.fps,this.data.length*this.data.fps),10);for(var n=0,p=this.hierarchy.length;nm;m++){c=b[m];g=j.prevKey[c];h=j.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=f[0]+(e[0]-f[0])*d,c.y=f[1]+(e[1]-f[1])*d,c.z=f[2]+(e[2]-f[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]=f,this.points[2]=e,this.points[3]=this.getNextKeyWith("pos",n,h.index+1).pos,d=0.33*d+0.33,f=this.interpolateCatmullRom(this.points,d),c.x=f[0],c.y=f[1],c.z=f[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(f,e,a.quaternion,d);else if("scl"===c)c=a.scale,c.x=f[0]+(e[0]-f[0])*d,c.y=f[1]+(e[1]-f[1])*d,c.z=f[2]+(e[2]-f[2])*d}}if(this.JITCompile&&void 0===j[0][k]){this.hierarchy[0].updateMatrixWorld(!0);for(n=0;na.length-2?e:e+1;c[3]=e>a.length-3?e:e+2;e=a[c[0]];h=a[c[1]];i=a[c[2]];k=a[c[3]];c=f*f;g=f*c;d[0]=this.interpolate(e[0],h[0],i[0],k[0],f,c,g);d[1]=this.interpolate(e[1],h[1],i[1],k[1],f,c,g);d[2]=this.interpolate(e[2],h[2],i[2],k[2],f,c,g);return d}; +c)THREE.Quaternion.slerp(f,e,a.quaternion,d);else if("scl"===c)c=a.scale,c.x=f[0]+(e[0]-f[0])*d,c.y=f[1]+(e[1]-f[1])*d,c.z=f[2]+(e[2]-f[2])*d}}if(this.JITCompile&&void 0===i[0][k]){this.hierarchy[0].updateMatrixWorld(!0);for(n=0;na.length-2?e:e+1;c[3]=e>a.length-3?e:e+2;e=a[c[0]];h=a[c[1]];j=a[c[2]];k=a[c[3]];c=f*f;g=f*c;d[0]=this.interpolate(e[0],h[0],j[0],k[0],f,c,g);d[1]=this.interpolate(e[1],h[1],j[1],k[1],f,c,g);d[2]=this.interpolate(e[2],h[2],j[2],k[2],f,c,g);return d}; THREE.Animation.prototype.interpolate=function(a,b,c,d,f,e,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*e+a*f+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=g?b.interpolate(c,g):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=!0}}if(this.JITCompile&&void 0===e[0][f]){this.hierarchy[0].updateMatrixWorld(!0);for(a=0;a=g?b.interpolate(c,g):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=!0}}if(this.JITCompile&&void 0===e[0][f]){this.hierarchy[0].updateMatrixWorld(!0);for(a=0;a(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function f(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),p=g.length,q=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(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function f(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),r=g.length,q=0;f=r-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.yj)?1:j));this.object.translateX(b*k);this.object.translateY(b*i);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),g.lengthSq()n;n++)this.materials.push(g)}n=0;p=1;r=2;q= -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,p);this.sides.py&&i("x","z",1,1,a,c,o,r);this.sides.ny&&i("x","z",1,-1,a,c,-o,q);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,f,e,g,h){function j(a,b,c,g,h,i,j,l){var n,m=d||1,o=f||1,p=h/2,r=i/2,q=k.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=e||1;else if("z"===a&&"y"===b||"y"===a&&"z"===b)n="x",m=e||1;var s=m+1,t=o+1,F=h/m,B=i/o,M=new THREE.Vector3;M[n]=0n;n++)this.materials.push(g)}n=0;r=1;p=2;q= +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&&j("z","y",-1,-1,c,b,i,n);this.sides.nx&&j("z","y",1,-1,c,b,-i,r);this.sides.py&&j("x","z",1,1,a,c,o,p);this.sides.ny&&j("x","z",1,-1,a,c,-o,q);this.sides.pz&&j("x","y",1,-1,a,b,l,m);this.sides.nz&&j("x","y",-1,-1,a,b,-l,t);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry; THREE.CubeGeometry.prototype.constructor=THREE.CubeGeometry; -THREE.CylinderGeometry=function(a,b,c,d,f,e){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,f=f||1,h,i,k=[],j=[];for(i=0;i<=f;i++){var o=[],l=[],n=i/f,r=n*(b-a)+a;for(h=0;h<=d;h++){var m=h/d,p=r*Math.sin(2*m*Math.PI),q=-n*c+g,t=r*Math.cos(2*m*Math.PI);this.vertices.push(new THREE.Vertex(new THREE.Vector3(p,q,t)));o.push(this.vertices.length-1);l.push(new THREE.UV(m,n))}k.push(o);j.push(l)}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 f(c,d){var e,f;for(B=c.length;0<=--B;){e=B;f=B-1;0>f&&(f=c.length-1); -for(var g=0,h=n+2*j,g=0;gMath.abs(c-i)?[new THREE.UV(b,f),new THREE.UV(d,e),new THREE.UV(k,g),new THREE.UV(o,a)]:[new THREE.UV(c,f),new THREE.UV(i,e),new THREE.UV(j,g),new THREE.UV(l,a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2; +d=a.vertices[e].position.x,j=a.vertices[e].position.y,e=a.vertices[e].position.z,k=a.vertices[g].position.x,i=a.vertices[g].position.y,g=a.vertices[g].position.z,o=a.vertices[h].position.x,l=a.vertices[h].position.y,a=a.vertices[h].position.z;return 0.01>Math.abs(c-j)?[new THREE.UV(b,f),new THREE.UV(d,e),new THREE.UV(k,g),new THREE.UV(o,a)]:[new THREE.UV(c,f),new THREE.UV(j,e),new THREE.UV(i,g),new THREE.UV(l,a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2; THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2;THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2; -THREE.LatheGeometry=function(a,b,c){THREE.Geometry.call(this);this.steps=b||12;this.angle=c||2*Math.PI;for(var b=this.angle/this.steps,c=[],d=[],f=[],e=[],g=(new THREE.Matrix4).setRotationZ(b),h=0;hf)return null;var e=[],g=[],h=[],i,k,j;if(0=o--){console.log("Warning, unable to triangulate polygon!");break}i=k;f<=i&&(i=0);k=i+1;f<=k&&(k=0);j=k+1;f<=j&&(j=0);var l;a:{l=a;var n=i,r=k,m=j,p=f,q=g,t=void 0,s=void 0,u=void 0,v=void 0,w=void 0, -z=void 0,y=void 0,A=void 0,D=void 0,s=l[q[n]].x,u=l[q[n]].y,v=l[q[r]].x,w=l[q[r]].y,z=l[q[m]].x,y=l[q[m]].y;if(1.0E-10>(v-s)*(y-u)-(w-u)*(z-s))l=!1;else{for(t=0;tf)return null;var e=[],g=[],h=[],j,k,i;if(0=o--){console.log("Warning, unable to triangulate polygon!");break}j=k;f<=j&&(j=0);k=j+1;f<=k&&(k=0);i=k+1;f<=i&&(i=0);var l;a:{l=a;var n=j,p=k,m=i,r=f,q=g,t=void 0,s=void 0,u=void 0,v=void 0,w=void 0, +z=void 0,y=void 0,A=void 0,D=void 0,s=l[q[n]].x,u=l[q[n]].y,v=l[q[p]].x,w=l[q[p]].y,z=l[q[m]].x,y=l[q[m]].y;if(1.0E-10>(v-s)*(y-u)-(w-u)*(z-s))l=!1;else{for(t=0;td?(d=new THREE.Face3(a.index,b.index,c.index,[a.position.clone(),b.position.clone(),c.position.clone()]),d.centroid.addSelf(a.position).addSelf(b.position).addSelf(c.position).divideScalar(3),d.normal=d.centroid.clone().normalize(), -i.faces.push(d),d=Math.atan2(d.centroid.z,-d.centroid.x),i.faceVertexUvs[0].push([h(a.uv,a.position,d),h(b.uv,b.position,d),h(c.uv,c.position,d)])):(d-=1,e(a,g(a,b),g(a,c),d),e(g(a,b),b,g(b,c),d),e(g(a,c),g(b,c),c,d),e(g(a,b),g(b,c),g(a,c),d))}function g(a,b){o[a.index]||(o[a.index]=[]);o[b.index]||(o[b.index]=[]);var c=o[a.index][b.index];void 0===c&&(o[a.index][b.index]=o[b.index][a.index]=c=f((new THREE.Vector3).add(a.position,b.position).divideScalar(2)));return c}function h(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);for(var c=c||1,d=d||0,i=this,k=0,j=a.length;kd?(d=new THREE.Face3(a.index,b.index,c.index,[a.position.clone(),b.position.clone(),c.position.clone()]),d.centroid.addSelf(a.position).addSelf(b.position).addSelf(c.position).divideScalar(3),d.normal=d.centroid.clone().normalize(), +j.faces.push(d),d=Math.atan2(d.centroid.z,-d.centroid.x),j.faceVertexUvs[0].push([h(a.uv,a.position,d),h(b.uv,b.position,d),h(c.uv,c.position,d)])):(d-=1,e(a,g(a,b),g(a,c),d),e(g(a,b),b,g(b,c),d),e(g(a,c),g(b,c),c,d),e(g(a,b),g(b,c),g(a,c),d))}function g(a,b){o[a.index]||(o[a.index]=[]);o[b.index]||(o[b.index]=[]);var c=o[a.index][b.index];void 0===c&&(o[a.index][b.index]=o[b.index][a.index]=c=f((new THREE.Vector3).add(a.position,b.position).divideScalar(2)));return c}function h(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);for(var c=c||1,d=d||0,j=this,k=0,i=a.length;kn;n++){o=i[n];k=new THREE.Color;k.setRGB(0,0,0);for(var r=0;rs.length&&(o[n]=!0)}for(n in r)if(s=r[n],q=s[0],s=s[1],v=n.split("_"),w=v[0],v=v[1],p=new THREE.Vector3,o[n]?(p.addSelf(h[w].position),p.addSelf(h[v].position),p.multiplyScalar(0.5)):(p.addSelf(k[q]),p.addSelf(k[s]),p.addSelf(h[w].position),p.addSelf(h[v].position),p.multiplyScalar(0.25)), -j[n]=t+d.length+u,i.push(new THREE.Vertex(p)),u++,g.supportUVs&&0!=l.length)s=new THREE.UV,s.u=l[w].u+l[v].u,s.v=l[w].v+l[v].v,s.u/=2,s.v/=2,l.push(s);var I,J;v=["123","12","2","23"];p=["123","23","3","31"];var A=["123","31","1","12"],D=["1234","12","2","23"],H=["1234","23","3","34"],C=["1234","34","4","41"],x=["1234","41","1","12"];for(n=0,r=k.length;nn;n++){o=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],q=s[0],s=s[1],v=n.split("_"),w=v[0],v=v[1],r=new THREE.Vector3,o[n]?(r.addSelf(h[w].position),r.addSelf(h[v].position),r.multiplyScalar(0.5)):(r.addSelf(k[q]),r.addSelf(k[s]),r.addSelf(h[w].position),r.addSelf(h[v].position),r.multiplyScalar(0.25)), +i[n]=t+d.length+u,j.push(new THREE.Vertex(r)),u++,g.supportUVs&&0!=l.length)s=new THREE.UV,s.u=l[w].u+l[v].u,s.v=l[w].v+l[v].v,s.u/=2,s.v/=2,l.push(s);var I,J;v=["123","12","2","23"];r=["123","23","3","31"];var A=["123","31","1","12"],D=["1234","12","2","23"],H=["1234","23","3","34"],C=["1234","34","4","41"],x=["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&&e(k,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&e(k,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&e(k,"normalMap", -a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&e(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){var c=c?c:this.extractUrlBase(a),d=d?d:this.extractUrlBase(a),f=this.showProgress?THREE.Loader.prototype.updateProgress:null;this.onLoadStart();this.loadAjaxJSON(this,a,b,c,d,f)}; +if(e){a[c].repeat.set(e[0],e[1]);if(1!=e[0])a[c].wrapS=THREE.RepeatWrapping;if(1!=e[1])a[c].wrapT=THREE.RepeatWrapping}g&&a[c].offset.set(g[0],g[1]);if(h){e={repeat:THREE.RepeatWrapping,mirror:THREE.MirroredRepeatWrapping};if(void 0!==e[h[0]])a[c].wrapS=e[h[0]];if(void 0!==e[h[1]])a[c].wrapT=e[h[1]]}f(a[c],b+"/"+d)}function g(a){return(255*a[0]<<16)+(255*a[1]<<8)+255*a[2]}var h=this,j="MeshLambertMaterial",k={color:15658734,opacity:1,map:null,lightMap:null,normalMap:null,wireframe:a.wireframe};if(a.shading){var i= +a.shading.toLowerCase();"phong"===i?j="MeshPhongMaterial":"basic"===i&&(j="MeshBasicMaterial")}if(void 0!==a.blending&&void 0!==THREE[a.blending])k.blending=THREE[a.blending];if(void 0!==a.transparent||1>a.opacity)k.transparent=a.transparent;if(void 0!==a.depthTest)k.depthTest=a.depthTest;if(void 0!==a.depthWrite)k.depthWrite=a.depthWrite;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&&e(k,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&e(k,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&e(k,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset, +a.mapNormalWrap);a.mapSpecular&&b&&e(k,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){j=THREE.ShaderUtils.lib.normal;i=THREE.UniformsUtils.clone(j.uniforms);i.tNormal.texture=k.normalMap;if(a.mapNormalFactor)i.uNormalScale.value=a.mapNormalFactor;if(k.map)i.tDiffuse.texture=k.map,i.enableDiffuse.value=!0;if(k.specularMap)i.tSpecular.texture=k.specularMap,i.enableSpecular.value=!0;if(k.lightMap)i.tAO.texture=k.lightMap,i.enableAO.value=!0;i.uDiffuseColor.value.setHex(k.color); +i.uSpecularColor.value.setHex(k.specular);i.uAmbientColor.value.setHex(k.ambient);i.uShininess.value=k.shininess;if(void 0!==k.opacity)i.uOpacity.value=k.opacity;k=new THREE.ShaderMaterial({fragmentShader:j.fragmentShader,vertexShader:j.vertexShader,uniforms:i,lights:!0,fog:!0})}else k=new THREE[j](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){var c=c?c:this.extractUrlBase(a),d=d?d:this.extractUrlBase(a),f=this.showProgress?THREE.Loader.prototype.updateProgress:null;this.onLoadStart();this.loadAjaxJSON(this,a,b,c,d,f)}; THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,f,e){var g=new XMLHttpRequest;g.onreadystatechange=function(){if(4==g.readyState)if(200==g.status||0==g.status){var h=JSON.parse(g.responseText);a.loadAjaxBuffers(h,c,f,d,e)}else console.error("THREE.BinaryLoader: Couldn't load ["+b+"] ["+g.status+"]")};g.open("GET",b,!0);g.overrideMimeType&&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,f){var e=new XMLHttpRequest,g=c+"/"+a.buffers,h=0;e.onreadystatechange=function(){4==e.readyState?200==e.status||0==e.status?THREE.BinaryLoader.prototype.createBinModel(e.response,b,d,a.materials):console.error("THREE.BinaryLoader: Couldn't load ["+g+"] ["+e.status+"]"):3==e.readyState?f&&(0==h&&(h=e.getResponseHeader("Content-Length")),f({total:h,loaded:e.responseText.length})):2==e.readyState&&(h=e.getResponseHeader("Content-Length"))}; e.open("GET",g,!0);e.responseType="arraybuffer";e.send(null)}; -THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var f=function(b){var c,f,i,k,j,o,l,n,r,m,p,q,t,s,u;function v(a){return a%4?4-a%4:0}function w(a,b){return(new Uint8Array(a,b,1))[0]}function z(a,b){return(new Uint32Array(a,b,1))[0]}function y(b,c){var d,e,f,g,h,i,j,k,l=new Uint32Array(a,c,3*b);for(d=0;da.length?".":a.join("/"))+"/");if((a=P.evaluate("//dae:asset",P,B,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(f=0;fa.length?".":a.join("/"))+"/");if((a=P.evaluate("//dae:asset",P,B,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(f=0;fq)break}if(!r){r= new L(q);s=-1;t=0;for(u=d.length;t=q&&(s=t);q=s;d.splice(-1==q?d.length:q,0,r)}r.addTarget(g,j,f,p)}}else console.log('Could not find transform "'+b.sid+'" in node '+this.id)}for(c=0;cg||1g?0:1;if(h.length)for(var e=[],i=0;ip.parameters.opacity)p.parameters.transparent=!0;if(p.parameters.normalMap){a=THREE.ShaderUtils.lib.normal;j=THREE.UniformsUtils.clone(a.uniforms);m=p.parameters.color;H=p.parameters.specular;c=p.parameters.ambient;x=p.parameters.shininess;j.tNormal.texture=E.textures[p.parameters.normalMap];if(p.parameters.normalMapFactor)j.uNormalScale.value=p.parameters.normalMapFactor;if(p.parameters.map)j.tDiffuse.texture=p.parameters.map,j.enableDiffuse.value=!0;if(p.parameters.lightMap)j.tAO.texture= -p.parameters.lightMap,j.enableAO.value=!0;if(p.parameters.specularMap)j.tSpecular.texture=E.textures[p.parameters.specularMap],j.enableSpecular.value=!0;j.uDiffuseColor.value.setHex(m);j.uSpecularColor.value.setHex(H);j.uAmbientColor.value.setHex(c);j.uShininess.value=x;if(p.parameters.opacity)j.uOpacity.value=p.parameters.opacity;I=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:j,lights:!0,fog:!0})}else I=new THREE[p.type](p.parameters);E.materials[o]= -I}f();i.callbackSync(E);h()};THREE.UTF8Loader=function(){}; +THREE.SceneLoader.prototype.createScene=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:k+"/"+a}function f(){var a;for(l in C.objects)if(!F.objects[l])if(q=C.objects[l],void 0!==q.geometry){if(D=F.geometries[q.geometry])a=!1,I=F.materials[q.materials[0]],(a=I instanceof THREE.ShaderMaterial)&&D.computeTangents(),u=q.position,v=q.rotation,w=q.quaternion,z=q.scale,w=0,0==q.materials.length&&(I=new THREE.MeshFaceMaterial),1r.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){a=THREE.ShaderUtils.lib.normal;i=THREE.UniformsUtils.clone(a.uniforms);m=r.parameters.color;H=r.parameters.specular; +c=r.parameters.ambient;x=r.parameters.shininess;i.tNormal.texture=F.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)i.uNormalScale.value=r.parameters.normalMapFactor;if(r.parameters.map)i.tDiffuse.texture=r.parameters.map,i.enableDiffuse.value=!0;if(r.parameters.lightMap)i.tAO.texture=r.parameters.lightMap,i.enableAO.value=!0;if(r.parameters.specularMap)i.tSpecular.texture=F.textures[r.parameters.specularMap],i.enableSpecular.value=!0;i.uDiffuseColor.value.setHex(m);i.uSpecularColor.value.setHex(H); +i.uAmbientColor.value.setHex(c);i.uShininess.value=x;if(r.parameters.opacity)i.uOpacity.value=r.parameters.opacity;I=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:i,lights:!0,fog:!0})}else I=new THREE[r.type](r.parameters);F.materials[o]=I}f();j.callbackSync(F);h()};THREE.UTF8Loader=function(){}; THREE.UTF8Loader.prototype.load=function(a,b,c){var d=new XMLHttpRequest,f=void 0!==c.scale?c.scale:1,e=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,f,e,g,h):console.error("THREE.UTF8Loader: 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,f=0;8>f;f++){for(var e=0,g=0;g>1^-(h&1));c[8*g+f]=e}d+=b}b=a.length-d;e=new Uint16Array(b);for(f=g=0;f=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 r,m,p,q,t,s,u,j=o;jk&&(n=k);for(f=0;fj&&(r=j);for(e=0;ej&&(r=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);j=Math.floor(j+h);j>this.size-1&&(j=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(i-h);1>n&&(n=1);h=Math.floor(i+h);h>this.size-1&&(h=this.size- +1);for(var p,m,r,q,t,s,u,i=o;ik&&(n=k);for(f=0;fi&&(p=i);for(e=0;ei&&(p=i);for(g=0;gh.end)h.end=e;c||(c=i)}}for(i in d)h=d[i],this.createAnimation(i,h.start,h.end,a);this.firstAnimation=c}; +THREE.MorphBlendMesh.prototype.autoCreateAnimations=function(a){for(var b=/([a-z]+)(\d+)/,c,d={},f=this.geometry,e=0,g=f.morphTargets.length;eh.end)h.end=e;c||(c=j)}}for(j in d)h=d[j],this.createAnimation(j,h.start,h.end,a);this.firstAnimation=c}; THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];if(c)c.fps=b,c.duration=(c.end-c.start)/c.fps}; THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];if(c)c.duration=b,c.fps=(c.end-c.start)/c.duration};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];if(c)c.weight=b};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];if(c)c.time=b};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("animation["+a+"] undefined")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time){d.direction*=-1;if(d.time>d.duration)d.time=d.duration,d.directionBackwards=!0;if(0>d.time)d.time=0,d.directionBackwards=!1}}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var e=d.startFrame+THREE.Math.clamp(Math.floor(d.time/f),0,d.length-1),g=d.weight; if(e!==d.currentFrame)this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[e]=0,d.lastFrame=d.currentFrame,d.currentFrame=e;f=d.time%f/f;d.directionBackwards&&(f=1-f);this.morphTargetInfluences[d.currentFrame]=f*g;this.morphTargetInfluences[d.lastFrame]=(1-f)*g}}}; -THREE.LensFlarePlugin=function(){function a(a){var c=b.createProgram(),d=b.createShader(b.FRAGMENT_SHADER),e=b.createShader(b.VERTEX_SHADER);b.shaderSource(d,a.fragmentShader);b.shaderSource(e,a.vertexShader);b.compileShader(d);b.compileShader(e);b.attachShader(c,d);b.attachShader(c,e);b.linkProgram(c);return c}var b,c,d,f,e,g,h,i,k,j,o,l,n;this.init=function(r){b=r.context;c=r;d=new Float32Array(16);f=new Uint16Array(6);r=0;d[r++]=-1;d[r++]=-1;d[r++]=0;d[r++]=0;d[r++]=1;d[r++]=-1;d[r++]=1;d[r++]= -0;d[r++]=1;d[r++]=1;d[r++]=1;d[r++]=1;d[r++]=-1;d[r++]=1;d[r++]=0;d[r++]=1;r=0;f[r++]=0;f[r++]=1;f[r++]=2;f[r++]=0;f[r++]=2;f[r++]=3;e=b.createBuffer();g=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,e);b.bufferData(b.ARRAY_BUFFER,d,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);h=b.createTexture();i=b.createTexture();b.bindTexture(b.TEXTURE_2D,h);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D, -b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.bindTexture(b.TEXTURE_2D,i);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,16,16,0,b.RGBA,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST); -b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);0>=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,f,q){var a=a.__webglFlares,t=a.length;if(t){var s=new THREE.Vector3,u=q/f,v=0.5*f,w=0.5*q,z=16/q,y=new THREE.Vector2(z*u,z),A=new THREE.Vector3(1,1,0),D=new THREE.Vector2(1,1),I=l,z=o;b.useProgram(j);n||(b.enableVertexAttribArray(o.vertex),b.enableVertexAttribArray(o.uv),n=!0);b.uniform1i(I.occlusionMap,0);b.uniform1i(I.map, -1);b.bindBuffer(b.ARRAY_BUFFER,e);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 J,H,C,x,F;for(J=0;J=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(k=!1,i=a(THREE.ShaderFlares.lensFlare)):(k=!0,i=a(THREE.ShaderFlares.lensFlareVertexTexture));o={};l={};o.vertex=b.getAttribLocation(i,"position");o.uv=b.getAttribLocation(i,"uv");l.renderType=b.getUniformLocation(i,"renderType");l.map=b.getUniformLocation(i,"map");l.occlusionMap=b.getUniformLocation(i,"occlusionMap");l.opacity=b.getUniformLocation(i,"opacity");l.color=b.getUniformLocation(i, +"color");l.scale=b.getUniformLocation(i,"scale");l.rotation=b.getUniformLocation(i,"rotation");l.screenPosition=b.getUniformLocation(i,"screenPosition");n=!1};this.render=function(a,d,f,q){var a=a.__webglFlares,t=a.length;if(t){var s=new THREE.Vector3,u=q/f,v=0.5*f,w=0.5*q,z=16/q,y=new THREE.Vector2(z*u,z),A=new THREE.Vector3(1,1,0),D=new THREE.Vector2(1,1),I=l,z=o;b.useProgram(i);n||(b.enableVertexAttribArray(o.vertex),b.enableVertexAttribArray(o.uv),n=!0);b.uniform1i(I.occlusionMap,0);b.uniform1i(I.map, +1);b.bindBuffer(b.ARRAY_BUFFER,e);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 J,H,C,x,E;for(J=0;Jv;v++)q[v]=new THREE.Vector3,m[v]=new THREE.Vector3;q=t.shadowCascadeNearZ[p];t=t.shadowCascadeFarZ[p];m[0].set(-1,-1,q);m[1].set(1,-1,q);m[2].set(-1,1,q);m[3].set(1,1,q);m[4].set(-1,-1,t);m[5].set(1,-1,t);m[6].set(-1,1,t);m[7].set(1,1,t);u.originalCamera=k;m=new THREE.Gyroscope;m.position=l.shadowCascadeOffset;m.add(u);m.add(u.target);k.add(m);l.shadowCascadeArray[r]=u;console.log("Created virtualLight",u)}p=l;q=r;t=p.shadowCascadeArray[q];t.position.copy(p.position); -t.target.position.copy(p.target.position);t.lookAt(t.target);t.shadowCameraVisible=p.shadowCameraVisible;t.shadowDarkness=p.shadowDarkness;t.shadowBias=p.shadowCascadeBias[q];m=p.shadowCascadeNearZ[q];p=p.shadowCascadeFarZ[q];t=t.pointsFrustum;t[0].z=m;t[1].z=m;t[2].z=m;t[3].z=m;t[4].z=p;t[5].z=p;t[6].z=p;t[7].z=p;s[n]=u;n++}else s[n]=l,n++;for(j=0,o=s.length;jv;v++)q[v]=new THREE.Vector3,m[v]=new THREE.Vector3;q=t.shadowCascadeNearZ[r];t=t.shadowCascadeFarZ[r];m[0].set(-1,-1,q);m[1].set(1,-1,q);m[2].set(-1,1,q);m[3].set(1,1,q);m[4].set(-1,-1,t);m[5].set(1,-1,t);m[6].set(-1,1,t);m[7].set(1,1,t);u.originalCamera=k;m=new THREE.Gyroscope;m.position=l.shadowCascadeOffset;m.add(u);m.add(u.target);k.add(m);l.shadowCascadeArray[p]=u;console.log("Created virtualLight",u)}r=l;q=p;t=r.shadowCascadeArray[q];t.position.copy(r.position); +t.target.position.copy(r.target.position);t.lookAt(t.target);t.shadowCameraVisible=r.shadowCameraVisible;t.shadowDarkness=r.shadowDarkness;t.shadowBias=r.shadowCascadeBias[q];m=r.shadowCascadeNearZ[q];r=r.shadowCascadeFarZ[q];t=t.pointsFrustum;t[0].z=m;t[1].z=m;t[2].z=m;t[3].z=m;t[4].z=r;t[5].z=r;t[6].z=r;t[7].z=r;s[n]=u;n++}else s[n]=l,n++;for(i=0,o=s.length;ip;p++){q=t[p];q.copy(m[p]);THREE.ShadowMapPlugin.__projector.unprojectVector(q, -r);n.matrixWorldInverse.multiplyVector3(q);if(q.xh.x)h.x=q.x;if(q.yh.y)h.y=q.y;if(q.zh.z)h.z=q.z}n.left=g.x;n.right=h.x;n.top=h.y;n.bottom=g.y;n.updateProjectionMatrix()}n=l.shadowMap;m=l.shadowMatrix;r=l.shadowCamera;r.position.copy(l.matrixWorld.getPosition());r.lookAt(l.target.matrixWorld.getPosition());r.updateMatrixWorld();r.matrixWorldInverse.getInverse(r.matrixWorld);if(l.cameraHelper)l.cameraHelper.lines.visible=l.shadowCameraVisible; -l.shadowCameraVisible&&l.cameraHelper.update(l.shadowCamera);m.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);m.multiplySelf(r.projectionMatrix);m.multiplySelf(r.matrixWorldInverse);if(!r._viewMatrixArray)r._viewMatrixArray=new Float32Array(16);if(!r._projectionMatrixArray)r._projectionMatrixArray=new Float32Array(16);r.matrixWorldInverse.flattenToArray(r._viewMatrixArray);r.projectionMatrix.flattenToArray(r._projectionMatrixArray);e.multiply(r.projectionMatrix,r.matrixWorldInverse);f.setFromMatrix(e); -b.setRenderTarget(n);b.clear();t=i.__webglObjects;for(l=0,n=t.length;lr;r++){q=t[r];q.copy(m[r]);THREE.ShadowMapPlugin.__projector.unprojectVector(q, +p);n.matrixWorldInverse.multiplyVector3(q);if(q.xh.x)h.x=q.x;if(q.yh.y)h.y=q.y;if(q.zh.z)h.z=q.z}n.left=g.x;n.right=h.x;n.top=h.y;n.bottom=g.y;n.updateProjectionMatrix()}n=l.shadowMap;m=l.shadowMatrix;p=l.shadowCamera;p.position.copy(l.matrixWorld.getPosition());p.lookAt(l.target.matrixWorld.getPosition());p.updateMatrixWorld();p.matrixWorldInverse.getInverse(p.matrixWorld);if(l.cameraHelper)l.cameraHelper.lines.visible=l.shadowCameraVisible; +l.shadowCameraVisible&&l.cameraHelper.update(l.shadowCamera);m.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);m.multiplySelf(p.projectionMatrix);m.multiplySelf(p.matrixWorldInverse);if(!p._viewMatrixArray)p._viewMatrixArray=new Float32Array(16);if(!p._projectionMatrixArray)p._projectionMatrixArray=new Float32Array(16);p.matrixWorldInverse.flattenToArray(p._viewMatrixArray);p.projectionMatrix.flattenToArray(p._projectionMatrixArray);e.multiply(p.projectionMatrix,p.matrixWorldInverse);f.setFromMatrix(e); +b.setRenderTarget(n);b.clear();t=j.__webglObjects;for(l=0,n=t.length;l Import-Export", @@ -53,18 +53,23 @@ from bpy_extras.io_utils import ExportHelper, ImportHelper # Custom properties # ################################################################ -bpy.types.Object.THREE_castsShadow = bpy.props.BoolProperty() -bpy.types.Object.THREE_meshCollider = bpy.props.BoolProperty() +bpy.types.Object.THREE_castShadow = bpy.props.BoolProperty() +bpy.types.Object.THREE_receiveShadow = bpy.props.BoolProperty() +bpy.types.Object.THREE_doubleSided = bpy.props.BoolProperty() bpy.types.Object.THREE_exportGeometry = bpy.props.BoolProperty(default = True) -THREE_trigger_types = [("None", "None", "None"), ("Small", "Small", "Small"), ("Large", "Large", "Large")] -bpy.types.Object.THREE_triggerType = EnumProperty(name = "Trigger type", description = "Trigger type", items = THREE_trigger_types, default = "None") - bpy.types.Material.THREE_useVertexColors = bpy.props.BoolProperty() +bpy.types.Material.THREE_depthWrite = bpy.props.BoolProperty(default = True) +bpy.types.Material.THREE_depthTest = bpy.props.BoolProperty(default = True) THREE_material_types = [("Basic", "Basic", "Basic"), ("Phong", "Phong", "Phong"), ("Lambert", "Lambert", "Lambert")] bpy.types.Material.THREE_materialType = EnumProperty(name = "Material type", description = "Material type", items = THREE_material_types, default = "Lambert") +THREE_blending_types = [("NoBlending", "NoBlending", "NoBlending"), ("NormalBlending", "NormalBlending", "NormalBlending"), + ("AdditiveBlending", "AdditiveBlending", "AdditiveBlending"), ("SubtractiveBlending", "SubtractiveBlending", "SubtractiveBlending"), + ("MultiplyBlending", "MultiplyBlending", "MultiplyBlending"), ("AdditiveAlphaBlending", "AdditiveAlphaBlending", "AdditiveAlphaBlending")] +bpy.types.Material.THREE_blendingType = EnumProperty(name = "Blending type", description = "Blending type", items = THREE_blending_types, default = "NormalBlending") + class OBJECT_PT_hello( bpy.types.Panel ): bl_label = "THREE" @@ -83,14 +88,13 @@ class OBJECT_PT_hello( bpy.types.Panel ): row.prop( obj, "THREE_exportGeometry", text="Export geometry" ) row = layout.row() - row.prop( obj, "THREE_castsShadow", text="Casts shadow" ) + row.prop( obj, "THREE_castShadow", text="Casts shadow" ) row = layout.row() - row.prop( obj, "THREE_meshCollider", text="Mesh collider" ) + row.prop( obj, "THREE_receiveShadow", text="Receives shadow" ) row = layout.row() - row.prop( obj, "THREE_triggerType", text="Trigger type" ) - + row.prop( obj, "THREE_doubleSided", text="Double sided" ) class MATERIAL_PT_hello( bpy.types.Panel ): @@ -109,9 +113,18 @@ class MATERIAL_PT_hello( bpy.types.Panel ): row = layout.row() row.prop( mat, "THREE_materialType", text="Material type" ) + row = layout.row() + row.prop( mat, "THREE_blendingType", text="Blending type" ) + row = layout.row() row.prop( mat, "THREE_useVertexColors", text="Use vertex colors" ) + row = layout.row() + row.prop( mat, "THREE_depthWrite", text="Enable depth writing" ) + + row = layout.row() + row.prop( mat, "THREE_depthTest", text="Enable depth testing" ) + # ################################################################ # Importer diff --git a/utils/exporters/blender/2.62/scripts/addons/io_mesh_threejs/export_threejs.py b/utils/exporters/blender/2.62/scripts/addons/io_mesh_threejs/export_threejs.py index 9ae8590294..788854dccb 100644 --- a/utils/exporters/blender/2.62/scripts/addons/io_mesh_threejs/export_threejs.py +++ b/utils/exporters/blender/2.62/scripts/addons/io_mesh_threejs/export_threejs.py @@ -129,9 +129,9 @@ TEMPLATE_OBJECT = """\ "quaternion": %(quaternion)s, "scale" : %(scale)s, "visible" : %(visible)s, - "castsShadow" : %(castsShadow)s, - "meshCollider" : %(meshCollider)s, - "trigger" : %(trigger)s + "castShadow" : %(castShadow)s, + "receiveShadow" : %(receiveShadow)s, + "doubleSided" : %(doubleSided)s }""" TEMPLATE_EMPTY = """\ @@ -140,8 +140,7 @@ TEMPLATE_EMPTY = """\ "position" : %(position)s, "rotation" : %(rotation)s, "quaternion": %(quaternion)s, - "scale" : %(scale)s, - "trigger" : %(trigger)s + "scale" : %(scale)s }""" TEMPLATE_GEOMETRY_LINK = """\ @@ -779,6 +778,11 @@ def extract_materials(mesh, scene, option_colors, option_copy_textures, filepath else: material['shading'] = m.THREE_materialType + material['blending'] = m.THREE_blendingType + material['depthWrite'] = m.THREE_depthWrite + material['depthTest'] = m.THREE_depthTest + material['transparent'] = m.use_transparency + return materials def generate_materials_string(mesh, scene, option_colors, draw_type, option_copy_textures, filepath, offset): @@ -1206,14 +1210,11 @@ def generate_objects(data): if len(group_ids) > 0: group_string = generate_string_list(group_ids) - castsShadow = obj.THREE_castsShadow - meshCollider = obj.THREE_meshCollider - triggerType = obj.THREE_triggerType + castShadow = obj.THREE_castShadow + receiveShadow = obj.THREE_receiveShadow + doubleSided = obj.THREE_doubleSided visible = True - #if obj.draw_type in ["BOUNDS", "WIRE"] and (meshCollider or castsShadow): - if meshCollider or castsShadow: - visible = False geometry_string = generate_string(geometry_id) @@ -1228,9 +1229,9 @@ def generate_objects(data): "quaternion" : generate_vec4(quaternion), "scale" : generate_vec3(scale), - "castsShadow" : generate_bool_property(castsShadow), - "meshCollider" : generate_bool_property(meshCollider), - "trigger" : generate_string(triggerType), + "castShadow" : generate_bool_property(castShadow), + "receiveShadow" : generate_bool_property(receiveShadow), + "doubleSided" : generate_bool_property(doubleSided), "visible" : generate_bool_property(visible) } chunks.append(object_string) @@ -1247,8 +1248,6 @@ def generate_objects(data): if len(group_ids) > 0: group_string = generate_string_list(group_ids) - triggerType = obj.THREE_triggerType - object_string = TEMPLATE_EMPTY % { "object_id" : generate_string(object_id), "group_id" : group_string, @@ -1256,9 +1255,7 @@ def generate_objects(data): "position" : generate_vec3(position), "rotation" : generate_vec3(rotation), "quaternion" : generate_vec4(quaternion), - "scale" : generate_vec3(scale), - - "trigger" : generate_string(triggerType), + "scale" : generate_vec3(scale) } chunks.append(object_string) @@ -1432,6 +1429,10 @@ def extract_material_data(m, option_colors): material['mapNormalFactor'] = textures['normal']['slot'].normal_factor material['shading'] = m.THREE_materialType + material['blending'] = m.THREE_blendingType + material['depthWrite'] = m.THREE_depthWrite + material['depthTest'] = m.THREE_depthTest + material['transparent'] = m.use_transparency return material @@ -1450,7 +1451,7 @@ def guess_material_textures(material): slot = material.texture_slots[i] if slot: texture = slot.texture - if slot.use and texture.type == 'IMAGE': + if slot.use and texture and texture.type == 'IMAGE': if texture.use_normal_map: textures['normal'] = { "texture": texture, "slot": slot } @@ -1520,6 +1521,18 @@ def generate_material_string(material): if material['vertexColors']: parameters += ', "vertexColors": "vertex"' + if material['transparent']: + parameters += ', "transparent": true' + + parameters += ', "blending": "%s"' % material['blending'] + + if not material['depthWrite']: + parameters += ', "depthWrite": false' + + if not material['depthTest']: + parameters += ', "depthTest": false' + + material_string = TEMPLATE_MATERIAL_SCENE % { "material_id" : generate_string(material_id), "type" : generate_string(material_type), -- GitLab