From 9f57ad8211bc2d2a85ce11c1d70bfd8f83eae327 Mon Sep 17 00:00:00 2001 From: alteredq Date: Wed, 17 Oct 2012 03:40:59 +0200 Subject: [PATCH] Editor: removed dummy textures. Experimenting with "geometry.buffersNeedUpdate". --- build/three.js | 12 +- build/three.min.js | 568 ++++++++++---------- editor/index.html | 35 +- editor/js/UI.three.js | 3 +- editor/js/ui/Sidebar.Properties.Material.js | 29 +- src/core/Geometry.js | 4 +- src/renderers/WebGLRenderer.js | 10 +- 7 files changed, 324 insertions(+), 337 deletions(-) diff --git a/build/three.js b/build/three.js index b16f5e1638..4327799615 100644 --- a/build/three.js +++ b/build/three.js @@ -4886,7 +4886,7 @@ THREE.Geometry = function () { this.hasTangents = false; - this.dynamic = true; // the intermediate typearrays will be deleted when set to false + this.dynamic = true; // the intermediate typed arrays will be deleted when set to false // update flags @@ -4897,6 +4897,8 @@ THREE.Geometry = function () { this.tangentsNeedUpdate = false; this.colorsNeedUpdate = false; + this.buffersNeedUpdate = false; + }; THREE.Geometry.prototype = { @@ -19894,6 +19896,12 @@ THREE.WebGLRenderer = function ( parameters ) { material = getBufferMaterial( object, geometryGroup ); + if ( geometry.buffersNeedUpdate ) { + + initMeshBuffers( geometryGroup, object ); + + } + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); if ( geometry.verticesNeedUpdate || geometry.morphTargetsNeedUpdate || geometry.elementsNeedUpdate || @@ -19914,6 +19922,8 @@ THREE.WebGLRenderer = function ( parameters ) { geometry.colorsNeedUpdate = false; geometry.tangentsNeedUpdate = false; + geometry.buffersNeedUpdate = false; + material.attributes && clearCustomAttributes( material ); } diff --git a/build/three.min.js b/build/three.min.js index eb18c43e9d..ee9dc65c2a 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -31,17 +31,17 @@ Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return b):h>j?0.01>h?(b=0.707106781,c=0,d=0.707106781):(c=Math.sqrt(h),b=d/c,d=i/c):0.01>j?(c=b=0.707106781,d=0):(d=Math.sqrt(j),b=f/d,c=i/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-i)*(b-i)+(f-c)*(f-c)+(g-d)*(g-d));0.001>Math.abs(a)&&(a=1);this.x=(b-i)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+j-1)/2);return this}};THREE.Matrix3=function(){this.elements=new Float32Array(9)}; THREE.Matrix3.prototype={constructor:THREE.Matrix3,getInverse:function(a){var b=a.elements,a=b[10]*b[5]-b[6]*b[9],c=-b[10]*b[1]+b[2]*b[9],d=b[6]*b[1]-b[2]*b[5],e=-b[10]*b[4]+b[6]*b[8],f=b[10]*b[0]-b[2]*b[8],g=-b[6]*b[0]+b[2]*b[4],h=b[9]*b[4]-b[5]*b[8],i=-b[9]*b[0]+b[1]*b[8],j=b[5]*b[0]-b[1]*b[4],b=b[0]*a+b[1]*e+b[2]*h;0===b&&console.warn("Matrix3.getInverse(): determinant == 0");var b=1/b,l=this.elements;l[0]=b*a;l[1]=b*c;l[2]=b*d;l[3]=b*e;l[4]=b*f;l[5]=b*g;l[6]=b*h;l[7]=b*i;l[8]=b*j;return this}, transpose:function(){var a,b=this.elements;a=b[1];b[1]=b[3];b[3]=a;a=b[2];b[2]=b[6];b[6]=a;a=b[5];b[5]=b[7];b[7]=a;return this},transposeIntoArray:function(a){var b=this.m;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this}};THREE.Matrix4=function(a,b,c,d,e,f,g,h,i,j,l,n,m,p,o,q){this.elements=new Float32Array(16);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!==l?l:1,n||0,m||0,p||0,o||0,void 0!==q?q:1)}; -THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,i,j,l,n,m,p,o,q){var s=this.elements;s[0]=a;s[4]=b;s[8]=c;s[12]=d;s[1]=e;s[5]=f;s[9]=g;s[13]=h;s[2]=i;s[6]=j;s[10]=l;s[14]=n;s[3]=m;s[7]=p;s[11]=o;s[15]=q;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){a=a.elements;this.set(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]);return this},lookAt:function(a,b,c){var d=this.elements, -e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();0===g.length()&&(g.z=1);e.cross(c,g).normalize();0===e.length()&&(g.x+=1E-4,e.cross(c,g).normalize());f.cross(g,e);d[0]=e.x;d[4]=f.x;d[8]=g.x;d[1]=e.y;d[5]=f.y;d[9]=g.y;d[2]=e.z;d[6]=f.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],i=c[12],j=c[1],l=c[5],n=c[9],m=c[13],p=c[2],o=c[6],q=c[10],s=c[14],t=c[3],z=c[7],u=c[11],c=c[15],r=d[0],B=d[4],x=d[8], -v=d[12],A=d[1],E=d[5],C=d[9],G=d[13],J=d[2],H=d[6],M=d[10],I=d[14],F=d[3],K=d[7],L=d[11],d=d[15];e[0]=f*r+g*A+h*J+i*F;e[4]=f*B+g*E+h*H+i*K;e[8]=f*x+g*C+h*M+i*L;e[12]=f*v+g*G+h*I+i*d;e[1]=j*r+l*A+n*J+m*F;e[5]=j*B+l*E+n*H+m*K;e[9]=j*x+l*C+n*M+m*L;e[13]=j*v+l*G+n*I+m*d;e[2]=p*r+o*A+q*J+s*F;e[6]=p*B+o*E+q*H+s*K;e[10]=p*x+o*C+q*M+s*L;e[14]=p*v+o*G+q*I+s*d;e[3]=t*r+z*A+u*J+c*F;e[7]=t*B+z*E+u*H+c*K;e[11]=t*x+z*C+u*M+c*L;e[15]=t*v+z*G+u*I+c*d;return this},multiplySelf:function(a){return this.multiply(this, +THREE.Matrix4.prototype={constructor:THREE.Matrix4,set:function(a,b,c,d,e,f,g,h,i,j,l,n,m,p,o,q){var r=this.elements;r[0]=a;r[4]=b;r[8]=c;r[12]=d;r[1]=e;r[5]=f;r[9]=g;r[13]=h;r[2]=i;r[6]=j;r[10]=l;r[14]=n;r[3]=m;r[7]=p;r[11]=o;r[15]=q;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){a=a.elements;this.set(a[0],a[4],a[8],a[12],a[1],a[5],a[9],a[13],a[2],a[6],a[10],a[14],a[3],a[7],a[11],a[15]);return this},lookAt:function(a,b,c){var d=this.elements, +e=THREE.Matrix4.__v1,f=THREE.Matrix4.__v2,g=THREE.Matrix4.__v3;g.sub(a,b).normalize();0===g.length()&&(g.z=1);e.cross(c,g).normalize();0===e.length()&&(g.x+=1E-4,e.cross(c,g).normalize());f.cross(g,e);d[0]=e.x;d[4]=f.x;d[8]=g.x;d[1]=e.y;d[5]=f.y;d[9]=g.y;d[2]=e.z;d[6]=f.z;d[10]=g.z;return this},multiply:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],i=c[12],j=c[1],l=c[5],n=c[9],m=c[13],p=c[2],o=c[6],q=c[10],r=c[14],s=c[3],A=c[7],u=c[11],c=c[15],t=d[0],B=d[4],x=d[8], +v=d[12],z=d[1],C=d[5],D=d[9],G=d[13],H=d[2],I=d[6],L=d[10],J=d[14],M=d[3],F=d[7],K=d[11],d=d[15];e[0]=f*t+g*z+h*H+i*M;e[4]=f*B+g*C+h*I+i*F;e[8]=f*x+g*D+h*L+i*K;e[12]=f*v+g*G+h*J+i*d;e[1]=j*t+l*z+n*H+m*M;e[5]=j*B+l*C+n*I+m*F;e[9]=j*x+l*D+n*L+m*K;e[13]=j*v+l*G+n*J+m*d;e[2]=p*t+o*z+q*H+r*M;e[6]=p*B+o*C+q*I+r*F;e[10]=p*x+o*D+q*L+r*K;e[14]=p*v+o*G+q*J+r*d;e[3]=s*t+A*z+u*H+c*M;e[7]=s*B+A*C+u*I+c*F;e[11]=s*x+A*D+u*L+c*K;e[15]=s*v+A*G+u*J+c*d;return this},multiplySelf:function(a){return this.multiply(this, a)},multiplyToArray:function(a,b,c){var d=this.elements;this.multiply(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},multiplyVector3:function(a){var b=this.elements, c=a.x,d=a.y,e=a.z,f=1/(b[3]*c+b[7]*d+b[11]*e+b[15]);a.x=(b[0]*c+b[4]*d+b[8]*e+b[12])*f;a.y=(b[1]*c+b[5]*d+b[9]*e+b[13])*f;a.z=(b[2]*c+b[6]*d+b[10]*e+b[14])*f;return a},multiplyVector4:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w;a.x=b[0]*c+b[4]*d+b[8]*e+b[12]*f;a.y=b[1]*c+b[5]*d+b[9]*e+b[13]*f;a.z=b[2]*c+b[6]*d+b[10]*e+b[14]*f;a.w=b[3]*c+b[7]*d+b[11]*e+b[15]*f;return a},multiplyVector3Array:function(a){for(var b=THREE.Matrix4.__v1,c=0,d=a.length;cd;d++)a=b[d],a.divideScalar(Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z))}; +THREE.Frustum.prototype.setFromMatrix=function(a){var b=this.planes,c=a.elements,a=c[0],d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],i=c[6],j=c[7],l=c[8],n=c[9],m=c[10],p=c[11],o=c[12],q=c[13],r=c[14],c=c[15];b[0].set(f-a,j-g,p-l,c-o);b[1].set(f+a,j+g,p+l,c+o);b[2].set(f+d,j+h,p+n,c+q);b[3].set(f-d,j-h,p-n,c-q);b[4].set(f-e,j-i,p-m,c-r);b[5].set(f+e,j+i,p+m,c+r);for(d=0;6>d;d++)a=b[d],a.divideScalar(Math.sqrt(a.x*a.x+a.y*a.y+a.z*a.z))}; THREE.Frustum.prototype.contains=function(a){for(var b=0,c=this.planes,b=a.matrixWorld,d=b.elements,a=-a.geometry.boundingSphere.radius*b.getMaxScaleOnAxis(),e=0;6>e;e++)if(b=c[e].x*d[12]+c[e].y*d[13]+c[e].z*d[14]+c[e].w,b<=a)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3; (function(a){a.Ray=function(b,c,d,e){this.origin=b||new a.Vector3;this.direction=c||new a.Vector3;this.near=d||0;this.far=e||Infinity};var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3,e=new a.Vector3,f=new a.Vector3,g=new a.Vector3,h=new a.Matrix4,i=function(a,b){return a.distance-b.distance},j=new a.Vector3,l=new a.Vector3,n=new a.Vector3,m=function(a,b,c){j.sub(c,a);var d=j.dot(b),a=l.add(a,n.copy(b).multiplyScalar(d));return c.distanceTo(a)},p=function(a,b,c,d){j.sub(d,b);l.sub(c,b);n.sub(a, b);var a=j.dot(j),b=j.dot(l),c=j.dot(n),e=l.dot(l),d=l.dot(n),f=1/(a*e-b*b),e=(e*c-b*d)*f,a=(a*d-b*c)*f;return 0<=e&&0<=a&&1>e+a},o=function(i,l,j){var n,o;if(i instanceof a.Particle){n=m(l.origin,l.direction,i.matrixWorld.getPosition());if(n>i.scale.x)return j;o={distance:n,point:i.position,face:null,object:i};j.push(o)}else if(i instanceof a.Mesh){var q=i.geometry.boundingSphere.radius*i.matrixWorld.getMaxScaleOnAxis();n=m(l.origin,l.direction,i.matrixWorld.getPosition());if(n>q)return j;var x, -v,A=i.geometry,E=A.vertices,C,G,J;C=i.geometry.materials;G=i.material instanceof a.MeshFaceMaterial;var H,M=l.precision;i.matrixRotationWorld.extractRotation(i.matrixWorld);b.copy(l.origin);h.getInverse(i.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(l.direction);h.rotateAxis(d).normalize();q=0;for(x=A.faces.length;qv)&&(J===a.DoubleSide|| -(J===a.FrontSide?0>n:0l.far||(o={distance:n,point:v,face:o,faceIndex:q,object:i},j.push(o)));else if(o instanceof a.Face4&&(n=E[o.a],v=E[o.b],J=E[o.c],H=E[o.d],p(g,n,v,H)||p(g,v,J,H)))v=i.matrixWorld.multiplyVector3(g.clone()),n=b.distanceTo(v),nl.far||(o={distance:n,point:v,face:o,faceIndex:q,object:i},j.push(o))}}, +v,z=i.geometry,C=z.vertices,D,G,H;D=i.geometry.materials;G=i.material instanceof a.MeshFaceMaterial;var I,L=l.precision;i.matrixRotationWorld.extractRotation(i.matrixWorld);b.copy(l.origin);h.getInverse(i.matrixWorld);c.copy(b);h.multiplyVector3(c);d.copy(l.direction);h.rotateAxis(d).normalize();q=0;for(x=z.faces.length;qv)&&(H===a.DoubleSide|| +(H===a.FrontSide?0>n:0l.far||(o={distance:n,point:v,face:o,faceIndex:q,object:i},j.push(o)));else if(o instanceof a.Face4&&(n=C[o.a],v=C[o.b],H=C[o.c],I=C[o.d],p(g,n,v,I)||p(g,v,H,I)))v=i.matrixWorld.multiplyVector3(g.clone()),n=b.distanceTo(v),nl.far||(o={distance:n,point:v,face:o,faceIndex:q,object:i},j.push(o))}}, q=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;df?d:f,e=e> g?e:g);a()};this.add3Points=function(f,g,l,n,m,p){!0===h?(h=!1,b=fl?f>m?f:m:l>m?l:m,e=g>n?g>p?g:p:n>p?n:p):(b=fl?f>m?f>d?f:d:m>d?m:d:l>m?l>d?l:d:m>d?m:d,e=g>n?g>p?g>e?g:e:p>e?p:e:n>p?n>e?n:e:p>e?p:e);a()};this.addRectangle=function(f){!0===h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=be&&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(d< -c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var e,f,g=[],h=0,i,j,l=[],n=0,m,p,o=[],q=0,s,t=[],z=0,u,r,B=[],x=0,v,A,E=[],C=0,G={objects:[],sprites:[],lights:[],elements:[]},J=new THREE.Vector3,H=new THREE.Vector4,M=new THREE.Matrix4,I=new THREE.Matrix4,F=new THREE.Frustum,K=new THREE.Vector4,L=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);M.multiply(b.projectionMatrix,b.matrixWorldInverse);M.multiplyVector3(a);return a};this.unprojectVector= -function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);M.multiply(b.matrixWorld,b.projectionMatrixInverse);M.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.projectScene=function(g,h,n,N){var ea=h.near,R=h.far,ra=!1,ma,P,fa,W,V,ia,Y,ca,Ha,Qa,Ja,Va,oa,Wa,jb,Sa;A=r=s=p=0;G.elements.length=0;g.updateMatrixWorld();void 0=== -h.parent&&h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);M.multiply(h.projectionMatrix,h.matrixWorldInverse);F.setFromMatrix(M);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var fb=function(b){for(var c=0,d=b.children.length;cea&&i.positionScreen.z(Y.positionScreen.x-W.positionScreen.x)*(V.positionScreen.y-W.positionScreen.y)-(Y.positionScreen.y-W.positionScreen.y)*(V.positionScreen.x-W.positionScreen.x),ia===THREE.DoubleSide||ra===(ia===THREE.FrontSide))p===q?(oa=new THREE.RenderableFace3, -o.push(oa),q++,p++,m=oa):m=o[p++],m.v1.copy(W),m.v2.copy(V),m.v3.copy(Y);else continue;else continue;else if(P instanceof THREE.Face4)if(W=l[P.a],V=l[P.b],Y=l[P.c],oa=l[P.d],!0===W.visible&&!0===V.visible&&!0===Y.visible&&!0===oa.visible)if(ra=0>(oa.positionScreen.x-W.positionScreen.x)*(V.positionScreen.y-W.positionScreen.y)-(oa.positionScreen.y-W.positionScreen.y)*(V.positionScreen.x-W.positionScreen.x)||0>(V.positionScreen.x-Y.positionScreen.x)*(oa.positionScreen.y-Y.positionScreen.y)-(V.positionScreen.y- -Y.positionScreen.y)*(oa.positionScreen.x-Y.positionScreen.x),ia===THREE.DoubleSide||ra===(ia===THREE.FrontSide)){if(s===z){var qb=new THREE.RenderableFace4;t.push(qb);z++;s++;m=qb}else m=t[s++];m.v1.copy(W);m.v2.copy(V);m.v3.copy(Y);m.v4.copy(oa)}else continue;else continue;m.normalWorld.copy(P.normal);!1===ra&&(ia===THREE.BackSide||ia===THREE.DoubleSide)&&m.normalWorld.negate();Qa.multiplyVector3(m.normalWorld);m.centroidWorld.copy(P.centroid);Ha.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld); -M.multiplyVector3(m.centroidScreen);Y=P.vertexNormals;W=0;for(V=Y.length;WH.z&&(A===C?(ea=new THREE.RenderableParticle,E.push(ea),C++,A++,v=ea):v=E[A++],v.object=ca,v.x=H.x/H.w,v.y=H.y/H.w,v.z=H.z,v.rotation=ca.rotation.z,v.scale.x=ca.scale.x*Math.abs(v.x-(H.x+h.projectionMatrix.elements[0])/(H.w+h.projectionMatrix.elements[12])),v.scale.y=ca.scale.y* -Math.abs(v.y-(H.y+h.projectionMatrix.elements[5])/(H.w+h.projectionMatrix.elements[13])),v.material=ca.material,G.elements.push(v)));!0===N&&G.elements.sort(c);return G}};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}; +c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var e,f,g=[],h=0,i,j,l=[],n=0,m,p,o=[],q=0,r,s=[],A=0,u,t,B=[],x=0,v,z,C=[],D=0,G={objects:[],sprites:[],lights:[],elements:[]},H=new THREE.Vector3,I=new THREE.Vector4,L=new THREE.Matrix4,J=new THREE.Matrix4,M=new THREE.Frustum,F=new THREE.Vector4,K=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);L.multiply(b.projectionMatrix,b.matrixWorldInverse);L.multiplyVector3(a);return a};this.unprojectVector= +function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);L.multiply(b.matrixWorld,b.projectionMatrixInverse);L.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.projectScene=function(g,h,n,N){var X=h.near,sa=h.far,P=!1,ia,O,ga,V,Z,ea,Y,ca,Ia,La,Ea,ua,ra,Ma,kb,cb;z=t=r=p=0;G.elements.length=0;g.updateMatrixWorld();void 0===h.parent&& +h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);L.multiply(h.projectionMatrix,h.matrixWorldInverse);M.setFromMatrix(L);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var Ua=function(b){for(var c=0,d=b.children.length;cX&&i.positionScreen.z(Y.positionScreen.x-V.positionScreen.x)*(Z.positionScreen.y-V.positionScreen.y)-(Y.positionScreen.y-V.positionScreen.y)*(Z.positionScreen.x-V.positionScreen.x),ea===THREE.DoubleSide||P===(ea===THREE.FrontSide))p===q?(ra=new THREE.RenderableFace3, +o.push(ra),q++,p++,m=ra):m=o[p++],m.v1.copy(V),m.v2.copy(Z),m.v3.copy(Y);else continue;else continue;else if(O instanceof THREE.Face4)if(V=l[O.a],Z=l[O.b],Y=l[O.c],ra=l[O.d],!0===V.visible&&!0===Z.visible&&!0===Y.visible&&!0===ra.visible)if(P=0>(ra.positionScreen.x-V.positionScreen.x)*(Z.positionScreen.y-V.positionScreen.y)-(ra.positionScreen.y-V.positionScreen.y)*(Z.positionScreen.x-V.positionScreen.x)||0>(Z.positionScreen.x-Y.positionScreen.x)*(ra.positionScreen.y-Y.positionScreen.y)-(Z.positionScreen.y- +Y.positionScreen.y)*(ra.positionScreen.x-Y.positionScreen.x),ea===THREE.DoubleSide||P===(ea===THREE.FrontSide)){if(r===A){var gb=new THREE.RenderableFace4;s.push(gb);A++;r++;m=gb}else m=s[r++];m.v1.copy(V);m.v2.copy(Z);m.v3.copy(Y);m.v4.copy(ra)}else continue;else continue;m.normalWorld.copy(O.normal);!1===P&&(ea===THREE.BackSide||ea===THREE.DoubleSide)&&m.normalWorld.negate();La.multiplyVector3(m.normalWorld);m.centroidWorld.copy(O.centroid);Ia.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld); +L.multiplyVector3(m.centroidScreen);Y=O.vertexNormals;V=0;for(Z=Y.length;VI.z&&(z===D?(X=new THREE.RenderableParticle,C.push(X),D++,z++,v=X):v=C[z++],v.object=ca,v.x=I.x/I.w,v.y=I.y/I.w,v.z=I.z,v.rotation=ca.rotation.z,v.scale.x=ca.scale.x*Math.abs(v.x-(I.x+h.projectionMatrix.elements[0])/(I.w+h.projectionMatrix.elements[12])),v.scale.y=ca.scale.y*Math.abs(v.y- +(I.y+h.projectionMatrix.elements[5])/(I.w+h.projectionMatrix.elements[13])),v.material=ca.material,G.elements.push(v)));!0===N&&G.elements.sort(c);return G}};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,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),e=Math.cos(a.z/2),f=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);void 0===b||"XYZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"YXZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d* h-f*g*e,this.w=c*d*e+f*g*h):"ZXY"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"ZYX"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e+f*g*h):"YZX"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e-f*g*h):"XZY"===b&&(this.x=f*d*e-c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e+f*g*h);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=a.elements,c=b[0],a=b[4],d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],i=b[6],b=b[10],j=c+f+b;0f&&c>b?(c=2*Math.sqrt(1+c-f-b),this.w=(i-g)/c,this.x=0.25*c,this.y=(a+e)/c,this.z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this.w=(d-h)/c,this.x=(a+e)/c,this.y=0.25*c,this.z=(g+i)/c):(c=2*Math.sqrt(1+b-c-f),this.w=(e-a)/c,this.x=(d+h)/c,this.y=(g+i)/c,this.z=0.25*c);return this},calculateW:function(){this.w= @@ -102,8 +102,8 @@ THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE. return a}};THREE.Face4=function(a,b,c,d,e,f,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3}; THREE.Face4.prototype={constructor:THREE.Face4,clone:function(){var a=new THREE.Face4(this.a,this.b,this.c,this.d);a.normal.copy(this.normal);a.color.copy(this.color);a.centroid.copy(this.centroid);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;be? --1:1,f.vertexTangents[d]=new THREE.Vector4(H.x,H.y,H.z,e)}this.hasTangents=!0},computeBoundingBox:function(){this.boundingBox||(this.boundingBox={min:new THREE.Vector3,max:new THREE.Vector3});if(0c.x&&(c.x=a.x),a.yc.y&&(c.y=a.y),a.z +i.copy(e.normal),e instanceof THREE.Face3?(j.a.copy(e.vertexNormals[0]),j.b.copy(e.vertexNormals[1]),j.c.copy(e.vertexNormals[2])):(j.a.copy(e.vertexNormals[0]),j.b.copy(e.vertexNormals[1]),j.c.copy(e.vertexNormals[2]),j.d.copy(e.vertexNormals[3]))}c=0;for(d=this.faces.length;ce? +-1:1,f.vertexTangents[d]=new THREE.Vector4(I.x,I.y,I.z,e)}this.hasTangents=!0},computeBoundingBox:function(){this.boundingBox||(this.boundingBox={min:new THREE.Vector3,max:new THREE.Vector3});if(0c.x&&(c.x=a.x),a.yc.y&&(c.y=a.y),a.z c.z&&(c.z=a.z)}else this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){var a=0;null===this.boundingSphere&&(this.boundingSphere={radius:0});for(var b=0,c=this.vertices.length;ba&&(a=d)}this.boundingSphere.radius=Math.sqrt(a)},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g,h,i;f=0;for(g=this.vertices.length;fb.max.x&&(b.max.x=c),db.max.y&&(b.max.y=d),eb.max.z&&(b.max.z=e);if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){this.boundingSphere||(this.boundingSphere={radius:0});var a=this.attributes.position.array; if(a){for(var b,c=0,d,e,f=0,g=a.length;fc&&(c=b);this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position&&this.attributes.index){var a,b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;aR?-1:1;h[4*a]=L.x;h[4*a+1]=L.y;h[4*a+2]=L.z;h[4*a+3]=N}if(void 0===this.attributes.index|| +g=this.attributes.position.array,h=this.attributes.normal.array,i,j,l,n,m,p,o=new THREE.Vector3,q=new THREE.Vector3,r=new THREE.Vector3,s=new THREE.Vector3,A=new THREE.Vector3;c=0;for(d=e.length;csa?-1:1;h[4*a]=K.x;h[4*a+1]=K.y;h[4*a+2]=K.z;h[4*a+3]=N}if(void 0===this.attributes.index|| void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var b=this.attributes.index.array,c=this.attributes.position.array,d=this.attributes.normal.array,e=this.attributes.uv.array,f=c.length/3;if(void 0===this.attributes.tangent){var g=4*f;this.attributes.tangent={itemSize:4,array:new Float32Array(g),numItems:g}}for(var h=this.attributes.tangent.array, -i=[],j=[],g=0;gthis.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1: f+2;j=this.points[c[0]];l=this.points[c[1]];n=this.points[c[2]];m=this.points[c[3]];h=g*g;i=g*h;d.x=b(j.x,l.x,n.x,m.x,g,h,i);d.y=b(j.y,l.y,n.y,m.y,g,h,i);d.z=b(j.z,l.z,n.z,m.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;aa.length?".":a.join("/"))+"/"},initMaterials:function(a,b,c){a.materials=[];for(var d=0;da.opacity)i.transparent=a.transparent;void 0!==a.depthTest&&(i.depthTest=a.depthTest);void 0!==a.depthWrite&&(i.depthWrite=a.depthWrite);void 0!==a.visible&&(i.visible=a.visible);void 0!== a.flipSided&&(i.side=THREE.BackSide);void 0!==a.doubleSided&&(i.side=THREE.DoubleSide);void 0!==a.wireframe&&(i.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"===a.vertexColors?i.vertexColors=THREE.FaceColors:a.vertexColors&&(i.vertexColors=THREE.VertexColors));a.colorDiffuse?i.color=f(a.colorDiffuse):a.DbgColor&&(i.color=a.DbgColor);a.colorSpecular&&(i.specular=f(a.colorSpecular));a.colorAmbient&&(i.ambient=f(a.colorAmbient));a.transparency&&(i.opacity=a.transparency);a.specularCoef&&(i.shininess= a.specularCoef);a.mapDiffuse&&b&&e(i,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap,a.mapDiffuseAnisotropy);a.mapLight&&b&&e(i,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&e(i,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&e(i,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&e(i,"specularMap", @@ -153,24 +153,24 @@ THREE.BinaryLoader.prototype.load=function(a,b,c,d){var c=c?c:this.extractUrlBas 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.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(){if(4==f.readyState)if(200==f.status||0==f.status){var c=f.response;void 0===c&&(c=(new Uint8Array(f.responseBody)).buffer);THREE.BinaryLoader.prototype.createBinModel(c,b,d,a.materials)}else console.error("THREE.BinaryLoader: Couldn't load ["+g+"] ["+f.status+"]");else 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,l,n,m,p,o,q,s,t,z,u,r;function B(a){return a%4?4-a%4:0}function x(a,b){return(new Uint8Array(a,b,1))[0]}function v(a,b){return(new Uint32Array(a,b,1))[0]}function A(b,c){var d,e,f,g,h,i,l,j,n=new Uint32Array(a,c,3*b);for(d=0;dz;z++)q+=String.fromCharCode(b[O+z]);c=x(r,O+12);x(r,O+13);x(r,O+14);x(r,O+15);e=x(r,O+16);i=x(r,O+17);j=x(r,O+18);l=x(r,O+19);n=v(r,O+20);m=v(r,O+20+4);p=v(r,O+20+8);o=v(r,O+20+12);q=v(r,O+20+16);s=v(r,O+20+20);t= -v(r,O+20+24);z=v(r,O+20+28);b=v(r,O+20+32);u=v(r,O+20+36);r=v(r,O+20+40);I+=c;O=3*e+l;$=4*e+l;L=o*O;c=q*(O+3*i);e=s*(O+3*j);l=t*(O+3*i+3*j);O=z*$;i=b*($+4*i);j=u*($+4*j);$=I;var I=new Float32Array(a,I,3*n),Z,N,ea,R;for(Z=0;ZA;A++)q+=String.fromCharCode(b[Q+A]);c=x(t,Q+12);x(t,Q+13);x(t,Q+14);x(t,Q+15);e=x(t,Q+16);i=x(t,Q+17);j=x(t,Q+18);l=x(t,Q+19);n=v(t,Q+20);m=v(t,Q+20+4);p=v(t,Q+20+8);o=v(t,Q+20+12);q=v(t,Q+20+16);r=v(t,Q+20+20);s= +v(t,Q+20+24);A=v(t,Q+20+28);b=v(t,Q+20+32);u=v(t,Q+20+36);t=v(t,Q+20+40);J+=c;Q=3*e+l;$=4*e+l;K=o*Q;c=q*(Q+3*i);e=r*(Q+3*j);l=s*(Q+3*i+3*j);Q=A*$;i=b*($+4*i);j=u*($+4*j);$=J;var J=new Float32Array(a,J,3*n),na,N,X,sa;for(na=0;nad.length?".":d.join("/")}d=new XMLHttpRequest;d.addEventListener("load",function(d){d.target.responseText?c=b.parse(JSON.parse(d.target.responseText),e):b.dispatchEvent({type:"error",message:"Invalid file ["+a+"]"})},!1);d.addEventListener("error",function(){b.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);d.open("GET",a, !0);d.send(null);var e=new THREE.LoadingMonitor;e.addEventListener("load",function(){b.dispatchEvent({type:"load",content:c})});e.add(d)},parse:function(a,b){var c=this,d=new THREE.Geometry,e=void 0!==a.scale?1/a.scale:1;if(a.materials){d.materials=[];for(var f=0;fs.parameters.opacity&&(s.parameters.transparent=!0);s.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,a=THREE.UniformsUtils.clone(q.uniforms),l= -s.parameters.color,J=s.parameters.specular,o=s.parameters.ambient,G=s.parameters.shininess,a.tNormal.value=K.textures[s.parameters.normalMap],s.parameters.normalScale&&a.uNormalScale.value.set(s.parameters.normalScale[0],s.parameters.normalScale[1]),s.parameters.map&&(a.tDiffuse.value=s.parameters.map,a.enableDiffuse.value=!0),s.parameters.envMap&&(a.tCube.value=s.parameters.envMap,a.enableReflection.value=!0,a.uReflectivity.value=s.parameters.reflectivity),s.parameters.lightMap&&(a.tAO.value=s.parameters.lightMap, -a.enableAO.value=!0),s.parameters.specularMap&&(a.tSpecular.value=K.textures[s.parameters.specularMap],a.enableSpecular.value=!0),s.parameters.displacementMap&&(a.tDisplacement.value=K.textures[s.parameters.displacementMap],a.enableDisplacement.value=!0,a.uDisplacementBias.value=s.parameters.displacementBias,a.uDisplacementScale.value=s.parameters.displacementScale),a.uDiffuseColor.value.setHex(l),a.uSpecularColor.value.setHex(J),a.uAmbientColor.value.setHex(o),a.uShininess.value=G,s.parameters.opacity&& -(a.uOpacity.value=s.parameters.opacity),E=new THREE.ShaderMaterial({fragmentShader:q.fragmentShader,vertexShader:q.vertexShader,uniforms:a,lights:!0,fog:!0})):E=new THREE[s.type](s.parameters);K.materials[n]=E}e(K.scene,L.objects);i.callbackSync(K);h()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null}; +THREE.SceneLoader.prototype.parse=function(a,b,c){function d(a,b){return"relativeToHTML"==b?a:j+"/"+a}function e(a,b){for(var c in b)if(void 0===F.objects[c]){var d=b[c],f=null;if(void 0!==d.geometry){if(z=F.geometries[d.geometry])f=!1,C=F.materials[d.materials[0]],(f=C instanceof THREE.ShaderMaterial)&&z.computeTangents(),A=d.position,u=d.rotation,t=d.quaternion,B=d.scale,r=d.matrix,t=0,0===d.materials.length&&(C=new THREE.MeshFaceMaterial),1r.parameters.opacity&&(r.parameters.transparent=!0);r.parameters.normalMap?(q=THREE.ShaderUtils.lib.normal,a=THREE.UniformsUtils.clone(q.uniforms),l= +r.parameters.color,H=r.parameters.specular,o=r.parameters.ambient,G=r.parameters.shininess,a.tNormal.value=F.textures[r.parameters.normalMap],r.parameters.normalScale&&a.uNormalScale.value.set(r.parameters.normalScale[0],r.parameters.normalScale[1]),r.parameters.map&&(a.tDiffuse.value=r.parameters.map,a.enableDiffuse.value=!0),r.parameters.envMap&&(a.tCube.value=r.parameters.envMap,a.enableReflection.value=!0,a.uReflectivity.value=r.parameters.reflectivity),r.parameters.lightMap&&(a.tAO.value=r.parameters.lightMap, +a.enableAO.value=!0),r.parameters.specularMap&&(a.tSpecular.value=F.textures[r.parameters.specularMap],a.enableSpecular.value=!0),r.parameters.displacementMap&&(a.tDisplacement.value=F.textures[r.parameters.displacementMap],a.enableDisplacement.value=!0,a.uDisplacementBias.value=r.parameters.displacementBias,a.uDisplacementScale.value=r.parameters.displacementScale),a.uDiffuseColor.value.setHex(l),a.uSpecularColor.value.setHex(H),a.uAmbientColor.value.setHex(o),a.uShininess.value=G,r.parameters.opacity&& +(a.uOpacity.value=r.parameters.opacity),C=new THREE.ShaderMaterial({fragmentShader:q.fragmentShader,vertexShader:q.vertexShader,uniforms:a,lights:!0,fog:!0})):C=new THREE[r.type](r.parameters);F.materials[n]=C}e(F.scene,K.objects);i.callbackSync(F);h()};THREE.TextureLoader=function(){THREE.EventTarget.call(this);this.crossOrigin=null}; THREE.TextureLoader.prototype={constructor:THREE.TextureLoader,load:function(a){var b=this,c=new Image;c.addEventListener("load",function(){var a=new THREE.Texture(c);a.needsUpdate=!0;b.dispatchEvent({type:"load",content:a})},!1);c.addEventListener("error",function(){b.dispatchEvent({type:"error",message:"Couldn't load URL ["+a+"]"})},!1);b.crossOrigin&&(c.crossOrigin=b.crossOrigin);c.src=a}}; THREE.Material=function(){THREE.MaterialLibrary.push(this);this.id=THREE.MaterialIdCount++;this.name="";this.side=THREE.FrontSide;this.opacity=1;this.transparent=!1;this.blending=THREE.NormalBlending;this.blendSrc=THREE.SrcAlphaFactor;this.blendDst=THREE.OneMinusSrcAlphaFactor;this.blendEquation=THREE.AddEquation;this.depthWrite=this.depthTest=!0;this.polygonOffset=!1;this.alphaTest=this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.overdraw=!1;this.needsUpdate=this.visible=!0}; THREE.Material.prototype.setValues=function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else if(b in this){var d=this[b];d instanceof THREE.Color&&c instanceof THREE.Color?d.copy(c):d instanceof THREE.Color&&"number"===typeof c?d.setHex(c):d instanceof THREE.Vector3&&c instanceof THREE.Vector3?d.copy(c):this[b]=c}}}; @@ -268,35 +268,35 @@ THREE.SpriteAlignment.bottomRight=new THREE.Vector2(-1,1);THREE.Scene=function() THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===this.__lights.indexOf(a)&&this.__lights.push(a),a.target&&void 0===a.target.parent&&this.add(a.target);else if(!(a instanceof THREE.Camera||a instanceof THREE.Bone)&&-1===this.__objects.indexOf(a)){this.__objects.push(a);this.__objectsAdded.push(a);var b=this.__objectsRemoved.indexOf(a);-1!==b&&this.__objectsRemoved.splice(b,1)}for(b=0;bt&&q.clearRect(Math.floor(Ka.getX()),Math.floor(Ka.getY()),Math.floor(Ka.getWidth()),Math.floor(Ka.getHeight())), -0=k||(k*=f.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)}else f instanceof -THREE.PointLight&&(h=f.matrixWorld.getPosition(),k=b.dot(sa.sub(h,a).normalize()),0>=k||(k*=0==f.distance?1:1-Math.min(a.distanceTo(h)/f.distance,1),0!=k&&(k*=f.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)))}}function n(a,d,e,g,h,k,i,j){f.info.render.vertices+=3;f.info.render.faces++;b(j.opacity);c(j.blending);I=a.positionScreen.x;F=a.positionScreen.y;K=d.positionScreen.x;L=d.positionScreen.y;O=e.positionScreen.x;$=e.positionScreen.y;s(I,F,K,L,O,$);(j instanceof THREE.MeshLambertMaterial||j instanceof -THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(Y.copy(j.color),ca.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(Y.r*=i.color.r,Y.g*=i.color.g,Y.b*=i.color.b),!0===xb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(fa.r=W.r=V.r=Ea.r,fa.g=W.g=V.g=Ea.g,fa.b=W.b=V.b=Ea.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],fa),m(i.v2.positionWorld,i.vertexNormalsWorld[1],W),m(i.v3.positionWorld,i.vertexNormalsWorld[2],V),fa.r=fa.r*Y.r+ca.r,fa.g=fa.g*Y.g+ca.g,fa.b=fa.b* -Y.b+ca.b,W.r=W.r*Y.r+ca.r,W.g=W.g*Y.g+ca.g,W.b=W.b*Y.b+ca.b,V.r=V.r*Y.r+ca.r,V.g=V.g*Y.g+ca.g,V.b=V.b*Y.b+ca.b,ia.r=0.5*(W.r+V.r),ia.g=0.5*(W.g+V.g),ia.b=0.5*(W.b+V.b),oa=Ec(fa,W,V,ia),hc(I,F,K,L,O,$,0,0,1,0,0,1,oa)):(P.r=Ea.r,P.g=Ea.g,P.b=Ea.b,m(i.centroidWorld,i.normalWorld,P),P.r=P.r*Y.r+ca.r,P.g=P.g*Y.g+ca.g,P.b=P.b*Y.b+ca.b,!0===j.wireframe?t(P,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(P)):!0===j.wireframe?t(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin): -u(j.color):j instanceof THREE.MeshBasicMaterial||j instanceof THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial?null!==j.map?j.map.mapping instanceof THREE.UVMapping&&(Wa=i.uvs[0],Ca(I,F,K,L,O,$,Wa[g].u,Wa[g].v,Wa[h].u,Wa[h].v,Wa[k].u,Wa[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,sa.copy(i.vertexNormalsWorld[g]),jb=0.5*(sa.x*a.elements[0]+sa.y*a.elements[4]+sa.z*a.elements[8])+0.5,Sa=0.5*(sa.x*a.elements[1]+sa.y* -a.elements[5]+sa.z*a.elements[9])+0.5,sa.copy(i.vertexNormalsWorld[h]),fb=0.5*(sa.x*a.elements[0]+sa.y*a.elements[4]+sa.z*a.elements[8])+0.5,qb=0.5*(sa.x*a.elements[1]+sa.y*a.elements[5]+sa.z*a.elements[9])+0.5,sa.copy(i.vertexNormalsWorld[k]),Qb=0.5*(sa.x*a.elements[0]+sa.y*a.elements[4]+sa.z*a.elements[8])+0.5,eb=0.5*(sa.x*a.elements[1]+sa.y*a.elements[5]+sa.z*a.elements[9])+0.5,Ca(I,F,K,L,O,$,jb,Sa,fb,qb,Qb,eb,j.envMap)):(P.copy(j.color),j.vertexColors===THREE.FaceColors&&(P.r*=i.color.r,P.g*= -i.color.g,P.b*=i.color.b),!0===j.wireframe?t(P,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(P)):j instanceof THREE.MeshDepthMaterial?(Ja=l.near,Va=l.far,fa.r=fa.g=fa.b=1-ub(a.positionScreen.z,Ja,Va),W.r=W.g=W.b=1-ub(d.positionScreen.z,Ja,Va),V.r=V.g=V.b=1-ub(e.positionScreen.z,Ja,Va),ia.r=0.5*(W.r+V.r),ia.g=0.5*(W.g+V.g),ia.b=0.5*(W.b+V.b),oa=Ec(fa,W,V,ia),hc(I,F,K,L,O,$,0,0,1,0,0,1,oa)):j instanceof THREE.MeshNormalMaterial&&(P.r=kc(i.normalWorld.x),P.g=kc(i.normalWorld.y),P.b= -kc(i.normalWorld.z),!0===j.wireframe?t(P,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(P))}function s(a,b,c,d,e,f){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.closePath()}function r(a,b,c,d,e,f,g,h){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.lineTo(g,h);q.closePath()}function t(a,b,c,e){x!==b&&(x=q.lineWidth=b);v!==c&&(v=q.lineCap=c);A!==e&&(A=q.lineJoin=e);d(a.getContextStyle());q.stroke();xa.inflate(2*b)}function u(a){e(a.getContextStyle());q.fill()} -function Ca(a,b,c,d,f,g,h,k,i,j,l,m,n){if(!(n instanceof THREE.DataTexture||void 0===n.image||0==n.image.width)){if(!0===n.needsUpdate){var Ca=n.wrapS==THREE.RepeatWrapping,o=n.wrapT==THREE.RepeatWrapping;Ha[n.id]=q.createPattern(n.image,!0===Ca&&!0===o?"repeat":!0===Ca&&!1===o?"repeat-x":!1===Ca&&!0===o?"repeat-y":"no-repeat");n.needsUpdate=!1}void 0===Ha[n.id]?e("rgba(0,0,0,1)"):e(Ha[n.id]);var Ca=n.offset.x/n.repeat.x,o=n.offset.y/n.repeat.y,p=n.image.width*n.repeat.x,ub=n.image.height*n.repeat.y, -h=(h+Ca)*p,k=(1-k+o)*ub,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+Ca)*p-h,j=(1-j+o)*ub-k,l=(l+Ca)*p-h,m=(1-m+o)*ub-k,Ca=i*m-l*j;0===Ca?(void 0===Qa[n.id]&&(b=document.createElement("canvas"),b.width=n.image.width,b.height=n.image.height,b=b.getContext("2d"),b.drawImage(n.image,0,0),Qa[n.id]=b.getImageData(0,0,n.image.width,n.image.height).data),b=Qa[n.id],h=4*(Math.floor(h)+Math.floor(k)*n.image.width),P.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255),u(P)):(Ca=1/Ca,n=(m*c-j*f)*Ca,j=(m*d-j*g)*Ca,c=(i*f-l*c)*Ca,d=(i*g- -l*d)*Ca,a=a-n*h-c*k,h=b-j*h-d*k,q.save(),q.transform(n,j,c,d,a,h),q.fill(),q.restore())}}function hc(a,b,c,d,e,f,g,h,k,i,j,l,n){var m,Ca;m=n.width-1;Ca=n.height-1;g*=m;h*=Ca;c-=a;d-=b;e-=a;f-=b;k=k*m-g;i=i*Ca-h;j=j*m-g;l=l*Ca-h;Ca=1/(k*l-j*i);m=(l*c-i*e)*Ca;i=(l*d-i*f)*Ca;c=(k*e-j*c)*Ca;d=(k*f-j*d)*Ca;a=a-m*g-c*h;b=b-i*g-d*h;q.save();q.transform(m,i,c,d,a,b);q.clip();q.drawImage(n,0,0);q.restore()}function Ec(a,b,c,d){Fa[0]=255*a.r|0;Fa[1]=255*a.g|0;Fa[2]=255*a.b|0;Fa[4]=255*b.r|0;Fa[5]=255*b.g|0; -Fa[6]=255*b.b|0;Fa[8]=255*c.r|0;Fa[9]=255*c.g|0;Fa[10]=255*c.b|0;Fa[12]=255*d.r|0;Fa[13]=255*d.g|0;Fa[14]=255*d.b|0;$a.putImageData(Xa,0,0);k.drawImage(hb,0,0);return yb}function ub(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function kc(a){a=0.5*(a+1);return 0>a?0:1>1,Uc=ja.height>>1,kb=Ya.scale.x*p,lb=Ya.scale.y*o,sb=kb*lc,tb=lb*Uc,xa.set(ka.x-sb,ka.y-tb,ka.x+sb,ka.y+tb),!1!==ab.intersects(xa)&&(q.save(),q.translate(ka.x,ka.y),q.rotate(-Ya.rotation),q.scale(kb,-lb),q.translate(-lc,-Uc),q.drawImage(ja,0,0),q.restore())):aa instanceof THREE.ParticleCanvasMaterial&&(sb=Ya.scale.x*p,tb=Ya.scale.y* -o,xa.set(ka.x-sb,ka.y-tb,ka.x+sb,ka.y+tb),!1!==ab.intersects(xa)&&(d(aa.color.getContextStyle()),e(aa.color.getContextStyle()),q.save(),q.translate(ka.x,ka.y),q.rotate(-Ya.rotation),q.scale(sb,tb),aa.program(q),q.restore()))}else if(ja instanceof THREE.RenderableLine){if(E=ja.v1,C=ja.v2,E.positionScreen.x*=p,E.positionScreen.y*=o,C.positionScreen.x*=p,C.positionScreen.y*=o,xa.addPoint(E.positionScreen.x,E.positionScreen.y),xa.addPoint(C.positionScreen.x,C.positionScreen.y),!0===ab.intersects(xa)&& -(ka=E,Ya=C,b(aa.opacity),c(aa.blending),q.beginPath(),q.moveTo(ka.positionScreen.x,ka.positionScreen.y),q.lineTo(Ya.positionScreen.x,Ya.positionScreen.y),aa instanceof THREE.LineBasicMaterial))ka=aa.linewidth,x!==ka&&(x=q.lineWidth=ka),ka=aa.linecap,v!==ka&&(v=q.lineCap=ka),ka=aa.linejoin,A!==ka&&(A=q.lineJoin=ka),d(aa.color.getContextStyle()),q.stroke(),xa.inflate(2*aa.linewidth)}else if(ja instanceof THREE.RenderableFace3)E=ja.v1,C=ja.v2,G=ja.v3,E.positionScreen.x*=p,E.positionScreen.y*=o,C.positionScreen.x*= -p,C.positionScreen.y*=o,G.positionScreen.x*=p,G.positionScreen.y*=o,!0===aa.overdraw&&(Xb(E.positionScreen,C.positionScreen),Xb(C.positionScreen,G.positionScreen),Xb(G.positionScreen,E.positionScreen)),xa.add3Points(E.positionScreen.x,E.positionScreen.y,C.positionScreen.x,C.positionScreen.y,G.positionScreen.x,G.positionScreen.y),!0===ab.intersects(xa)&&n(E,C,G,0,1,2,ja,aa,a);else if(ja instanceof THREE.RenderableFace4&&(E=ja.v1,C=ja.v2,G=ja.v3,J=ja.v4,E.positionScreen.x*=p,E.positionScreen.y*=o,C.positionScreen.x*= -p,C.positionScreen.y*=o,G.positionScreen.x*=p,G.positionScreen.y*=o,J.positionScreen.x*=p,J.positionScreen.y*=o,H.positionScreen.copy(C.positionScreen),M.positionScreen.copy(J.positionScreen),!0===aa.overdraw&&(Xb(E.positionScreen,C.positionScreen),Xb(C.positionScreen,J.positionScreen),Xb(J.positionScreen,E.positionScreen),Xb(G.positionScreen,H.positionScreen),Xb(G.positionScreen,M.positionScreen)),xa.addPoint(E.positionScreen.x,E.positionScreen.y),xa.addPoint(C.positionScreen.x,C.positionScreen.y), -xa.addPoint(G.positionScreen.x,G.positionScreen.y),xa.addPoint(J.positionScreen.x,J.positionScreen.y),!0===ab.intersects(xa)))(ka=E,Ya=C,sb=G,tb=J,kb=H,lb=M,lc=a,f.info.render.vertices+=4,f.info.render.faces++,b(aa.opacity),c(aa.blending),void 0!==aa.map&&null!==aa.map||void 0!==aa.envMap&&null!==aa.envMap)?(n(ka,Ya,tb,0,1,3,ja,aa,lc),n(kb,sb,lb,1,2,3,ja,aa,lc)):(I=ka.positionScreen.x,F=ka.positionScreen.y,K=Ya.positionScreen.x,L=Ya.positionScreen.y,O=sb.positionScreen.x,$=sb.positionScreen.y,Z=tb.positionScreen.x, -N=tb.positionScreen.y,ea=kb.positionScreen.x,R=kb.positionScreen.y,ra=lb.positionScreen.x,ma=lb.positionScreen.y,aa instanceof THREE.MeshLambertMaterial||aa instanceof THREE.MeshPhongMaterial)?(Y.copy(aa.color),ca.copy(aa.emissive),aa.vertexColors===THREE.FaceColors&&(Y.r*=ja.color.r,Y.g*=ja.color.g,Y.b*=ja.color.b),!0===xb)?!1===aa.wireframe&&aa.shading==THREE.SmoothShading&&4==ja.vertexNormalsLength?(fa.r=W.r=V.r=ia.r=Ea.r,fa.g=W.g=V.g=ia.g=Ea.g,fa.b=W.b=V.b=ia.b=Ea.b,m(ja.v1.positionWorld,ja.vertexNormalsWorld[0], -fa),m(ja.v2.positionWorld,ja.vertexNormalsWorld[1],W),m(ja.v4.positionWorld,ja.vertexNormalsWorld[3],V),m(ja.v3.positionWorld,ja.vertexNormalsWorld[2],ia),fa.r=fa.r*Y.r+ca.r,fa.g=fa.g*Y.g+ca.g,fa.b=fa.b*Y.b+ca.b,W.r=W.r*Y.r+ca.r,W.g=W.g*Y.g+ca.g,W.b=W.b*Y.b+ca.b,V.r=V.r*Y.r+ca.r,V.g=V.g*Y.g+ca.g,V.b=V.b*Y.b+ca.b,ia.r=ia.r*Y.r+ca.r,ia.g=ia.g*Y.g+ca.g,ia.b=ia.b*Y.b+ca.b,oa=Ec(fa,W,V,ia),s(I,F,K,L,Z,N),hc(I,F,K,L,Z,N,0,0,1,0,0,1,oa),s(ea,R,O,$,ra,ma),hc(ea,R,O,$,ra,ma,1,0,1,1,0,1,oa)):(P.r=Ea.r,P.g= -Ea.g,P.b=Ea.b,m(ja.centroidWorld,ja.normalWorld,P),P.r=P.r*Y.r+ca.r,P.g=P.g*Y.g+ca.g,P.b=P.b*Y.b+ca.b,r(I,F,K,L,O,$,Z,N),!0===aa.wireframe?t(P,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(P)):(P.r=Y.r+ca.r,P.g=Y.g+ca.g,P.b=Y.b+ca.b,r(I,F,K,L,O,$,Z,N),!0===aa.wireframe?t(P,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(P)):aa instanceof THREE.MeshBasicMaterial?(P.copy(aa.color),aa.vertexColors===THREE.FaceColors&&(P.r*=ja.color.r,P.g*=ja.color.g,P.b*=ja.color.b), -r(I,F,K,L,O,$,Z,N),!0===aa.wireframe?t(P,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(P)):aa instanceof THREE.MeshNormalMaterial?(P.r=kc(ja.normalWorld.x),P.g=kc(ja.normalWorld.y),P.b=kc(ja.normalWorld.z),r(I,F,K,L,O,$,Z,N),!0===aa.wireframe?t(P,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(P)):aa instanceof THREE.MeshDepthMaterial&&(Ja=l.near,Va=l.far,fa.r=fa.g=fa.b=1-ub(ka.positionScreen.z,Ja,Va),W.r=W.g=W.b=1-ub(Ya.positionScreen.z,Ja,Va),V.r=V.g=V.b=1- -ub(tb.positionScreen.z,Ja,Va),ia.r=ia.g=ia.b=1-ub(sb.positionScreen.z,Ja,Va),oa=Ec(fa,W,V,ia),s(I,F,K,L,Z,N),hc(I,F,K,L,Z,N,0,0,1,0,0,1,oa),s(ea,R,O,$,ra,ma),hc(ea,R,O,$,ra,ma,1,0,1,1,0,1,oa));Ka.addRectangle(xa)}q.setTransform(1,0,0,1,0,0)}}}; +THREE.CanvasRenderer=function(a){function b(a){A!==a&&(A=q.globalAlpha=a)}function c(a){u!==a&&(a===THREE.NormalBlending?q.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?q.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(q.globalCompositeOperation="darker"),u=a)}function d(a){t!==a&&(t=q.strokeStyle=a)}function e(a){B!==a&&(B=q.fillStyle=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},f=this,g,h,i,j=new THREE.Projector,l=void 0!==a.canvas?a.canvas: +document.createElement("canvas"),n,m,p,o,q=l.getContext("2d"),r=new THREE.Color(0),s=0,A=1,u=0,t=null,B=null,x=null,v=null,z=null,C,D,G,H,I=new THREE.RenderableVertex,L=new THREE.RenderableVertex,J,M,F,K,Q,$,na,N,X,sa,P,ia,O=new THREE.Color,ga=new THREE.Color,V=new THREE.Color,Z=new THREE.Color,ea=new THREE.Color,Y=new THREE.Color,ca=new THREE.Color,Ia={},La={},Ea,ua,ra,Ma,kb,cb,Ua,gb,vb,Sb,ab=new THREE.Rectangle,Pa=new THREE.Rectangle,Ga=new THREE.Rectangle,lb=!1,Ja=new THREE.Color,bb=new THREE.Color, +Ya=new THREE.Color,la=new THREE.Vector3,hb,db,Va,ya,ib,nb,a=16;hb=document.createElement("canvas");hb.width=hb.height=2;db=hb.getContext("2d");db.fillStyle="rgba(0,0,0,1)";db.fillRect(0,0,2,2);Va=db.getImageData(0,0,2,2);ya=Va.data;ib=document.createElement("canvas");ib.width=ib.height=a;nb=ib.getContext("2d");nb.translate(-a/2,-a/2);nb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;m=b;p= +Math.floor(n/2);o=Math.floor(m/2);l.width=n;l.height=m;ab.set(-p,-o,p,o);Pa.set(-p,-o,p,o);A=1;u=0;z=v=x=B=t=null};this.setClearColor=function(a,b){r.copy(a);s=void 0!==b?b:1;Pa.set(-p,-o,p,o)};this.setClearColorHex=function(a,b){r.setHex(a);s=void 0!==b?b:1;Pa.set(-p,-o,p,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){q.setTransform(1,0,0,-1,p,o);!1===Pa.isEmpty()&&(Pa.minSelf(ab),Pa.inflate(2),1>s&&q.clearRect(Math.floor(Pa.getX()),Math.floor(Pa.getY()),Math.floor(Pa.getWidth()), +Math.floor(Pa.getHeight())),0=k||(k*=f.intensity,c.r+=g.r*k, +c.g+=g.g*k,c.b+=g.b*k)}else f instanceof THREE.PointLight&&(h=f.matrixWorld.getPosition(),k=b.dot(la.sub(h,a).normalize()),0>=k||(k*=0==f.distance?1:1-Math.min(a.distanceTo(h)/f.distance,1),0!=k&&(k*=f.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)))}}function m(a,d,e,g,h,k,i,j){f.info.render.vertices+=3;f.info.render.faces++;b(j.opacity);c(j.blending);J=a.positionScreen.x;M=a.positionScreen.y;F=d.positionScreen.x;K=d.positionScreen.y;Q=e.positionScreen.x;$=e.positionScreen.y;r(J,M,F,K,Q,$);(j instanceof +THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(Y.copy(j.color),ca.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(Y.r*=i.color.r,Y.g*=i.color.g,Y.b*=i.color.b),!0===lb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ga.r=V.r=Z.r=Ja.r,ga.g=V.g=Z.g=Ja.g,ga.b=V.b=Z.b=Ja.b,n(i.v1.positionWorld,i.vertexNormalsWorld[0],ga),n(i.v2.positionWorld,i.vertexNormalsWorld[1],V),n(i.v3.positionWorld,i.vertexNormalsWorld[2],Z),ga.r= +ga.r*Y.r+ca.r,ga.g=ga.g*Y.g+ca.g,ga.b=ga.b*Y.b+ca.b,V.r=V.r*Y.r+ca.r,V.g=V.g*Y.g+ca.g,V.b=V.b*Y.b+ca.b,Z.r=Z.r*Y.r+ca.r,Z.g=Z.g*Y.g+ca.g,Z.b=Z.b*Y.b+ca.b,ea.r=0.5*(V.r+Z.r),ea.g=0.5*(V.g+Z.g),ea.b=0.5*(V.b+Z.b),ra=rc(ga,V,Z,ea),wa(J,M,F,K,Q,$,0,0,1,0,0,1,ra)):(O.r=Ja.r,O.g=Ja.g,O.b=Ja.b,n(i.centroidWorld,i.normalWorld,O),O.r=O.r*Y.r+ca.r,O.g=O.g*Y.g+ca.g,O.b=O.b*Y.b+ca.b,!0===j.wireframe?s(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O)):!0===j.wireframe?s(j.color,j.wireframeLinewidth, +j.wireframeLinecap,j.wireframeLinejoin):u(j.color):j instanceof THREE.MeshBasicMaterial||j instanceof THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial?null!==j.map?j.map.mapping instanceof THREE.UVMapping&&(Ma=i.uvs[0],A(J,M,F,K,Q,$,Ma[g].u,Ma[g].v,Ma[h].u,Ma[h].v,Ma[k].u,Ma[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,la.copy(i.vertexNormalsWorld[g]),kb=0.5*(la.x*a.elements[0]+la.y*a.elements[4]+la.z*a.elements[8])+ +0.5,cb=0.5*(la.x*a.elements[1]+la.y*a.elements[5]+la.z*a.elements[9])+0.5,la.copy(i.vertexNormalsWorld[h]),Ua=0.5*(la.x*a.elements[0]+la.y*a.elements[4]+la.z*a.elements[8])+0.5,gb=0.5*(la.x*a.elements[1]+la.y*a.elements[5]+la.z*a.elements[9])+0.5,la.copy(i.vertexNormalsWorld[k]),vb=0.5*(la.x*a.elements[0]+la.y*a.elements[4]+la.z*a.elements[8])+0.5,Sb=0.5*(la.x*a.elements[1]+la.y*a.elements[5]+la.z*a.elements[9])+0.5,A(J,M,F,K,Q,$,kb,cb,Ua,gb,vb,Sb,j.envMap)):(O.copy(j.color),j.vertexColors===THREE.FaceColors&& +(O.r*=i.color.r,O.g*=i.color.g,O.b*=i.color.b),!0===j.wireframe?s(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O)):j instanceof THREE.MeshDepthMaterial?(Ea=l.near,ua=l.far,ga.r=ga.g=ga.b=1-wb(a.positionScreen.z,Ea,ua),V.r=V.g=V.b=1-wb(d.positionScreen.z,Ea,ua),Z.r=Z.g=Z.b=1-wb(e.positionScreen.z,Ea,ua),ea.r=0.5*(V.r+Z.r),ea.g=0.5*(V.g+Z.g),ea.b=0.5*(V.b+Z.b),ra=rc(ga,V,Z,ea),wa(J,M,F,K,Q,$,0,0,1,0,0,1,ra)):j instanceof THREE.MeshNormalMaterial&&(O.r=ec(i.normalWorld.x),O.g=ec(i.normalWorld.y), +O.b=ec(i.normalWorld.z),!0===j.wireframe?s(O,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(O))}function r(a,b,c,d,e,f){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.closePath()}function t(a,b,c,d,e,f,g,h){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.lineTo(g,h);q.closePath()}function s(a,b,c,e){x!==b&&(x=q.lineWidth=b);v!==c&&(v=q.lineCap=c);z!==e&&(z=q.lineJoin=e);d(a.getContextStyle());q.stroke();Ga.inflate(2*b)}function u(a){e(a.getContextStyle());q.fill()} +function A(a,b,c,d,f,g,h,k,i,j,l,n,m){if(!(m instanceof THREE.DataTexture||void 0===m.image||0==m.image.width)){if(!0===m.needsUpdate){var wa=m.wrapS==THREE.RepeatWrapping,o=m.wrapT==THREE.RepeatWrapping;Ia[m.id]=q.createPattern(m.image,!0===wa&&!0===o?"repeat":!0===wa&&!1===o?"repeat-x":!1===wa&&!0===o?"repeat-y":"no-repeat");m.needsUpdate=!1}void 0===Ia[m.id]?e("rgba(0,0,0,1)"):e(Ia[m.id]);var wa=m.offset.x/m.repeat.x,o=m.offset.y/m.repeat.y,p=m.image.width*m.repeat.x,wb=m.image.height*m.repeat.y, +h=(h+wa)*p,k=(1-k+o)*wb,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+wa)*p-h,j=(1-j+o)*wb-k,l=(l+wa)*p-h,n=(1-n+o)*wb-k,wa=i*n-l*j;0===wa?(void 0===La[m.id]&&(b=document.createElement("canvas"),b.width=m.image.width,b.height=m.image.height,b=b.getContext("2d"),b.drawImage(m.image,0,0),La[m.id]=b.getImageData(0,0,m.image.width,m.image.height).data),b=La[m.id],h=4*(Math.floor(h)+Math.floor(k)*m.image.width),O.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255),u(O)):(wa=1/wa,m=(n*c-j*f)*wa,j=(n*d-j*g)*wa,c=(i*f-l*c)*wa,d=(i*g- +l*d)*wa,a=a-m*h-c*k,h=b-j*h-d*k,q.save(),q.transform(m,j,c,d,a,h),q.fill(),q.restore())}}function wa(a,b,c,d,e,f,g,h,k,i,j,l,m){var n,wa;n=m.width-1;wa=m.height-1;g*=n;h*=wa;c-=a;d-=b;e-=a;f-=b;k=k*n-g;i=i*wa-h;j=j*n-g;l=l*wa-h;wa=1/(k*l-j*i);n=(l*c-i*e)*wa;i=(l*d-i*f)*wa;c=(k*e-j*c)*wa;d=(k*f-j*d)*wa;a=a-n*g-c*h;b=b-i*g-d*h;q.save();q.transform(n,i,c,d,a,b);q.clip();q.drawImage(m,0,0);q.restore()}function rc(a,b,c,d){ya[0]=255*a.r|0;ya[1]=255*a.g|0;ya[2]=255*a.b|0;ya[4]=255*b.r|0;ya[5]=255*b.g|0; +ya[6]=255*b.b|0;ya[8]=255*c.r|0;ya[9]=255*c.g|0;ya[10]=255*c.b|0;ya[12]=255*d.r|0;ya[13]=255*d.g|0;ya[14]=255*d.b|0;db.putImageData(Va,0,0);nb.drawImage(hb,0,0);return ib}function wb(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function ec(a){a=0.5*(a+1);return 0>a?0:1>1,Ec=ja.height>>1,ob=Za.scale.x*p,pb=Za.scale.y*o,tb=ob*fc,ub=pb*Ec,Ga.set(ka.x-tb,ka.y-ub,ka.x+tb,ka.y+ub),!1!==ab.intersects(Ga)&&(q.save(),q.translate(ka.x,ka.y),q.rotate(-Za.rotation),q.scale(ob,-pb),q.translate(-fc,-Ec),q.drawImage(ja,0,0),q.restore())):aa instanceof THREE.ParticleCanvasMaterial&&(tb=Za.scale.x*p,ub=Za.scale.y* +o,Ga.set(ka.x-tb,ka.y-ub,ka.x+tb,ka.y+ub),!1!==ab.intersects(Ga)&&(d(aa.color.getContextStyle()),e(aa.color.getContextStyle()),q.save(),q.translate(ka.x,ka.y),q.rotate(-Za.rotation),q.scale(tb,ub),aa.program(q),q.restore()))}else if(ja instanceof THREE.RenderableLine){if(C=ja.v1,D=ja.v2,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*=o,Ga.addPoint(C.positionScreen.x,C.positionScreen.y),Ga.addPoint(D.positionScreen.x,D.positionScreen.y),!0===ab.intersects(Ga)&& +(ka=C,Za=D,b(aa.opacity),c(aa.blending),q.beginPath(),q.moveTo(ka.positionScreen.x,ka.positionScreen.y),q.lineTo(Za.positionScreen.x,Za.positionScreen.y),aa instanceof THREE.LineBasicMaterial))ka=aa.linewidth,x!==ka&&(x=q.lineWidth=ka),ka=aa.linecap,v!==ka&&(v=q.lineCap=ka),ka=aa.linejoin,z!==ka&&(z=q.lineJoin=ka),d(aa.color.getContextStyle()),q.stroke(),Ga.inflate(2*aa.linewidth)}else if(ja instanceof THREE.RenderableFace3)C=ja.v1,D=ja.v2,G=ja.v3,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*= +p,D.positionScreen.y*=o,G.positionScreen.x*=p,G.positionScreen.y*=o,!0===aa.overdraw&&(Tb(C.positionScreen,D.positionScreen),Tb(D.positionScreen,G.positionScreen),Tb(G.positionScreen,C.positionScreen)),Ga.add3Points(C.positionScreen.x,C.positionScreen.y,D.positionScreen.x,D.positionScreen.y,G.positionScreen.x,G.positionScreen.y),!0===ab.intersects(Ga)&&m(C,D,G,0,1,2,ja,aa,a);else if(ja instanceof THREE.RenderableFace4&&(C=ja.v1,D=ja.v2,G=ja.v3,H=ja.v4,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*= +p,D.positionScreen.y*=o,G.positionScreen.x*=p,G.positionScreen.y*=o,H.positionScreen.x*=p,H.positionScreen.y*=o,I.positionScreen.copy(D.positionScreen),L.positionScreen.copy(H.positionScreen),!0===aa.overdraw&&(Tb(C.positionScreen,D.positionScreen),Tb(D.positionScreen,H.positionScreen),Tb(H.positionScreen,C.positionScreen),Tb(G.positionScreen,I.positionScreen),Tb(G.positionScreen,L.positionScreen)),Ga.addPoint(C.positionScreen.x,C.positionScreen.y),Ga.addPoint(D.positionScreen.x,D.positionScreen.y), +Ga.addPoint(G.positionScreen.x,G.positionScreen.y),Ga.addPoint(H.positionScreen.x,H.positionScreen.y),!0===ab.intersects(Ga)))(ka=C,Za=D,tb=G,ub=H,ob=I,pb=L,fc=a,f.info.render.vertices+=4,f.info.render.faces++,b(aa.opacity),c(aa.blending),void 0!==aa.map&&null!==aa.map||void 0!==aa.envMap&&null!==aa.envMap)?(m(ka,Za,ub,0,1,3,ja,aa,fc),m(ob,tb,pb,1,2,3,ja,aa,fc)):(J=ka.positionScreen.x,M=ka.positionScreen.y,F=Za.positionScreen.x,K=Za.positionScreen.y,Q=tb.positionScreen.x,$=tb.positionScreen.y,na= +ub.positionScreen.x,N=ub.positionScreen.y,X=ob.positionScreen.x,sa=ob.positionScreen.y,P=pb.positionScreen.x,ia=pb.positionScreen.y,aa instanceof THREE.MeshLambertMaterial||aa instanceof THREE.MeshPhongMaterial)?(Y.copy(aa.color),ca.copy(aa.emissive),aa.vertexColors===THREE.FaceColors&&(Y.r*=ja.color.r,Y.g*=ja.color.g,Y.b*=ja.color.b),!0===lb)?!1===aa.wireframe&&aa.shading==THREE.SmoothShading&&4==ja.vertexNormalsLength?(ga.r=V.r=Z.r=ea.r=Ja.r,ga.g=V.g=Z.g=ea.g=Ja.g,ga.b=V.b=Z.b=ea.b=Ja.b,n(ja.v1.positionWorld, +ja.vertexNormalsWorld[0],ga),n(ja.v2.positionWorld,ja.vertexNormalsWorld[1],V),n(ja.v4.positionWorld,ja.vertexNormalsWorld[3],Z),n(ja.v3.positionWorld,ja.vertexNormalsWorld[2],ea),ga.r=ga.r*Y.r+ca.r,ga.g=ga.g*Y.g+ca.g,ga.b=ga.b*Y.b+ca.b,V.r=V.r*Y.r+ca.r,V.g=V.g*Y.g+ca.g,V.b=V.b*Y.b+ca.b,Z.r=Z.r*Y.r+ca.r,Z.g=Z.g*Y.g+ca.g,Z.b=Z.b*Y.b+ca.b,ea.r=ea.r*Y.r+ca.r,ea.g=ea.g*Y.g+ca.g,ea.b=ea.b*Y.b+ca.b,ra=rc(ga,V,Z,ea),r(J,M,F,K,na,N),wa(J,M,F,K,na,N,0,0,1,0,0,1,ra),r(X,sa,Q,$,P,ia),wa(X,sa,Q,$,P,ia,1,0,1, +1,0,1,ra)):(O.r=Ja.r,O.g=Ja.g,O.b=Ja.b,n(ja.centroidWorld,ja.normalWorld,O),O.r=O.r*Y.r+ca.r,O.g=O.g*Y.g+ca.g,O.b=O.b*Y.b+ca.b,t(J,M,F,K,Q,$,na,N),!0===aa.wireframe?s(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):(O.r=Y.r+ca.r,O.g=Y.g+ca.g,O.b=Y.b+ca.b,t(J,M,F,K,Q,$,na,N),!0===aa.wireframe?s(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshBasicMaterial?(O.copy(aa.color),aa.vertexColors===THREE.FaceColors&&(O.r*=ja.color.r,O.g*= +ja.color.g,O.b*=ja.color.b),t(J,M,F,K,Q,$,na,N),!0===aa.wireframe?s(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshNormalMaterial?(O.r=ec(ja.normalWorld.x),O.g=ec(ja.normalWorld.y),O.b=ec(ja.normalWorld.z),t(J,M,F,K,Q,$,na,N),!0===aa.wireframe?s(O,aa.wireframeLinewidth,aa.wireframeLinecap,aa.wireframeLinejoin):u(O)):aa instanceof THREE.MeshDepthMaterial&&(Ea=l.near,ua=l.far,ga.r=ga.g=ga.b=1-wb(ka.positionScreen.z,Ea,ua),V.r=V.g=V.b=1-wb(Za.positionScreen.z, +Ea,ua),Z.r=Z.g=Z.b=1-wb(ub.positionScreen.z,Ea,ua),ea.r=ea.g=ea.b=1-wb(tb.positionScreen.z,Ea,ua),ra=rc(ga,V,Z,ea),r(J,M,F,K,na,N),wa(J,M,F,K,na,N,0,0,1,0,0,1,ra),r(X,sa,Q,$,P,ia),wa(X,sa,Q,$,P,ia,1,0,1,1,0,1,ra));Pa.addRectangle(Ga)}q.setTransform(1,0,0,1,0,0)}}}; THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform float flipEnvMap;\nuniform int combine;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif", envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nreflectVec = refract( cameraToVertex, normal, refractionRatio );\n} else { \nreflectVec = reflect( cameraToVertex, normal );\n}\n#else\nreflectVec = vReflect;\n#endif\n#ifdef DOUBLE_SIDED\nfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\nvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#else\nvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#endif\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\nif ( combine == 1 ) {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n} else {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n}\n#endif", envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n#ifdef USE_SKINNING\nvec4 mPosition = modelMatrix * skinned;\n#endif\n#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 mPosition = modelMatrix * vec4( morphed, 1.0 );\n#endif\n#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 mPosition = modelMatrix * vec4( position, 1.0 );\n#endif\n#endif", @@ -341,146 +341,146 @@ THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.color_ THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {", THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}}; THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var f=d.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var g=1;"v2"===f.type?g=2:"v3"===f.type?g=3:"v4"===f.type?g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=k.createBuffer();f.buffer.belongsToAttribute=e;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}} -function c(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;if(0<=b.materialIndex)return a.geometry.materials[b.materialIndex]}function d(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof THREE.MeshDepthMaterial?!1:a&&void 0!==a.shading&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function e(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?!0:!1}function f(a){var b, -c,d;for(b in a.attributes)d="index"===b?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER,c=a.attributes[b],c.buffer=k.createBuffer(),k.bindBuffer(d,c.buffer),k.bufferData(d,c.array,k.STATIC_DRAW)}function g(a,b,c){var d,e,f,g,h=a.vertices;g=h.length;var i=a.colors,j=i.length,l=a.__vertexArray,n=a.__colorArray,m=a.__sortArray,o=a.verticesNeedUpdate,p=a.colorsNeedUpdate,q=a.__webglCustomAttributesList;if(c.sortParticles){hb.copy(sa);hb.multiplySelf(c.matrixWorld);for(d=0;dl;l++)R.autoScaleCubemaps&&!e?(n=j,m=l,r=c.image[l],v=Tc,r.width<=v&&r.height<=v||(z=Math.max(r.width,r.height), -t=Math.floor(r.width*v/z),v=Math.floor(r.height*v/z),z=document.createElement("canvas"),z.width=t,z.height=v,z.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,t,v),r=z),n[m]=r):j[l]=c.image[l];l=j[0];n=0===(l.width&l.width-1)&&0===(l.height&l.height-1);m=H(c.format);r=H(c.type);C(k.TEXTURE_CUBE_MAP,c,n);for(l=0;6>l;l++)if(e){v=j[l].mipmaps;z=0;for(A=v.length;z=sc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+sc);ca+=1;return a}function r(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function B(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g* -d;a[b+2]=c.b*c.b*d}function x(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function v(a,b,c){fb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),fb=a);if(a&&(qb!==b||Qb!==c))k.polygonOffset(b,c),qb=b,Qb=c}function A(a){for(var a=a.split("\n"),b=0,c=a.length;bl;l++)P.autoScaleCubemaps&&!e?(m=j,n=l,s=c.image[l],z= +Dc,s.width<=z&&s.height<=z||(A=Math.max(s.width,s.height),u=Math.floor(s.width*z/A),z=Math.floor(s.height*z/A),A=document.createElement("canvas"),A.width=u,A.height=z,A.getContext("2d").drawImage(s,0,0,s.width,s.height,0,0,u,z),s=A),m[n]=s):j[l]=c.image[l];l=j[0];m=0===(l.width&l.width-1)&&0===(l.height&l.height-1);n=L(c.format);s=L(c.type);G(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(e){z=j[l].mipmaps;A=0;for(B=z.length;A=qc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+qc);Ia+=1;return a}function B(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function x(a,b,c, +d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function v(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function z(a,b,c){gb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),gb=a);if(a&&(vb!==b||Sb!==c))k.polygonOffset(b,c),vb=b,Sb=c}function C(a){for(var a=a.split("\n"),b=0,c=a.length;bb;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer)};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=!1,a=0;for(c=ra.length;ab;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer)};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=!1,a=0;for(c=ia.length;ad.numSupportedMorphTargets?(h.sort(j),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(j):0===h.length&&h.push([0,0]);for(i=0;id.numSupportedMorphTargets?(h.sort(l),h.length=d.numSupportedMorphTargets):h.length>d.numSupportedMorphNormals?h.sort(l):0===h.length&&h.push([0,0]);for(i=0;ita;ta++)$b=mc[ta],pb[Ta]=$b.x,pb[Ta+1]=$b.y,pb[Ta+2]=$b.z,Ta+=3;else for(ta= -0;3>ta;ta++)pb[Ta]=Zb.x,pb[Ta+1]=Zb.y,pb[Ta+2]=Zb.z,Ta+=3;D=0;for(X=qa.length;Dta;ta++)$b=mc[ta],pb[Ta]=$b.x,pb[Ta+1]=$b.y,pb[Ta+2]=$b.z,Ta+=3;else for(ta=0;4>ta;ta++)pb[Ta]=Zb.x,pb[Ta+1]=Zb.y,pb[Ta+2]=Zb.z,Ta+=3;k.bindBuffer(k.ARRAY_BUFFER,na.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,pb,nb)}if(bd&&Yc&&ic){D=0;for(X=pa.length;Dta;ta++)pc=nc[ta],yc[Ub]=pc.u,yc[Ub+ -1]=pc.v,Ub+=2;D=0;for(X=qa.length;Dta;ta++)pc=nc[ta],yc[Ub]=pc.u,yc[Ub+1]=pc.v,Ub+=2;0ta;ta++)qc=oc[ta],zc[Vb]=qc.u,zc[Vb+1]=qc.v,Vb+=2;D=0;for(X=qa.length;Dta;ta++)qc=oc[ta],zc[Vb]=qc.u,zc[Vb+1]=qc.v,Vb+=2;0ta;ta++)Vb=bb[ta],rb[Wa]=Vb.x,rb[Wa+1]=Vb.y,rb[Wa+2]=Vb.z,Wa+=3;else for(ta=0;3>ta;ta++)rb[Wa]=Ya.x,rb[Wa+1]=Ya.y,rb[Wa+2]=Ya.z,Wa+=3;E=0;for(W=qa.length;Eta;ta++)Vb=bb[ta],rb[Wa]=Vb.x,rb[Wa+1]=Vb.y,rb[Wa+2]=Vb.z,Wa+=3;else for(ta=0;4>ta;ta++)rb[Wa]=Ya.x,rb[Wa+1]=Ya.y,rb[Wa+2]=Ya.z,Wa+=3;k.bindBuffer(k.ARRAY_BUFFER,oa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,rb,ua)}if(jc&&Hc&&ib){E=0;for(W=pa.length;Eta;ta++)gc=db[ta],kc[Pb]=gc.u,kc[Pb+1]=gc.v,Pb+=2;E=0;for(W=qa.length;Eta;ta++)gc=db[ta],kc[Pb]=gc.u, +kc[Pb+1]=gc.v,Pb+=2;0ta;ta++)hc=gb[ta],lc[Qb]=hc.u,lc[Qb+1]=hc.v,Qb+=2;E=0;for(W=qa.length;Eta;ta++)hc=gb[ta],lc[Qb]=hc.u,lc[Qb+1]=hc.v,Qb+=2;0f;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER, -a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);G(a.__webglRenderbuffer[f],a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=k.createFramebuffer(),a.__webglRenderbuffer=k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),C(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0, -d,a.__webglTexture,0),G(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=xa,a=xb,d=ab,e=Ka);b!==fa&&(k.bindFramebuffer(k.FRAMEBUFFER,b),k.viewport(d,e,c,a),fa=b);Ea=c;rb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin); +!0);a.__webglTexture=k.createTexture();var c=0===(a.width&a.width-1)&&0===(a.height&a.height-1),d=L(a.format),e=L(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];k.bindTexture(k.TEXTURE_CUBE_MAP,a.__webglTexture);G(k.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER, +a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);H(a.__webglRenderbuffer[f],a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=k.createFramebuffer(),a.__webglRenderbuffer=k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),G(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0, +d,a.__webglTexture,0),H(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=lb,a=Ja,d=Pa,e=Ga);b!==V&&(k.bindFramebuffer(k.FRAMEBUFFER,b),k.viewport(d,e,c,a),V=b);bb=c;Ya=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin); this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format: THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0}; @@ -492,8 +492,8 @@ THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableParti THREE.ColorUtils={adjustHSV:function(a,b,c,d){var e=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,e);e.h=THREE.Math.clamp(e.h+b,0,1);e.s=THREE.Math.clamp(e.s+c,0,1);e.v=THREE.Math.clamp(e.v+d,0,1);a.setHSV(e.h,e.s,e.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,e=a.b,f=Math.max(Math.max(c,d),e),g=Math.min(Math.min(c,d),e);if(g===f)g=c=0;else{var h=f-g,g=h/f,c=(c===f?(d-e)/h:d===f?2+(e-c)/h:4+(c-d)/h)/6;0>c&&(c+=1);1a?b(c,e-1):j[e]b||o>b||m>b){i=a.vertices.length;u=e.clone();r=e.clone();p>=o&& -p>=m?(j=j.clone(),j.lerpSelf(l,0.5),u.a=f,u.b=i,u.c=h,r.a=i,r.b=g,r.c=h,3===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),u.vertexNormals[1].copy(f),r.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),u.vertexColors[1].copy(f),r.vertexColors[0].copy(f)),e=0):o>=p&&o>=m?(j=l.clone(),j.lerpSelf(n,0.5),u.a=f,u.b=g,u.c=i,r.a=i,r.b=h,r.c=f,3===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(), -f.lerpSelf(e.vertexNormals[2],0.5),u.vertexNormals[2].copy(f),r.vertexNormals[0].copy(f),r.vertexNormals[1].copy(e.vertexNormals[2]),r.vertexNormals[2].copy(e.vertexNormals[0])),3===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),u.vertexColors[2].copy(f),r.vertexColors[0].copy(f),r.vertexColors[1].copy(e.vertexColors[2]),r.vertexColors[2].copy(e.vertexColors[0])),e=1):(j=j.clone(),j.lerpSelf(n,0.5),u.a=f,u.b=g,u.c=i,r.a=i,r.b=g,r.c=h,3===e.vertexNormals.length&& -(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[2],0.5),u.vertexNormals[2].copy(f),r.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[2],0.5),u.vertexColors[2].copy(f),r.vertexColors[0].copy(f)),e=2);B.push(u,r);a.vertices.push(j);f=0;for(g=a.faceVertexUvs.length;fb||o>b|| -q>b||s>b){t=a.vertices.length;z=a.vertices.length+1;u=e.clone();r=e.clone();p>=o&&p>=q&&p>=s||q>=o&&q>=p&&q>=s?(p=j.clone(),p.lerpSelf(l,0.5),l=n.clone(),l.lerpSelf(m,0.5),u.a=f,u.b=t,u.c=z,u.d=i,r.a=t,r.b=g,r.c=h,r.d=z,4===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),g=e.vertexNormals[2].clone(),g.lerpSelf(e.vertexNormals[3],0.5),u.vertexNormals[1].copy(f),u.vertexNormals[2].copy(g),r.vertexNormals[0].copy(f),r.vertexNormals[3].copy(g)),4===e.vertexColors.length&& -(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),g=e.vertexColors[2].clone(),g.lerpSelf(e.vertexColors[3],0.5),u.vertexColors[1].copy(f),u.vertexColors[2].copy(g),r.vertexColors[0].copy(f),r.vertexColors[3].copy(g)),e=0):(p=l.clone(),p.lerpSelf(n,0.5),l=m.clone(),l.lerpSelf(j,0.5),u.a=f,u.b=g,u.c=t,u.d=z,r.a=z,r.b=t,r.c=h,r.d=i,4===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(),f.lerpSelf(e.vertexNormals[2],0.5),g=e.vertexNormals[3].clone(),g.lerpSelf(e.vertexNormals[0],0.5), -u.vertexNormals[2].copy(f),u.vertexNormals[3].copy(g),r.vertexNormals[0].copy(g),r.vertexNormals[1].copy(f)),4===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),g=e.vertexColors[3].clone(),g.lerpSelf(e.vertexColors[0],0.5),u.vertexColors[2].copy(f),u.vertexColors[3].copy(g),r.vertexColors[0].copy(g),r.vertexColors[1].copy(f)),e=1);B.push(u,r);a.vertices.push(p,l);f=0;for(g=a.faceVertexUvs.length;fb||o>b||m>b){i=a.vertices.length;u=e.clone();t=e.clone();p>=o&& +p>=m?(j=j.clone(),j.lerpSelf(l,0.5),u.a=f,u.b=i,u.c=h,t.a=i,t.b=g,t.c=h,3===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),u.vertexNormals[1].copy(f),t.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),u.vertexColors[1].copy(f),t.vertexColors[0].copy(f)),e=0):o>=p&&o>=m?(j=l.clone(),j.lerpSelf(n,0.5),u.a=f,u.b=g,u.c=i,t.a=i,t.b=h,t.c=f,3===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(), +f.lerpSelf(e.vertexNormals[2],0.5),u.vertexNormals[2].copy(f),t.vertexNormals[0].copy(f),t.vertexNormals[1].copy(e.vertexNormals[2]),t.vertexNormals[2].copy(e.vertexNormals[0])),3===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),u.vertexColors[2].copy(f),t.vertexColors[0].copy(f),t.vertexColors[1].copy(e.vertexColors[2]),t.vertexColors[2].copy(e.vertexColors[0])),e=1):(j=j.clone(),j.lerpSelf(n,0.5),u.a=f,u.b=g,u.c=i,t.a=i,t.b=g,t.c=h,3===e.vertexNormals.length&& +(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[2],0.5),u.vertexNormals[2].copy(f),t.vertexNormals[0].copy(f)),3===e.vertexColors.length&&(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[2],0.5),u.vertexColors[2].copy(f),t.vertexColors[0].copy(f)),e=2);B.push(u,t);a.vertices.push(j);f=0;for(g=a.faceVertexUvs.length;fb||o>b|| +q>b||r>b){s=a.vertices.length;A=a.vertices.length+1;u=e.clone();t=e.clone();p>=o&&p>=q&&p>=r||q>=o&&q>=p&&q>=r?(p=j.clone(),p.lerpSelf(l,0.5),l=n.clone(),l.lerpSelf(m,0.5),u.a=f,u.b=s,u.c=A,u.d=i,t.a=s,t.b=g,t.c=h,t.d=A,4===e.vertexNormals.length&&(f=e.vertexNormals[0].clone(),f.lerpSelf(e.vertexNormals[1],0.5),g=e.vertexNormals[2].clone(),g.lerpSelf(e.vertexNormals[3],0.5),u.vertexNormals[1].copy(f),u.vertexNormals[2].copy(g),t.vertexNormals[0].copy(f),t.vertexNormals[3].copy(g)),4===e.vertexColors.length&& +(f=e.vertexColors[0].clone(),f.lerpSelf(e.vertexColors[1],0.5),g=e.vertexColors[2].clone(),g.lerpSelf(e.vertexColors[3],0.5),u.vertexColors[1].copy(f),u.vertexColors[2].copy(g),t.vertexColors[0].copy(f),t.vertexColors[3].copy(g)),e=0):(p=l.clone(),p.lerpSelf(n,0.5),l=m.clone(),l.lerpSelf(j,0.5),u.a=f,u.b=g,u.c=s,u.d=A,t.a=A,t.b=s,t.c=h,t.d=i,4===e.vertexNormals.length&&(f=e.vertexNormals[1].clone(),f.lerpSelf(e.vertexNormals[2],0.5),g=e.vertexNormals[3].clone(),g.lerpSelf(e.vertexNormals[0],0.5), +u.vertexNormals[2].copy(f),u.vertexNormals[3].copy(g),t.vertexNormals[0].copy(g),t.vertexNormals[1].copy(f)),4===e.vertexColors.length&&(f=e.vertexColors[1].clone(),f.lerpSelf(e.vertexColors[2],0.5),g=e.vertexColors[3].clone(),g.lerpSelf(e.vertexColors[0],0.5),u.vertexColors[2].copy(f),u.vertexColors[3].copy(g),t.vertexColors[0].copy(g),t.vertexColors[1].copy(f)),e=1);B.push(u,t);a.vertices.push(p,l);f=0;for(g=a.faceVertexUvs.length;f>8&255,i>>16&255,i>>24&255)),d}d.mipmapCount=1;h[2]&131072&&!1!==b&&(d.mipmapCount=Math.max(1,h[7]));d.width=h[4];d.height=h[3];h=h[1]+4;f=d.width;g=d.height;for(i=0;in-1?0:n-1,p=n+1>e-1?e-1:n+1,o=0>l-1?0:l-1,q=l+1>d-1?d-1:l+1,s=[],t=[0,0,h[4*(n*d+l)]/255*b];s.push([-1,0,h[4*(n*d+o)]/255*b]);s.push([-1,-1,h[4*(m*d+o)]/255*b]);s.push([0,-1,h[4*(m*d+l)]/255*b]);s.push([1,-1,h[4*(m*d+q)]/255*b]);s.push([1,0,h[4*(n*d+q)]/255*b]);s.push([1,1,h[4*(p*d+q)]/255*b]);s.push([0,1,h[4*(p*d+l)]/255*b]);s.push([-1,1,h[4*(p*d+o)]/255*b]);m=[];o=s.length;for(p=0;pn-1?0:n-1,p=n+1>e-1?e-1:n+1,o=0>l-1?0:l-1,q=l+1>d-1?d-1:l+1,r=[],s=[0,0,h[4*(n*d+l)]/255*b];r.push([-1,0,h[4*(n*d+o)]/255*b]);r.push([-1,-1,h[4*(m*d+o)]/255*b]);r.push([0,-1,h[4*(m*d+l)]/255*b]);r.push([1,-1,h[4*(m*d+q)]/255*b]);r.push([1,0,h[4*(n*d+q)]/255*b]);r.push([1,1,h[4*(p*d+q)]/255*b]);r.push([0,1,h[4*(p*d+l)]/255*b]);r.push([-1,1,h[4*(p*d+o)]/255*b]);m=[];o=r.length;for(p=0;p0)for(j=0;j2;){if(n--<=0){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);l=j+1;e<=l&&(l=0);var m;a:{m=a;var p=i,o=j,q=l,s=e,t=g,z=void 0,u=void 0,r=void 0,B=void 0,x=void 0, -v=void 0,A=void 0,E=void 0,C=void 0,u=m[t[p]].x,r=m[t[p]].y,B=m[t[o]].x,x=m[t[o]].y,v=m[t[q]].x,A=m[t[q]].y;if(1E-10>(B-u)*(A-r)-(x-r)*(v-u))m=false;else{for(z=0;z=0&&H>=0&&I>=0){m=false;break a}}m=true}}if(m){f.push([a[g[i]], +(function(a){var b=function(a){for(var b=a.length,e=0,f=b-1,g=0;g0)for(j=0;j2;){if(n--<=0){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);l=j+1;e<=l&&(l=0);var m;a:{m=a;var p=i,o=j,q=l,r=e,s=g,A=void 0,u=void 0,t=void 0,B=void 0,x=void 0, +v=void 0,z=void 0,C=void 0,D=void 0,u=m[s[p]].x,t=m[s[p]].y,B=m[s[o]].x,x=m[s[o]].y,v=m[s[q]].x,z=m[s[q]].y;if(1E-10>(B-u)*(z-t)-(x-t)*(v-u))m=false;else{for(A=0;A=0&&I>=0&&J>=0){m=false;break a}}m=true}}if(m){f.push([a[g[i]], a[g[j]],a[g[l]]]);h.push([g[i],g[j],g[l]]);i=j;for(l=j+1;l=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;var q=[j[g],c[h],c[e]];n=THREE.FontUtils.Triangulate.area(q);var s=[j[g],j[f],c[h]];m=THREE.FontUtils.Triangulate.area(s);p=h;l=g;h=h+1;g=g+ --1;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;q=[j[g],c[h],c[e]];q=THREE.FontUtils.Triangulate.area(q);s=[j[g],j[f],c[h]];s=THREE.FontUtils.Triangulate.area(s);if(n+m>q+s){h=p;g=l;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1}n=c.slice(0,h);m=c.slice(h);p=j.slice(g);l=j.slice(0,g);f=[j[g],j[f],c[h]];o.push([j[g],c[h],c[e]]);o.push(f);c=n.concat(p).concat(l).concat(m)}return{shape:c, +THREE.Shape.Utils={removeHoles:function(a,b){var c=a.concat(),d=c.concat(),e,f,g,h,i,j,l,n,m,p,o=[];for(i=0;i=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;var q=[j[g],c[h],c[e]];n=THREE.FontUtils.Triangulate.area(q);var r=[j[g],j[f],c[h]];m=THREE.FontUtils.Triangulate.area(r);p=h;l=g;h=h+1;g=g+ +-1;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1;q=[j[g],c[h],c[e]];q=THREE.FontUtils.Triangulate.area(q);r=[j[g],j[f],c[h]];r=THREE.FontUtils.Triangulate.area(r);if(n+m>q+r){h=p;g=l;h<0&&(h=h+c.length);h=h%c.length;g<0&&(g=g+j.length);g=g%j.length;e=h-1>=0?h-1:c.length-1;f=g-1>=0?g-1:j.length-1}n=c.slice(0,h);m=c.slice(h);p=j.slice(g);l=j.slice(0,g);f=[j[g],j[f],c[h]];o.push([j[g],c[h],c[e]]);o.push(f);c=n.concat(p).concat(l).concat(m)}return{shape:c, isolatedPts:o,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,false),f,g,h,i,j={};f=0;for(g=d.length;f0?1:-1;for(e=0;e0?1:-1;for(e=0;e -0){this.vertices.push(new THREE.Vector3(0,g,0));for(h=0;h0){this.vertices.push(new THREE.Vector3(0,-g,0));for(h=0;h +0){this.vertices.push(new THREE.Vector3(0,g,0));for(h=0;h0){this.vertices.push(new THREE.Vector3(0,-g,0));for(h=0;ha&&(a=a+Math.PI*2);c=(b+a)/2;a=-Math.cos(c);c=-Math.sin(c);return new THREE.Vector2(a,c)}return d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(c,d){var e,f;for(N=c.length;--N>=0;){e=N;f=N-1;f<0&&(f= -c.length-1);for(var g=0,h=m+l*2,g=0;g=0;I--){v=I/l;K=i*(1-v);F=j*Math.sin(v*Math.PI/2);N=0;for(ea=H.length;N=0;J--){v=J/l;F=i*(1-v);M=j*Math.sin(v*Math.PI/2);N=0;for(X=I.length;N0;)this.smooth(a)};THREE.GeometryUtils.orderedKey=function(a,b){return Math.min(a,b)+"_"+Math.max(a,b)}; THREE.GeometryUtils.computeEdgeFaces=function(a){function b(a,b){g[a]===void 0&&(g[a]=[]);g[a].push(b)}var c,d,e,f,g={},h=THREE.GeometryUtils.orderedKey;c=0;for(d=a.faces.length;c=q&&a0,"an edge without faces?!");if(C.length==1){v.addSelf(p[M]);v.addSelf(p[H]);v.multiplyScalar(0.5)}else{v.addSelf(s[A]);v.addSelf(s[J]);v.addSelf(p[M]);v.addSelf(p[H]);v.multiplyScalar(0.25)}t[r]= -q+o.length+B;h.push(v);B++;if(l.supportUVs){v=new THREE.UV;v.u=f(M,A).u+f(H,A).u;v.v=f(M,A).v+f(H,A).v;v.u=v.u/2;v.v=v.v/2;g(t[r],A,v);if(C.length>=2){b(C.length==2,"did we plan for more than 2 edges?");v=new THREE.UV;v.u=f(M,J).u+f(H,J).u;v.v=f(M,J).v+f(H,J).v;v.u=v.u/2;v.v=v.v/2;g(t[r],J,v)}}}c("-- Step 2 done");var K,L;v=["123","12","2","23"];J=["123","23","3","31"];var I=["123","31","1","12"],F=["1234","12","2","23"],O=["1234","23","3","34"],$=["1234","34","4","41"],Z=["1234","41","1","12"];r= -0;for(B=s.length;r=q&&a0,"an edge without faces?!");if(D.length==1){v.addSelf(p[L]);v.addSelf(p[I]);v.multiplyScalar(0.5)}else{v.addSelf(r[z]);v.addSelf(r[H]);v.addSelf(p[L]);v.addSelf(p[I]);v.multiplyScalar(0.25)}s[t]= +q+o.length+B;h.push(v);B++;if(l.supportUVs){v=new THREE.UV;v.u=f(L,z).u+f(I,z).u;v.v=f(L,z).v+f(I,z).v;v.u=v.u/2;v.v=v.v/2;g(s[t],z,v);if(D.length>=2){b(D.length==2,"did we plan for more than 2 edges?");v=new THREE.UV;v.u=f(L,H).u+f(I,H).u;v.v=f(L,H).v+f(I,H).v;v.u=v.u/2;v.v=v.v/2;g(s[t],H,v)}}}c("-- Step 2 done");var F,K;v=["123","12","2","23"];H=["123","23","3","31"];var J=["123","31","1","12"],M=["1234","12","2","23"],Q=["1234","23","3","34"],$=["1234","34","4","41"],na=["1234","41","1","12"]; +t=0;for(B=r.length;t0&&C.x0&& -C.y0.001&&F.scale>0.001){E.x=F.x;E.y=F.y;E.z=F.z;v=F.size*F.scale/t;A.x=v*r;A.y=v;b.uniform3f(G.screenPosition,E.x,E.y,E.z);b.uniform2f(G.scale,A.x,A.y);b.uniform1f(G.rotation,F.rotation);b.uniform1f(G.opacity,F.opacity); -b.uniform3f(G.color,F.color.r,F.color.g,F.color.b);c.setBlending(F.blending,F.blendEquation,F.blendSrc,F.blendDst);c.setTexture(F.texture,1);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}}}}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(true)}}}; +"color");m.scale=b.getUniformLocation(l,"scale");m.rotation=b.getUniformLocation(l,"rotation");m.screenPosition=b.getUniformLocation(l,"screenPosition");p=false};this.render=function(a,d,e,s){var a=a.__webglFlares,A=a.length;if(A){var u=new THREE.Vector3,t=s/e,B=e*0.5,x=s*0.5,v=16/s,z=new THREE.Vector2(v*t,v),C=new THREE.Vector3(1,1,0),D=new THREE.Vector2(1,1),G=m,v=n;b.useProgram(l);if(!p){b.enableVertexAttribArray(n.vertex);b.enableVertexAttribArray(n.uv);p=true}b.uniform1i(G.occlusionMap,0);b.uniform1i(G.map, +1);b.bindBuffer(b.ARRAY_BUFFER,f);b.vertexAttribPointer(v.vertex,2,b.FLOAT,false,16,0);b.vertexAttribPointer(v.uv,2,b.FLOAT,false,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(false);var H,I,L,J,M;for(H=0;H0&&D.x0&& +D.y0.001&&M.scale>0.001){C.x=M.x;C.y=M.y;C.z=M.z;v=M.size*M.scale/s;z.x=v*t;z.y=v;b.uniform3f(G.screenPosition,C.x,C.y,C.z);b.uniform2f(G.scale,z.x,z.y);b.uniform1f(G.rotation,M.rotation);b.uniform1f(G.opacity,M.opacity); +b.uniform3f(G.color,M.color.r,M.color.g,M.color.b);c.setBlending(M.blending,M.blendEquation,M.blendSrc,M.blendDst);c.setTexture(M.texture,1);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}}}}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(true)}}}; THREE.ShadowMapPlugin=function(){var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4,i=new THREE.Vector3,j=new THREE.Vector3;this.init=function(g){a=g.context;b=g;var g=THREE.ShaderLib.depthRGBA,h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader, -vertexShader:g.vertexShader,uniforms:h,skinning:true});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:true,skinning:true});c._shadowPass=true;d._shadowPass=true;e._shadowPass=true;f._shadowPass=true};this.render=function(a,c){b.shadowMapEnabled&&b.shadowMapAutoUpdate&&this.update(a,c)};this.update=function(l,n){var m,p,o,q,s,t,z,u,r,B=[];q=0;a.clearColor(1,1,1,1);a.disable(a.BLEND);a.enable(a.CULL_FACE);a.frontFace(a.CCW);b.shadowMapCullFrontFaces? -a.cullFace(a.FRONT):a.cullFace(a.BACK);b.setDepthTest(true);m=0;for(p=l.__lights.length;mj.x)j.x=u.x;if(u.yj.y)j.y=u.y;if(u.z -j.z)j.z=u.z}q.left=i.x;q.right=j.x;q.top=j.y;q.bottom=i.y;q.updateProjectionMatrix()}q=o.shadowMap;t=o.shadowMatrix;s=o.shadowCamera;s.position.copy(o.matrixWorld.getPosition());s.lookAt(o.target.matrixWorld.getPosition());s.updateMatrixWorld();s.matrixWorldInverse.getInverse(s.matrixWorld);if(o.cameraHelper)o.cameraHelper.visible=o.shadowCameraVisible;o.shadowCameraVisible&&o.cameraHelper.update();t.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);t.multiplySelf(s.projectionMatrix);t.multiplySelf(s.matrixWorldInverse); -if(!s._viewMatrixArray)s._viewMatrixArray=new Float32Array(16);if(!s._projectionMatrixArray)s._projectionMatrixArray=new Float32Array(16);s.matrixWorldInverse.flattenToArray(s._viewMatrixArray);s.projectionMatrix.flattenToArray(s._projectionMatrixArray);h.multiply(s.projectionMatrix,s.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();r=l.__webglObjects;o=0;for(q=r.length;o0&&v.morphTargets;v=t instanceof THREE.SkinnedMesh&&v.skinning;u=t.customDepthMaterial?t.customDepthMaterial:v?u?f:e:u?d:c;z instanceof THREE.BufferGeometry?b.renderBufferDirect(s,l.__lights,null,u,z,t):b.renderBuffer(s,l.__lights, -null,u,z,t)}}r=l.__webglObjectsImmediate;o=0;for(q=r.length;oj.x)j.x=u.x;if(u.yj.y)j.y=u.y;if(u.z +j.z)j.z=u.z}q.left=i.x;q.right=j.x;q.top=j.y;q.bottom=i.y;q.updateProjectionMatrix()}q=o.shadowMap;s=o.shadowMatrix;r=o.shadowCamera;r.position.copy(o.matrixWorld.getPosition());r.lookAt(o.target.matrixWorld.getPosition());r.updateMatrixWorld();r.matrixWorldInverse.getInverse(r.matrixWorld);if(o.cameraHelper)o.cameraHelper.visible=o.shadowCameraVisible;o.shadowCameraVisible&&o.cameraHelper.update();s.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);s.multiplySelf(r.projectionMatrix);s.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);h.multiply(r.projectionMatrix,r.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();t=l.__webglObjects;o=0;for(q=t.length;o0&&v.morphTargets;v=s instanceof THREE.SkinnedMesh&&v.skinning;u=s.customDepthMaterial?s.customDepthMaterial:v?u?f:e:u?d:c;A instanceof THREE.BufferGeometry?b.renderBufferDirect(r,l.__lights,null,u,A,s):b.renderBuffer(r,l.__lights, +null,u,A,s)}}t=l.__webglObjectsImmediate;o=0;for(q=t.length;o 0 ) - material.map = dummyTexture; - - return material; - - }; - - var applyDummyTexture = function ( root ) { - - root.traverse( function ( node ) { - - if ( node.material && node.geometry.faceVertexUvs[ 0 ].length > 0 ) { - - node.material.map = dummyTexture; - - } - - } ); + return new THREE.MeshLambertMaterial(); }; diff --git a/editor/js/UI.three.js b/editor/js/UI.three.js index 2f17da2e6b..3149ac431f 100644 --- a/editor/js/UI.three.js +++ b/editor/js/UI.three.js @@ -6,7 +6,8 @@ UI.Texture = function ( position ) { var scope = this; - this.texture = new THREE.Texture(); + var image = new Image(); + this.texture = new THREE.Texture( image ); this.dom = document.createElement( 'input' ); this.dom.type = 'file'; diff --git a/editor/js/ui/Sidebar.Properties.Material.js b/editor/js/ui/Sidebar.Properties.Material.js index 1a7b7f62bf..5390e57a6f 100644 --- a/editor/js/ui/Sidebar.Properties.Material.js +++ b/editor/js/ui/Sidebar.Properties.Material.js @@ -220,14 +220,6 @@ Sidebar.Properties.Material = function ( signals ) { var selected = null; var selectedHasUvs = false; - var canvas = document.createElement( 'canvas' ); - var context = canvas.getContext( '2d' ); - context.fillStyle = 'rgb(255,255,255)'; - context.fillRect( 0, 0, canvas.width, canvas.height ); - - var dummyTexture = new THREE.Texture( canvas ); - dummyTexture.needsUpdate = true; - function update() { var material = selected.material; @@ -242,12 +234,6 @@ Sidebar.Properties.Material = function ( signals ) { material = new materials[ materialClass.getValue() ](); selected.material = material; - if ( selectedHasUvs ) { - - material.map = dummyTexture; - - } - } if ( material.color !== undefined ) { @@ -286,8 +272,10 @@ Sidebar.Properties.Material = function ( signals ) { if ( selectedHasUvs ) { - material.map = mapEnabled ? materialMap.getValue() : dummyTexture; + material.map = mapEnabled ? materialMap.getValue() : null; material.needsUpdate = true; + selected.geometry.buffersNeedUpdate = true; + selected.geometry.uvsNeedUpdate = true; } else { @@ -306,6 +294,8 @@ Sidebar.Properties.Material = function ( signals ) { material.lightMap = lightMapEnabled ? materialLightMap.getValue() : null; material.needsUpdate = true; + selected.geometry.buffersNeedUpdate = true; + selected.geometry.uvsNeedUpdate = true; } else { @@ -325,6 +315,8 @@ Sidebar.Properties.Material = function ( signals ) { material.bumpMap = bumpMapEnabled ? materialBumpMap.getValue() : null; material.bumpScale = materialBumpScale.getValue(); material.needsUpdate = true; + selected.geometry.buffersNeedUpdate = true; + selected.geometry.uvsNeedUpdate = true; } else { @@ -342,6 +334,8 @@ Sidebar.Properties.Material = function ( signals ) { material.normalMap = normalMapEnabled ? materialNormalMap.getValue() : null; material.needsUpdate = true; + selected.geometry.buffersNeedUpdate = true; + selected.geometry.uvsNeedUpdate = true; } else { @@ -359,6 +353,8 @@ Sidebar.Properties.Material = function ( signals ) { material.specularMap = specularMapEnabled ? materialSpecularMap.getValue() : null; material.needsUpdate = true; + selected.geometry.buffersNeedUpdate = true; + selected.geometry.uvsNeedUpdate = true; } else { @@ -377,6 +373,8 @@ Sidebar.Properties.Material = function ( signals ) { material.envMap = envMapEnabled ? materialEnvMap.getValue() : null; material.reflectivity = materialReflectivity.getValue(); material.needsUpdate = true; + selected.geometry.buffersNeedUpdate = true; + selected.geometry.uvsNeedUpdate = true; } else { @@ -520,7 +518,6 @@ Sidebar.Properties.Material = function ( signals ) { } else { materialMapEnabled.setValue( false ); - materialMap.setValue( dummyTexture ); } diff --git a/src/core/Geometry.js b/src/core/Geometry.js index 40b2a80750..41e9baaff1 100644 --- a/src/core/Geometry.js +++ b/src/core/Geometry.js @@ -36,7 +36,7 @@ THREE.Geometry = function () { this.hasTangents = false; - this.dynamic = true; // the intermediate typearrays will be deleted when set to false + this.dynamic = true; // the intermediate typed arrays will be deleted when set to false // update flags @@ -47,6 +47,8 @@ THREE.Geometry = function () { this.tangentsNeedUpdate = false; this.colorsNeedUpdate = false; + this.buffersNeedUpdate = false; + }; THREE.Geometry.prototype = { diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index 91290e9c4a..34c8d3f874 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -838,7 +838,7 @@ THREE.WebGLRenderer = function ( parameters ) { } - if( !attribute.__webglInitialized || attribute.createUniqueBuffers ) { + if ( !attribute.__webglInitialized || attribute.createUniqueBuffers ) { attribute.__webglInitialized = true; @@ -4359,6 +4359,12 @@ THREE.WebGLRenderer = function ( parameters ) { material = getBufferMaterial( object, geometryGroup ); + if ( geometry.buffersNeedUpdate ) { + + initMeshBuffers( geometryGroup, object ); + + } + customAttributesDirty = material.attributes && areCustomAttributesDirty( material ); if ( geometry.verticesNeedUpdate || geometry.morphTargetsNeedUpdate || geometry.elementsNeedUpdate || @@ -4379,6 +4385,8 @@ THREE.WebGLRenderer = function ( parameters ) { geometry.colorsNeedUpdate = false; geometry.tangentsNeedUpdate = false; + geometry.buffersNeedUpdate = false; + material.attributes && clearCustomAttributes( material ); } -- GitLab