|
@@ -260,25 +260,25 @@ THREE.Fog=function(a,b,c){this.color=new THREE.Color(a);this.near=b!==void 0?b:1
|
|
|
THREE.CanvasRenderer=function(a){function b(a){if(u!==a)u=n.globalAlpha=a}function c(a){if(v!==a){if(a===THREE.NormalBlending)n.globalCompositeOperation="source-over";else if(a===THREE.AdditiveBlending)n.globalCompositeOperation="lighter";else if(a===THREE.SubtractiveBlending)n.globalCompositeOperation="darker";v=a}}function d(a){if(s!==a)s=n.strokeStyle=a}function f(a){if(A!==a)A=n.fillStyle=a}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},e=this,g,h,i,j=new THREE.Projector,l=a.canvas!==
|
|
|
void 0?a.canvas:document.createElement("canvas"),o,m,p,q,n=l.getContext("2d"),t=new THREE.Color(0),r=0,u=1,v=0,s=null,A=null,y=null,B=null,G=null,x,I,F,L,H=new THREE.RenderableVertex,M=new THREE.RenderableVertex,C,E,P,N,Q,Z,J,K,ea,O,qa,ua,ca=new THREE.Color,ba=new THREE.Color,W=new THREE.Color,V=new THREE.Color,ga=new THREE.Color,ha={},oa={},sa,Ca,Ha,Wa,ja,ob,Ma,Xa,pb,wb,eb=new THREE.Rectangle,Ea=new THREE.Rectangle,xa=new THREE.Rectangle,xb=false,Fa=new THREE.Color,Za=new THREE.Color,qb=new THREE.Color,
|
|
|
Da=new THREE.Vector3,$a,ab,fb,Na,Oa,gb,a=16;$a=document.createElement("canvas");$a.width=$a.height=2;ab=$a.getContext("2d");ab.fillStyle="rgba(0,0,0,1)";ab.fillRect(0,0,2,2);fb=ab.getImageData(0,0,2,2);Na=fb.data;Oa=document.createElement("canvas");Oa.width=Oa.height=a;gb=Oa.getContext("2d");gb.translate(-a/2,-a/2);gb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=true;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){o=a;m=b;p=Math.floor(o/2);
|
|
|
-q=Math.floor(m/2);l.width=o;l.height=m;eb.set(-p,-q,p,q);Ea.set(-p,-q,p,q);u=1;v=0;G=B=y=A=s=null};this.setClearColor=function(a,b){t.copy(a);r=b!==void 0?b:1;Ea.set(-p,-q,p,q)};this.setClearColorHex=function(a,b){t.setHex(a);r=b!==void 0?b:1;Ea.set(-p,-q,p,q)};this.clear=function(){n.setTransform(1,0,0,-1,p,q);if(Ea.isEmpty()===false){Ea.minSelf(eb);Ea.inflate(2);r<1&&n.clearRect(Math.floor(Ea.getX()),Math.floor(Ea.getY()),Math.floor(Ea.getWidth()),Math.floor(Ea.getHeight()));if(r>0){c(THREE.NormalBlending);
|
|
|
-b(1);f("rgba("+Math.floor(t.r*255)+","+Math.floor(t.g*255)+","+Math.floor(t.b*255)+","+r+")");n.fillRect(Math.floor(Ea.getX()),Math.floor(Ea.getY()),Math.floor(Ea.getWidth()),Math.floor(Ea.getHeight()))}Ea.empty()}};this.render=function(a,k){function l(a,b,c){for(var d=0,f=i.length;d<f;d++){var e=i[d],g=e.color;if(e instanceof THREE.DirectionalLight){var h=e.matrixWorld.getPosition().normalize(),k=b.dot(h);if(!(k<=0)){k=k*e.intensity;c.r=c.r+g.r*k;c.g=c.g+g.g*k;c.b=c.b+g.b*k}}else if(e instanceof
|
|
|
-THREE.PointLight){h=e.matrixWorld.getPosition();k=b.dot(Da.sub(h,a).normalize());if(!(k<=0)){k=k*(e.distance==0?1:1-Math.min(a.distanceTo(h)/e.distance,1));if(k!=0){k=k*e.intensity;c.r=c.r+g.r*k;c.g=c.g+g.g*k;c.b=c.b+g.b*k}}}}}function o(a,d,f,g,h,i,j,n){e.info.render.vertices=e.info.render.vertices+3;e.info.render.faces++;b(n.opacity);c(n.blending);C=a.positionScreen.x;E=a.positionScreen.y;P=d.positionScreen.x;N=d.positionScreen.y;Q=f.positionScreen.x;Z=f.positionScreen.y;m(C,E,P,N,Q,Z);if((n instanceof
|
|
|
-THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial)&&n.map===null&&n.map===null)if(xb===true)if(n.wireframe===false&&n.shading==THREE.SmoothShading&&j.vertexNormalsLength==3){ba.r=W.r=V.r=Fa.r;ba.g=W.g=V.g=Fa.g;ba.b=W.b=V.b=Fa.b;l(j.v1.positionWorld,j.vertexNormalsWorld[0],ba);l(j.v2.positionWorld,j.vertexNormalsWorld[1],W);l(j.v3.positionWorld,j.vertexNormalsWorld[2],V);ba.r=Math.max(0,Math.min(n.color.r*ba.r,1));ba.g=Math.max(0,Math.min(n.color.g*ba.g,1));ba.b=Math.max(0,Math.min(n.color.b*
|
|
|
-ba.b,1));W.r=Math.max(0,Math.min(n.color.r*W.r,1));W.g=Math.max(0,Math.min(n.color.g*W.g,1));W.b=Math.max(0,Math.min(n.color.b*W.b,1));V.r=Math.max(0,Math.min(n.color.r*V.r,1));V.g=Math.max(0,Math.min(n.color.g*V.g,1));V.b=Math.max(0,Math.min(n.color.b*V.b,1));ga.r=(W.r+V.r)*0.5;ga.g=(W.g+V.g)*0.5;ga.b=(W.b+V.b)*0.5;Ha=va(ba,W,V,ga);v(C,E,P,N,Q,Z,0,0,1,0,0,1,Ha)}else{ca.r=Fa.r;ca.g=Fa.g;ca.b=Fa.b;l(j.centroidWorld,j.normalWorld,ca);ca.r=Math.max(0,Math.min(n.color.r*ca.r,1));ca.g=Math.max(0,Math.min(n.color.g*
|
|
|
-ca.g,1));ca.b=Math.max(0,Math.min(n.color.b*ca.b,1));n.wireframe===true?r(ca,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(ca)}else n.wireframe===true?r(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(n.color);else if(n instanceof THREE.MeshBasicMaterial||n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial)if(n.map!==null){if(n.map.mapping instanceof THREE.UVMapping){Wa=j.uvs[0];u(C,E,P,N,Q,Z,Wa[g].u,Wa[g].v,Wa[h].u,Wa[h].v,Wa[i].u,
|
|
|
-Wa[i].v,n.map)}}else if(n.envMap!==null){if(n.envMap.mapping instanceof THREE.SphericalReflectionMapping){a=k.matrixWorldInverse;Da.copy(j.vertexNormalsWorld[g]);ja=(Da.x*a.elements[0]+Da.y*a.elements[4]+Da.z*a.elements[8])*0.5+0.5;ob=(Da.x*a.elements[1]+Da.y*a.elements[5]+Da.z*a.elements[9])*0.5+0.5;Da.copy(j.vertexNormalsWorld[h]);Ma=(Da.x*a.elements[0]+Da.y*a.elements[4]+Da.z*a.elements[8])*0.5+0.5;Xa=(Da.x*a.elements[1]+Da.y*a.elements[5]+Da.z*a.elements[9])*0.5+0.5;Da.copy(j.vertexNormalsWorld[i]);
|
|
|
-pb=(Da.x*a.elements[0]+Da.y*a.elements[4]+Da.z*a.elements[8])*0.5+0.5;wb=(Da.x*a.elements[1]+Da.y*a.elements[5]+Da.z*a.elements[9])*0.5+0.5;u(C,E,P,N,Q,Z,ja,ob,Ma,Xa,pb,wb,n.envMap)}}else n.wireframe===true?r(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(n.color);else if(n instanceof THREE.MeshDepthMaterial){sa=k.near;Ca=k.far;ba.r=ba.g=ba.b=1-ec(a.positionScreen.z,sa,Ca);W.r=W.g=W.b=1-ec(d.positionScreen.z,sa,Ca);V.r=V.g=V.b=1-ec(f.positionScreen.z,sa,Ca);ga.r=(W.r+V.r)*
|
|
|
-0.5;ga.g=(W.g+V.g)*0.5;ga.b=(W.b+V.b)*0.5;Ha=va(ba,W,V,ga);v(C,E,P,N,Q,Z,0,0,1,0,0,1,Ha)}else if(n instanceof THREE.MeshNormalMaterial){ca.r=ic(j.normalWorld.x);ca.g=ic(j.normalWorld.y);ca.b=ic(j.normalWorld.z);n.wireframe===true?r(ca,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(ca)}}function m(a,b,c,d,f,e){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(f,e);n.closePath()}function s(a,b,c,d,f,e,g,h){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(f,e);n.lineTo(g,h);n.closePath()}
|
|
|
-function r(a,b,c,f){if(y!==b)y=n.lineWidth=b;if(B!==c)B=n.lineCap=c;if(G!==f)G=n.lineJoin=f;d(a.getContextStyle());n.stroke();xa.inflate(b*2)}function t(a){f(a.getContextStyle());n.fill()}function u(a,b,c,d,e,g,h,i,k,j,l,o,m){if(!(m instanceof THREE.DataTexture||m.image===void 0||m.image.width==0)){if(m.needsUpdate===true||ha[m.id]===void 0){var va=m.wrapS==THREE.RepeatWrapping,q=m.wrapT==THREE.RepeatWrapping;ha[m.id]=n.createPattern(m.image,va===true&&q===true?"repeat":va===true&&q===false?"repeat-x":
|
|
|
-va===false&&q===true?"repeat-y":"no-repeat");m.needsUpdate=false}f(ha[m.id]);var va=m.offset.x/m.repeat.x,q=m.offset.y/m.repeat.y,p=m.image.width*m.repeat.x,rb=m.image.height*m.repeat.y,h=(h+va)*p,i=(1-i+q)*rb,c=c-a,d=d-b,e=e-a,g=g-b,k=(k+va)*p-h,j=(1-j+q)*rb-i,l=(l+va)*p-h,o=(1-o+q)*rb-i,va=k*o-l*j;if(va===0){if(oa[m.id]===void 0){b=document.createElement("canvas");b.width=m.image.width;b.height=m.image.height;b=b.getContext("2d");b.drawImage(m.image,0,0);oa[m.id]=b.getImageData(0,0,m.image.width,
|
|
|
-m.image.height).data}b=oa[m.id];h=(Math.floor(h)+Math.floor(i)*m.image.width)*4;ca.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);t(ca)}else{va=1/va;m=(o*c-j*e)*va;j=(o*d-j*g)*va;c=(k*e-l*c)*va;d=(k*g-l*d)*va;a=a-m*h-c*i;h=b-j*h-d*i;n.save();n.transform(m,j,c,d,a,h);n.fill();n.restore()}}}function v(a,b,c,d,f,e,g,h,i,k,j,l,m){var o,va;o=m.width-1;va=m.height-1;g=g*o;h=h*va;c=c-a;d=d-b;f=f-a;e=e-b;i=i*o-g;k=k*va-h;j=j*o-g;l=l*va-h;va=1/(i*l-j*k);o=(l*c-k*f)*va;k=(l*d-k*e)*va;c=(i*f-j*c)*va;d=(i*e-j*d)*va;
|
|
|
-a=a-o*g-c*h;b=b-k*g-d*h;n.save();n.transform(o,k,c,d,a,b);n.clip();n.drawImage(m,0,0);n.restore()}function va(a,b,c,d){var f=a.r*255|0,e=a.g*255|0,a=a.b*255|0,g=b.r*255|0,h=b.g*255|0,b=b.b*255|0,i=c.r*255|0,k=c.g*255|0,c=c.b*255|0,j=d.r*255|0,l=d.g*255|0,d=d.b*255|0;Na[0]=f<0?0:f>255?255:f;Na[1]=e<0?0:e>255?255:e;Na[2]=a<0?0:a>255?255:a;Na[4]=g<0?0:g>255?255:g;Na[5]=h<0?0:h>255?255:h;Na[6]=b<0?0:b>255?255:b;Na[8]=i<0?0:i>255?255:i;Na[9]=k<0?0:k>255?255:k;Na[10]=c<0?0:c>255?255:c;Na[12]=j<0?0:j>255?
|
|
|
-255:j;Na[13]=l<0?0:l>255?255:l;Na[14]=d<0?0:d>255?255:d;ab.putImageData(fb,0,0);gb.drawImage($a,0,0);return Oa}function ec(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function ic(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function rb(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;if(f!==0){f=1/Math.sqrt(f);c=c*f;d=d*f;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}if(k instanceof THREE.Camera===false)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{var Vb,Ec,A,X;this.autoClear===
|
|
|
-true?this.clear():n.setTransform(1,0,0,-1,p,q);e.info.render.vertices=0;e.info.render.faces=0;g=j.projectScene(a,k,this.sortElements);h=g.elements;i=g.lights;xb=i.length>0;if(xb===true){Fa.setRGB(0,0,0);Za.setRGB(0,0,0);qb.setRGB(0,0,0);Vb=0;for(Ec=i.length;Vb<Ec;Vb++){X=i[Vb];var ia=X.color;if(X instanceof THREE.AmbientLight){Fa.r=Fa.r+ia.r;Fa.g=Fa.g+ia.g;Fa.b=Fa.b+ia.b}else if(X instanceof THREE.DirectionalLight){Za.r=Za.r+ia.r;Za.g=Za.g+ia.g;Za.b=Za.b+ia.b}else if(X instanceof THREE.PointLight){qb.r=
|
|
|
-qb.r+ia.r;qb.g=qb.g+ia.g;qb.b=qb.b+ia.b}}}Vb=0;for(Ec=h.length;Vb<Ec;Vb++){A=h[Vb];X=A.material;if(!(X===void 0||X.visible===false)){xa.empty();if(A instanceof THREE.RenderableParticle){x=A;x.x=x.x*p;x.y=x.y*q;var ia=x,Va=A;b(X.opacity);c(X.blending);var sb=void 0,tb=void 0,ib=void 0,jb=void 0,jc=A=void 0,Tc=void 0;if(X instanceof THREE.ParticleBasicMaterial)if(X.map===null){ib=Va.object.scale.x;jb=Va.object.scale.y;ib=ib*Va.scale.x*p;jb=jb*Va.scale.y*q;xa.set(ia.x-ib,ia.y-jb,ia.x+ib,ia.y+jb);if(eb.intersects(xa)!==
|
|
|
-false){f(X.color.getContextStyle());n.save();n.translate(ia.x,ia.y);n.rotate(-Va.rotation);n.scale(ib,jb);n.fillRect(-1,-1,2,2);n.restore()}}else{A=X.map.image;jc=A.width>>1;Tc=A.height>>1;ib=Va.scale.x*p;jb=Va.scale.y*q;sb=ib*jc;tb=jb*Tc;xa.set(ia.x-sb,ia.y-tb,ia.x+sb,ia.y+tb);if(eb.intersects(xa)!==false){n.save();n.translate(ia.x,ia.y);n.rotate(-Va.rotation);n.scale(ib,-jb);n.translate(-jc,-Tc);n.drawImage(A,0,0);n.restore()}}else if(X instanceof THREE.ParticleCanvasMaterial){sb=Va.scale.x*p;tb=
|
|
|
-Va.scale.y*q;xa.set(ia.x-sb,ia.y-tb,ia.x+sb,ia.y+tb);if(eb.intersects(xa)!==false){d(X.color.getContextStyle());f(X.color.getContextStyle());n.save();n.translate(ia.x,ia.y);n.rotate(-Va.rotation);n.scale(sb,tb);X.program(n);n.restore()}}}else if(A instanceof THREE.RenderableLine){x=A.v1;I=A.v2;x.positionScreen.x=x.positionScreen.x*p;x.positionScreen.y=x.positionScreen.y*q;I.positionScreen.x=I.positionScreen.x*p;I.positionScreen.y=I.positionScreen.y*q;xa.addPoint(x.positionScreen.x,x.positionScreen.y);
|
|
|
-xa.addPoint(I.positionScreen.x,I.positionScreen.y);if(eb.intersects(xa)===true){ia=x;Va=I;b(X.opacity);c(X.blending);n.beginPath();n.moveTo(ia.positionScreen.x,ia.positionScreen.y);n.lineTo(Va.positionScreen.x,Va.positionScreen.y);if(X instanceof THREE.LineBasicMaterial){ia=X.linewidth;if(y!==ia)y=n.lineWidth=ia;ia=X.linecap;if(B!==ia)B=n.lineCap=ia;ia=X.linejoin;if(G!==ia)G=n.lineJoin=ia;d(X.color.getContextStyle());n.stroke();xa.inflate(X.linewidth*2)}}}else if(A instanceof THREE.RenderableFace3){x=
|
|
|
+q=Math.floor(m/2);l.width=o;l.height=m;eb.set(-p,-q,p,q);Ea.set(-p,-q,p,q);u=1;v=0;G=B=y=A=s=null};this.setClearColor=function(a,b){t.copy(a);r=b!==void 0?b:1;Ea.set(-p,-q,p,q)};this.setClearColorHex=function(a,b){t.setHex(a);r=b!==void 0?b:1;Ea.set(-p,-q,p,q)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){n.setTransform(1,0,0,-1,p,q);if(Ea.isEmpty()===false){Ea.minSelf(eb);Ea.inflate(2);r<1&&n.clearRect(Math.floor(Ea.getX()),Math.floor(Ea.getY()),Math.floor(Ea.getWidth()),Math.floor(Ea.getHeight()));
|
|
|
+if(r>0){c(THREE.NormalBlending);b(1);f("rgba("+Math.floor(t.r*255)+","+Math.floor(t.g*255)+","+Math.floor(t.b*255)+","+r+")");n.fillRect(Math.floor(Ea.getX()),Math.floor(Ea.getY()),Math.floor(Ea.getWidth()),Math.floor(Ea.getHeight()))}Ea.empty()}};this.render=function(a,k){function l(a,b,c){for(var d=0,f=i.length;d<f;d++){var e=i[d],g=e.color;if(e instanceof THREE.DirectionalLight){var h=e.matrixWorld.getPosition().normalize(),k=b.dot(h);if(!(k<=0)){k=k*e.intensity;c.r=c.r+g.r*k;c.g=c.g+g.g*k;c.b=
|
|
|
+c.b+g.b*k}}else if(e instanceof THREE.PointLight){h=e.matrixWorld.getPosition();k=b.dot(Da.sub(h,a).normalize());if(!(k<=0)){k=k*(e.distance==0?1:1-Math.min(a.distanceTo(h)/e.distance,1));if(k!=0){k=k*e.intensity;c.r=c.r+g.r*k;c.g=c.g+g.g*k;c.b=c.b+g.b*k}}}}}function o(a,d,f,g,h,i,j,n){e.info.render.vertices=e.info.render.vertices+3;e.info.render.faces++;b(n.opacity);c(n.blending);C=a.positionScreen.x;E=a.positionScreen.y;P=d.positionScreen.x;N=d.positionScreen.y;Q=f.positionScreen.x;Z=f.positionScreen.y;
|
|
|
+m(C,E,P,N,Q,Z);if((n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial)&&n.map===null&&n.map===null)if(xb===true)if(n.wireframe===false&&n.shading==THREE.SmoothShading&&j.vertexNormalsLength==3){ba.r=W.r=V.r=Fa.r;ba.g=W.g=V.g=Fa.g;ba.b=W.b=V.b=Fa.b;l(j.v1.positionWorld,j.vertexNormalsWorld[0],ba);l(j.v2.positionWorld,j.vertexNormalsWorld[1],W);l(j.v3.positionWorld,j.vertexNormalsWorld[2],V);ba.r=Math.max(0,Math.min(n.color.r*ba.r,1));ba.g=Math.max(0,Math.min(n.color.g*ba.g,
|
|
|
+1));ba.b=Math.max(0,Math.min(n.color.b*ba.b,1));W.r=Math.max(0,Math.min(n.color.r*W.r,1));W.g=Math.max(0,Math.min(n.color.g*W.g,1));W.b=Math.max(0,Math.min(n.color.b*W.b,1));V.r=Math.max(0,Math.min(n.color.r*V.r,1));V.g=Math.max(0,Math.min(n.color.g*V.g,1));V.b=Math.max(0,Math.min(n.color.b*V.b,1));ga.r=(W.r+V.r)*0.5;ga.g=(W.g+V.g)*0.5;ga.b=(W.b+V.b)*0.5;Ha=va(ba,W,V,ga);v(C,E,P,N,Q,Z,0,0,1,0,0,1,Ha)}else{ca.r=Fa.r;ca.g=Fa.g;ca.b=Fa.b;l(j.centroidWorld,j.normalWorld,ca);ca.r=Math.max(0,Math.min(n.color.r*
|
|
|
+ca.r,1));ca.g=Math.max(0,Math.min(n.color.g*ca.g,1));ca.b=Math.max(0,Math.min(n.color.b*ca.b,1));n.wireframe===true?r(ca,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(ca)}else n.wireframe===true?r(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(n.color);else if(n instanceof THREE.MeshBasicMaterial||n instanceof THREE.MeshLambertMaterial||n instanceof THREE.MeshPhongMaterial)if(n.map!==null){if(n.map.mapping instanceof THREE.UVMapping){Wa=j.uvs[0];u(C,E,P,N,
|
|
|
+Q,Z,Wa[g].u,Wa[g].v,Wa[h].u,Wa[h].v,Wa[i].u,Wa[i].v,n.map)}}else if(n.envMap!==null){if(n.envMap.mapping instanceof THREE.SphericalReflectionMapping){a=k.matrixWorldInverse;Da.copy(j.vertexNormalsWorld[g]);ja=(Da.x*a.elements[0]+Da.y*a.elements[4]+Da.z*a.elements[8])*0.5+0.5;ob=(Da.x*a.elements[1]+Da.y*a.elements[5]+Da.z*a.elements[9])*0.5+0.5;Da.copy(j.vertexNormalsWorld[h]);Ma=(Da.x*a.elements[0]+Da.y*a.elements[4]+Da.z*a.elements[8])*0.5+0.5;Xa=(Da.x*a.elements[1]+Da.y*a.elements[5]+Da.z*a.elements[9])*
|
|
|
+0.5+0.5;Da.copy(j.vertexNormalsWorld[i]);pb=(Da.x*a.elements[0]+Da.y*a.elements[4]+Da.z*a.elements[8])*0.5+0.5;wb=(Da.x*a.elements[1]+Da.y*a.elements[5]+Da.z*a.elements[9])*0.5+0.5;u(C,E,P,N,Q,Z,ja,ob,Ma,Xa,pb,wb,n.envMap)}}else n.wireframe===true?r(n.color,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(n.color);else if(n instanceof THREE.MeshDepthMaterial){sa=k.near;Ca=k.far;ba.r=ba.g=ba.b=1-ec(a.positionScreen.z,sa,Ca);W.r=W.g=W.b=1-ec(d.positionScreen.z,sa,Ca);V.r=V.g=V.b=1-ec(f.positionScreen.z,
|
|
|
+sa,Ca);ga.r=(W.r+V.r)*0.5;ga.g=(W.g+V.g)*0.5;ga.b=(W.b+V.b)*0.5;Ha=va(ba,W,V,ga);v(C,E,P,N,Q,Z,0,0,1,0,0,1,Ha)}else if(n instanceof THREE.MeshNormalMaterial){ca.r=ic(j.normalWorld.x);ca.g=ic(j.normalWorld.y);ca.b=ic(j.normalWorld.z);n.wireframe===true?r(ca,n.wireframeLinewidth,n.wireframeLinecap,n.wireframeLinejoin):t(ca)}}function m(a,b,c,d,f,e){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(f,e);n.closePath()}function s(a,b,c,d,f,e,g,h){n.beginPath();n.moveTo(a,b);n.lineTo(c,d);n.lineTo(f,e);
|
|
|
+n.lineTo(g,h);n.closePath()}function r(a,b,c,f){if(y!==b)y=n.lineWidth=b;if(B!==c)B=n.lineCap=c;if(G!==f)G=n.lineJoin=f;d(a.getContextStyle());n.stroke();xa.inflate(b*2)}function t(a){f(a.getContextStyle());n.fill()}function u(a,b,c,d,e,g,h,i,k,j,l,o,m){if(!(m instanceof THREE.DataTexture||m.image===void 0||m.image.width==0)){if(m.needsUpdate===true||ha[m.id]===void 0){var va=m.wrapS==THREE.RepeatWrapping,q=m.wrapT==THREE.RepeatWrapping;ha[m.id]=n.createPattern(m.image,va===true&&q===true?"repeat":
|
|
|
+va===true&&q===false?"repeat-x":va===false&&q===true?"repeat-y":"no-repeat");m.needsUpdate=false}f(ha[m.id]);var va=m.offset.x/m.repeat.x,q=m.offset.y/m.repeat.y,p=m.image.width*m.repeat.x,rb=m.image.height*m.repeat.y,h=(h+va)*p,i=(1-i+q)*rb,c=c-a,d=d-b,e=e-a,g=g-b,k=(k+va)*p-h,j=(1-j+q)*rb-i,l=(l+va)*p-h,o=(1-o+q)*rb-i,va=k*o-l*j;if(va===0){if(oa[m.id]===void 0){b=document.createElement("canvas");b.width=m.image.width;b.height=m.image.height;b=b.getContext("2d");b.drawImage(m.image,0,0);oa[m.id]=
|
|
|
+b.getImageData(0,0,m.image.width,m.image.height).data}b=oa[m.id];h=(Math.floor(h)+Math.floor(i)*m.image.width)*4;ca.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);t(ca)}else{va=1/va;m=(o*c-j*e)*va;j=(o*d-j*g)*va;c=(k*e-l*c)*va;d=(k*g-l*d)*va;a=a-m*h-c*i;h=b-j*h-d*i;n.save();n.transform(m,j,c,d,a,h);n.fill();n.restore()}}}function v(a,b,c,d,f,e,g,h,i,k,j,l,m){var o,va;o=m.width-1;va=m.height-1;g=g*o;h=h*va;c=c-a;d=d-b;f=f-a;e=e-b;i=i*o-g;k=k*va-h;j=j*o-g;l=l*va-h;va=1/(i*l-j*k);o=(l*c-k*f)*va;k=(l*d-k*e)*
|
|
|
+va;c=(i*f-j*c)*va;d=(i*e-j*d)*va;a=a-o*g-c*h;b=b-k*g-d*h;n.save();n.transform(o,k,c,d,a,b);n.clip();n.drawImage(m,0,0);n.restore()}function va(a,b,c,d){var f=a.r*255|0,e=a.g*255|0,a=a.b*255|0,g=b.r*255|0,h=b.g*255|0,b=b.b*255|0,i=c.r*255|0,k=c.g*255|0,c=c.b*255|0,j=d.r*255|0,l=d.g*255|0,d=d.b*255|0;Na[0]=f<0?0:f>255?255:f;Na[1]=e<0?0:e>255?255:e;Na[2]=a<0?0:a>255?255:a;Na[4]=g<0?0:g>255?255:g;Na[5]=h<0?0:h>255?255:h;Na[6]=b<0?0:b>255?255:b;Na[8]=i<0?0:i>255?255:i;Na[9]=k<0?0:k>255?255:k;Na[10]=c<
|
|
|
+0?0:c>255?255:c;Na[12]=j<0?0:j>255?255:j;Na[13]=l<0?0:l>255?255:l;Na[14]=d<0?0:d>255?255:d;ab.putImageData(fb,0,0);gb.drawImage($a,0,0);return Oa}function ec(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function ic(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function rb(a,b){var c=b.x-a.x,d=b.y-a.y,f=c*c+d*d;if(f!==0){f=1/Math.sqrt(f);c=c*f;d=d*f;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}if(k instanceof THREE.Camera===false)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");
|
|
|
+else{var Vb,Ec,A,X;this.autoClear===true?this.clear():n.setTransform(1,0,0,-1,p,q);e.info.render.vertices=0;e.info.render.faces=0;g=j.projectScene(a,k,this.sortElements);h=g.elements;i=g.lights;xb=i.length>0;if(xb===true){Fa.setRGB(0,0,0);Za.setRGB(0,0,0);qb.setRGB(0,0,0);Vb=0;for(Ec=i.length;Vb<Ec;Vb++){X=i[Vb];var ia=X.color;if(X instanceof THREE.AmbientLight){Fa.r=Fa.r+ia.r;Fa.g=Fa.g+ia.g;Fa.b=Fa.b+ia.b}else if(X instanceof THREE.DirectionalLight){Za.r=Za.r+ia.r;Za.g=Za.g+ia.g;Za.b=Za.b+ia.b}else if(X instanceof
|
|
|
+THREE.PointLight){qb.r=qb.r+ia.r;qb.g=qb.g+ia.g;qb.b=qb.b+ia.b}}}Vb=0;for(Ec=h.length;Vb<Ec;Vb++){A=h[Vb];X=A.material;if(!(X===void 0||X.visible===false)){xa.empty();if(A instanceof THREE.RenderableParticle){x=A;x.x=x.x*p;x.y=x.y*q;var ia=x,Va=A;b(X.opacity);c(X.blending);var sb=void 0,tb=void 0,ib=void 0,jb=void 0,jc=A=void 0,Tc=void 0;if(X instanceof THREE.ParticleBasicMaterial)if(X.map===null){ib=Va.object.scale.x;jb=Va.object.scale.y;ib=ib*Va.scale.x*p;jb=jb*Va.scale.y*q;xa.set(ia.x-ib,ia.y-
|
|
|
+jb,ia.x+ib,ia.y+jb);if(eb.intersects(xa)!==false){f(X.color.getContextStyle());n.save();n.translate(ia.x,ia.y);n.rotate(-Va.rotation);n.scale(ib,jb);n.fillRect(-1,-1,2,2);n.restore()}}else{A=X.map.image;jc=A.width>>1;Tc=A.height>>1;ib=Va.scale.x*p;jb=Va.scale.y*q;sb=ib*jc;tb=jb*Tc;xa.set(ia.x-sb,ia.y-tb,ia.x+sb,ia.y+tb);if(eb.intersects(xa)!==false){n.save();n.translate(ia.x,ia.y);n.rotate(-Va.rotation);n.scale(ib,-jb);n.translate(-jc,-Tc);n.drawImage(A,0,0);n.restore()}}else if(X instanceof THREE.ParticleCanvasMaterial){sb=
|
|
|
+Va.scale.x*p;tb=Va.scale.y*q;xa.set(ia.x-sb,ia.y-tb,ia.x+sb,ia.y+tb);if(eb.intersects(xa)!==false){d(X.color.getContextStyle());f(X.color.getContextStyle());n.save();n.translate(ia.x,ia.y);n.rotate(-Va.rotation);n.scale(sb,tb);X.program(n);n.restore()}}}else if(A instanceof THREE.RenderableLine){x=A.v1;I=A.v2;x.positionScreen.x=x.positionScreen.x*p;x.positionScreen.y=x.positionScreen.y*q;I.positionScreen.x=I.positionScreen.x*p;I.positionScreen.y=I.positionScreen.y*q;xa.addPoint(x.positionScreen.x,
|
|
|
+x.positionScreen.y);xa.addPoint(I.positionScreen.x,I.positionScreen.y);if(eb.intersects(xa)===true){ia=x;Va=I;b(X.opacity);c(X.blending);n.beginPath();n.moveTo(ia.positionScreen.x,ia.positionScreen.y);n.lineTo(Va.positionScreen.x,Va.positionScreen.y);if(X instanceof THREE.LineBasicMaterial){ia=X.linewidth;if(y!==ia)y=n.lineWidth=ia;ia=X.linecap;if(B!==ia)B=n.lineCap=ia;ia=X.linejoin;if(G!==ia)G=n.lineJoin=ia;d(X.color.getContextStyle());n.stroke();xa.inflate(X.linewidth*2)}}}else if(A instanceof THREE.RenderableFace3){x=
|
|
|
A.v1;I=A.v2;F=A.v3;x.positionScreen.x=x.positionScreen.x*p;x.positionScreen.y=x.positionScreen.y*q;I.positionScreen.x=I.positionScreen.x*p;I.positionScreen.y=I.positionScreen.y*q;F.positionScreen.x=F.positionScreen.x*p;F.positionScreen.y=F.positionScreen.y*q;if(X.overdraw===true){rb(x.positionScreen,I.positionScreen);rb(I.positionScreen,F.positionScreen);rb(F.positionScreen,x.positionScreen)}xa.add3Points(x.positionScreen.x,x.positionScreen.y,I.positionScreen.x,I.positionScreen.y,F.positionScreen.x,
|
|
|
F.positionScreen.y);eb.intersects(xa)===true&&o(x,I,F,0,1,2,A,X,a)}else if(A instanceof THREE.RenderableFace4){x=A.v1;I=A.v2;F=A.v3;L=A.v4;x.positionScreen.x=x.positionScreen.x*p;x.positionScreen.y=x.positionScreen.y*q;I.positionScreen.x=I.positionScreen.x*p;I.positionScreen.y=I.positionScreen.y*q;F.positionScreen.x=F.positionScreen.x*p;F.positionScreen.y=F.positionScreen.y*q;L.positionScreen.x=L.positionScreen.x*p;L.positionScreen.y=L.positionScreen.y*q;H.positionScreen.copy(I.positionScreen);M.positionScreen.copy(L.positionScreen);
|
|
|
if(X.overdraw===true){rb(x.positionScreen,I.positionScreen);rb(I.positionScreen,L.positionScreen);rb(L.positionScreen,x.positionScreen);rb(F.positionScreen,H.positionScreen);rb(F.positionScreen,M.positionScreen)}xa.addPoint(x.positionScreen.x,x.positionScreen.y);xa.addPoint(I.positionScreen.x,I.positionScreen.y);xa.addPoint(F.positionScreen.x,F.positionScreen.y);xa.addPoint(L.positionScreen.x,L.positionScreen.y);if(eb.intersects(xa)===true){ia=x;Va=I;sb=F;tb=L;ib=H;jb=M;jc=a;e.info.render.vertices=
|