|
@@ -80,12 +80,12 @@ THREE.ParticleDOMMaterial=function(a){this.domElement=a;this.toString=function()
|
|
|
THREE.UVMapping=0;THREE.ReflectionMap=1;THREE.RefractionMap=2;THREE.Multiply=0;THREE.Mix=1;THREE.Repeat=0;THREE.ClampToEdge=1;THREE.MirroredRepeat=2;THREE.TextureCube=function(a,c){this.image=a;this.mapping=c?c:THREE.ReflectionMap;this.toString=function(){return"THREE.TextureCube (<br/>image: "+this.image+"<br/>mapping: "+this.mapping+"<br/>)"}};
|
|
|
THREE.Scene=function(){this.objects=[];this.lights=[];this.addObject=function(a){this.objects.push(a)};this.removeObject=function(a){a=this.objects.indexOf(a);a!==-1&&this.objects.splice(a,1)};this.addLight=function(a){this.lights.push(a)};this.removeLight=function(a){a=this.lights.indexOf(a);a!==-1&&this.lights.splice(a,1)};this.toString=function(){return"THREE.Scene ( "+this.objects+" )"}};
|
|
|
THREE.Projector=function(){function a(M,u){var w=0,I=1,A=M.z+M.w,J=u.z+u.w,p=-M.z+M.w,x=-u.z+u.w;if(A>=0&&J>=0&&p>=0&&x>=0)return true;else if(A<0&&J<0||p<0&&x<0)return false;else{if(A<0)w=Math.max(w,A/(A-J));else if(J<0)I=Math.min(I,A/(A-J));if(p<0)w=Math.max(w,p/(p-x));else if(x<0)I=Math.min(I,p/(p-x));if(I<w)return false;else{M.lerpSelf(u,w);u.lerpSelf(M,1-I);return true}}}var c=null,e,g,b,d=[],n,q,o=[],f,h,k=[],i=new THREE.Vector4,m=new THREE.Matrix4,l=new THREE.Matrix4,s=new THREE.Vector4,v=
|
|
|
-new THREE.Vector4,j;this.projectScene=function(M,u){var w,I,A,J,p,x,Y,C,$,O,aa,ca,N,Q,r,F,L;c=[];b=_face4Count=q=h=0;u.autoUpdateMatrix&&u.updateMatrix();m.multiply(u.projectionMatrix,u.matrix);Y=M.objects;w=0;for(I=Y.length;w<I;w++){C=Y[w];C.autoUpdateMatrix&&C.updateMatrix();$=C.matrix;O=C.rotationMatrix;aa=C.material;ca=C.overdraw;if(C instanceof THREE.Mesh){N=C.geometry.vertices;A=0;for(J=N.length;A<J;A++){Q=N[A];Q.positionWorld.copy(Q.position);$.transform(Q.positionWorld);r=Q.positionScreen;
|
|
|
-r.copy(Q.positionWorld);m.transform(r);r.multiplyScalar(1/r.w);Q.__visible=r.z>0&&r.z<1}Q=C.geometry.faces;A=0;for(J=Q.length;A<J;A++){r=Q[A];if(r instanceof THREE.Face3){p=N[r.a];x=N[r.b];F=N[r.c];if(p.__visible&&x.__visible&&F.__visible)if(C.doubleSided||C.flipSided!=(F.positionScreen.x-p.positionScreen.x)*(x.positionScreen.y-p.positionScreen.y)-(F.positionScreen.y-p.positionScreen.y)*(x.positionScreen.x-p.positionScreen.x)<0){e=d[b]=d[b]||new THREE.RenderableFace3;e.v1.positionWorld.copy(p.positionWorld);
|
|
|
-e.v2.positionWorld.copy(x.positionWorld);e.v3.positionWorld.copy(F.positionWorld);e.v1.positionScreen.copy(p.positionScreen);e.v2.positionScreen.copy(x.positionScreen);e.v3.positionScreen.copy(F.positionScreen);e.normalWorld.copy(r.normal);O.transform(e.normalWorld);e.centroidWorld.copy(r.centroid);$.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);m.transform(e.centroidScreen);F=r.vertexNormals;j=e.vertexNormalsWorld;p=0;for(x=F.length;p<x;p++){L=j[p].copy(F[p]);O.transform(L)}e.z=
|
|
|
-e.centroidScreen.z;e.meshMaterial=aa;e.faceMaterial=r.material;e.overdraw=ca;if(C.geometry.uvs[A]){e.uvs[0]=C.geometry.uvs[A][0];e.uvs[1]=C.geometry.uvs[A][1];e.uvs[2]=C.geometry.uvs[A][2]}c.push(e);b++}}else if(r instanceof THREE.Face4){p=N[r.a];x=N[r.b];F=N[r.c];L=N[r.d];if(p.__visible&&x.__visible&&F.__visible&&L.__visible)if(C.doubleSided||C.flipSided!=((L.positionScreen.x-p.positionScreen.x)*(x.positionScreen.y-p.positionScreen.y)-(L.positionScreen.y-p.positionScreen.y)*(x.positionScreen.x-p.positionScreen.x)<
|
|
|
-0||(x.positionScreen.x-F.positionScreen.x)*(L.positionScreen.y-F.positionScreen.y)-(x.positionScreen.y-F.positionScreen.y)*(L.positionScreen.x-F.positionScreen.x)<0)){e=d[b]=d[b]||new THREE.RenderableFace3;e.v1.positionWorld.copy(p.positionWorld);e.v2.positionWorld.copy(x.positionWorld);e.v3.positionWorld.copy(L.positionWorld);e.v1.positionScreen.copy(p.positionScreen);e.v2.positionScreen.copy(x.positionScreen);e.v3.positionScreen.copy(L.positionScreen);e.normalWorld.copy(r.normal);O.transform(e.normalWorld);
|
|
|
-e.centroidWorld.copy(r.centroid);$.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);m.transform(e.centroidScreen);e.z=e.centroidScreen.z;e.meshMaterial=aa;e.faceMaterial=r.material;e.overdraw=ca;if(C.geometry.uvs[A]){e.uvs[0]=C.geometry.uvs[A][0];e.uvs[1]=C.geometry.uvs[A][1];e.uvs[2]=C.geometry.uvs[A][3]}c.push(e);b++;g=d[b]=d[b]||new THREE.RenderableFace3;g.v1.positionWorld.copy(x.positionWorld);g.v2.positionWorld.copy(F.positionWorld);g.v3.positionWorld.copy(L.positionWorld);g.v1.positionScreen.copy(x.positionScreen);
|
|
|
+new THREE.Vector4,j;this.projectScene=function(M,u){var w,I,A,J,p,x,Y,C,$,O,aa,ca,N,Q,r,F,L;c=[];b=q=h=0;u.autoUpdateMatrix&&u.updateMatrix();m.multiply(u.projectionMatrix,u.matrix);Y=M.objects;w=0;for(I=Y.length;w<I;w++){C=Y[w];C.autoUpdateMatrix&&C.updateMatrix();$=C.matrix;O=C.rotationMatrix;aa=C.material;ca=C.overdraw;if(C instanceof THREE.Mesh){N=C.geometry.vertices;A=0;for(J=N.length;A<J;A++){Q=N[A];Q.positionWorld.copy(Q.position);$.transform(Q.positionWorld);r=Q.positionScreen;r.copy(Q.positionWorld);
|
|
|
+m.transform(r);r.multiplyScalar(1/r.w);Q.__visible=r.z>0&&r.z<1}Q=C.geometry.faces;A=0;for(J=Q.length;A<J;A++){r=Q[A];if(r instanceof THREE.Face3){p=N[r.a];x=N[r.b];F=N[r.c];if(p.__visible&&x.__visible&&F.__visible)if(C.doubleSided||C.flipSided!=(F.positionScreen.x-p.positionScreen.x)*(x.positionScreen.y-p.positionScreen.y)-(F.positionScreen.y-p.positionScreen.y)*(x.positionScreen.x-p.positionScreen.x)<0){e=d[b]=d[b]||new THREE.RenderableFace3;e.v1.positionWorld.copy(p.positionWorld);e.v2.positionWorld.copy(x.positionWorld);
|
|
|
+e.v3.positionWorld.copy(F.positionWorld);e.v1.positionScreen.copy(p.positionScreen);e.v2.positionScreen.copy(x.positionScreen);e.v3.positionScreen.copy(F.positionScreen);e.normalWorld.copy(r.normal);O.transform(e.normalWorld);e.centroidWorld.copy(r.centroid);$.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);m.transform(e.centroidScreen);F=r.vertexNormals;j=e.vertexNormalsWorld;p=0;for(x=F.length;p<x;p++){L=j[p].copy(F[p]);O.transform(L)}e.z=e.centroidScreen.z;e.meshMaterial=aa;e.faceMaterial=
|
|
|
+r.material;e.overdraw=ca;if(C.geometry.uvs[A]){e.uvs[0]=C.geometry.uvs[A][0];e.uvs[1]=C.geometry.uvs[A][1];e.uvs[2]=C.geometry.uvs[A][2]}c.push(e);b++}}else if(r instanceof THREE.Face4){p=N[r.a];x=N[r.b];F=N[r.c];L=N[r.d];if(p.__visible&&x.__visible&&F.__visible&&L.__visible)if(C.doubleSided||C.flipSided!=((L.positionScreen.x-p.positionScreen.x)*(x.positionScreen.y-p.positionScreen.y)-(L.positionScreen.y-p.positionScreen.y)*(x.positionScreen.x-p.positionScreen.x)<0||(x.positionScreen.x-F.positionScreen.x)*
|
|
|
+(L.positionScreen.y-F.positionScreen.y)-(x.positionScreen.y-F.positionScreen.y)*(L.positionScreen.x-F.positionScreen.x)<0)){e=d[b]=d[b]||new THREE.RenderableFace3;e.v1.positionWorld.copy(p.positionWorld);e.v2.positionWorld.copy(x.positionWorld);e.v3.positionWorld.copy(L.positionWorld);e.v1.positionScreen.copy(p.positionScreen);e.v2.positionScreen.copy(x.positionScreen);e.v3.positionScreen.copy(L.positionScreen);e.normalWorld.copy(r.normal);O.transform(e.normalWorld);e.centroidWorld.copy(r.centroid);
|
|
|
+$.transform(e.centroidWorld);e.centroidScreen.copy(e.centroidWorld);m.transform(e.centroidScreen);e.z=e.centroidScreen.z;e.meshMaterial=aa;e.faceMaterial=r.material;e.overdraw=ca;if(C.geometry.uvs[A]){e.uvs[0]=C.geometry.uvs[A][0];e.uvs[1]=C.geometry.uvs[A][1];e.uvs[2]=C.geometry.uvs[A][3]}c.push(e);b++;g=d[b]=d[b]||new THREE.RenderableFace3;g.v1.positionWorld.copy(x.positionWorld);g.v2.positionWorld.copy(F.positionWorld);g.v3.positionWorld.copy(L.positionWorld);g.v1.positionScreen.copy(x.positionScreen);
|
|
|
g.v2.positionScreen.copy(F.positionScreen);g.v3.positionScreen.copy(L.positionScreen);g.normalWorld.copy(e.normalWorld);g.centroidWorld.copy(e.centroidWorld);g.centroidScreen.copy(e.centroidScreen);g.z=g.centroidScreen.z;g.meshMaterial=aa;g.faceMaterial=r.material;g.overdraw=ca;if(C.geometry.uvs[A]){g.uvs[0]=C.geometry.uvs[A][1];g.uvs[1]=C.geometry.uvs[A][2];g.uvs[2]=C.geometry.uvs[A][3]}c.push(g);b++}}}}else if(C instanceof THREE.Line){l.multiply(m,$);N=C.geometry.vertices;Q=N[0];Q.positionScreen.copy(Q.position);
|
|
|
l.transform(Q.positionScreen);A=1;for(J=N.length;A<J;A++){p=N[A];p.positionScreen.copy(p.position);l.transform(p.positionScreen);x=N[A-1];s.copy(p.positionScreen);v.copy(x.positionScreen);if(a(s,v)){s.multiplyScalar(1/s.w);v.multiplyScalar(1/v.w);n=o[q]=o[q]||new THREE.RenderableLine;n.v1.positionScreen.copy(s);n.v2.positionScreen.copy(v);n.z=Math.max(s.z,v.z);n.material=C.material;c.push(n);q++}}}else if(C instanceof THREE.Particle){i.set(C.position.x,C.position.y,C.position.z,1);m.transform(i);
|
|
|
i.z/=i.w;if(i.z>0&&i.z<1){f=k[h]=k[h]||new THREE.RenderableParticle;f.x=i.x/i.w;f.y=i.y/i.w;f.z=i.z;f.rotation=C.rotation.z;f.scale.x=C.scale.x*Math.abs(f.x-(i.x+u.projectionMatrix.n11)/(i.w+u.projectionMatrix.n14));f.scale.y=C.scale.y*Math.abs(f.y-(i.y+u.projectionMatrix.n22)/(i.w+u.projectionMatrix.n24));f.material=C.material;c.push(f);h++}}}c.sort(function(U,z){return z.z-U.z});return c};this.unprojectVector=function(M,u){var w=new THREE.Matrix4;w.multiply(THREE.Matrix4.makeInvert(u.matrix),THREE.Matrix4.makeInvert(u.projectionMatrix));
|
|
@@ -93,20 +93,20 @@ w.transform(M);return M}};
|
|
|
THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,e,g,b,d;this.domElement=document.createElement("div");this.setSize=function(n,q){e=n;g=q;b=e/2;d=g/2};this.render=function(n,q){var o,f,h,k,i,m,l,s;a=c.projectScene(n,q);o=0;for(f=a.length;o<f;o++){i=a[o];if(i instanceof THREE.RenderableParticle){l=i.x*b+b;s=i.y*d+d;h=0;for(k=i.material.length;h<k;h++){m=i.material[h];if(m instanceof THREE.ParticleDOMMaterial){m=m.domElement;m.style.left=l+"px";m.style.top=s+"px"}}}}}};
|
|
|
THREE.CanvasRenderer=function(){function a(D,T,P,B){var t,G,W,H,S=D.lights;D=0;for(t=S.length;D<t;D++){G=S[D];W=G.color;H=G.intensity;if(G instanceof THREE.DirectionalLight){G=P.dot(G.position)*H;if(G>0){B.r+=W.r*G;B.g+=W.g*G;B.b+=W.b*G}}else if(G instanceof THREE.PointLight){ra.sub(G.position,T);ra.normalize();G=P.dot(ra)*H;if(G>0){B.r+=W.r*G;B.g+=W.g*G;B.b+=W.b*G}}}}function c(D,T,P,B,t,G){if(t.opacity!=0){d(t.opacity);n(t.blending);Y=D.positionScreen.x;C=D.positionScreen.y;$=T.positionScreen.x;
|
|
|
O=T.positionScreen.y;aa=P.positionScreen.x;ca=P.positionScreen.y;var W=Y,H=C,S=$,X=O,V=aa,ba=ca;j.beginPath();j.moveTo(W,H);j.lineTo(S,X);j.lineTo(V,ba);j.lineTo(W,H);j.closePath();if(t instanceof THREE.MeshBasicMaterial)if(t.map)b(Y,C,$,O,aa,ca,t.map.image,B.uvs[0].u,B.uvs[0].v,B.uvs[1].u,B.uvs[1].v,B.uvs[2].u,B.uvs[2].v);else t.wireframe?e(t.color.__styleString,t.wireframe_linewidth):g(t.color.__styleString);else if(t instanceof THREE.MeshLambertMaterial){if(t.map&&!t.wireframe){b(Y,C,$,O,aa,ca,
|
|
|
-t.map.image,B.uvs[0].u,B.uvs[0].v,B.uvs[1].u,B.uvs[1].v,B.uvs[2].u,B.uvs[2].v);n(THREE.SubtractiveBlending)}if(da)if(t.shading==THREE.SmoothShading&&!t.wireframe){Q.r=r.r=F.r=ea.r;Q.g=r.g=F.g=ea.g;Q.b=r.b=F.b=ea.b;a(G,B.v1.positionWorld,B.vertexNormalsWorld[0],Q);a(G,B.v2.positionWorld,B.vertexNormalsWorld[1],r);a(G,B.v3.positionWorld,B.vertexNormalsWorld[2],F);L.r=(r.r+F.r)*0.5;L.g=(r.g+F.g)*0.5;L.b=(r.b+F.b)*0.5;R=q(Q,r,F,L);b(Y,C,$,O,aa,ca,R,0,0,1,0,0,1)}else{fa.r=ea.r;fa.g=ea.g;fa.b=ea.b;a(G,
|
|
|
-B.centroidWorld,B.normalWorld,fa);N.r=t.color.r*fa.r;N.g=t.color.g*fa.g;N.b=t.color.b*fa.b;N.updateStyleString();t.wireframe?e(N.__styleString,t.wireframe_linewidth):g(N.__styleString)}else t.wireframe?e(t.color.__styleString,t.wireframe_linewidth):g(t.color.__styleString)}else if(t instanceof THREE.MeshDepthMaterial){U=t.__2near;z=t.__farPlusNear;y=t.__farMinusNear;Q.r=Q.g=Q.b=1-U/(z-D.positionScreen.z*y);r.r=r.g=r.b=1-U/(z-T.positionScreen.z*y);F.r=F.g=F.b=1-U/(z-P.positionScreen.z*y);L.r=(r.r+
|
|
|
-F.r)*0.5;L.g=(r.g+F.g)*0.5;L.b=(r.b+F.b)*0.5;R=q(Q,r,F,L);b(Y,C,$,O,aa,ca,R,0,0,1,0,0,1)}else if(t instanceof THREE.MeshNormalMaterial){N.r=o(B.normalWorld.x);N.g=o(B.normalWorld.y);N.b=o(B.normalWorld.z);N.updateStyleString();t.wireframe?e(N.__styleString,t.wireframe_linewidth):g(N.__styleString)}}}function e(D,T){if(w!=D)j.strokeStyle=w=D;if(A!=T)j.lineWidth=A=T;j.stroke()}function g(D){if(I!=D)j.fillStyle=I=D;j.fill()}function b(D,T,P,B,t,G,W,H,S,X,V,ba,ja){var ia=W.width-1,ga=W.height-1;H*=ia;
|
|
|
-S*=ga;X*=ia;V*=ga;ba*=ia;ja*=ga;P-=D;B-=T;t-=D;G-=T;X-=H;V-=S;ba-=H;ja-=S;ga=1/(X*ja-ba*V);ia=(ja*P-V*t)*ga;V=(ja*B-V*G)*ga;P=(X*t-ba*P)*ga;B=(X*G-ba*B)*ga;D=D-ia*H-P*S;T=T-V*H-B*S;j.save();j.transform(ia,V,P,B,D,T);j.clip();j.drawImage(W,0,0);j.restore()}function d(D){if(M!=D)j.globalAlpha=M=D}function n(D){if(u!=D){switch(D){case THREE.NormalBlending:j.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:j.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:j.globalCompositeOperation=
|
|
|
+t.map.image,B.uvs[0].u,B.uvs[0].v,B.uvs[1].u,B.uvs[1].v,B.uvs[2].u,B.uvs[2].v);n(THREE.SubtractiveBlending)}if(ea)if(t.shading==THREE.SmoothShading&&!t.wireframe){Q.r=r.r=F.r=fa.r;Q.g=r.g=F.g=fa.g;Q.b=r.b=F.b=fa.b;a(G,B.v1.positionWorld,B.vertexNormalsWorld[0],Q);a(G,B.v2.positionWorld,B.vertexNormalsWorld[1],r);a(G,B.v3.positionWorld,B.vertexNormalsWorld[2],F);L.r=(r.r+F.r)*0.5;L.g=(r.g+F.g)*0.5;L.b=(r.b+F.b)*0.5;R=q(Q,r,F,L);b(Y,C,$,O,aa,ca,R,0,0,1,0,0,1)}else{ga.r=fa.r;ga.g=fa.g;ga.b=fa.b;a(G,
|
|
|
+B.centroidWorld,B.normalWorld,ga);N.r=t.color.r*ga.r;N.g=t.color.g*ga.g;N.b=t.color.b*ga.b;N.updateStyleString();t.wireframe?e(N.__styleString,t.wireframe_linewidth):g(N.__styleString)}else t.wireframe?e(t.color.__styleString,t.wireframe_linewidth):g(t.color.__styleString)}else if(t instanceof THREE.MeshDepthMaterial){U=t.__2near;z=t.__farPlusNear;y=t.__farMinusNear;Q.r=Q.g=Q.b=1-U/(z-D.positionScreen.z*y);r.r=r.g=r.b=1-U/(z-T.positionScreen.z*y);F.r=F.g=F.b=1-U/(z-P.positionScreen.z*y);L.r=(r.r+
|
|
|
+F.r)*0.5;L.g=(r.g+F.g)*0.5;L.b=(r.b+F.b)*0.5;R=q(Q,r,F,L);b(Y,C,$,O,aa,ca,R,0,0,1,0,0,1)}else if(t instanceof THREE.MeshNormalMaterial){N.r=o(B.normalWorld.x);N.g=o(B.normalWorld.y);N.b=o(B.normalWorld.z);N.updateStyleString();t.wireframe?e(N.__styleString,t.wireframe_linewidth):g(N.__styleString)}}}function e(D,T){if(w!=D)j.strokeStyle=w=D;if(A!=T)j.lineWidth=A=T;j.stroke()}function g(D){if(I!=D)j.fillStyle=I=D;j.fill()}function b(D,T,P,B,t,G,W,H,S,X,V,ba,ja){var ia,da;ia=W.width-1;da=W.height-1;
|
|
|
+H*=ia;S*=da;X*=ia;V*=da;ba*=ia;ja*=da;P-=D;B-=T;t-=D;G-=T;X-=H;V-=S;ba-=H;ja-=S;da=1/(X*ja-ba*V);ia=(ja*P-V*t)*da;V=(ja*B-V*G)*da;P=(X*t-ba*P)*da;B=(X*G-ba*B)*da;D=D-ia*H-P*S;T=T-V*H-B*S;j.save();j.transform(ia,V,P,B,D,T);j.clip();j.drawImage(W,0,0);j.restore()}function d(D){if(M!=D)j.globalAlpha=M=D}function n(D){if(u!=D){switch(D){case THREE.NormalBlending:j.globalCompositeOperation="source-over";break;case THREE.AdditiveBlending:j.globalCompositeOperation="lighter";break;case THREE.SubtractiveBlending:j.globalCompositeOperation=
|
|
|
"darker"}u=D}}function q(D,T,P,B){ha[0]=~~(D.r*255);ha[1]=~~(D.g*255);ha[2]=~~(D.b*255);ha[4]=~~(T.r*255);ha[5]=~~(T.g*255);ha[6]=~~(T.b*255);ha[8]=~~(P.r*255);ha[9]=~~(P.g*255);ha[10]=~~(P.b*255);ha[12]=~~(B.r*255);ha[13]=~~(B.g*255);ha[14]=~~(B.b*255);na.putImageData(sa,0,0);qa.drawImage(oa,0,0);return pa}function o(D){return D<0?Math.min((1+D)*0.5,0.5):0.5+Math.min(D*0.5,0.5)}function f(D,T){var P=T.x-D.x,B=T.y-D.y,t=1/Math.sqrt(P*P+B*B);P*=t;B*=t;T.x+=P;T.y+=B;D.x-=P;D.y-=B}var h=null,k=new THREE.Projector,
|
|
|
-i=document.createElement("canvas"),m,l,s,v,j=i.getContext("2d"),M=1,u=0,w=null,I=null,A=1,J,p,x,Y,C,$,O,aa,ca,N=new THREE.Color,Q=new THREE.Color,r=new THREE.Color,F=new THREE.Color,L=new THREE.Color,U,z,y,R,Z=new THREE.Rectangle,E=new THREE.Rectangle,K=new THREE.Rectangle,da=false,fa=new THREE.Color,ea=new THREE.Color,ka=new THREE.Color,la=new THREE.Color,va=Math.PI*2,ra=new THREE.Vector3;new THREE.UV;new THREE.UV;new THREE.UV;new THREE.UV;var oa,na,sa,ha,pa,qa,ma=16;oa=document.createElement("canvas");
|
|
|
-oa.width=oa.height=2;na=oa.getContext("2d");na.fillStyle="rgba(0,0,0,1)";na.fillRect(0,0,2,2);sa=na.getImageData(0,0,2,2);ha=sa.data;pa=document.createElement("canvas");pa.width=pa.height=ma;qa=pa.getContext("2d");qa.translate(-ma/2,-ma/2);qa.scale(ma,ma);ma--;this.domElement=i;this.autoClear=true;this.setSize=function(D,T){m=D;l=T;s=m/2;v=l/2;i.width=m;i.height=l;Z.set(-s,-v,s,v)};this.clear=function(){if(!E.isEmpty()){E.inflate(1);E.minSelf(Z);j.clearRect(E.getX(),E.getY(),E.getWidth(),E.getHeight());
|
|
|
-E.empty()}};this.render=function(D,T){var P,B,t,G,W,H,S,X;j.setTransform(1,0,0,-1,s,v);this.autoClear&&this.clear();h=k.projectScene(D,T);j.fillStyle="rgba(0, 255, 255, 0.5)";j.fillRect(Z.getX(),Z.getY(),Z.getWidth(),Z.getHeight());if(da=D.lights.length>0){W=D.lights;ea.setRGB(0,0,0);ka.setRGB(0,0,0);la.setRGB(0,0,0);P=0;for(B=W.length;P<B;P++){t=W[P];G=t.color;if(t instanceof THREE.AmbientLight){ea.r+=G.r;ea.g+=G.g;ea.b+=G.b}else if(t instanceof THREE.DirectionalLight){ka.r+=G.r;ka.g+=G.g;ka.b+=
|
|
|
-G.b}else if(t instanceof THREE.PointLight){la.r+=G.r;la.g+=G.g;la.b+=G.b}}}P=0;for(B=h.length;P<B;P++){t=h[P];K.empty();if(t instanceof THREE.RenderableParticle){J=t;J.x*=s;J.y*=v;G=0;for(W=t.material.length;G<W;G++)a:{H=J;S=t;var V=t.material[G];if(V.opacity!=0){d(V.opacity);n(V.blending);X=void 0;var ba=void 0,ja=void 0,ia=void 0,ga=void 0,ta=void 0,ua=void 0;if(V instanceof THREE.ParticleBasicMaterial){if(V.map){ga=V.map;ta=ga.width>>1;ua=ga.height>>1;ja=S.scale.x*s;ia=S.scale.y*v;X=ja*ta;ba=ia*
|
|
|
-ua;K.set(H.x-X,H.y-ba,H.x+X,H.y+ba);if(!Z.instersects(K))break a;j.save();j.translate(H.x,H.y);j.rotate(-S.rotation);j.scale(ja,-ia);j.translate(-ta,-ua);j.drawImage(ga,0,0);j.restore()}j.beginPath();j.moveTo(H.x-10,H.y);j.lineTo(H.x+10,H.y);j.moveTo(H.x,H.y-10);j.lineTo(H.x,H.y+10);j.closePath();j.strokeStyle="rgb(255,255,0)";j.stroke()}else if(V instanceof THREE.ParticleCircleMaterial){if(da){fa.r=ea.r+ka.r+la.r;fa.g=ea.g+ka.g+la.g;fa.b=ea.b+ka.b+la.b;N.r=V.color.r*fa.r;N.g=V.color.g*fa.g;N.b=V.color.b*
|
|
|
-fa.b;N.updateStyleString()}else N.__styleString=V.color.__styleString;X=S.scale.x*s;ba=S.scale.y*v;K.set(H.x-X,H.y-ba,H.x+X,H.y+ba);if(Z.instersects(K)){V=N.__styleString;if(I!=V)j.fillStyle=I=V;j.save();j.translate(H.x,H.y);j.rotate(-S.rotation);j.scale(X,ba);j.beginPath();j.arc(0,0,1,0,va,true);j.closePath();j.fill();j.restore()}}}}}else if(t instanceof THREE.RenderableLine){J=t.v1;p=t.v2;J.positionScreen.x*=s;J.positionScreen.y*=v;p.positionScreen.x*=s;p.positionScreen.y*=v;K.addPoint(J.positionScreen.x,
|
|
|
-J.positionScreen.y);K.addPoint(p.positionScreen.x,p.positionScreen.y);if(Z.instersects(K)){G=0;for(W=t.material.length;G<W;){S=J;X=p;H=t.material[G++];if(H.opacity!=0){d(H.opacity);n(H.blending);j.beginPath();j.moveTo(S.positionScreen.x,S.positionScreen.y);j.lineTo(X.positionScreen.x,X.positionScreen.y);j.closePath();if(H instanceof THREE.LineBasicMaterial){N.__styleString=H.color.__styleString;S=H.linewidth;if(A!=S)j.lineWidth=A=S;S=N.__styleString;if(w!=S)j.strokeStyle=w=S;j.stroke();K.inflate(H.linewidth*
|
|
|
-2)}}}}}else if(t instanceof THREE.RenderableFace3){J=t.v1;p=t.v2;x=t.v3;J.positionScreen.x*=s;J.positionScreen.y*=v;p.positionScreen.x*=s;p.positionScreen.y*=v;x.positionScreen.x*=s;x.positionScreen.y*=v;if(t.overdraw){f(J.positionScreen,p.positionScreen);f(p.positionScreen,x.positionScreen);f(x.positionScreen,J.positionScreen)}K.addPoint(J.positionScreen.x,J.positionScreen.y);K.addPoint(p.positionScreen.x,p.positionScreen.y);K.addPoint(x.positionScreen.x,x.positionScreen.y);if(Z.instersects(K)){G=
|
|
|
-0;for(W=t.meshMaterial.length;G<W;){X=t.meshMaterial[G++];if(X instanceof THREE.MeshFaceMaterial){H=0;for(S=t.faceMaterial.length;H<S;)(X=t.faceMaterial[H++])&&c(J,p,x,t,X,D)}else c(J,p,x,t,X,D)}}}E.addRectangle(K)}j.lineWidth=1;j.strokeStyle="rgba( 255, 0, 0, 0.5 )";j.strokeRect(E.getX(),E.getY(),E.getWidth(),E.getHeight());j.setTransform(1,0,0,1,0,0)}};
|
|
|
+i=document.createElement("canvas"),m,l,s,v,j=i.getContext("2d"),M=1,u=0,w=null,I=null,A=1,J,p,x,Y,C,$,O,aa,ca,N=new THREE.Color,Q=new THREE.Color,r=new THREE.Color,F=new THREE.Color,L=new THREE.Color,U,z,y,R,Z=new THREE.Rectangle,E=new THREE.Rectangle,K=new THREE.Rectangle,ea=false,ga=new THREE.Color,fa=new THREE.Color,ka=new THREE.Color,la=new THREE.Color,va=Math.PI*2,ra=new THREE.Vector3,oa,na,sa,ha,pa,qa,ma=16;oa=document.createElement("canvas");oa.width=oa.height=2;na=oa.getContext("2d");na.fillStyle=
|
|
|
+"rgba(0,0,0,1)";na.fillRect(0,0,2,2);sa=na.getImageData(0,0,2,2);ha=sa.data;pa=document.createElement("canvas");pa.width=pa.height=ma;qa=pa.getContext("2d");qa.translate(-ma/2,-ma/2);qa.scale(ma,ma);ma--;this.domElement=i;this.autoClear=true;this.setSize=function(D,T){m=D;l=T;s=m/2;v=l/2;i.width=m;i.height=l;Z.set(-s,-v,s,v)};this.clear=function(){if(!E.isEmpty()){E.inflate(1);E.minSelf(Z);j.clearRect(E.getX(),E.getY(),E.getWidth(),E.getHeight());E.empty()}};this.render=function(D,T){var P,B,t,G,
|
|
|
+W,H,S,X;j.setTransform(1,0,0,-1,s,v);this.autoClear&&this.clear();h=k.projectScene(D,T);j.fillStyle="rgba(0, 255, 255, 0.5)";j.fillRect(Z.getX(),Z.getY(),Z.getWidth(),Z.getHeight());if(ea=D.lights.length>0){W=D.lights;fa.setRGB(0,0,0);ka.setRGB(0,0,0);la.setRGB(0,0,0);P=0;for(B=W.length;P<B;P++){t=W[P];G=t.color;if(t instanceof THREE.AmbientLight){fa.r+=G.r;fa.g+=G.g;fa.b+=G.b}else if(t instanceof THREE.DirectionalLight){ka.r+=G.r;ka.g+=G.g;ka.b+=G.b}else if(t instanceof THREE.PointLight){la.r+=G.r;
|
|
|
+la.g+=G.g;la.b+=G.b}}}P=0;for(B=h.length;P<B;P++){t=h[P];K.empty();if(t instanceof THREE.RenderableParticle){J=t;J.x*=s;J.y*=v;G=0;for(W=t.material.length;G<W;G++)a:{H=J;S=t;var V=t.material[G];if(V.opacity!=0){d(V.opacity);n(V.blending);X=void 0;var ba=void 0,ja=void 0,ia=void 0,da=void 0,ta=void 0,ua=void 0;if(V instanceof THREE.ParticleBasicMaterial){if(V.map){da=V.map;ta=da.width>>1;ua=da.height>>1;ja=S.scale.x*s;ia=S.scale.y*v;X=ja*ta;ba=ia*ua;K.set(H.x-X,H.y-ba,H.x+X,H.y+ba);if(!Z.instersects(K))break a;
|
|
|
+j.save();j.translate(H.x,H.y);j.rotate(-S.rotation);j.scale(ja,-ia);j.translate(-ta,-ua);j.drawImage(da,0,0);j.restore()}j.beginPath();j.moveTo(H.x-10,H.y);j.lineTo(H.x+10,H.y);j.moveTo(H.x,H.y-10);j.lineTo(H.x,H.y+10);j.closePath();j.strokeStyle="rgb(255,255,0)";j.stroke()}else if(V instanceof THREE.ParticleCircleMaterial){if(ea){ga.r=fa.r+ka.r+la.r;ga.g=fa.g+ka.g+la.g;ga.b=fa.b+ka.b+la.b;N.r=V.color.r*ga.r;N.g=V.color.g*ga.g;N.b=V.color.b*ga.b;N.updateStyleString()}else N.__styleString=V.color.__styleString;
|
|
|
+X=S.scale.x*s;ba=S.scale.y*v;K.set(H.x-X,H.y-ba,H.x+X,H.y+ba);if(Z.instersects(K)){V=N.__styleString;if(I!=V)j.fillStyle=I=V;j.save();j.translate(H.x,H.y);j.rotate(-S.rotation);j.scale(X,ba);j.beginPath();j.arc(0,0,1,0,va,true);j.closePath();j.fill();j.restore()}}}}}else if(t instanceof THREE.RenderableLine){J=t.v1;p=t.v2;J.positionScreen.x*=s;J.positionScreen.y*=v;p.positionScreen.x*=s;p.positionScreen.y*=v;K.addPoint(J.positionScreen.x,J.positionScreen.y);K.addPoint(p.positionScreen.x,p.positionScreen.y);
|
|
|
+if(Z.instersects(K)){G=0;for(W=t.material.length;G<W;){S=J;X=p;H=t.material[G++];if(H.opacity!=0){d(H.opacity);n(H.blending);j.beginPath();j.moveTo(S.positionScreen.x,S.positionScreen.y);j.lineTo(X.positionScreen.x,X.positionScreen.y);j.closePath();if(H instanceof THREE.LineBasicMaterial){N.__styleString=H.color.__styleString;S=H.linewidth;if(A!=S)j.lineWidth=A=S;S=N.__styleString;if(w!=S)j.strokeStyle=w=S;j.stroke();K.inflate(H.linewidth*2)}}}}}else if(t instanceof THREE.RenderableFace3){J=t.v1;
|
|
|
+p=t.v2;x=t.v3;J.positionScreen.x*=s;J.positionScreen.y*=v;p.positionScreen.x*=s;p.positionScreen.y*=v;x.positionScreen.x*=s;x.positionScreen.y*=v;if(t.overdraw){f(J.positionScreen,p.positionScreen);f(p.positionScreen,x.positionScreen);f(x.positionScreen,J.positionScreen)}K.addPoint(J.positionScreen.x,J.positionScreen.y);K.addPoint(p.positionScreen.x,p.positionScreen.y);K.addPoint(x.positionScreen.x,x.positionScreen.y);if(Z.instersects(K)){G=0;for(W=t.meshMaterial.length;G<W;){X=t.meshMaterial[G++];
|
|
|
+if(X instanceof THREE.MeshFaceMaterial){H=0;for(S=t.faceMaterial.length;H<S;)(X=t.faceMaterial[H++])&&c(J,p,x,t,X,D)}else c(J,p,x,t,X,D)}}}E.addRectangle(K)}j.lineWidth=1;j.strokeStyle="rgba( 255, 0, 0, 0.5 )";j.strokeRect(E.getX(),E.getY(),E.getWidth(),E.getHeight());j.setTransform(1,0,0,1,0,0)}};
|
|
|
THREE.SVGRenderer=function(){function a(r,F,L){var U,z,y,R;U=0;for(z=r.lights.length;U<z;U++){y=r.lights[U];if(y instanceof THREE.DirectionalLight){R=F.normalWorld.dot(y.position)*y.intensity;if(R>0){L.r+=y.color.r*R;L.g+=y.color.g*R;L.b+=y.color.b*R}}else if(y instanceof THREE.PointLight){x.sub(y.position,F.centroidWorld);x.normalize();R=F.normalWorld.dot(x)*y.intensity;if(R>0){L.r+=y.color.r*R;L.g+=y.color.g*R;L.b+=y.color.b*R}}}}function c(r,F,L,U,z,y){O=g(aa++);O.setAttribute("d","M "+r.positionScreen.x+
|
|
|
" "+r.positionScreen.y+" L "+F.positionScreen.x+" "+F.positionScreen.y+" L "+L.positionScreen.x+","+L.positionScreen.y+"z");if(z instanceof THREE.MeshBasicMaterial)u.__styleString=z.color.__styleString;else if(z instanceof THREE.MeshLambertMaterial)if(M){w.r=I.r;w.g=I.g;w.b=I.b;a(y,U,w);u.r=z.color.r*w.r;u.g=z.color.g*w.g;u.b=z.color.b*w.b;u.updateStyleString()}else u.__styleString=z.color.__styleString;else if(z instanceof THREE.MeshDepthMaterial){p=1-z.__2near/(z.__farPlusNear-U.z*z.__farMinusNear);
|
|
|
u.setRGB(p,p,p)}else z instanceof THREE.MeshNormalMaterial&&u.setRGB(b(U.normalWorld.x),b(U.normalWorld.y),b(U.normalWorld.z));z.wireframe?O.setAttribute("style","fill: none; stroke: "+u.__styleString+"; stroke-width: "+z.wireframe_linewidth+"; stroke-opacity: "+z.opacity+"; stroke-linecap: "+z.wireframe_linecap+"; stroke-linejoin: "+z.wireframe_linejoin):O.setAttribute("style","fill: "+u.__styleString+"; fill-opacity: "+z.opacity);q.appendChild(O)}function e(r,F,L,U,z,y,R){O=g(aa++);O.setAttribute("d",
|
|
@@ -115,8 +115,8 @@ u.setRGB(p,p,p)}else z instanceof THREE.MeshNormalMaterial&&u.setRGB(b(U.normalW
|
|
|
function g(r){if(Y[r]==null){Y[r]=document.createElementNS("http://www.w3.org/2000/svg","path");Q==0&&Y[r].setAttribute("shape-rendering","crispEdges");return Y[r]}return Y[r]}function b(r){return r<0?Math.min((1+r)*0.5,0.5):0.5+Math.min(r*0.5,0.5)}var d=null,n=new THREE.Projector,q=document.createElementNS("http://www.w3.org/2000/svg","svg"),o,f,h,k,i,m,l,s,v=new THREE.Rectangle,j=new THREE.Rectangle,M=false,u=new THREE.Color(16777215),w=new THREE.Color(16777215),I=new THREE.Color(0),A=new THREE.Color(0),
|
|
|
J=new THREE.Color(0),p,x=new THREE.Vector3,Y=[],C=[],$=[],O,aa,ca,N,Q=1;this.domElement=q;this.autoClear=true;this.setQuality=function(r){switch(r){case "high":Q=1;break;case "low":Q=0}};this.setSize=function(r,F){o=r;f=F;h=o/2;k=f/2;q.setAttribute("viewBox",-h+" "+-k+" "+o+" "+f);q.setAttribute("width",o);q.setAttribute("height",f);v.set(-h,-k,h,k)};this.clear=function(){for(;q.childNodes.length>0;)q.removeChild(q.childNodes[0])};this.render=function(r,F){var L,U,z,y,R,Z,E,K;this.autoClear&&this.clear();
|
|
|
d=n.projectScene(r,F);N=ca=aa=0;if(M=r.lights.length>0){E=r.lights;I.setRGB(0,0,0);A.setRGB(0,0,0);J.setRGB(0,0,0);L=0;for(U=E.length;L<U;L++){z=E[L];y=z.color;if(z instanceof THREE.AmbientLight){I.r+=y.r;I.g+=y.g;I.b+=y.b}else if(z instanceof THREE.DirectionalLight){A.r+=y.r;A.g+=y.g;A.b+=y.b}else if(z instanceof THREE.PointLight){J.r+=y.r;J.g+=y.g;J.b+=y.b}}}L=0;for(U=d.length;L<U;L++){E=d[L];j.empty();if(E instanceof THREE.RenderableParticle){i=E;i.x*=h;i.y*=-k;z=0;for(y=E.material.length;z<y;z++)if(K=
|
|
|
-E.material[z]){R=i;Z=E;K=K;var da=ca++;if(C[da]==null){C[da]=document.createElementNS("http://www.w3.org/2000/svg","circle");Q==0&&C[da].setAttribute("shape-rendering","crispEdges")}O=C[da];O.setAttribute("cx",R.x);O.setAttribute("cy",R.y);O.setAttribute("r",Z.scale.x*h);if(K instanceof THREE.ParticleCircleMaterial){if(M){w.r=I.r+A.r+J.r;w.g=I.g+A.g+J.g;w.b=I.b+A.b+J.b;u.r=K.color.r*w.r;u.g=K.color.g*w.g;u.b=K.color.b*w.b;u.updateStyleString()}else u=K.color;O.setAttribute("style","fill: "+u.__styleString)}q.appendChild(O)}}else if(E instanceof
|
|
|
-THREE.RenderableLine){i=E.v1;m=E.v2;i.positionScreen.x*=h;i.positionScreen.y*=-k;m.positionScreen.x*=h;m.positionScreen.y*=-k;j.addPoint(i.positionScreen.x,i.positionScreen.y);j.addPoint(m.positionScreen.x,m.positionScreen.y);if(v.instersects(j)){z=0;for(y=E.material.length;z<y;)if(K=E.material[z++]){R=i;Z=m;K=K;da=N++;if($[da]==null){$[da]=document.createElementNS("http://www.w3.org/2000/svg","line");Q==0&&$[da].setAttribute("shape-rendering","crispEdges")}O=$[da];O.setAttribute("x1",R.positionScreen.x);
|
|
|
+E.material[z]){R=i;Z=E;K=K;var ea=ca++;if(C[ea]==null){C[ea]=document.createElementNS("http://www.w3.org/2000/svg","circle");Q==0&&C[ea].setAttribute("shape-rendering","crispEdges")}O=C[ea];O.setAttribute("cx",R.x);O.setAttribute("cy",R.y);O.setAttribute("r",Z.scale.x*h);if(K instanceof THREE.ParticleCircleMaterial){if(M){w.r=I.r+A.r+J.r;w.g=I.g+A.g+J.g;w.b=I.b+A.b+J.b;u.r=K.color.r*w.r;u.g=K.color.g*w.g;u.b=K.color.b*w.b;u.updateStyleString()}else u=K.color;O.setAttribute("style","fill: "+u.__styleString)}q.appendChild(O)}}else if(E instanceof
|
|
|
+THREE.RenderableLine){i=E.v1;m=E.v2;i.positionScreen.x*=h;i.positionScreen.y*=-k;m.positionScreen.x*=h;m.positionScreen.y*=-k;j.addPoint(i.positionScreen.x,i.positionScreen.y);j.addPoint(m.positionScreen.x,m.positionScreen.y);if(v.instersects(j)){z=0;for(y=E.material.length;z<y;)if(K=E.material[z++]){R=i;Z=m;K=K;ea=N++;if($[ea]==null){$[ea]=document.createElementNS("http://www.w3.org/2000/svg","line");Q==0&&$[ea].setAttribute("shape-rendering","crispEdges")}O=$[ea];O.setAttribute("x1",R.positionScreen.x);
|
|
|
O.setAttribute("y1",R.positionScreen.y);O.setAttribute("x2",Z.positionScreen.x);O.setAttribute("y2",Z.positionScreen.y);if(K instanceof THREE.LineBasicMaterial){u.__styleString=K.color.__styleString;O.setAttribute("style","fill: none; stroke: "+u.__styleString+"; stroke-width: "+K.linewidth+"; stroke-opacity: "+K.opacity+"; stroke-linecap: "+K.linecap+"; stroke-linejoin: "+K.linejoin);q.appendChild(O)}}}}else if(E instanceof THREE.RenderableFace3){i=E.v1;m=E.v2;l=E.v3;i.positionScreen.x*=h;i.positionScreen.y*=
|
|
|
-k;m.positionScreen.x*=h;m.positionScreen.y*=-k;l.positionScreen.x*=h;l.positionScreen.y*=-k;j.addPoint(i.positionScreen.x,i.positionScreen.y);j.addPoint(m.positionScreen.x,m.positionScreen.y);j.addPoint(l.positionScreen.x,l.positionScreen.y);if(v.instersects(j)){z=0;for(y=E.meshMaterial.length;z<y;){K=E.meshMaterial[z++];if(K instanceof THREE.MeshFaceMaterial){R=0;for(Z=E.faceMaterial.length;R<Z;)(K=E.faceMaterial[R++])&&c(i,m,l,E,K,r)}else K&&c(i,m,l,E,K,r)}}}else if(E instanceof THREE.RenderableFace4){i=
|
|
|
E.v1;m=E.v2;l=E.v3;s=E.v4;i.positionScreen.x*=h;i.positionScreen.y*=-k;m.positionScreen.x*=h;m.positionScreen.y*=-k;l.positionScreen.x*=h;l.positionScreen.y*=-k;s.positionScreen.x*=h;s.positionScreen.y*=-k;j.addPoint(i.positionScreen.x,i.positionScreen.y);j.addPoint(m.positionScreen.x,m.positionScreen.y);j.addPoint(l.positionScreen.x,l.positionScreen.y);j.addPoint(s.positionScreen.x,s.positionScreen.y);if(v.instersects(j)){z=0;for(y=E.meshMaterial.length;z<y;){K=E.meshMaterial[z++];if(K instanceof
|