diff --git a/build/three.js b/build/three.js index 1587919b7c5d0f2bfb28a74ad8b8f52a8c3e0541..167c3f6a158cd4324a63b539e8abadbd26d2905e 100644 --- a/build/three.js +++ b/build/three.js @@ -60,8 +60,7 @@ THREE.extend = function ( obj, source ) { } - } - else { + } else { var safeHasOwnProperty = {}.hasOwnProperty; @@ -71,7 +70,7 @@ THREE.extend = function ( obj, source ) { obj[prop] = source[prop]; - } + } } @@ -101,7 +100,7 @@ THREE.extend = function ( obj, source ) { if ( window.requestAnimationFrame === undefined ) { - window.requestAnimationFrame = function ( callback, element ) { + window.requestAnimationFrame = function ( callback ) { var currTime = Date.now(), timeToCall = Math.max( 0, 16 - ( currTime - lastTime ) ); var id = window.setTimeout( function() { callback( currTime + timeToCall ); }, timeToCall ); @@ -4343,7 +4342,6 @@ THREE.extend( THREE.Matrix4.prototype, { var m11 = te[0], m21 = te[1], m31 = te[2], m41 = te[3]; var m12 = te[4], m22 = te[5], m32 = te[6], m42 = te[7]; var m13 = te[8], m23 = te[9], m33 = te[10], m43 = te[11]; - var m14 = te[12], m24 = te[13], m34 = te[14], m44 = te[15]; te[0] = r11 * m11 + r21 * m12 + r31 * m13; te[1] = r11 * m21 + r21 * m22 + r31 * m23; @@ -6468,9 +6466,7 @@ THREE.Projector = function () { _frustum = new THREE.Frustum(), _clippedVertex1PositionScreen = new THREE.Vector4(), - _clippedVertex2PositionScreen = new THREE.Vector4(), - - _face3VertexNormals; + _clippedVertex2PositionScreen = new THREE.Vector4(); this.projectVector = function ( vector, camera ) { @@ -6611,8 +6607,7 @@ THREE.Projector = function () { var visible = false, o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object, - geometry, vertices, vertex, vertexPositionScreen, - faces, face, faceVertexNormals, faceVertexUvs, uvs, + geometry, vertices, faces, face, faceVertexNormals, faceVertexUvs, uvs, v1, v2, v3, v4, isFaceMaterial, objectMaterials; _face3Count = 0; @@ -7315,16 +7310,15 @@ THREE.Geometry.prototype = { computeFaceNormals: function () { - var n, nl, v, vl, vertex, f, fl, face, vA, vB, vC, - cb = new THREE.Vector3(), ab = new THREE.Vector3(); + var cb = new THREE.Vector3(), ab = new THREE.Vector3(); - for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { - face = this.faces[ f ]; + var face = this.faces[ f ]; - vA = this.vertices[ face.a ]; - vB = this.vertices[ face.b ]; - vC = this.vertices[ face.c ]; + var vA = this.vertices[ face.a ]; + var vB = this.vertices[ face.b ]; + var vC = this.vertices[ face.c ]; cb.subVectors( vC, vB ); ab.subVectors( vA, vB ); @@ -8490,7 +8484,6 @@ THREE.BufferGeometry.prototype = { var tmp = new THREE.Vector3(), tmp2 = new THREE.Vector3(); var n = new THREE.Vector3(), n2 = new THREE.Vector3(); var w, t, test; - var nx, ny, nz; function handleVertex( v ) { @@ -13309,7 +13302,6 @@ THREE.CanvasRenderer = function ( parameters ) { _directionalLights = new THREE.Color(), _pointLights = new THREE.Color(), - _pi2 = Math.PI * 2, _vector3 = new THREE.Vector3(), // Needed for PointLight _pixelMap, _pixelMapContext, _pixelMapImage, _pixelMapData, @@ -13348,7 +13340,7 @@ THREE.CanvasRenderer = function ( parameters ) { } else { - _context.setLineDash = function ( values ) {} + _context.setLineDash = function () {} } @@ -13541,7 +13533,7 @@ THREE.CanvasRenderer = function ( parameters ) { _v1 = element; _v1.x *= _canvasWidthHalf; _v1.y *= _canvasHeightHalf; - renderParticle( _v1, element, material, scene ); + renderParticle( _v1, element, material ); } else if ( element instanceof THREE.RenderableLine ) { @@ -13554,7 +13546,7 @@ THREE.CanvasRenderer = function ( parameters ) { if ( _clipBox.isIntersectionBox( _elemBox ) === true ) { - renderLine( _v1, _v2, element, material, scene ); + renderLine( _v1, _v2, element, material ); } @@ -13580,7 +13572,7 @@ THREE.CanvasRenderer = function ( parameters ) { _elemBox.setFromPoints( [ _v1.positionScreen, _v2.positionScreen, _v3.positionScreen ] ); - renderFace3( _v1, _v2, _v3, 0, 1, 2, element, material, scene ); + renderFace3( _v1, _v2, _v3, 0, 1, 2, element, material ); } else if ( element instanceof THREE.RenderableFace4 ) { @@ -13711,7 +13703,7 @@ THREE.CanvasRenderer = function ( parameters ) { } - function renderParticle( v1, element, material, scene ) { + function renderParticle( v1, element, material ) { setOpacity( material.opacity ); setBlending( material.blending ); @@ -13823,7 +13815,7 @@ THREE.CanvasRenderer = function ( parameters ) { } - function renderLine( v1, v2, element, material, scene ) { + function renderLine( v1, v2, element, material ) { setOpacity( material.opacity ); setBlending( material.blending ); @@ -13858,7 +13850,7 @@ THREE.CanvasRenderer = function ( parameters ) { } - function renderFace3( v1, v2, v3, uv1, uv2, uv3, element, material, scene ) { + function renderFace3( v1, v2, v3, uv1, uv2, uv3, element, material ) { _this.info.render.vertices += 3; _this.info.render.faces ++; @@ -14038,7 +14030,7 @@ THREE.CanvasRenderer = function ( parameters ) { } - function renderFace4( v1, v2, v3, v4, v5, v6, element, material, scene ) { + function renderFace4( v1, v2, v3, v4, v5, v6, element, material ) { _this.info.render.vertices += 4; _this.info.render.faces ++; @@ -14050,8 +14042,8 @@ THREE.CanvasRenderer = function ( parameters ) { // Let renderFace3() handle this - renderFace3( v1, v2, v4, 0, 1, 3, element, material, scene ); - renderFace3( v5, v3, v6, 1, 2, 3, element, material, scene ); + renderFace3( v1, v2, v4, 0, 1, 3, element, material ); + renderFace3( v5, v3, v6, 1, 2, 3, element, material ); return; diff --git a/build/three.min.js b/build/three.min.js index e2007b3430a80316d5943f52a56d6ec5a4c1b184..fdb91bc21ca9932765227f76b78d6e66616acee1 100644 --- a/build/three.min.js +++ b/build/three.min.js @@ -141,7 +141,7 @@ f.renderDepth:(N.getPositionFromMatrix(f.matrixWorld),N.applyProjection(M),e.z=N i.positionScreen.x/=i.positionScreen.w,i.positionScreen.y/=i.positionScreen.w,i.positionScreen.z/=i.positionScreen.w,i.visible=!(-1>i.positionScreen.x||1i.positionScreen.y||1i.positionScreen.z||1(da.positionScreen.x-P.positionScreen.x)*(Z.positionScreen.y-P.positionScreen.y)-(da.positionScreen.y-P.positionScreen.y)*(Z.positionScreen.x-P.positionScreen.x),ca===THREE.DoubleSide||U===(ca===THREE.FrontSide))s===p?(ea=new THREE.RenderableFace3,u.push(ea),p++,s++,m=ea):m=u[s++],m.v1.copy(P),m.v2.copy(Z),m.v3.copy(da);else continue;else continue;else if($ instanceof THREE.Face4)if(P=k[$.a],Z=k[$.b],da= k[$.c],ea=k[$.d],t[0]=P.positionScreen,t[1]=Z.positionScreen,t[2]=da.positionScreen,t[3]=ea.positionScreen,!0===P.visible||!0===Z.visible||!0===da.visible||!0===ea.visible||Q.isIntersectionBox(C.setFromPoints(t)))if(U=0>(ea.positionScreen.x-P.positionScreen.x)*(Z.positionScreen.y-P.positionScreen.y)-(ea.positionScreen.y-P.positionScreen.y)*(Z.positionScreen.x-P.positionScreen.x)||0>(Z.positionScreen.x-da.positionScreen.x)*(ea.positionScreen.y-da.positionScreen.y)-(Z.positionScreen.y-da.positionScreen.y)* -(ea.positionScreen.x-da.positionScreen.x),ca===THREE.DoubleSide||U===(ca===THREE.FrontSide)){if(q===v){var Ja=new THREE.RenderableFace4;w.push(Ja);v++;q++;m=Ja}else m=w[q++];m.v1.copy(P);m.v2.copy(Z);m.v3.copy(da);m.v4.copy(ea)}else continue;else continue;m.normalModel.copy($.normal);!1===U&&(ca===THREE.BackSide||ca===THREE.DoubleSide)&&m.normalModel.negate();m.normalModel.applyMatrix3(K).normalize();m.normalModelView.copy(m.normalModel).applyMatrix3(S);m.centroidModel.copy($.centroid).applyMatrix4(J); +(ea.positionScreen.x-da.positionScreen.x),ca===THREE.DoubleSide||U===(ca===THREE.FrontSide)){if(q===v){var Ia=new THREE.RenderableFace4;w.push(Ia);v++;q++;m=Ia}else m=w[q++];m.v1.copy(P);m.v2.copy(Z);m.v3.copy(da);m.v4.copy(ea)}else continue;else continue;m.normalModel.copy($.normal);!1===U&&(ca===THREE.BackSide||ca===THREE.DoubleSide)&&m.normalModel.negate();m.normalModel.applyMatrix3(K).normalize();m.normalModelView.copy(m.normalModel).applyMatrix3(S);m.centroidModel.copy($.centroid).applyMatrix4(J); da=$.vertexNormals;P=0;for(Z=da.length;PA.z&&(l===F?(U=new THREE.RenderableParticle,H.push(U),F++,l++,D=U):D=H[l++],D.object=fa,D.x=A.x/A.w,D.y=A.y/A.w,D.z=A.z,D.rotation=fa.rotation.z,D.scale.x=fa.scale.x*Math.abs(D.x-(A.x+h.projectionMatrix.elements[0])/(A.w+h.projectionMatrix.elements[12])),D.scale.y= @@ -152,15 +152,15 @@ THREE.Face4.prototype={constructor:THREE.Face4,clone:function(){var a=new THREE. return a}};THREE.Geometry=function(){THREE.EventDispatcher.call(this);this.id=THREE.GeometryIdCount++;this.name="";this.vertices=[];this.colors=[];this.normals=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1;this.dynamic=!0;this.buffersNeedUpdate=this.lineDistancesNeedUpdate=this.colorsNeedUpdate=this.tangentsNeedUpdate= this.normalsNeedUpdate=this.uvsNeedUpdate=this.elementsNeedUpdate=this.verticesNeedUpdate=!1}; THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){for(var b=(new THREE.Matrix3).getInverse(a).transpose(),c=0,d=this.vertices.length;ce?-1:1,f.vertexTangents[d]=new THREE.Vector4(A.x,A.y,A.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;cr&&y.clearRect(ia.min.x|0,ia.min.y|0,ia.max.x-ia.min.x|0,ia.max.y-ia.min.y|0),0=i||(i*=f.intensity,c.add(fa.multiplyScalar(i)))}else f instanceof THREE.PointLight&&(g=ga.getPositionFromMatrix(f.matrixWorld),i=b.dot(ga.subVectors(g,a).normalize()),0>=i||(i*=0==f.distance?1:1-Math.min(a.distanceTo(g)/f.distance,1),0!=i&&(i*=f.intensity,c.add(fa.multiplyScalar(i)))))}}function q(a,d,e,f,g,i,h,k){j.info.render.vertices+=3; j.info.render.faces++;b(k.opacity);c(k.blending);x=a.positionScreen.x;K=a.positionScreen.y;S=d.positionScreen.x;aa=d.positionScreen.y;Y=e.positionScreen.x;V=e.positionScreen.y;r(x,K,S,aa,Y,V);(k instanceof THREE.MeshLambertMaterial||k instanceof THREE.MeshPhongMaterial)&&null===k.map?(ca.copy(k.color),da.copy(k.emissive),k.vertexColors===THREE.FaceColors&&ca.multiply(h.color),!0===Ba?!1===k.wireframe&&k.shading==THREE.SmoothShading&&3==h.vertexNormalsLength?($.copy(oa),ba.copy(oa),P.copy(oa),p(h.v1.positionWorld, h.vertexNormalsModel[0],$),p(h.v2.positionWorld,h.vertexNormalsModel[1],ba),p(h.v3.positionWorld,h.vertexNormalsModel[2],P),$.multiply(ca).add(da),ba.multiply(ca).add(da),P.multiply(ca).add(da),Z.addColors(ba,P).multiplyScalar(0.5),la=E($,ba,P,Z),D(x,K,S,aa,Y,V,0,0,1,0,0,1,la)):(T.copy(oa),p(h.centroidModel,h.normalModel,T),T.multiply(ca).add(da),!0===k.wireframe?z(T,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):A(T)):!0===k.wireframe?z(k.color,k.wireframeLinewidth,k.wireframeLinecap, -k.wireframeLinejoin):A(k.color)):k instanceof THREE.MeshBasicMaterial||k instanceof THREE.MeshLambertMaterial||k instanceof THREE.MeshPhongMaterial?null!==k.map?k.map.mapping instanceof THREE.UVMapping&&(ya=h.uvs[0],B(x,K,S,aa,Y,V,ya[f].x,ya[f].y,ya[g].x,ya[g].y,ya[i].x,ya[i].y,k.map)):null!==k.envMap?k.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(ga.copy(h.vertexNormalsModelView[f]),Ga=0.5*ga.x+0.5,Ja=0.5*ga.y+0.5,ga.copy(h.vertexNormalsModelView[g]),La=0.5*ga.x+0.5,Ma=0.5*ga.y+0.5, -ga.copy(h.vertexNormalsModelView[i]),Na=0.5*ga.x+0.5,Oa=0.5*ga.y+0.5,B(x,K,S,aa,Y,V,Ga,Ja,La,Ma,Na,Oa,k.envMap)):(T.copy(k.color),k.vertexColors===THREE.FaceColors&&T.multiply(h.color),!0===k.wireframe?z(T,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):A(T)):k instanceof THREE.MeshDepthMaterial?(ea=l.near,sa=l.far,g=1-H(a.positionScreen.z*a.positionScreen.w,ea,sa),$.setRGB(g,g,g),g=1-H(d.positionScreen.z*d.positionScreen.w,ea,sa),ba.setRGB(g,g,g),g=1-H(e.positionScreen.z*e.positionScreen.w, +k.wireframeLinejoin):A(k.color)):k instanceof THREE.MeshBasicMaterial||k instanceof THREE.MeshLambertMaterial||k instanceof THREE.MeshPhongMaterial?null!==k.map?k.map.mapping instanceof THREE.UVMapping&&(ya=h.uvs[0],B(x,K,S,aa,Y,V,ya[f].x,ya[f].y,ya[g].x,ya[g].y,ya[i].x,ya[i].y,k.map)):null!==k.envMap?k.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(ga.copy(h.vertexNormalsModelView[f]),Ga=0.5*ga.x+0.5,Ia=0.5*ga.y+0.5,ga.copy(h.vertexNormalsModelView[g]),La=0.5*ga.x+0.5,Ma=0.5*ga.y+0.5, +ga.copy(h.vertexNormalsModelView[i]),Na=0.5*ga.x+0.5,Oa=0.5*ga.y+0.5,B(x,K,S,aa,Y,V,Ga,Ia,La,Ma,Na,Oa,k.envMap)):(T.copy(k.color),k.vertexColors===THREE.FaceColors&&T.multiply(h.color),!0===k.wireframe?z(T,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):A(T)):k instanceof THREE.MeshDepthMaterial?(ea=l.near,sa=l.far,g=1-H(a.positionScreen.z*a.positionScreen.w,ea,sa),$.setRGB(g,g,g),g=1-H(d.positionScreen.z*d.positionScreen.w,ea,sa),ba.setRGB(g,g,g),g=1-H(e.positionScreen.z*e.positionScreen.w, ea,sa),P.setRGB(g,g,g),Z.addColors(ba,P).multiplyScalar(0.5),la=E($,ba,P,Z),D(x,K,S,aa,Y,V,0,0,1,0,0,1,la)):k instanceof THREE.MeshNormalMaterial&&(k.shading==THREE.FlatShading?(d=h.normalModelView,T.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),!0===k.wireframe?z(T,k.wireframeLinewidth,k.wireframeLinecap,k.wireframeLinejoin):A(T)):k.shading==THREE.SmoothShading&&(d=h.vertexNormalsModelView[f],$.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[g],ba.setRGB(d.x, d.y,d.z).multiplyScalar(0.5).addScalar(0.5),d=h.vertexNormalsModelView[i],P.setRGB(d.x,d.y,d.z).multiplyScalar(0.5).addScalar(0.5),Z.addColors(ba,P).multiplyScalar(0.5),la=E($,ba,P,Z),D(x,K,S,aa,Y,V,0,0,1,0,0,1,la)))}function r(a,b,c,d,e,f){y.beginPath();y.moveTo(a,b);y.lineTo(c,d);y.lineTo(e,f);y.closePath()}function u(a,b,c,d,e,f,g,i){y.beginPath();y.moveTo(a,b);y.lineTo(c,d);y.lineTo(e,f);y.lineTo(g,i);y.closePath()}function z(a,b,c,i){d(b);e(c);f(i);g(a.getStyle());y.stroke();ma.expandByScalar(2* b)}function A(a){h(a.getStyle());y.fill()}function B(a,b,c,d,e,f,g,i,j,k,l,P,m){if(!(m instanceof THREE.DataTexture||void 0===m.image||0==m.image.width)){if(!0===m.needsUpdate){var n=m.wrapS==THREE.RepeatWrapping,p=m.wrapT==THREE.RepeatWrapping;pa[m.id]=y.createPattern(m.image,!0===n&&!0===p?"repeat":!0===n&&!1===p?"repeat-x":!1===n&&!0===p?"repeat-y":"no-repeat");m.needsUpdate=!1}void 0===pa[m.id]?h("rgba(0,0,0,1)"):h(pa[m.id]);var n=m.offset.x/m.repeat.x,p=m.offset.y/m.repeat.y,s=m.image.width* @@ -279,13 +279,13 @@ m.repeat.x,L=m.image.height*m.repeat.y,g=(g+n)*s,i=(1-i+p)*L,c=c-a,d=d-b,e=e-a,f f)*n,c=(j*e-l*c)*n,d=(j*f-l*d)*n,a=a-m*g-c*i,g=b-k*g-d*i,y.save(),y.transform(m,k,c,d,a,g),y.fill(),y.restore())}}function D(a,b,c,d,e,f,g,i,h,j,k,l,P){var m,n;m=P.width-1;n=P.height-1;g*=m;i*=n;c-=a;d-=b;e-=a;f-=b;h=h*m-g;j=j*n-i;k=k*m-g;l=l*n-i;n=1/(h*l-k*j);m=(l*c-j*e)*n;j=(l*d-j*f)*n;c=(h*e-k*c)*n;d=(h*f-k*d)*n;a=a-m*g-c*i;b=b-j*g-d*i;y.save();y.transform(m,j,c,d,a,b);y.clip();y.drawImage(P,0,0);y.restore()}function E(a,b,c,d){na[0]=255*a.r|0;na[1]=255*a.g|0;na[2]=255*a.b|0;na[4]=255*b.r|0;na[5]= 255*b.g|0;na[6]=255*b.b|0;na[8]=255*c.r|0;na[9]=255*c.g|0;na[10]=255*c.b|0;na[12]=255*d.r|0;na[13]=255*d.g|0;na[14]=255*d.b|0;Da.putImageData(Fa,0,0);ha.drawImage(xa,0,0);return za}function H(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function F(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===l instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{!0===this.autoClear&&this.clear(); y.setTransform(1,0,0,-1,w,v);j.info.render.vertices=0;j.info.render.faces=0;k=s.projectScene(a,l,this.sortObjects,this.sortElements);n=k.elements;m=k.lights;Ba=0>1,Ka=O.height>>1,va=ja.scale.x*w,wa=ja.scale.y*v,ta=va*Ia,ua=wa*Ka,ma.min.set(W.x-ta,W.y-ua),ma.max.set(W.x+ta,W.y+ua),!1!==Ha.isIntersectionBox(ma)&&(y.save(),y.translate(W.x,W.y),y.rotate(-ja.rotation),y.scale(va,-wa),y.translate(-Ia,-Ka),y.drawImage(O,0,0),y.restore())):R instanceof THREE.ParticleCanvasMaterial&&(ta=ja.scale.x*w,ua=ja.scale.y*v,ma.min.set(W.x-ta,W.y-ua),ma.max.set(W.x+ta,W.y+ua),!1!==Ha.isIntersectionBox(ma)&&(g(R.color.getStyle()),h(R.color.getStyle()), +if(O instanceof THREE.RenderableParticle){C=O;C.x*=w;C.y*=v;var W=C,ja=O;b(R.opacity);c(R.blending);var ta=void 0,ua=void 0,va=void 0,wa=void 0,Ja=O=void 0,Ka=void 0;R instanceof THREE.ParticleBasicMaterial?null===R.map?(va=ja.object.scale.x,wa=ja.object.scale.y,va*=ja.scale.x*w,wa*=ja.scale.y*v,ma.min.set(W.x-va,W.y-wa),ma.max.set(W.x+va,W.y+wa),!1!==Ha.isIntersectionBox(ma)&&(h(R.color.getStyle()),y.save(),y.translate(W.x,W.y),y.rotate(-ja.rotation),y.scale(va,wa),y.fillRect(-1,-1,2,2),y.restore())): +(O=R.map.image,Ja=O.width>>1,Ka=O.height>>1,va=ja.scale.x*w,wa=ja.scale.y*v,ta=va*Ja,ua=wa*Ka,ma.min.set(W.x-ta,W.y-ua),ma.max.set(W.x+ta,W.y+ua),!1!==Ha.isIntersectionBox(ma)&&(y.save(),y.translate(W.x,W.y),y.rotate(-ja.rotation),y.scale(va,-wa),y.translate(-Ja,-Ka),y.drawImage(O,0,0),y.restore())):R instanceof THREE.ParticleCanvasMaterial&&(ta=ja.scale.x*w,ua=ja.scale.y*v,ma.min.set(W.x-ta,W.y-ua),ma.max.set(W.x+ta,W.y+ua),!1!==Ha.isIntersectionBox(ma)&&(g(R.color.getStyle()),h(R.color.getStyle()), y.save(),y.translate(W.x,W.y),y.rotate(-ja.rotation),y.scale(ta,ua),R.program(y),y.restore()))}else if(O instanceof THREE.RenderableLine)C=O.v1,G=O.v2,C.positionScreen.x*=w,C.positionScreen.y*=v,G.positionScreen.x*=w,G.positionScreen.y*=v,ma.setFromPoints([C.positionScreen,G.positionScreen]),!0===Ha.isIntersectionBox(ma)&&(W=C,ja=G,b(R.opacity),c(R.blending),y.beginPath(),y.moveTo(W.positionScreen.x,W.positionScreen.y),y.lineTo(ja.positionScreen.x,ja.positionScreen.y),R instanceof THREE.LineBasicMaterial? (d(R.linewidth),e(R.linecap),f(R.linejoin),g(R.color.getStyle()),i(null,null),y.stroke(),ma.expandByScalar(2*R.linewidth)):R instanceof THREE.LineDashedMaterial&&(d(R.linewidth),e(R.linecap),f(R.linejoin),g(R.color.getStyle()),i(R.dashSize,R.gapSize),y.stroke(),ma.expandByScalar(2*R.linewidth)));else if(O instanceof THREE.RenderableFace3){C=O.v1;G=O.v2;t=O.v3;if(-1>C.positionScreen.z||1G.positionScreen.z||1t.positionScreen.z||1< -t.positionScreen.z)continue;C.positionScreen.x*=w;C.positionScreen.y*=v;G.positionScreen.x*=w;G.positionScreen.y*=v;t.positionScreen.x*=w;t.positionScreen.y*=v;!0===R.overdraw&&(F(C.positionScreen,G.positionScreen),F(G.positionScreen,t.positionScreen),F(t.positionScreen,C.positionScreen));ma.setFromPoints([C.positionScreen,G.positionScreen,t.positionScreen]);q(C,G,t,0,1,2,O,R,a)}else if(O instanceof THREE.RenderableFace4){C=O.v1;G=O.v2;t=O.v3;I=O.v4;if(-1>C.positionScreen.z||1C.positionScreen.z||1G.positionScreen.z||1t.positionScreen.z||1I.positionScreen.z||1