THREE.SpriteCanvasMaterial=function(e){THREE.Material.call(this),this.type="SpriteCanvasMaterial",this.color=new THREE.Color(16777215),this.program=function(e,t){},this.setValues(e)},THREE.SpriteCanvasMaterial.prototype=Object.create(THREE.Material.prototype),THREE.SpriteCanvasMaterial.prototype.constructor=THREE.SpriteCanvasMaterial,THREE.SpriteCanvasMaterial.prototype.clone=function(){var e=new THREE.SpriteCanvasMaterial;return e.copy(this),e.color.copy(this.color),e.program=this.program,e},THREE.CanvasRenderer=function(e){console.log("THREE.CanvasRenderer",THREE.REVISION),e=e||{};var s,l,c,p,E,d,h,f,u,m,v,R,x,y,T,w,H,g,S,M=this,b=new THREE.Projector,i=void 0!==e.canvas?e.canvas:document.createElement("canvas"),C=i.width,z=i.height,V=Math.floor(C/2),j=Math.floor(z/2),L=0,O=0,B=C,W=z,n=1,P=i.getContext("2d",{alpha:!0===e.alpha}),r=new THREE.Color(0),o=!0===e.alpha?0:1,a=1,k=0,N=null,F=null,A=null,I=null,D=null,t=[],G=(new THREE.RenderableVertex,new THREE.RenderableVertex,new THREE.Color),U=(new THREE.Color,new THREE.Color,new THREE.Color,new THREE.Color,new THREE.Color),q=new THREE.Color,X=new THREE.Color,J={},Y=new THREE.Box2,$=new THREE.Box2,K=new THREE.Box2,Q=new THREE.Color,Z=new THREE.Color,_=new THREE.Color,ee=new THREE.Vector3,te=new THREE.Vector3,re=new THREE.Vector3,ie=new THREE.Matrix3;function ne(e,t,r){de(r.opacity),he(r.blending);var i=t.scale.x*V,n=t.scale.y*j,o=.5*Math.sqrt(i*i+n*n);if(K.min.set(e.x-o,e.y-o),K.max.set(e.x+o,e.y+o),r instanceof THREE.SpriteMaterial){var a=r.map;if(null!==a){var s=J[a.id];if(void 0!==s&&s.version===a.version||(s=ce(a),J[a.id]=s),void 0!==s.canvas){Re(s.canvas);var l=a.image,c=l.width*a.offset.x,p=l.height*a.offset.y,E=l.width*a.repeat.x,d=l.height*a.repeat.y,h=i/E,f=n/d;P.save(),P.translate(e.x,e.y),0!==r.rotation&&P.rotate(r.rotation),P.translate(-i/2,-n/2),P.scale(h,f),P.translate(-c,-p),P.fillRect(c,p,E,d),P.restore()}}else Re(r.color.getStyle()),P.save(),P.translate(e.x,e.y),0!==r.rotation&&P.rotate(r.rotation),P.scale(i,-n),P.fillRect(-.5,-.5,1,1),P.restore()}else r instanceof THREE.SpriteCanvasMaterial&&(ve(r.color.getStyle()),Re(r.color.getStyle()),P.save(),P.translate(e.x,e.y),0!==r.rotation&&P.rotate(r.rotation),P.scale(i,n),r.program(P),P.restore())}function oe(e,t,r,i){if(de(i.opacity),he(i.blending),P.beginPath(),P.moveTo(e.positionScreen.x,e.positionScreen.y),P.lineTo(t.positionScreen.x,t.positionScreen.y),i instanceof THREE.LineBasicMaterial){if(fe(i.linewidth),ue(i.linecap),me(i.linejoin),i.vertexColors!==THREE.VertexColors)ve(i.color.getStyle());else{var n=r.vertexColors[0].getStyle(),o=r.vertexColors[1].getStyle();if(n===o)ve(n);else{try{var a=P.createLinearGradient(e.positionScreen.x,e.positionScreen.y,t.positionScreen.x,t.positionScreen.y);a.addColorStop(0,n),a.addColorStop(1,o)}catch(e){a=n}ve(a)}}P.stroke(),K.expandByScalar(2*i.linewidth)}else i instanceof THREE.LineDashedMaterial&&(fe(i.linewidth),ue(i.linecap),me(i.linejoin),ve(i.color.getStyle()),xe([i.dashSize,i.gapSize]),P.stroke(),K.expandByScalar(2*i.linewidth),xe([]))}function ae(e,t,r,i,n,o,a,s){if(M.info.render.vertices+=3,M.info.render.faces++,de(s.opacity),he(s.blending),h=e.positionScreen.x,f=e.positionScreen.y,u=t.positionScreen.x,m=t.positionScreen.y,v=r.positionScreen.x,R=r.positionScreen.y,function(e,t,r,i,n,o){P.beginPath(),P.moveTo(e,t),P.lineTo(r,i),P.lineTo(n,o),P.closePath()}(h,f,u,m,v,R),(s instanceof THREE.MeshLambertMaterial||s instanceof THREE.MeshPhongMaterial)&&null===s.map)U.copy(s.color),q.copy(s.emissive),s.vertexColors===THREE.FaceColors&&U.multiply(a.color),G.copy(Q),te.copy(e.positionWorld).add(t.positionWorld).add(r.positionWorld).divideScalar(3),function(e,t,r){for(var i=0,n=c.length;i