|
@@ -155,29 +155,29 @@ p,x,w,z,u=v.getContext("2d"),B=new THREE.Color(0),y=0,E=1,C=0,H=null,L=null,R=nu
|
|
ta.width=ta.height=2;Da=ta.getContext("2d");Da.fillStyle="rgba(0,0,0,1)";Da.fillRect(0,0,2,2);Ha=Da.getImageData(0,0,2,2);za=Ha.data;Ea=document.createElement("canvas");Ea.width=Ea.height=a;S=Ea.getContext("2d");S.translate(-a/2,-a/2);S.scale(a,a);a--;this.domElement=v;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){p=a;x=b;w=Math.floor(p/2);z=Math.floor(x/2);v.width=p;v.height=x;ca.set(-w,-z,w,z);V.set(-w,-z,w,z);E=1;C=0;O=D=
|
|
ta.width=ta.height=2;Da=ta.getContext("2d");Da.fillStyle="rgba(0,0,0,1)";Da.fillRect(0,0,2,2);Ha=Da.getImageData(0,0,2,2);za=Ha.data;Ea=document.createElement("canvas");Ea.width=Ea.height=a;S=Ea.getContext("2d");S.translate(-a/2,-a/2);S.scale(a,a);a--;this.domElement=v;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){p=a;x=b;w=Math.floor(p/2);z=Math.floor(x/2);v.width=p;v.height=x;ca.set(-w,-z,w,z);V.set(-w,-z,w,z);E=1;C=0;O=D=
|
|
R=L=H=null};this.setClearColor=function(a,b){B.copy(a);y=b;V.set(-w,-z,w,z)};this.setClearColorHex=function(a,b){B.setHex(a);y=b;V.set(-w,-z,w,z)};this.clear=function(){u.setTransform(1,0,0,-1,w,z);V.isEmpty()||(V.minSelf(ca),V.inflate(2),y<1&&u.clearRect(Math.floor(V.getX()),Math.floor(V.getY()),Math.floor(V.getWidth()),Math.floor(V.getHeight())),y>0&&(b(THREE.NormalBlending),c(1),l("rgba("+Math.floor(B.r*255)+","+Math.floor(B.g*255)+","+Math.floor(B.b*255)+","+y+")"),u.fillRect(Math.floor(V.getX()),
|
|
R=L=H=null};this.setClearColor=function(a,b){B.copy(a);y=b;V.set(-w,-z,w,z)};this.setClearColorHex=function(a,b){B.setHex(a);y=b;V.set(-w,-z,w,z)};this.clear=function(){u.setTransform(1,0,0,-1,w,z);V.isEmpty()||(V.minSelf(ca),V.inflate(2),y<1&&u.clearRect(Math.floor(V.getX()),Math.floor(V.getY()),Math.floor(V.getWidth()),Math.floor(V.getHeight())),y>0&&(b(THREE.NormalBlending),c(1),l("rgba("+Math.floor(B.r*255)+","+Math.floor(B.g*255)+","+Math.floor(B.b*255)+","+y+")"),u.fillRect(Math.floor(V.getX()),
|
|
Math.floor(V.getY()),Math.floor(V.getWidth()),Math.floor(V.getHeight()))),V.empty())};this.render=function(a,v){function p(a){var b,c,e,h;ma.setRGB(0,0,0);wa.setRGB(0,0,0);pa.setRGB(0,0,0);b=0;for(c=a.length;b<c;b++)e=a[b],h=e.color,e instanceof THREE.AmbientLight?(ma.r+=h.r,ma.g+=h.g,ma.b+=h.b):e instanceof THREE.DirectionalLight?(wa.r+=h.r,wa.g+=h.g,wa.b+=h.b):e instanceof THREE.PointLight&&(pa.r+=h.r,pa.g+=h.g,pa.b+=h.b)}function x(a,b,c,e){var h,l,f,k,o,n;h=0;for(l=a.length;h<l;h++)f=a[h],k=f.color,
|
|
Math.floor(V.getY()),Math.floor(V.getWidth()),Math.floor(V.getHeight()))),V.empty())};this.render=function(a,v){function p(a){var b,c,e,h;ma.setRGB(0,0,0);wa.setRGB(0,0,0);pa.setRGB(0,0,0);b=0;for(c=a.length;b<c;b++)e=a[b],h=e.color,e instanceof THREE.AmbientLight?(ma.r+=h.r,ma.g+=h.g,ma.b+=h.b):e instanceof THREE.DirectionalLight?(wa.r+=h.r,wa.g+=h.g,wa.b+=h.b):e instanceof THREE.PointLight&&(pa.r+=h.r,pa.g+=h.g,pa.b+=h.b)}function x(a,b,c,e){var h,l,f,k,o,n;h=0;for(l=a.length;h<l;h++)f=a[h],k=f.color,
|
|
-f instanceof THREE.DirectionalLight?(o=f.matrixWorld.getPosition(),n=c.dot(o),n<=0||(n*=f.intensity,e.r+=k.r*n,e.g+=k.g*n,e.b+=k.b*n)):f instanceof THREE.PointLight&&(o=f.matrixWorld.getPosition(),n=c.dot(qa.sub(o,b).normalize()),n<=0||(n*=f.distance==0?1:1-Math.min(b.distanceTo(o)/f.distance,1),n!=0&&(n*=f.intensity,e.r+=k.r*n,e.g+=k.g*n,e.b+=k.b*n)))}function B(a,h,f){c(f.opacity);b(f.blending);var k,o,n,t,v,xa;if(f instanceof THREE.ParticleBasicMaterial){if(f.map)t=f.map.image,v=t.width>>1,xa=
|
|
|
|
|
|
+f instanceof THREE.DirectionalLight?(o=f.matrixWorld.getPosition(),n=c.dot(o),n<=0||(n*=f.intensity,e.r+=k.r*n,e.g+=k.g*n,e.b+=k.b*n)):f instanceof THREE.PointLight&&(o=f.matrixWorld.getPosition(),n=c.dot(qa.sub(o,b).normalize()),n<=0||(n*=f.distance==0?1:1-Math.min(b.distanceTo(o)/f.distance,1),n!=0&&(n*=f.intensity,e.r+=k.r*n,e.g+=k.g*n,e.b+=k.b*n)))}function Ta(a,h,f){c(f.opacity);b(f.blending);var k,o,n,t,v,xa;if(f instanceof THREE.ParticleBasicMaterial){if(f.map)t=f.map.image,v=t.width>>1,xa=
|
|
t.height>>1,f=h.scale.x*w,n=h.scale.y*z,k=f*v,o=n*xa,aa.set(a.x-k,a.y-o,a.x+k,a.y+o),ca.intersects(aa)&&(u.save(),u.translate(a.x,a.y),u.rotate(-h.rotation),u.scale(f,-n),u.translate(-v,-xa),u.drawImage(t,0,0),u.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(k=h.scale.x*w,o=h.scale.y*z,aa.set(a.x-k,a.y-o,a.x+k,a.y+o),ca.intersects(aa)&&(e(f.color.getContextStyle()),l(f.color.getContextStyle()),u.save(),u.translate(a.x,a.y),u.rotate(-h.rotation),u.scale(k,o),f.program(u),u.restore()))}
|
|
t.height>>1,f=h.scale.x*w,n=h.scale.y*z,k=f*v,o=n*xa,aa.set(a.x-k,a.y-o,a.x+k,a.y+o),ca.intersects(aa)&&(u.save(),u.translate(a.x,a.y),u.rotate(-h.rotation),u.scale(f,-n),u.translate(-v,-xa),u.drawImage(t,0,0),u.restore())}else f instanceof THREE.ParticleCanvasMaterial&&(k=h.scale.x*w,o=h.scale.y*z,aa.set(a.x-k,a.y-o,a.x+k,a.y+o),ca.intersects(aa)&&(e(f.color.getContextStyle()),l(f.color.getContextStyle()),u.save(),u.translate(a.x,a.y),u.rotate(-h.rotation),u.scale(k,o),f.program(u),u.restore()))}
|
|
-function y(a,h,l,f){c(f.opacity);b(f.blending);u.beginPath();u.moveTo(a.positionScreen.x,a.positionScreen.y);u.lineTo(h.positionScreen.x,h.positionScreen.y);u.closePath();if(f instanceof THREE.LineBasicMaterial){a=f.linewidth;if(R!=a)u.lineWidth=R=a;a=f.linecap;if(D!=a)u.lineCap=D=a;a=f.linejoin;if(O!=a)u.lineJoin=O=a;e(f.color.getContextStyle());u.stroke();aa.inflate(f.linewidth*2)}}function Qa(a,e,f,l,k,t,w,p){h.info.render.vertices+=3;h.info.render.faces++;c(p.opacity);b(p.blending);Z=a.positionScreen.x;
|
|
|
|
-U=a.positionScreen.y;o=e.positionScreen.x;P=e.positionScreen.y;ra=f.positionScreen.x;G=f.positionScreen.y;Na(Z,U,o,P,ra,G);if(p instanceof THREE.MeshBasicMaterial)if(p.map)p.map.mapping instanceof THREE.UVMapping&&(va=w.uvs[0],Ra(Z,U,o,P,ra,G,va[l].u,va[l].v,va[k].u,va[k].v,va[t].u,va[t].v,p.map));else if(p.envMap){if(p.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=v.matrixWorldInverse,qa.copy(w.vertexNormalsWorld[l]),Ca=(qa.x*a.n11+qa.y*a.n12+qa.z*a.n13)*0.5+0.5,Ga=-(qa.x*a.n21+qa.y*
|
|
|
|
-a.n22+qa.z*a.n23)*0.5+0.5,qa.copy(w.vertexNormalsWorld[k]),ya=(qa.x*a.n11+qa.y*a.n12+qa.z*a.n13)*0.5+0.5,Aa=-(qa.x*a.n21+qa.y*a.n22+qa.z*a.n23)*0.5+0.5,qa.copy(w.vertexNormalsWorld[t]),Ja=(qa.x*a.n11+qa.y*a.n12+qa.z*a.n13)*0.5+0.5,X=-(qa.x*a.n21+qa.y*a.n22+qa.z*a.n23)*0.5+0.5,Ra(Z,U,o,P,ra,G,Ca,Ga,ya,Aa,Ja,X,p.envMap)}else p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color);else if(p instanceof THREE.MeshLambertMaterial)p.map&&!p.wireframe&&(p.map.mapping instanceof
|
|
|
|
-THREE.UVMapping&&(va=w.uvs[0],Ra(Z,U,o,P,ra,G,va[l].u,va[l].v,va[k].u,va[k].v,va[t].u,va[t].v,p.map)),b(THREE.SubtractiveBlending)),fa?!p.wireframe&&p.shading==THREE.SmoothShading&&w.vertexNormalsWorld.length==3?(ga.r=na.r=ia.r=ma.r,ga.g=na.g=ia.g=ma.g,ga.b=na.b=ia.b=ma.b,x(n,w.v1.positionWorld,w.vertexNormalsWorld[0],ga),x(n,w.v2.positionWorld,w.vertexNormalsWorld[1],na),x(n,w.v3.positionWorld,w.vertexNormalsWorld[2],ia),ga.r=Math.max(0,Math.min(p.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(p.color.g*
|
|
|
|
-ga.g,1)),ga.b=Math.max(0,Math.min(p.color.b*ga.b,1)),na.r=Math.max(0,Math.min(p.color.r*na.r,1)),na.g=Math.max(0,Math.min(p.color.g*na.g,1)),na.b=Math.max(0,Math.min(p.color.b*na.b,1)),ia.r=Math.max(0,Math.min(p.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(p.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(p.color.b*ia.b,1)),I.r=(na.r+ia.r)*0.5,I.g=(na.g+ia.g)*0.5,I.b=(na.b+ia.b)*0.5,ua=Oa(ga,na,ia,I),L(Z,U,o,P,ra,G,0,0,1,0,0,1,ua)):(ea.r=ma.r,ea.g=ma.g,ea.b=ma.b,x(n,w.centroidWorld,w.normalWorld,ea),ea.r=
|
|
|
|
|
|
+function B(a,h,l,f){c(f.opacity);b(f.blending);u.beginPath();u.moveTo(a.positionScreen.x,a.positionScreen.y);u.lineTo(h.positionScreen.x,h.positionScreen.y);u.closePath();if(f instanceof THREE.LineBasicMaterial){a=f.linewidth;if(R!=a)u.lineWidth=R=a;a=f.linecap;if(D!=a)u.lineCap=D=a;a=f.linejoin;if(O!=a)u.lineJoin=O=a;e(f.color.getContextStyle());u.stroke();aa.inflate(f.linewidth*2)}}function Pa(a,e,f,l,k,t,w,p){h.info.render.vertices+=3;h.info.render.faces++;c(p.opacity);b(p.blending);Z=a.positionScreen.x;
|
|
|
|
+U=a.positionScreen.y;o=e.positionScreen.x;P=e.positionScreen.y;ra=f.positionScreen.x;G=f.positionScreen.y;C(Z,U,o,P,ra,G);if(p instanceof THREE.MeshBasicMaterial)if(p.map)p.map.mapping instanceof THREE.UVMapping&&(va=w.uvs[0],Qa(Z,U,o,P,ra,G,va[l].u,va[l].v,va[k].u,va[k].v,va[t].u,va[t].v,p.map));else if(p.envMap){if(p.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=v.matrixWorldInverse,qa.copy(w.vertexNormalsWorld[l]),Ca=(qa.x*a.n11+qa.y*a.n12+qa.z*a.n13)*0.5+0.5,Ga=-(qa.x*a.n21+qa.y*
|
|
|
|
+a.n22+qa.z*a.n23)*0.5+0.5,qa.copy(w.vertexNormalsWorld[k]),ya=(qa.x*a.n11+qa.y*a.n12+qa.z*a.n13)*0.5+0.5,Aa=-(qa.x*a.n21+qa.y*a.n22+qa.z*a.n23)*0.5+0.5,qa.copy(w.vertexNormalsWorld[t]),Ja=(qa.x*a.n11+qa.y*a.n12+qa.z*a.n13)*0.5+0.5,X=-(qa.x*a.n21+qa.y*a.n22+qa.z*a.n23)*0.5+0.5,Qa(Z,U,o,P,ra,G,Ca,Ga,ya,Aa,Ja,X,p.envMap)}else p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color);else if(p instanceof THREE.MeshLambertMaterial)p.map&&!p.wireframe&&(p.map.mapping instanceof
|
|
|
|
+THREE.UVMapping&&(va=w.uvs[0],Qa(Z,U,o,P,ra,G,va[l].u,va[l].v,va[k].u,va[k].v,va[t].u,va[t].v,p.map)),b(THREE.SubtractiveBlending)),fa?!p.wireframe&&p.shading==THREE.SmoothShading&&w.vertexNormalsWorld.length==3?(ga.r=na.r=ia.r=ma.r,ga.g=na.g=ia.g=ma.g,ga.b=na.b=ia.b=ma.b,x(n,w.v1.positionWorld,w.vertexNormalsWorld[0],ga),x(n,w.v2.positionWorld,w.vertexNormalsWorld[1],na),x(n,w.v3.positionWorld,w.vertexNormalsWorld[2],ia),ga.r=Math.max(0,Math.min(p.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(p.color.g*
|
|
|
|
+ga.g,1)),ga.b=Math.max(0,Math.min(p.color.b*ga.b,1)),na.r=Math.max(0,Math.min(p.color.r*na.r,1)),na.g=Math.max(0,Math.min(p.color.g*na.g,1)),na.b=Math.max(0,Math.min(p.color.b*na.b,1)),ia.r=Math.max(0,Math.min(p.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(p.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(p.color.b*ia.b,1)),I.r=(na.r+ia.r)*0.5,I.g=(na.g+ia.g)*0.5,I.b=(na.b+ia.b)*0.5,ua=Na(ga,na,ia,I),L(Z,U,o,P,ra,G,0,0,1,0,0,1,ua)):(ea.r=ma.r,ea.g=ma.g,ea.b=ma.b,x(n,w.centroidWorld,w.normalWorld,ea),ea.r=
|
|
Math.max(0,Math.min(p.color.r*ea.r,1)),ea.g=Math.max(0,Math.min(p.color.g*ea.g,1)),ea.b=Math.max(0,Math.min(p.color.b*ea.b,1)),p.wireframe?H(ea,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(ea)):p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color);else if(p instanceof THREE.MeshDepthMaterial)ha=v.near,ka=v.far,ga.r=ga.g=ga.b=1-La(a.positionScreen.z,ha,ka),na.r=na.g=na.b=1-La(e.positionScreen.z,ha,ka),ia.r=ia.g=ia.b=1-La(f.positionScreen.z,
|
|
Math.max(0,Math.min(p.color.r*ea.r,1)),ea.g=Math.max(0,Math.min(p.color.g*ea.g,1)),ea.b=Math.max(0,Math.min(p.color.b*ea.b,1)),p.wireframe?H(ea,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(ea)):p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color);else if(p instanceof THREE.MeshDepthMaterial)ha=v.near,ka=v.far,ga.r=ga.g=ga.b=1-La(a.positionScreen.z,ha,ka),na.r=na.g=na.b=1-La(e.positionScreen.z,ha,ka),ia.r=ia.g=ia.b=1-La(f.positionScreen.z,
|
|
-ha,ka),I.r=(na.r+ia.r)*0.5,I.g=(na.g+ia.g)*0.5,I.b=(na.b+ia.b)*0.5,ua=Oa(ga,na,ia,I),L(Z,U,o,P,ra,G,0,0,1,0,0,1,ua);else if(p instanceof THREE.MeshNormalMaterial)ea.r=Ma(w.normalWorld.x),ea.g=Ma(w.normalWorld.y),ea.b=Ma(w.normalWorld.z),p.wireframe?H(ea,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(ea)}function C(a,e,f,l,k,t,w,p,u){h.info.render.vertices+=4;h.info.render.faces++;c(p.opacity);b(p.blending);if(p.map||p.envMap)Qa(a,e,l,0,1,3,w,p,u),Qa(k,f,t,1,2,3,w,p,u);else if(Z=a.positionScreen.x,
|
|
|
|
|
|
+ha,ka),I.r=(na.r+ia.r)*0.5,I.g=(na.g+ia.g)*0.5,I.b=(na.b+ia.b)*0.5,ua=Na(ga,na,ia,I),L(Z,U,o,P,ra,G,0,0,1,0,0,1,ua);else if(p instanceof THREE.MeshNormalMaterial)ea.r=Ma(w.normalWorld.x),ea.g=Ma(w.normalWorld.y),ea.b=Ma(w.normalWorld.z),p.wireframe?H(ea,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(ea)}function y(a,e,f,l,k,t,w,p,u){h.info.render.vertices+=4;h.info.render.faces++;c(p.opacity);b(p.blending);if(p.map||p.envMap)Pa(a,e,l,0,1,3,w,p,u),Pa(k,f,t,1,2,3,w,p,u);else if(Z=a.positionScreen.x,
|
|
U=a.positionScreen.y,o=e.positionScreen.x,P=e.positionScreen.y,ra=f.positionScreen.x,G=f.positionScreen.y,W=l.positionScreen.x,$=l.positionScreen.y,la=k.positionScreen.x,ja=k.positionScreen.y,sa=t.positionScreen.x,T=t.positionScreen.y,p instanceof THREE.MeshBasicMaterial)E(Z,U,o,P,ra,G,W,$),p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color);else if(p instanceof THREE.MeshLambertMaterial)fa?!p.wireframe&&p.shading==THREE.SmoothShading&&w.vertexNormalsWorld.length==
|
|
U=a.positionScreen.y,o=e.positionScreen.x,P=e.positionScreen.y,ra=f.positionScreen.x,G=f.positionScreen.y,W=l.positionScreen.x,$=l.positionScreen.y,la=k.positionScreen.x,ja=k.positionScreen.y,sa=t.positionScreen.x,T=t.positionScreen.y,p instanceof THREE.MeshBasicMaterial)E(Z,U,o,P,ra,G,W,$),p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color);else if(p instanceof THREE.MeshLambertMaterial)fa?!p.wireframe&&p.shading==THREE.SmoothShading&&w.vertexNormalsWorld.length==
|
|
4?(ga.r=na.r=ia.r=I.r=ma.r,ga.g=na.g=ia.g=I.g=ma.g,ga.b=na.b=ia.b=I.b=ma.b,x(n,w.v1.positionWorld,w.vertexNormalsWorld[0],ga),x(n,w.v2.positionWorld,w.vertexNormalsWorld[1],na),x(n,w.v4.positionWorld,w.vertexNormalsWorld[3],ia),x(n,w.v3.positionWorld,w.vertexNormalsWorld[2],I),ga.r=Math.max(0,Math.min(p.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(p.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(p.color.b*ga.b,1)),na.r=Math.max(0,Math.min(p.color.r*na.r,1)),na.g=Math.max(0,Math.min(p.color.g*na.g,1)),na.b=
|
|
4?(ga.r=na.r=ia.r=I.r=ma.r,ga.g=na.g=ia.g=I.g=ma.g,ga.b=na.b=ia.b=I.b=ma.b,x(n,w.v1.positionWorld,w.vertexNormalsWorld[0],ga),x(n,w.v2.positionWorld,w.vertexNormalsWorld[1],na),x(n,w.v4.positionWorld,w.vertexNormalsWorld[3],ia),x(n,w.v3.positionWorld,w.vertexNormalsWorld[2],I),ga.r=Math.max(0,Math.min(p.color.r*ga.r,1)),ga.g=Math.max(0,Math.min(p.color.g*ga.g,1)),ga.b=Math.max(0,Math.min(p.color.b*ga.b,1)),na.r=Math.max(0,Math.min(p.color.r*na.r,1)),na.g=Math.max(0,Math.min(p.color.g*na.g,1)),na.b=
|
|
-Math.max(0,Math.min(p.color.b*na.b,1)),ia.r=Math.max(0,Math.min(p.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(p.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(p.color.b*ia.b,1)),I.r=Math.max(0,Math.min(p.color.r*I.r,1)),I.g=Math.max(0,Math.min(p.color.g*I.g,1)),I.b=Math.max(0,Math.min(p.color.b*I.b,1)),ua=Oa(ga,na,ia,I),Na(Z,U,o,P,W,$),L(Z,U,o,P,W,$,0,0,1,0,0,1,ua),Na(la,ja,ra,G,sa,T),L(la,ja,ra,G,sa,T,1,0,1,1,0,1,ua)):(ea.r=ma.r,ea.g=ma.g,ea.b=ma.b,x(n,w.centroidWorld,w.normalWorld,ea),ea.r=Math.max(0,
|
|
|
|
-Math.min(p.color.r*ea.r,1)),ea.g=Math.max(0,Math.min(p.color.g*ea.g,1)),ea.b=Math.max(0,Math.min(p.color.b*ea.b,1)),E(Z,U,o,P,ra,G,W,$),p.wireframe?H(ea,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(ea)):(E(Z,U,o,P,ra,G,W,$),p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color));else if(p instanceof THREE.MeshNormalMaterial)ea.r=Ma(w.normalWorld.x),ea.g=Ma(w.normalWorld.y),ea.b=Ma(w.normalWorld.z),E(Z,U,o,P,ra,G,W,$),p.wireframe?H(ea,p.wireframeLinewidth,
|
|
|
|
-p.wireframeLinecap,p.wireframeLinejoin):Fa(ea);else if(p instanceof THREE.MeshDepthMaterial)ha=v.near,ka=v.far,ga.r=ga.g=ga.b=1-La(a.positionScreen.z,ha,ka),na.r=na.g=na.b=1-La(e.positionScreen.z,ha,ka),ia.r=ia.g=ia.b=1-La(l.positionScreen.z,ha,ka),I.r=I.g=I.b=1-La(f.positionScreen.z,ha,ka),ua=Oa(ga,na,ia,I),Na(Z,U,o,P,W,$),L(Z,U,o,P,W,$,0,0,1,0,0,1,ua),Na(la,ja,ra,G,sa,T),L(la,ja,ra,G,sa,T,1,0,1,1,0,1,ua)}function Na(a,b,c,e,h,f){u.beginPath();u.moveTo(a,b);u.lineTo(c,e);u.lineTo(h,f);u.lineTo(a,
|
|
|
|
-b);u.closePath()}function E(a,b,c,e,h,f,l,k){u.beginPath();u.moveTo(a,b);u.lineTo(c,e);u.lineTo(h,f);u.lineTo(l,k);u.lineTo(a,b);u.closePath()}function H(a,b,c,h){if(R!=b)u.lineWidth=R=b;if(D!=c)u.lineCap=D=c;if(O!=h)u.lineJoin=O=h;e(a.getContextStyle());u.stroke();aa.inflate(b*2)}function Fa(a){l(a.getContextStyle());u.fill()}function Ra(a,b,c,e,h,f,k,o,n,p,t,w,v){if(v.image.width!=0){if(v.needsUpdate==!0||Q[v.id]==void 0){var xa=v.wrapS==THREE.RepeatWrapping,x=v.wrapT==THREE.RepeatWrapping;Q[v.id]=
|
|
|
|
-u.createPattern(v.image,xa&&x?"repeat":xa&&!x?"repeat-x":!xa&&x?"repeat-y":"no-repeat");v.needsUpdate=!1}l(Q[v.id]);var xa=v.offset.x/v.repeat.x,x=v.offset.y/v.repeat.y,X=(v.image.width-1)*v.repeat.x,v=(v.image.height-1)*v.repeat.y,k=(k+xa)*X,o=(o+x)*v,n=(n+xa)*X,p=(p+x)*v,t=(t+xa)*X,w=(w+x)*v;c-=a;e-=b;h-=a;f-=b;n-=k;p-=o;t-=k;w-=o;xa=1/(n*w-t*p);v=(w*c-p*h)*xa;p=(w*e-p*f)*xa;c=(n*h-t*c)*xa;e=(n*f-t*e)*xa;a=a-v*k-c*o;b=b-p*k-e*o;u.save();u.transform(v,p,c,e,a,b);u.fill();u.restore()}}function L(a,
|
|
|
|
-b,c,e,h,f,l,k,o,n,p,t,w){var v,xa;v=w.width-1;xa=w.height-1;l*=v;k*=xa;o*=v;n*=xa;p*=v;t*=xa;c-=a;e-=b;h-=a;f-=b;o-=l;n-=k;p-=l;t-=k;xa=1/(o*t-p*n);v=(t*c-n*h)*xa;n=(t*e-n*f)*xa;c=(o*h-p*c)*xa;e=(o*f-p*e)*xa;a=a-v*l-c*k;b=b-n*l-e*k;u.save();u.transform(v,n,c,e,a,b);u.clip();u.drawImage(w,0,0);u.restore()}function Oa(a,b,c,e){var h=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),l=~~(b.r*255),k=~~(b.g*255),b=~~(b.b*255),o=~~(c.r*255),n=~~(c.g*255),c=~~(c.b*255),p=~~(e.r*255),t=~~(e.g*255),e=~~(e.b*255);za[0]=
|
|
|
|
-h<0?0:h>255?255:h;za[1]=f<0?0:f>255?255:f;za[2]=a<0?0:a>255?255:a;za[4]=l<0?0:l>255?255:l;za[5]=k<0?0:k>255?255:k;za[6]=b<0?0:b>255?255:b;za[8]=o<0?0:o>255?255:o;za[9]=n<0?0:n>255?255:n;za[10]=c<0?0:c>255?255:c;za[12]=p<0?0:p>255?255:p;za[13]=t<0?0:t>255?255:t;za[14]=e<0?0:e>255?255:e;Da.putImageData(Ha,0,0);S.drawImage(ta,0,0);return Ea}function La(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Ma(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Ka(a,b){var c=b.x-a.x,e=b.y-a.y,h=c*c+e*e;h!=0&&(h=1/
|
|
|
|
-Math.sqrt(h),c*=h,e*=h,b.x+=c,b.y+=e,a.x-=c,a.y-=e)}var Pa,Ta,Ba,Ia;this.autoClear?this.clear():u.setTransform(1,0,0,-1,w,z);h.info.render.vertices=0;h.info.render.faces=0;f=t.projectScene(a,v,this.sortElements);k=f.elements;n=f.lights;(fa=n.length>0)&&p(n);Pa=0;for(Ta=k.length;Pa<Ta;Pa++)if(Ba=k[Pa],Ia=Ba.material,Ia=Ia instanceof THREE.MeshFaceMaterial?Ba.faceMaterial:Ia,!(Ia==null||Ia.opacity==0)){aa.empty();if(Ba instanceof THREE.RenderableParticle)J=Ba,J.x*=w,J.y*=z,B(J,Ba,Ia,a);else if(Ba instanceof
|
|
|
|
-THREE.RenderableLine)J=Ba.v1,N=Ba.v2,J.positionScreen.x*=w,J.positionScreen.y*=z,N.positionScreen.x*=w,N.positionScreen.y*=z,aa.addPoint(J.positionScreen.x,J.positionScreen.y),aa.addPoint(N.positionScreen.x,N.positionScreen.y),ca.intersects(aa)&&y(J,N,Ba,Ia,a);else if(Ba instanceof THREE.RenderableFace3)J=Ba.v1,N=Ba.v2,K=Ba.v3,J.positionScreen.x*=w,J.positionScreen.y*=z,N.positionScreen.x*=w,N.positionScreen.y*=z,K.positionScreen.x*=w,K.positionScreen.y*=z,Ia.overdraw&&(Ka(J.positionScreen,N.positionScreen),
|
|
|
|
-Ka(N.positionScreen,K.positionScreen),Ka(K.positionScreen,J.positionScreen)),aa.add3Points(J.positionScreen.x,J.positionScreen.y,N.positionScreen.x,N.positionScreen.y,K.positionScreen.x,K.positionScreen.y),ca.intersects(aa)&&Qa(J,N,K,0,1,2,Ba,Ia,a);else if(Ba instanceof THREE.RenderableFace4)J=Ba.v1,N=Ba.v2,K=Ba.v3,M=Ba.v4,J.positionScreen.x*=w,J.positionScreen.y*=z,N.positionScreen.x*=w,N.positionScreen.y*=z,K.positionScreen.x*=w,K.positionScreen.y*=z,M.positionScreen.x*=w,M.positionScreen.y*=z,
|
|
|
|
-Y.positionScreen.copy(N.positionScreen),oa.positionScreen.copy(M.positionScreen),Ia.overdraw&&(Ka(J.positionScreen,N.positionScreen),Ka(N.positionScreen,M.positionScreen),Ka(M.positionScreen,J.positionScreen),Ka(K.positionScreen,Y.positionScreen),Ka(K.positionScreen,oa.positionScreen)),aa.addPoint(J.positionScreen.x,J.positionScreen.y),aa.addPoint(N.positionScreen.x,N.positionScreen.y),aa.addPoint(K.positionScreen.x,K.positionScreen.y),aa.addPoint(M.positionScreen.x,M.positionScreen.y),ca.intersects(aa)&&
|
|
|
|
-C(J,N,K,M,Y,oa,Ba,Ia,a);V.addRectangle(aa)}u.setTransform(1,0,0,1,0,0)}};
|
|
|
|
|
|
+Math.max(0,Math.min(p.color.b*na.b,1)),ia.r=Math.max(0,Math.min(p.color.r*ia.r,1)),ia.g=Math.max(0,Math.min(p.color.g*ia.g,1)),ia.b=Math.max(0,Math.min(p.color.b*ia.b,1)),I.r=Math.max(0,Math.min(p.color.r*I.r,1)),I.g=Math.max(0,Math.min(p.color.g*I.g,1)),I.b=Math.max(0,Math.min(p.color.b*I.b,1)),ua=Na(ga,na,ia,I),C(Z,U,o,P,W,$),L(Z,U,o,P,W,$,0,0,1,0,0,1,ua),C(la,ja,ra,G,sa,T),L(la,ja,ra,G,sa,T,1,0,1,1,0,1,ua)):(ea.r=ma.r,ea.g=ma.g,ea.b=ma.b,x(n,w.centroidWorld,w.normalWorld,ea),ea.r=Math.max(0,Math.min(p.color.r*
|
|
|
|
+ea.r,1)),ea.g=Math.max(0,Math.min(p.color.g*ea.g,1)),ea.b=Math.max(0,Math.min(p.color.b*ea.b,1)),E(Z,U,o,P,ra,G,W,$),p.wireframe?H(ea,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(ea)):(E(Z,U,o,P,ra,G,W,$),p.wireframe?H(p.color,p.wireframeLinewidth,p.wireframeLinecap,p.wireframeLinejoin):Fa(p.color));else if(p instanceof THREE.MeshNormalMaterial)ea.r=Ma(w.normalWorld.x),ea.g=Ma(w.normalWorld.y),ea.b=Ma(w.normalWorld.z),E(Z,U,o,P,ra,G,W,$),p.wireframe?H(ea,p.wireframeLinewidth,p.wireframeLinecap,
|
|
|
|
+p.wireframeLinejoin):Fa(ea);else if(p instanceof THREE.MeshDepthMaterial)ha=v.near,ka=v.far,ga.r=ga.g=ga.b=1-La(a.positionScreen.z,ha,ka),na.r=na.g=na.b=1-La(e.positionScreen.z,ha,ka),ia.r=ia.g=ia.b=1-La(l.positionScreen.z,ha,ka),I.r=I.g=I.b=1-La(f.positionScreen.z,ha,ka),ua=Na(ga,na,ia,I),C(Z,U,o,P,W,$),L(Z,U,o,P,W,$,0,0,1,0,0,1,ua),C(la,ja,ra,G,sa,T),L(la,ja,ra,G,sa,T,1,0,1,1,0,1,ua)}function C(a,b,c,e,h,f){u.beginPath();u.moveTo(a,b);u.lineTo(c,e);u.lineTo(h,f);u.lineTo(a,b);u.closePath()}function E(a,
|
|
|
|
+b,c,e,h,f,l,k){u.beginPath();u.moveTo(a,b);u.lineTo(c,e);u.lineTo(h,f);u.lineTo(l,k);u.lineTo(a,b);u.closePath()}function H(a,b,c,h){if(R!=b)u.lineWidth=R=b;if(D!=c)u.lineCap=D=c;if(O!=h)u.lineJoin=O=h;e(a.getContextStyle());u.stroke();aa.inflate(b*2)}function Fa(a){l(a.getContextStyle());u.fill()}function Qa(a,b,c,e,h,f,k,o,n,p,t,w,v){if(v.image.width!=0){if(v.needsUpdate==!0||Q[v.id]==void 0){var xa=v.wrapS==THREE.RepeatWrapping,x=v.wrapT==THREE.RepeatWrapping;Q[v.id]=u.createPattern(v.image,xa&&
|
|
|
|
+x?"repeat":xa&&!x?"repeat-x":!xa&&x?"repeat-y":"no-repeat");v.needsUpdate=!1}l(Q[v.id]);var xa=v.offset.x/v.repeat.x,x=v.offset.y/v.repeat.y,X=(v.image.width-1)*v.repeat.x,v=(v.image.height-1)*v.repeat.y,k=(k+xa)*X,o=(o+x)*v,n=(n+xa)*X,p=(p+x)*v,t=(t+xa)*X,w=(w+x)*v;c-=a;e-=b;h-=a;f-=b;n-=k;p-=o;t-=k;w-=o;xa=1/(n*w-t*p);v=(w*c-p*h)*xa;p=(w*e-p*f)*xa;c=(n*h-t*c)*xa;e=(n*f-t*e)*xa;a=a-v*k-c*o;b=b-p*k-e*o;u.save();u.transform(v,p,c,e,a,b);u.fill();u.restore()}}function L(a,b,c,e,h,f,l,k,o,n,p,t,w){var v,
|
|
|
|
+xa;v=w.width-1;xa=w.height-1;l*=v;k*=xa;o*=v;n*=xa;p*=v;t*=xa;c-=a;e-=b;h-=a;f-=b;o-=l;n-=k;p-=l;t-=k;xa=1/(o*t-p*n);v=(t*c-n*h)*xa;n=(t*e-n*f)*xa;c=(o*h-p*c)*xa;e=(o*f-p*e)*xa;a=a-v*l-c*k;b=b-n*l-e*k;u.save();u.transform(v,n,c,e,a,b);u.clip();u.drawImage(w,0,0);u.restore()}function Na(a,b,c,e){var h=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),l=~~(b.r*255),k=~~(b.g*255),b=~~(b.b*255),o=~~(c.r*255),n=~~(c.g*255),c=~~(c.b*255),p=~~(e.r*255),t=~~(e.g*255),e=~~(e.b*255);za[0]=h<0?0:h>255?255:h;za[1]=f<0?
|
|
|
|
+0:f>255?255:f;za[2]=a<0?0:a>255?255:a;za[4]=l<0?0:l>255?255:l;za[5]=k<0?0:k>255?255:k;za[6]=b<0?0:b>255?255:b;za[8]=o<0?0:o>255?255:o;za[9]=n<0?0:n>255?255:n;za[10]=c<0?0:c>255?255:c;za[12]=p<0?0:p>255?255:p;za[13]=t<0?0:t>255?255:t;za[14]=e<0?0:e>255?255:e;Da.putImageData(Ha,0,0);S.drawImage(ta,0,0);return Ea}function La(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function Ma(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Ka(a,b){var c=b.x-a.x,e=b.y-a.y,h=c*c+e*e;h!=0&&(h=1/Math.sqrt(h),c*=h,e*=h,b.x+=
|
|
|
|
+c,b.y+=e,a.x-=c,a.y-=e)}var Oa,Sa,Ba,Ia;this.autoClear?this.clear():u.setTransform(1,0,0,-1,w,z);h.info.render.vertices=0;h.info.render.faces=0;f=t.projectScene(a,v,this.sortElements);k=f.elements;n=f.lights;(fa=n.length>0)&&p(n);Oa=0;for(Sa=k.length;Oa<Sa;Oa++)if(Ba=k[Oa],Ia=Ba.material,Ia=Ia instanceof THREE.MeshFaceMaterial?Ba.faceMaterial:Ia,!(Ia==null||Ia.opacity==0)){aa.empty();if(Ba instanceof THREE.RenderableParticle)J=Ba,J.x*=w,J.y*=z,Ta(J,Ba,Ia,a);else if(Ba instanceof THREE.RenderableLine)J=
|
|
|
|
+Ba.v1,N=Ba.v2,J.positionScreen.x*=w,J.positionScreen.y*=z,N.positionScreen.x*=w,N.positionScreen.y*=z,aa.addPoint(J.positionScreen.x,J.positionScreen.y),aa.addPoint(N.positionScreen.x,N.positionScreen.y),ca.intersects(aa)&&B(J,N,Ba,Ia,a);else if(Ba instanceof THREE.RenderableFace3)J=Ba.v1,N=Ba.v2,K=Ba.v3,J.positionScreen.x*=w,J.positionScreen.y*=z,N.positionScreen.x*=w,N.positionScreen.y*=z,K.positionScreen.x*=w,K.positionScreen.y*=z,Ia.overdraw&&(Ka(J.positionScreen,N.positionScreen),Ka(N.positionScreen,
|
|
|
|
+K.positionScreen),Ka(K.positionScreen,J.positionScreen)),aa.add3Points(J.positionScreen.x,J.positionScreen.y,N.positionScreen.x,N.positionScreen.y,K.positionScreen.x,K.positionScreen.y),ca.intersects(aa)&&Pa(J,N,K,0,1,2,Ba,Ia,a);else if(Ba instanceof THREE.RenderableFace4)J=Ba.v1,N=Ba.v2,K=Ba.v3,M=Ba.v4,J.positionScreen.x*=w,J.positionScreen.y*=z,N.positionScreen.x*=w,N.positionScreen.y*=z,K.positionScreen.x*=w,K.positionScreen.y*=z,M.positionScreen.x*=w,M.positionScreen.y*=z,Y.positionScreen.copy(N.positionScreen),
|
|
|
|
+oa.positionScreen.copy(M.positionScreen),Ia.overdraw&&(Ka(J.positionScreen,N.positionScreen),Ka(N.positionScreen,M.positionScreen),Ka(M.positionScreen,J.positionScreen),Ka(K.positionScreen,Y.positionScreen),Ka(K.positionScreen,oa.positionScreen)),aa.addPoint(J.positionScreen.x,J.positionScreen.y),aa.addPoint(N.positionScreen.x,N.positionScreen.y),aa.addPoint(K.positionScreen.x,K.positionScreen.y),aa.addPoint(M.positionScreen.x,M.positionScreen.y),ca.intersects(aa)&&y(J,N,K,M,Y,oa,Ba,Ia,a);V.addRectangle(aa)}u.setTransform(1,
|
|
|
|
+0,0,1,0,0)}};
|
|
THREE.SVGRenderer=function(){function a(a,b,c,e){var h,f,l,k,n,p;h=0;for(f=a.length;h<f;h++)l=a[h],k=l.color,l instanceof THREE.DirectionalLight?(n=l.matrixWorld.getPosition(),p=c.dot(n),p<=0||(p*=l.intensity,e.r+=k.r*p,e.g+=k.g*p,e.b+=k.b*p)):l instanceof THREE.PointLight&&(n=l.matrixWorld.getPosition(),p=c.dot(J.sub(n,b).normalize()),p<=0||(p*=l.distance==0?1:1-Math.min(b.distanceTo(n)/l.distance,1),p!=0&&(p*=l.intensity,e.r+=k.r*p,e.g+=k.g*p,e.b+=k.b*p)))}function c(a){N[a]==null&&(N[a]=document.createElementNS("http://www.w3.org/2000/svg",
|
|
THREE.SVGRenderer=function(){function a(a,b,c,e){var h,f,l,k,n,p;h=0;for(f=a.length;h<f;h++)l=a[h],k=l.color,l instanceof THREE.DirectionalLight?(n=l.matrixWorld.getPosition(),p=c.dot(n),p<=0||(p*=l.intensity,e.r+=k.r*p,e.g+=k.g*p,e.b+=k.b*p)):l instanceof THREE.PointLight&&(n=l.matrixWorld.getPosition(),p=c.dot(J.sub(n,b).normalize()),p<=0||(p*=l.distance==0?1:1-Math.min(b.distanceTo(n)/l.distance,1),p!=0&&(p*=l.intensity,e.r+=k.r*p,e.g+=k.g*p,e.b+=k.b*p)))}function c(a){N[a]==null&&(N[a]=document.createElementNS("http://www.w3.org/2000/svg",
|
|
"path"),Z==0&&N[a].setAttribute("shape-rendering","crispEdges"));return N[a]}function b(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}var e=this,l,h,f,k=new THREE.Projector,n=document.createElementNS("http://www.w3.org/2000/svg","svg"),t,v,p,x,w,z,u,B,y=new THREE.Rectangle,E=new THREE.Rectangle,C=!1,H=new THREE.Color,L=new THREE.Color,R=new THREE.Color,D=new THREE.Color,O,J=new THREE.Vector3,N=[],K=[],M,Y,oa,Z=1;this.domElement=n;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,
|
|
"path"),Z==0&&N[a].setAttribute("shape-rendering","crispEdges"));return N[a]}function b(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}var e=this,l,h,f,k=new THREE.Projector,n=document.createElementNS("http://www.w3.org/2000/svg","svg"),t,v,p,x,w,z,u,B,y=new THREE.Rectangle,E=new THREE.Rectangle,C=!1,H=new THREE.Color,L=new THREE.Color,R=new THREE.Color,D=new THREE.Color,O,J=new THREE.Vector3,N=[],K=[],M,Y,oa,Z=1;this.domElement=n;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,
|
|
faces:0}};this.setQuality=function(a){switch(a){case "high":Z=1;break;case "low":Z=0}};this.setSize=function(a,b){t=a;v=b;p=t/2;x=v/2;n.setAttribute("viewBox",-p+" "+-x+" "+t+" "+v);n.setAttribute("width",t);n.setAttribute("height",v);y.set(-p,-x,p,x)};this.clear=function(){for(;n.childNodes.length>0;)n.removeChild(n.childNodes[0])};this.render=function(t,o){var v,J,G,W;this.autoClear&&this.clear();e.info.render.vertices=0;e.info.render.faces=0;l=k.projectScene(t,o,this.sortElements);h=l.elements;
|
|
faces:0}};this.setQuality=function(a){switch(a){case "high":Z=1;break;case "low":Z=0}};this.setSize=function(a,b){t=a;v=b;p=t/2;x=v/2;n.setAttribute("viewBox",-p+" "+-x+" "+t+" "+v);n.setAttribute("width",t);n.setAttribute("height",v);y.set(-p,-x,p,x)};this.clear=function(){for(;n.childNodes.length>0;)n.removeChild(n.childNodes[0])};this.render=function(t,o){var v,J,G,W;this.autoClear&&this.clear();e.info.render.vertices=0;e.info.render.faces=0;l=k.projectScene(t,o,this.sortElements);h=l.elements;
|
|
@@ -226,71 +226,72 @@ THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,"v
|
|
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.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 c(a,b){var c=a.vertices.length,e=b.material;if(e.attributes){if(a.__webglCustomAttributesList===void 0)a.__webglCustomAttributesList=[];for(var h in e.attributes){var f=e.attributes[h];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var l=1;f.type==="v2"?l=2:f.type==="v3"?l=3:f.type==="v4"?l=4:f.type==="c"&&(l=3);f.size=l;f.array=new Float32Array(c*l);f.buffer=o.createBuffer();f.buffer.belongsToAttribute=h;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}}
|
|
THREE.WebGLRenderer=function(a){function c(a,b){var c=a.vertices.length,e=b.material;if(e.attributes){if(a.__webglCustomAttributesList===void 0)a.__webglCustomAttributesList=[];for(var h in e.attributes){var f=e.attributes[h];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var l=1;f.type==="v2"?l=2:f.type==="v3"?l=3:f.type==="v4"?l=4:f.type==="c"&&(l=3);f.size=l;f.array=new Float32Array(c*l);f.buffer=o.createBuffer();f.buffer.belongsToAttribute=h;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}}
|
|
function b(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;else if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function e(a,b,c){var e,h,f,l=a.vertices,k=l.length,n=a.colors,p=n.length,t=a.__vertexArray,w=a.__colorArray,v=a.__sortArray,u=a.__dirtyVertices,x=a.__dirtyColors,X=a.__webglCustomAttributesList;if(c.sortParticles){Ca.multiplySelf(c.matrixWorld);for(e=0;e<k;e++)h=l[e].position,Aa.copy(h),Ca.multiplyVector3(Aa),v[e]=[Aa.z,e];v.sort(function(a,
|
|
function b(a,b){if(a.material&&!(a.material instanceof THREE.MeshFaceMaterial))return a.material;else if(b.materialIndex>=0)return a.geometry.materials[b.materialIndex]}function e(a,b,c){var e,h,f,l=a.vertices,k=l.length,n=a.colors,p=n.length,t=a.__vertexArray,w=a.__colorArray,v=a.__sortArray,u=a.__dirtyVertices,x=a.__dirtyColors,X=a.__webglCustomAttributesList;if(c.sortParticles){Ca.multiplySelf(c.matrixWorld);for(e=0;e<k;e++)h=l[e].position,Aa.copy(h),Ca.multiplyVector3(Aa),v[e]=[Aa.z,e];v.sort(function(a,
|
|
-b){return b[0]-a[0]});for(e=0;e<k;e++)h=l[v[e][1]].position,f=e*3,t[f]=h.x,t[f+1]=h.y,t[f+2]=h.z;for(e=0;e<p;e++)f=e*3,color=n[v[e][1]],w[f]=color.r,w[f+1]=color.g,w[f+2]=color.b;if(X){n=0;for(p=X.length;n<p;n++)if(k=X[n],k.boundTo===void 0||k.boundTo==="vertices"){f=0;h=k.value.length;for(e=0;e<h;e++)index=v[e][1],k.size===1?k.array[f]=k.value[index]:(l=k.value[index],k.size===2?(k.array[f]=l.x,k.array[f+1]=l.y):k.size===3?k.type==="c"?(k.array[f]=l.r,k.array[f+1]=l.g,k.array[f+2]=l.b):(k.array[f]=
|
|
|
|
-l.x,k.array[f+1]=l.y,k.array[f+2]=l.z):(k.array[f]=l.x,k.array[f+1]=l.y,k.array[f+2]=l.z,k.array[f+3]=l.w)),f+=k.size}}}else{if(u)for(e=0;e<k;e++)h=l[e].position,f=e*3,t[f]=h.x,t[f+1]=h.y,t[f+2]=h.z;if(x)for(e=0;e<p;e++)color=n[e],f=e*3,w[f]=color.r,w[f+1]=color.g,w[f+2]=color.b;if(X){n=0;for(p=X.length;n<p;n++)if(k=X[n],k.needsUpdate&&(k.boundTo===void 0||k.boundTo==="vertices")){h=k.value.length;for(e=f=0;e<h;e++)offset_custom=k.offset,k.size===1?k.array[f]=k.value[e]:(l=k.value[e],k.size===2?(k.array[f]=
|
|
|
|
-l.x,k.array[f+1]=l.y):k.size===3?k.type==="c"?(k.array[f]=l.r,k.array[f+1]=l.g,k.array[f+2]=l.b):(k.array[f]=l.x,k.array[f+1]=l.y,k.array[f+2]=l.z):(k.array[f]=l.x,k.array[f+1]=l.y,k.array[f+2]=l.z,k.array[f+3]=l.w)),f+=k.size}}}if(u||c.sortParticles)o.bindBuffer(o.ARRAY_BUFFER,a.__webglVertexBuffer),o.bufferData(o.ARRAY_BUFFER,t,b);if(x||c.sortParticles)o.bindBuffer(o.ARRAY_BUFFER,a.__webglColorBuffer),o.bufferData(o.ARRAY_BUFFER,w,b);if(X){n=0;for(p=X.length;n<p;n++)if(k=X[n],k.needsUpdate||c.sortParticles)o.bindBuffer(o.ARRAY_BUFFER,
|
|
|
|
-k.buffer),o.bufferData(o.ARRAY_BUFFER,k.array,b)}}function l(a,b,c,e,f){e.program||U.initMaterial(e,b,c,f);if(e.morphTargets&&!f.__webglMorphTargetInfluences){f.__webglMorphTargetInfluences=new Float32Array(U.maxMorphTargets);for(var h=0,l=U.maxMorphTargets;h<l;h++)f.__webglMorphTargetInfluences[h]=0}var k=!1,h=e.program,l=h.uniforms,n=e.uniforms;h!==ra&&(o.useProgram(h),ra=h,k=!0);if(e.id!==W)W=e.id,k=!0;if(k){o.uniformMatrix4fv(l.projectionMatrix,!1,Ga);if(c&&e.fog)if(n.fogColor.value=c.color,c instanceof
|
|
|
|
-THREE.Fog)n.fogNear.value=c.near,n.fogFar.value=c.far;else if(c instanceof THREE.FogExp2)n.fogDensity.value=c.density;if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e.lights){for(var p,t,w=0,v=0,u=0,x,z,B,V=Ja,ca=V.directional.colors,y=V.directional.positions,C=V.point.colors,E=V.point.positions,H=V.point.distances,aa=0,I=0,c=p=B=0,k=b.length;c<k;c++)if(p=b[c],t=p.color,x=p.position,z=p.intensity,B=p.distance,p instanceof THREE.AmbientLight)U.gammaInput?(w+=t.r*t.r,
|
|
|
|
-v+=t.g*t.g,u+=t.b*t.b):(w+=t.r,v+=t.g,u+=t.b);else if(p instanceof THREE.DirectionalLight)B=aa*3,U.gammaInput?(ca[B]=t.r*t.r*z*z,ca[B+1]=t.g*t.g*z*z,ca[B+2]=t.b*t.b*z*z):(ca[B]=t.r*z,ca[B+1]=t.g*z,ca[B+2]=t.b*z),y[B]=x.x,y[B+1]=x.y,y[B+2]=x.z,aa+=1;else if(p instanceof THREE.SpotLight)B=aa*3,U.gammaInput?(ca[B]=t.r*t.r*z*z,ca[B+1]=t.g*t.g*z*z,ca[B+2]=t.b*t.b*z*z):(ca[B]=t.r*z,ca[B+1]=t.g*z,ca[B+2]=t.b*z),t=1/x.length(),y[B]=x.x*t,y[B+1]=x.y*t,y[B+2]=x.z*t,aa+=1;else if(p instanceof THREE.PointLight)p=
|
|
|
|
-I*3,U.gammaInput?(C[p]=t.r*t.r*z*z,C[p+1]=t.g*t.g*z*z,C[p+2]=t.b*t.b*z*z):(C[p]=t.r*z,C[p+1]=t.g*z,C[p+2]=t.b*z),E[p]=x.x,E[p+1]=x.y,E[p+2]=x.z,H[I]=B,I+=1;c=aa*3;for(k=ca.length;c<k;c++)ca[c]=0;c=I*3;for(k=C.length;c<k;c++)C[c]=0;V.point.length=I;V.directional.length=aa;V.ambient[0]=w;V.ambient[1]=v;V.ambient[2]=u;b=Ja;n.enableLighting.value=b.directional.length+b.point.length;n.ambientLightColor.value=b.ambient;n.directionalLightColor.value=b.directional.colors;n.directionalLightDirection.value=
|
|
|
|
-b.directional.positions;n.pointLightColor.value=b.point.colors;n.pointLightPosition.value=b.point.positions;n.pointLightDistance.value=b.point.distances}if(e instanceof THREE.MeshBasicMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshPhongMaterial)n.opacity.value=e.opacity,U.gammaInput?n.diffuse.value.copyGammaToLinear(e.color):n.diffuse.value=e.color,(n.map.texture=e.map)&&n.offsetRepeat.value.set(e.map.offset.x,e.map.offset.y,e.map.repeat.x,e.map.repeat.y),n.lightMap.texture=
|
|
|
|
-e.lightMap,n.envMap.texture=e.envMap,n.flipEnvMap.value=e.envMap instanceof THREE.WebGLRenderTargetCube?1:-1,n.reflectivity.value=e.reflectivity,n.refractionRatio.value=e.refractionRatio,n.combine.value=e.combine,n.useRefract.value=e.envMap&&e.envMap.mapping instanceof THREE.CubeRefractionMapping;if(e instanceof THREE.LineBasicMaterial)n.diffuse.value=e.color,n.opacity.value=e.opacity;else if(e instanceof THREE.ParticleBasicMaterial)n.psColor.value=e.color,n.opacity.value=e.opacity,n.size.value=e.size,
|
|
|
|
-n.scale.value=X.height/2,n.map.texture=e.map;else if(e instanceof THREE.MeshPhongMaterial)n.shininess.value=e.shininess,U.gammaInput?(n.ambient.value.copyGammaToLinear(e.ambient),n.specular.value.copyGammaToLinear(e.specular)):(n.ambient.value=e.ambient,n.specular.value=e.specular);else if(e instanceof THREE.MeshLambertMaterial)U.gammaInput?n.ambient.value.copyGammaToLinear(e.ambient):n.ambient.value=e.ambient;else if(e instanceof THREE.MeshDepthMaterial)n.mNear.value=a.near,n.mFar.value=a.far,n.opacity.value=
|
|
|
|
-e.opacity;else if(e instanceof THREE.MeshNormalMaterial)n.opacity.value=e.opacity;if(f.receiveShadow&&!e._shadowPass&&n.shadowMatrix){for(b=0;b<qa.length;b++)n.shadowMatrix.value[b]=qa[b],n.shadowMap.texture[b]=U.shadowMap[b];n.shadowDarkness.value=U.shadowMapDarkness;n.shadowBias.value=U.shadowMapBias}b=e.uniformsList;n=0;for(c=b.length;n<c;n++)if(v=h.uniforms[b[n][1]])if(w=b[n][0],u=w.type,k=w.value,u==="i")o.uniform1i(v,k);else if(u==="f")o.uniform1f(v,k);else if(u==="v2")o.uniform2f(v,k.x,k.y);
|
|
|
|
-else if(u==="v3")o.uniform3f(v,k.x,k.y,k.z);else if(u==="v4")o.uniform4f(v,k.x,k.y,k.z,k.w);else if(u==="c")o.uniform3f(v,k.r,k.g,k.b);else if(u==="fv1")o.uniform1fv(v,k);else if(u==="fv")o.uniform3fv(v,k);else if(u==="v3v"){if(!w._array)w._array=new Float32Array(3*k.length);u=0;for(x=k.length;u<x;u++)V=u*3,w._array[V]=k[u].x,w._array[V+1]=k[u].y,w._array[V+2]=k[u].z;o.uniform3fv(v,w._array)}else if(u==="m4"){if(!w._array)w._array=new Float32Array(16);k.flattenToArray(w._array);o.uniformMatrix4fv(v,
|
|
|
|
-!1,w._array)}else if(u==="m4v"){if(!w._array)w._array=new Float32Array(16*k.length);u=0;for(x=k.length;u<x;u++)k[u].flattenToArrayOffset(w._array,u*16);o.uniformMatrix4fv(v,!1,w._array)}else if(u==="t"){if(o.uniform1i(v,k),v=w.texture)if(v.image instanceof Array&&v.image.length===6){if(w=v,w.image.length===6)if(w.needsUpdate){if(!w.image.__webglTextureCube)w.image.__webglTextureCube=o.createTexture();o.activeTexture(o.TEXTURE0+k);o.bindTexture(o.TEXTURE_CUBE_MAP,w.image.__webglTextureCube);for(k=
|
|
|
|
-0;k<6;k++)o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+k,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,w.image[k]);O(o.TEXTURE_CUBE_MAP,w,w.image[0]);w.needsUpdate=!1}else o.activeTexture(o.TEXTURE0+k),o.bindTexture(o.TEXTURE_CUBE_MAP,w.image.__webglTextureCube)}else v instanceof THREE.WebGLRenderTargetCube?(w=v,o.activeTexture(o.TEXTURE0+k),o.bindTexture(o.TEXTURE_CUBE_MAP,w.__webglTexture)):J(v,k)}else if(u==="tv"){if(!w._array){w._array=[];u=0;for(x=w.texture.length;u<x;u++)w._array[u]=k+u}o.uniform1iv(v,w._array);
|
|
|
|
-u=0;for(x=w.texture.length;u<x;u++)(v=w.texture[u])&&J(v,w._array[u])}(e instanceof THREE.ShaderMaterial||e instanceof THREE.MeshPhongMaterial||e.envMap)&&l.cameraPosition!==null&&o.uniform3f(l.cameraPosition,a.position.x,a.position.y,a.position.z);(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.ShaderMaterial||e.skinning)&&l.viewMatrix!==null&&o.uniformMatrix4fv(l.viewMatrix,!1,ya);e.skinning&&(o.uniformMatrix4fv(l.cameraInverseMatrix,!1,ya),o.uniformMatrix4fv(l.boneGlobalMatrices,
|
|
|
|
-!1,f.boneMatrices))}o.uniformMatrix4fv(l.modelViewMatrix,!1,f._modelViewMatrixArray);l.normalMatrix&&o.uniformMatrix3fv(l.normalMatrix,!1,f._normalMatrixArray);(e instanceof THREE.ShaderMaterial||e.envMap||e.skinning||f.receiveShadow)&&l.objectMatrix!==null&&o.uniformMatrix4fv(l.objectMatrix,!1,f._objectMatrixArray);return h}function h(a,b,c,e,f,h){if(e.opacity!==0){var k,n,c=l(a,b,c,e,h),a=c.attributes,b=!1,c=f.id*16777215+c.id*2+(e.wireframe?1:0);c!==$&&($=c,b=!0);if(!e.morphTargets&&a.position>=
|
|
|
|
-0)b&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglVertexBuffer),o.vertexAttribPointer(a.position,3,o.FLOAT,!1,0,0));else if(h.morphTargetBase){c=e.program.attributes;h.morphTargetBase!==-1?(o.bindBuffer(o.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[h.morphTargetBase]),o.vertexAttribPointer(c.position,3,o.FLOAT,!1,0,0)):c.position>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglVertexBuffer),o.vertexAttribPointer(c.position,3,o.FLOAT,!1,0,0));if(h.morphTargetForcedOrder.length){k=0;var p=h.morphTargetForcedOrder;
|
|
|
|
-for(n=h.morphTargetInfluences;k<e.numSupportedMorphTargets&&k<p.length;)o.bindBuffer(o.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[p[k]]),o.vertexAttribPointer(c["morphTarget"+k],3,o.FLOAT,!1,0,0),h.__webglMorphTargetInfluences[k]=n[p[k]],k++}else{var p=[],t=-1,w=0;n=h.morphTargetInfluences;var v,u=n.length;k=0;for(h.morphTargetBase!==-1&&(p[h.morphTargetBase]=!0);k<e.numSupportedMorphTargets;){for(v=0;v<u;v++)!p[v]&&n[v]>t&&(w=v,t=n[w]);o.bindBuffer(o.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[w]);
|
|
|
|
-o.vertexAttribPointer(c["morphTarget"+k],3,o.FLOAT,!1,0,0);h.__webglMorphTargetInfluences[k]=t;p[w]=1;t=-1;k++}}e.program.uniforms.morphTargetInfluences!==null&&o.uniform1fv(e.program.uniforms.morphTargetInfluences,h.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){k=0;for(n=f.__webglCustomAttributesList.length;k<n;k++)c=f.__webglCustomAttributesList[k],a[c.buffer.belongsToAttribute]>=0&&(o.bindBuffer(o.ARRAY_BUFFER,c.buffer),o.vertexAttribPointer(a[c.buffer.belongsToAttribute],
|
|
|
|
-c.size,o.FLOAT,!1,0,0))}a.color>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglColorBuffer),o.vertexAttribPointer(a.color,3,o.FLOAT,!1,0,0));a.normal>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglNormalBuffer),o.vertexAttribPointer(a.normal,3,o.FLOAT,!1,0,0));a.tangent>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglTangentBuffer),o.vertexAttribPointer(a.tangent,4,o.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(o.bindBuffer(o.ARRAY_BUFFER,f.__webglUVBuffer),o.vertexAttribPointer(a.uv,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv)):
|
|
|
|
-o.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(o.bindBuffer(o.ARRAY_BUFFER,f.__webglUV2Buffer),o.vertexAttribPointer(a.uv2,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv2)):o.disableVertexAttribArray(a.uv2));e.skinning&&a.skinVertexA>=0&&a.skinVertexB>=0&&a.skinIndex>=0&&a.skinWeight>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinVertexABuffer),o.vertexAttribPointer(a.skinVertexA,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),o.vertexAttribPointer(a.skinVertexB,
|
|
|
|
-4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),o.vertexAttribPointer(a.skinIndex,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),o.vertexAttribPointer(a.skinWeight,4,o.FLOAT,!1,0,0))}h instanceof THREE.Mesh?(e.wireframe?(o.lineWidth(e.wireframeLinewidth),b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),o.drawElements(o.LINES,f.__webglLineCount,o.UNSIGNED_SHORT,0)):(b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),o.drawElements(o.TRIANGLES,
|
|
|
|
-f.__webglFaceCount,o.UNSIGNED_SHORT,0)),U.info.render.calls++,U.info.render.vertices+=f.__webglFaceCount,U.info.render.faces+=f.__webglFaceCount/3):h instanceof THREE.Line?(h=h.type===THREE.LineStrip?o.LINE_STRIP:o.LINES,o.lineWidth(e.linewidth),o.drawArrays(h,0,f.__webglLineCount),U.info.render.calls++):h instanceof THREE.ParticleSystem?(o.drawArrays(o.POINTS,0,f.__webglParticleCount),U.info.render.calls++):h instanceof THREE.Ribbon&&(o.drawArrays(o.TRIANGLE_STRIP,0,f.__webglVertexCount),U.info.render.calls++)}}
|
|
|
|
-function f(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=o.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=o.createBuffer();a.hasPos&&(o.bindBuffer(o.ARRAY_BUFFER,a.__webglVertexBuffer),o.bufferData(o.ARRAY_BUFFER,a.positionArray,o.DYNAMIC_DRAW),o.enableVertexAttribArray(b.attributes.position),o.vertexAttribPointer(b.attributes.position,3,o.FLOAT,!1,0,0));if(a.hasNormal){o.bindBuffer(o.ARRAY_BUFFER,a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,f,h,l,k,n,p,t,w,v,u=
|
|
|
|
-a.count*3;for(v=0;v<u;v+=9)c=a.normalArray,e=c[v],f=c[v+1],h=c[v+2],l=c[v+3],n=c[v+4],t=c[v+5],k=c[v+6],p=c[v+7],w=c[v+8],e=(e+l+k)/3,f=(f+n+p)/3,h=(h+t+w)/3,c[v]=e,c[v+1]=f,c[v+2]=h,c[v+3]=e,c[v+4]=f,c[v+5]=h,c[v+6]=e,c[v+7]=f,c[v+8]=h}o.bufferData(o.ARRAY_BUFFER,a.normalArray,o.DYNAMIC_DRAW);o.enableVertexAttribArray(b.attributes.normal);o.vertexAttribPointer(b.attributes.normal,3,o.FLOAT,!1,0,0)}o.drawArrays(o.TRIANGLES,0,a.count);a.count=0}function k(a){if(ja!==a.doubleSided)a.doubleSided?o.disable(o.CULL_FACE):
|
|
|
|
-o.enable(o.CULL_FACE),ja=a.doubleSided;if(sa!==a.flipSided)a.flipSided?o.frontFace(o.CW):o.frontFace(o.CCW),sa=a.flipSided}function n(a){ea!==a&&(a?o.enable(o.DEPTH_TEST):o.disable(o.DEPTH_TEST),ea=a)}function t(a){ga!==a&&(o.depthMask(a),ga=a)}function v(a,b,c){na!==a&&(a?o.enable(o.POLYGON_OFFSET_FILL):o.disable(o.POLYGON_OFFSET_FILL),na=a);if(a&&(ia!==b||I!==c))o.polygonOffset(b,c),ia=b,I=c}function p(a){va[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);va[1].set(a.n41+a.n11,a.n42+a.n12,
|
|
|
|
-a.n43+a.n13,a.n44+a.n14);va[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);va[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);va[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);va[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(var b,a=0;a<6;a++)b=va[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}function x(a){for(var b=a.matrixWorld,c=-a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)),e=0;e<6;e++)if(a=va[e].x*b.n14+va[e].y*
|
|
|
|
-b.n24+va[e].z*b.n34+va[e].w,a<=c)return!1;return!0}function w(a){var b=a.object.material;b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function z(a){var b=a.object,c=a.buffer,e;e=b.material;if(e instanceof THREE.MeshFaceMaterial){if(c=c.materialIndex,c>=0)b=b.geometry.materials[c],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=e)b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function u(a,b){return b.z-
|
|
|
|
-a.z}function B(a){var b,c,e,t=0,w,v,u,X,z=a.lights;pa||(pa=new THREE.PerspectiveCamera(U.shadowCameraFov,U.shadowMapWidth/U.shadowMapHeight,U.shadowCameraNear,U.shadowCameraFar));b=0;for(c=z.length;b<c;b++)if(e=z[b],e instanceof THREE.SpotLight&&e.castShadow){W=-1;U.shadowMap[t]||(U.shadowMap[t]=new THREE.WebGLRenderTarget(U.shadowMapWidth,U.shadowMapHeight,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}));qa[t]||(qa[t]=new THREE.Matrix4);w=U.shadowMap[t];v=qa[t];
|
|
|
|
-pa.position.copy(e.position);pa.lookAt(e.target.position);pa.parent==null&&(console.warn("Camera is not on the Scene. Adding it..."),a.add(pa));this.autoUpdateScene&&a.updateMatrixWorld();pa.matrixWorldInverse.getInverse(pa.matrixWorld);v.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);v.multiplySelf(pa.projectionMatrix);v.multiplySelf(pa.matrixWorldInverse);pa.matrixWorldInverse.flattenToArray(ya);pa.projectionMatrix.flattenToArray(Ga);Ca.multiply(pa.projectionMatrix,pa.matrixWorldInverse);p(Ca);
|
|
|
|
-K(w);o.clearColor(1,1,1,1);U.clear();o.clearColor(fa.r,fa.g,fa.b,ma);v=a.__webglObjects.length;e=a.__webglObjectsImmediate.length;for(w=0;w<v;w++)u=a.__webglObjects[w],X=u.object,X.visible&&X.castShadow?!(X instanceof THREE.Mesh)||!X.frustumCulled||x(X)?(X.matrixWorld.flattenToArray(X._objectMatrixArray),E(X,pa,!1),u.render=!0):u.render=!1:u.render=!1;n(!0);D(THREE.NormalBlending);for(w=0;w<v;w++)if(u=a.__webglObjects[w],u.render)X=u.object,buffer=u.buffer,k(X),u=X.customDepthMaterial?X.customDepthMaterial:
|
|
|
|
-X.geometry.morphTargets.length?Ha:Da,h(pa,z,null,u,buffer,X);for(w=0;w<e;w++)u=a.__webglObjectsImmediate[w],X=u.object,X.visible&&X.castShadow&&(X.matrixAutoUpdate&&X.matrixWorld.flattenToArray(X._objectMatrixArray),$=-1,E(X,pa,!1),k(X),program=l(pa,z,null,Da,X),X.immediateRenderCallback?X.immediateRenderCallback(program,o,va):X.render(function(a){f(a,program,Da.shading)}));t++}}function y(a,b){var c,e,f;c=S.attributes;var h=S.uniforms,l=ua/ka,k,n=[],t=ka*0.5,w=ua*0.5,p=!0;o.useProgram(S.program);
|
|
|
|
-ra=S.program;$=ea=T=-1;Sa||(o.enableVertexAttribArray(S.attributes.position),o.enableVertexAttribArray(S.attributes.uv),Sa=!0);o.disable(o.CULL_FACE);o.enable(o.BLEND);o.depthMask(!0);o.bindBuffer(o.ARRAY_BUFFER,S.vertexBuffer);o.vertexAttribPointer(c.position,2,o.FLOAT,!1,16,0);o.vertexAttribPointer(c.uv,2,o.FLOAT,!1,16,8);o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,S.elementBuffer);o.uniformMatrix4fv(h.projectionMatrix,!1,Ga);o.activeTexture(o.TEXTURE0);o.uniform1i(h.map,0);c=0;for(e=a.__webglSprites.length;c<
|
|
|
|
-e;c++)if(f=a.__webglSprites[c],f.visible&&f.opacity!==0)f.useScreenCoordinates?f.z=-f.position.z:(f._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,f.matrixWorld,f._modelViewMatrixArray),f.z=-f._modelViewMatrix.n34);a.__webglSprites.sort(u);c=0;for(e=a.__webglSprites.length;c<e;c++)f=a.__webglSprites[c],f.visible&&f.opacity!==0&&f.map&&f.map.image&&f.map.image.width&&(f.useScreenCoordinates?(o.uniform1i(h.useScreenCoordinates,1),o.uniform3f(h.screenPosition,(f.position.x-t)/t,(w-f.position.y)/
|
|
|
|
-w,Math.max(0,Math.min(1,f.position.z)))):(o.uniform1i(h.useScreenCoordinates,0),o.uniform1i(h.affectedByDistance,f.affectedByDistance?1:0),o.uniformMatrix4fv(h.modelViewMatrix,!1,f._modelViewMatrixArray)),k=f.map.image.width/(f.scaleByViewport?ua:1),n[0]=k*l*f.scale.x,n[1]=k*f.scale.y,o.uniform2f(h.uvScale,f.uvScale.x,f.uvScale.y),o.uniform2f(h.uvOffset,f.uvOffset.x,f.uvOffset.y),o.uniform2f(h.alignment,f.alignment.x,f.alignment.y),o.uniform1f(h.opacity,f.opacity),o.uniform3f(h.color,f.color.r,f.color.g,
|
|
|
|
-f.color.b),o.uniform1f(h.rotation,f.rotation),o.uniform2fv(h.scale,n),f.mergeWith3D&&!p?(o.enable(o.DEPTH_TEST),p=!0):!f.mergeWith3D&&p&&(o.disable(o.DEPTH_TEST),p=!1),D(f.blending),J(f.map,0),o.drawElements(o.TRIANGLES,6,o.UNSIGNED_SHORT,0));o.enable(o.CULL_FACE);o.enable(o.DEPTH_TEST);o.depthMask(ga)}function E(a,b,c){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);c&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}
|
|
|
|
-function C(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function H(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function L(a,b){for(var c=a.length-1;c>=0;c--)a[c].object===b&&a.splice(c,1)}function R(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function D(a){if(a!==T){switch(a){case THREE.AdditiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE);break;case THREE.SubtractiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,
|
|
|
|
-o.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,o.SRC_COLOR);break;default:o.blendEquationSeparate(o.FUNC_ADD,o.FUNC_ADD),o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA)}T=a}}function O(a,b,c){(c.width&c.width-1)===0&&(c.height&c.height-1)===0?(o.texParameteri(a,o.TEXTURE_WRAP_S,Z(b.wrapS)),o.texParameteri(a,o.TEXTURE_WRAP_T,Z(b.wrapT)),o.texParameteri(a,o.TEXTURE_MAG_FILTER,Z(b.magFilter)),o.texParameteri(a,
|
|
|
|
-o.TEXTURE_MIN_FILTER,Z(b.minFilter)),o.generateMipmap(a)):(o.texParameteri(a,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_MAG_FILTER,oa(b.magFilter)),o.texParameteri(a,o.TEXTURE_MIN_FILTER,oa(b.minFilter)))}function J(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=!0,a.__webglTexture=o.createTexture(),U.info.memory.textures++;o.activeTexture(o.TEXTURE0+b);o.bindTexture(o.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture?
|
|
|
|
-o.texImage2D(o.TEXTURE_2D,0,Z(a.format),a.image.width,a.image.height,0,Z(a.format),o.UNSIGNED_BYTE,a.image.data):o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,a.image);O(o.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else o.activeTexture(o.TEXTURE0+b),o.bindTexture(o.TEXTURE_2D,a.__webglTexture)}function N(a,b){o.bindRenderbuffer(o.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_COMPONENT16,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,
|
|
|
|
-o.DEPTH_ATTACHMENT,o.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_STENCIL,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.RENDERBUFFER,a)):o.renderbufferStorage(o.RENDERBUFFER,o.RGBA4,b.width,b.height)}function K(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=o.createTexture();
|
|
|
|
-if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture);O(o.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=o.createFramebuffer();a.__webglRenderbuffer[c]=o.createRenderbuffer();o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,Z(a.format),a.width,a.height,0,Z(a.format),Z(a.type),null);var e=a,f=o.TEXTURE_CUBE_MAP_POSITIVE_X+c;o.bindFramebuffer(o.FRAMEBUFFER,a.__webglFramebuffer[c]);o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,
|
|
|
|
-f,e.__webglTexture,0);N(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=o.createFramebuffer(),a.__webglRenderbuffer=o.createRenderbuffer(),o.bindTexture(o.TEXTURE_2D,a.__webglTexture),O(o.TEXTURE_2D,a,a),o.texImage2D(o.TEXTURE_2D,0,Z(a.format),a.width,a.height,0,Z(a.format),Z(a.type),null),c=o.TEXTURE_2D,o.bindFramebuffer(o.FRAMEBUFFER,a.__webglFramebuffer),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,c,a.__webglTexture,0),o.bindRenderbuffer(o.RENDERBUFFER,a.__webglRenderbuffer),
|
|
|
|
-N(a.__webglRenderbuffer,a);b?o.bindTexture(o.TEXTURE_CUBE_MAP,null):o.bindTexture(o.TEXTURE_2D,null);o.bindRenderbuffer(o.RENDERBUFFER,null);o.bindFramebuffer(o.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=ka,a=ua,e=Q,f=ha);b!==G&&(o.bindFramebuffer(o.FRAMEBUFFER,b),o.viewport(e,f,c,a),G=b)}function M(a){a instanceof THREE.WebGLRenderTargetCube?(o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture),o.generateMipmap(o.TEXTURE_CUBE_MAP),
|
|
|
|
-o.bindTexture(o.TEXTURE_CUBE_MAP,null)):(o.bindTexture(o.TEXTURE_2D,a.__webglTexture),o.generateMipmap(o.TEXTURE_2D),o.bindTexture(o.TEXTURE_2D,null))}function Y(a,b){var c;a==="fragment"?c=o.createShader(o.FRAGMENT_SHADER):a==="vertex"&&(c=o.createShader(o.VERTEX_SHADER));o.shaderSource(c,b);o.compileShader(c);if(!o.getShaderParameter(c,o.COMPILE_STATUS))return console.error(o.getShaderInfoLog(c)),console.error(b),null;return c}function oa(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return o.NEAREST;
|
|
|
|
-default:return o.LINEAR}}function Z(a){switch(a){case THREE.RepeatWrapping:return o.REPEAT;case THREE.ClampToEdgeWrapping:return o.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return o.MIRRORED_REPEAT;case THREE.NearestFilter:return o.NEAREST;case THREE.NearestMipMapNearestFilter:return o.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return o.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return o.LINEAR;case THREE.LinearMipMapNearestFilter:return o.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return o.LINEAR_MIPMAP_LINEAR;
|
|
|
|
-case THREE.ByteType:return o.BYTE;case THREE.UnsignedByteType:return o.UNSIGNED_BYTE;case THREE.ShortType:return o.SHORT;case THREE.UnsignedShortType:return o.UNSIGNED_SHORT;case THREE.IntType:return o.INT;case THREE.UnsignedShortType:return o.UNSIGNED_INT;case THREE.FloatType:return o.FLOAT;case THREE.AlphaFormat:return o.ALPHA;case THREE.RGBFormat:return o.RGB;case THREE.RGBAFormat:return o.RGBA;case THREE.LuminanceFormat:return o.LUMINANCE;case THREE.LuminanceAlphaFormat:return o.LUMINANCE_ALPHA}return 0}
|
|
|
|
-var U=this,o,P=[],ra=null,G=null,W=-1,$=null,la=0,ja=null,sa=null,T=null,ea=null,ga=null,na=null,ia=null,I=null,Q=0,ha=0,ka=0,ua=0,va=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ca=new THREE.Matrix4,Ga=new Float32Array(16),ya=new Float32Array(16),Aa=new THREE.Vector4,Ja={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},X=a.canvas!==void 0?a.canvas:document.createElement("canvas"),
|
|
|
|
-ca=a.stencil!==void 0?a.stencil:!0,V=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,aa=a.antialias!==void 0?a.antialias:!1,fa=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),ma=a.clearAlpha!==void 0?a.clearAlpha:0,wa=a.maxLights!==void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=X;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=
|
|
|
|
-this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var pa,qa=[],a=THREE.ShaderLib.depthRGBA,ta=THREE.UniformsUtils.clone(a.uniforms),Da=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,
|
|
|
|
-vertexShader:a.vertexShader,uniforms:ta}),Ha=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:ta,morphTargets:!0});Da._shadowPass=!0;Ha._shadowPass=!0;try{if(!(o=X.getContext("experimental-webgl",{antialias:aa,stencil:ca,preserveDrawingBuffer:V})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+o.getParameter(o.VERSION)+" | "+o.getParameter(o.VENDOR)+" | "+o.getParameter(o.RENDERER)+" | "+o.getParameter(o.SHADING_LANGUAGE_VERSION))}catch(za){console.error(za)}o.clearColor(0,
|
|
|
|
-0,0,1);o.clearDepth(1);o.clearStencil(0);o.enable(o.DEPTH_TEST);o.depthFunc(o.LEQUAL);o.frontFace(o.CCW);o.cullFace(o.BACK);o.enable(o.CULL_FACE);o.enable(o.BLEND);o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA);o.clearColor(fa.r,fa.g,fa.b,ma);this.context=o;var Ea=o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,S={};S.vertices=new Float32Array(16);S.faces=new Uint16Array(6);ca=0;S.vertices[ca++]=-1;S.vertices[ca++]=-1;S.vertices[ca++]=0;S.vertices[ca++]=1;S.vertices[ca++]=
|
|
|
|
-1;S.vertices[ca++]=-1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=0;S.vertices[ca++]=-1;S.vertices[ca++]=1;S.vertices[ca++]=0;ca=S.vertices[ca++]=0;S.faces[ca++]=0;S.faces[ca++]=1;S.faces[ca++]=2;S.faces[ca++]=0;S.faces[ca++]=2;S.faces[ca++]=3;S.vertexBuffer=o.createBuffer();S.elementBuffer=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,S.vertexBuffer);o.bufferData(o.ARRAY_BUFFER,S.vertices,o.STATIC_DRAW);o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,
|
|
|
|
-S.elementBuffer);o.bufferData(o.ELEMENT_ARRAY_BUFFER,S.faces,o.STATIC_DRAW);S.program=o.createProgram();o.attachShader(S.program,Y("fragment",THREE.ShaderLib.sprite.fragmentShader));o.attachShader(S.program,Y("vertex",THREE.ShaderLib.sprite.vertexShader));o.linkProgram(S.program);S.attributes={};S.uniforms={};S.attributes.position=o.getAttribLocation(S.program,"position");S.attributes.uv=o.getAttribLocation(S.program,"uv");S.uniforms.uvOffset=o.getUniformLocation(S.program,"uvOffset");S.uniforms.uvScale=
|
|
|
|
-o.getUniformLocation(S.program,"uvScale");S.uniforms.rotation=o.getUniformLocation(S.program,"rotation");S.uniforms.scale=o.getUniformLocation(S.program,"scale");S.uniforms.alignment=o.getUniformLocation(S.program,"alignment");S.uniforms.color=o.getUniformLocation(S.program,"color");S.uniforms.map=o.getUniformLocation(S.program,"map");S.uniforms.opacity=o.getUniformLocation(S.program,"opacity");S.uniforms.useScreenCoordinates=o.getUniformLocation(S.program,"useScreenCoordinates");S.uniforms.affectedByDistance=
|
|
|
|
-o.getUniformLocation(S.program,"affectedByDistance");S.uniforms.screenPosition=o.getUniformLocation(S.program,"screenPosition");S.uniforms.modelViewMatrix=o.getUniformLocation(S.program,"modelViewMatrix");S.uniforms.projectionMatrix=o.getUniformLocation(S.program,"projectionMatrix");var Sa=!1;this.setSize=function(a,b){X.width=a;X.height=b;this.setViewport(0,0,X.width,X.height)};this.setViewport=function(a,b,c,e){Q=a;ha=b;ka=c;ua=e;o.viewport(Q,ha,ka,ua)};this.setScissor=function(a,b,c,e){o.scissor(a,
|
|
|
|
-b,c,e)};this.enableScissorTest=function(a){a?o.enable(o.SCISSOR_TEST):o.disable(o.SCISSOR_TEST)};this.setClearColorHex=function(a,b){fa.setHex(a);ma=b;o.clearColor(fa.r,fa.g,fa.b,ma)};this.setClearColor=function(a,b){fa.copy(a);ma=b;o.clearColor(fa.r,fa.g,fa.b,ma)};this.getClearColor=function(){return fa};this.getClearAlpha=function(){return ma};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=o.COLOR_BUFFER_BIT;if(b===void 0||b)e|=o.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=o.STENCIL_BUFFER_BIT;
|
|
|
|
-o.clear(e)};this.getContext=function(){return o};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._objectMatrixArray,a instanceof THREE.Mesh)for(g in a.geometry.geometryGroups){var b=a.geometry.geometryGroups[g];o.deleteBuffer(b.__webglVertexBuffer);o.deleteBuffer(b.__webglNormalBuffer);o.deleteBuffer(b.__webglTangentBuffer);o.deleteBuffer(b.__webglColorBuffer);o.deleteBuffer(b.__webglUVBuffer);
|
|
|
|
-o.deleteBuffer(b.__webglUV2Buffer);o.deleteBuffer(b.__webglSkinVertexABuffer);o.deleteBuffer(b.__webglSkinVertexBBuffer);o.deleteBuffer(b.__webglSkinIndicesBuffer);o.deleteBuffer(b.__webglSkinWeightsBuffer);o.deleteBuffer(b.__webglFaceBuffer);o.deleteBuffer(b.__webglLineBuffer);if(b.numMorphTargets)for(var c=0,e=b.numMorphTargets;c<e;c++)o.deleteBuffer(b.__webglMorphTargetsBuffers[c]);U.info.memory.geometries--}else if(a instanceof THREE.Ribbon)a=a.geometry,o.deleteBuffer(a.__webglVertexBuffer),o.deleteBuffer(a.__webglColorBuffer),
|
|
|
|
-U.info.memory.geometries--;else if(a instanceof THREE.Line)a=a.geometry,o.deleteBuffer(a.__webglVertexBuffer),o.deleteBuffer(a.__webglColorBuffer),U.info.memory.geometries--;else if(a instanceof THREE.ParticleSystem)a=a.geometry,o.deleteBuffer(a.__webglVertexBuffer),o.deleteBuffer(a.__webglColorBuffer),U.info.memory.geometries--};this.deallocateTexture=function(a){if(a.__webglInit)a.__webglInit=!1,o.deleteTexture(a.__webglTexture),U.info.memory.textures--};this.initMaterial=function(a,b,c,e){var f,
|
|
|
|
-h,l,k;a instanceof THREE.MeshDepthMaterial?k="depth":a instanceof THREE.MeshNormalMaterial?k="normal":a instanceof THREE.MeshBasicMaterial?k="basic":a instanceof THREE.MeshLambertMaterial?k="lambert":a instanceof THREE.MeshPhongMaterial?k="phong":a instanceof THREE.LineBasicMaterial?k="basic":a instanceof THREE.ParticleBasicMaterial&&(k="particle_basic");if(k){var n=THREE.ShaderLib[k];a.uniforms=THREE.UniformsUtils.clone(n.uniforms);a.vertexShader=n.vertexShader;a.fragmentShader=n.fragmentShader}var t,
|
|
|
|
-w,p;t=p=n=0;for(w=b.length;t<w;t++)l=b[t],l instanceof THREE.SpotLight&&p++,l instanceof THREE.DirectionalLight&&p++,l instanceof THREE.PointLight&&n++;n+p<=wa?t=p:(t=Math.ceil(wa*p/(n+p)),n=wa-t);l={directional:t,point:n};n=p=0;for(t=b.length;n<t;n++)w=b[n],w instanceof THREE.SpotLight&&w.castShadow&&p++;var v=50;if(e!==void 0&&e instanceof THREE.SkinnedMesh)v=e.bones.length;var u;a:{t=a.fragmentShader;w=a.vertexShader;var n=a.uniforms,b=a.attributes,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,
|
|
|
|
-vertexColors:a.vertexColors,fog:c,useFog:a.fog,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,morphTargets:a.morphTargets,maxMorphTargets:this.maxMorphTargets,maxDirLights:l.directional,maxPointLights:l.point,maxBones:v,shadowMapEnabled:this.shadowMapEnabled&&e.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapWidth:this.shadowMapWidth,shadowMapHeight:this.shadowMapHeight,maxShadows:p,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel},x,e=[];k?e.push(k):(e.push(t),e.push(w));for(x in c)e.push(x),
|
|
|
|
-e.push(c[x]);k=e.join();x=0;for(e=P.length;x<e;x++)if(P[x].code===k){u=P[x].program;break a}x=o.createProgram();e=[Ea?"#define VERTEX_TEXTURES":"",U.gammaInput?"#define GAMMA_INPUT":"",U.gammaOutput?"#define GAMMA_OUTPUT":"",U.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",
|
|
|
|
-c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
|
|
|
|
|
|
+b){return b[0]-a[0]});for(e=0;e<k;e++)h=l[v[e][1]].position,f=e*3,t[f]=h.x,t[f+1]=h.y,t[f+2]=h.z;for(e=0;e<p;e++)f=e*3,color=n[v[e][1]],w[f]=color.r,w[f+1]=color.g,w[f+2]=color.b;if(X){n=0;for(p=X.length;n<p;n++)if(k=X[n],k.boundTo===void 0||k.boundTo==="vertices")if(f=0,h=k.value.length,k.size===1)for(e=0;e<h;e++)index=v[e][1],k.array[e]=k.value[index];else if(k.size===2)for(e=0;e<h;e++)index=v[e][1],l=k.value[index],k.array[f]=l.x,k.array[f+1]=l.y,f+=2;else if(k.size===3)if(k.type==="c")for(e=0;e<
|
|
|
|
+h;e++)index=v[e][1],l=k.value[index],k.array[f]=l.r,k.array[f+1]=l.g,k.array[f+2]=l.b,f+=3;else for(e=0;e<h;e++)index=v[e][1],l=k.value[index],k.array[f]=l.x,k.array[f+1]=l.y,k.array[f+2]=l.z,f+=3;else if(k.size===4)for(e=0;e<h;e++)index=v[e][1],l=k.value[index],k.array[f]=l.x,k.array[f+1]=l.y,k.array[f+2]=l.z,k.array[f+3]=l.w,f+=4}}else{if(u)for(e=0;e<k;e++)h=l[e].position,f=e*3,t[f]=h.x,t[f+1]=h.y,t[f+2]=h.z;if(x)for(e=0;e<p;e++)color=n[e],f=e*3,w[f]=color.r,w[f+1]=color.g,w[f+2]=color.b;if(X){n=
|
|
|
|
+0;for(p=X.length;n<p;n++)if(k=X[n],k.needsUpdate&&(k.boundTo===void 0||k.boundTo==="vertices"))if(h=k.value.length,f=0,k.size===1)for(e=0;e<h;e++)k.array[e]=k.value[e];else if(k.size===2)for(e=0;e<h;e++)l=k.value[e],k.array[f]=l.x,k.array[f+1]=l.y,f+=2;else if(k.size===3)if(k.type==="c")for(e=0;e<h;e++)l=k.value[e],k.array[f]=l.r,k.array[f+1]=l.g,k.array[f+2]=l.b,f+=3;else for(e=0;e<h;e++)l=k.value[e],k.array[f]=l.x,k.array[f+1]=l.y,k.array[f+2]=l.z,f+=3;else if(k.size===4)for(e=0;e<h;e++)l=k.value[e],
|
|
|
|
+k.array[f]=l.x,k.array[f+1]=l.y,k.array[f+2]=l.z,k.array[f+3]=l.w,f+=4}}if(u||c.sortParticles)o.bindBuffer(o.ARRAY_BUFFER,a.__webglVertexBuffer),o.bufferData(o.ARRAY_BUFFER,t,b);if(x||c.sortParticles)o.bindBuffer(o.ARRAY_BUFFER,a.__webglColorBuffer),o.bufferData(o.ARRAY_BUFFER,w,b);if(X){n=0;for(p=X.length;n<p;n++)if(k=X[n],k.needsUpdate||c.sortParticles)o.bindBuffer(o.ARRAY_BUFFER,k.buffer),o.bufferData(o.ARRAY_BUFFER,k.array,b)}}function l(a,b,c,e,f){e.program||U.initMaterial(e,b,c,f);if(e.morphTargets&&
|
|
|
|
+!f.__webglMorphTargetInfluences){f.__webglMorphTargetInfluences=new Float32Array(U.maxMorphTargets);for(var h=0,l=U.maxMorphTargets;h<l;h++)f.__webglMorphTargetInfluences[h]=0}var k=!1,h=e.program,l=h.uniforms,n=e.uniforms;h!==ra&&(o.useProgram(h),ra=h,k=!0);if(e.id!==W)W=e.id,k=!0;if(k){o.uniformMatrix4fv(l.projectionMatrix,!1,Ga);if(c&&e.fog)if(n.fogColor.value=c.color,c instanceof THREE.Fog)n.fogNear.value=c.near,n.fogFar.value=c.far;else if(c instanceof THREE.FogExp2)n.fogDensity.value=c.density;
|
|
|
|
+if(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e.lights){for(var p,t,w=0,v=0,u=0,x,z,B,V=Ja,ca=V.directional.colors,C=V.directional.positions,y=V.point.colors,E=V.point.positions,H=V.point.distances,aa=0,I=0,c=p=B=0,k=b.length;c<k;c++)if(p=b[c],t=p.color,x=p.position,z=p.intensity,B=p.distance,p instanceof THREE.AmbientLight)U.gammaInput?(w+=t.r*t.r,v+=t.g*t.g,u+=t.b*t.b):(w+=t.r,v+=t.g,u+=t.b);else if(p instanceof THREE.DirectionalLight)B=aa*3,U.gammaInput?(ca[B]=
|
|
|
|
+t.r*t.r*z*z,ca[B+1]=t.g*t.g*z*z,ca[B+2]=t.b*t.b*z*z):(ca[B]=t.r*z,ca[B+1]=t.g*z,ca[B+2]=t.b*z),C[B]=x.x,C[B+1]=x.y,C[B+2]=x.z,aa+=1;else if(p instanceof THREE.SpotLight)B=aa*3,U.gammaInput?(ca[B]=t.r*t.r*z*z,ca[B+1]=t.g*t.g*z*z,ca[B+2]=t.b*t.b*z*z):(ca[B]=t.r*z,ca[B+1]=t.g*z,ca[B+2]=t.b*z),t=1/x.length(),C[B]=x.x*t,C[B+1]=x.y*t,C[B+2]=x.z*t,aa+=1;else if(p instanceof THREE.PointLight)p=I*3,U.gammaInput?(y[p]=t.r*t.r*z*z,y[p+1]=t.g*t.g*z*z,y[p+2]=t.b*t.b*z*z):(y[p]=t.r*z,y[p+1]=t.g*z,y[p+2]=t.b*z),
|
|
|
|
+E[p]=x.x,E[p+1]=x.y,E[p+2]=x.z,H[I]=B,I+=1;c=aa*3;for(k=ca.length;c<k;c++)ca[c]=0;c=I*3;for(k=y.length;c<k;c++)y[c]=0;V.point.length=I;V.directional.length=aa;V.ambient[0]=w;V.ambient[1]=v;V.ambient[2]=u;b=Ja;n.enableLighting.value=b.directional.length+b.point.length;n.ambientLightColor.value=b.ambient;n.directionalLightColor.value=b.directional.colors;n.directionalLightDirection.value=b.directional.positions;n.pointLightColor.value=b.point.colors;n.pointLightPosition.value=b.point.positions;n.pointLightDistance.value=
|
|
|
|
+b.point.distances}if(e instanceof THREE.MeshBasicMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.MeshPhongMaterial)n.opacity.value=e.opacity,U.gammaInput?n.diffuse.value.copyGammaToLinear(e.color):n.diffuse.value=e.color,(n.map.texture=e.map)&&n.offsetRepeat.value.set(e.map.offset.x,e.map.offset.y,e.map.repeat.x,e.map.repeat.y),n.lightMap.texture=e.lightMap,n.envMap.texture=e.envMap,n.flipEnvMap.value=e.envMap instanceof THREE.WebGLRenderTargetCube?1:-1,n.reflectivity.value=e.reflectivity,
|
|
|
|
+n.refractionRatio.value=e.refractionRatio,n.combine.value=e.combine,n.useRefract.value=e.envMap&&e.envMap.mapping instanceof THREE.CubeRefractionMapping;if(e instanceof THREE.LineBasicMaterial)n.diffuse.value=e.color,n.opacity.value=e.opacity;else if(e instanceof THREE.ParticleBasicMaterial)n.psColor.value=e.color,n.opacity.value=e.opacity,n.size.value=e.size,n.scale.value=X.height/2,n.map.texture=e.map;else if(e instanceof THREE.MeshPhongMaterial)n.shininess.value=e.shininess,U.gammaInput?(n.ambient.value.copyGammaToLinear(e.ambient),
|
|
|
|
+n.specular.value.copyGammaToLinear(e.specular)):(n.ambient.value=e.ambient,n.specular.value=e.specular);else if(e instanceof THREE.MeshLambertMaterial)U.gammaInput?n.ambient.value.copyGammaToLinear(e.ambient):n.ambient.value=e.ambient;else if(e instanceof THREE.MeshDepthMaterial)n.mNear.value=a.near,n.mFar.value=a.far,n.opacity.value=e.opacity;else if(e instanceof THREE.MeshNormalMaterial)n.opacity.value=e.opacity;if(f.receiveShadow&&!e._shadowPass&&n.shadowMatrix){for(b=0;b<qa.length;b++)n.shadowMatrix.value[b]=
|
|
|
|
+qa[b],n.shadowMap.texture[b]=U.shadowMap[b];n.shadowDarkness.value=U.shadowMapDarkness;n.shadowBias.value=U.shadowMapBias}b=e.uniformsList;n=0;for(c=b.length;n<c;n++)if(v=h.uniforms[b[n][1]])if(w=b[n][0],u=w.type,k=w.value,u==="i")o.uniform1i(v,k);else if(u==="f")o.uniform1f(v,k);else if(u==="v2")o.uniform2f(v,k.x,k.y);else if(u==="v3")o.uniform3f(v,k.x,k.y,k.z);else if(u==="v4")o.uniform4f(v,k.x,k.y,k.z,k.w);else if(u==="c")o.uniform3f(v,k.r,k.g,k.b);else if(u==="fv1")o.uniform1fv(v,k);else if(u===
|
|
|
|
+"fv")o.uniform3fv(v,k);else if(u==="v3v"){if(!w._array)w._array=new Float32Array(3*k.length);u=0;for(x=k.length;u<x;u++)V=u*3,w._array[V]=k[u].x,w._array[V+1]=k[u].y,w._array[V+2]=k[u].z;o.uniform3fv(v,w._array)}else if(u==="m4"){if(!w._array)w._array=new Float32Array(16);k.flattenToArray(w._array);o.uniformMatrix4fv(v,!1,w._array)}else if(u==="m4v"){if(!w._array)w._array=new Float32Array(16*k.length);u=0;for(x=k.length;u<x;u++)k[u].flattenToArrayOffset(w._array,u*16);o.uniformMatrix4fv(v,!1,w._array)}else if(u===
|
|
|
|
+"t"){if(o.uniform1i(v,k),v=w.texture)if(v.image instanceof Array&&v.image.length===6){if(w=v,w.image.length===6)if(w.needsUpdate){if(!w.image.__webglTextureCube)w.image.__webglTextureCube=o.createTexture();o.activeTexture(o.TEXTURE0+k);o.bindTexture(o.TEXTURE_CUBE_MAP,w.image.__webglTextureCube);for(k=0;k<6;k++)o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+k,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,w.image[k]);O(o.TEXTURE_CUBE_MAP,w,w.image[0]);w.needsUpdate=!1}else o.activeTexture(o.TEXTURE0+k),o.bindTexture(o.TEXTURE_CUBE_MAP,
|
|
|
|
+w.image.__webglTextureCube)}else v instanceof THREE.WebGLRenderTargetCube?(w=v,o.activeTexture(o.TEXTURE0+k),o.bindTexture(o.TEXTURE_CUBE_MAP,w.__webglTexture)):J(v,k)}else if(u==="tv"){if(!w._array){w._array=[];u=0;for(x=w.texture.length;u<x;u++)w._array[u]=k+u}o.uniform1iv(v,w._array);u=0;for(x=w.texture.length;u<x;u++)(v=w.texture[u])&&J(v,w._array[u])}(e instanceof THREE.ShaderMaterial||e instanceof THREE.MeshPhongMaterial||e.envMap)&&l.cameraPosition!==null&&o.uniform3f(l.cameraPosition,a.position.x,
|
|
|
|
+a.position.y,a.position.z);(e instanceof THREE.MeshPhongMaterial||e instanceof THREE.MeshLambertMaterial||e instanceof THREE.ShaderMaterial||e.skinning)&&l.viewMatrix!==null&&o.uniformMatrix4fv(l.viewMatrix,!1,ya);e.skinning&&(o.uniformMatrix4fv(l.cameraInverseMatrix,!1,ya),o.uniformMatrix4fv(l.boneGlobalMatrices,!1,f.boneMatrices))}o.uniformMatrix4fv(l.modelViewMatrix,!1,f._modelViewMatrixArray);l.normalMatrix&&o.uniformMatrix3fv(l.normalMatrix,!1,f._normalMatrixArray);(e instanceof THREE.ShaderMaterial||
|
|
|
|
+e.envMap||e.skinning||f.receiveShadow)&&l.objectMatrix!==null&&o.uniformMatrix4fv(l.objectMatrix,!1,f._objectMatrixArray);return h}function h(a,b,c,e,f,h){if(e.opacity!==0){var k,n,c=l(a,b,c,e,h),a=c.attributes,b=!1,c=f.id*16777215+c.id*2+(e.wireframe?1:0);c!==$&&($=c,b=!0);if(!e.morphTargets&&a.position>=0)b&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglVertexBuffer),o.vertexAttribPointer(a.position,3,o.FLOAT,!1,0,0));else if(h.morphTargetBase){c=e.program.attributes;h.morphTargetBase!==-1?(o.bindBuffer(o.ARRAY_BUFFER,
|
|
|
|
+f.__webglMorphTargetsBuffers[h.morphTargetBase]),o.vertexAttribPointer(c.position,3,o.FLOAT,!1,0,0)):c.position>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglVertexBuffer),o.vertexAttribPointer(c.position,3,o.FLOAT,!1,0,0));if(h.morphTargetForcedOrder.length){k=0;var p=h.morphTargetForcedOrder;for(n=h.morphTargetInfluences;k<e.numSupportedMorphTargets&&k<p.length;)o.bindBuffer(o.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[p[k]]),o.vertexAttribPointer(c["morphTarget"+k],3,o.FLOAT,!1,0,0),h.__webglMorphTargetInfluences[k]=
|
|
|
|
+n[p[k]],k++}else{var p=[],t=-1,w=0;n=h.morphTargetInfluences;var v,u=n.length;k=0;for(h.morphTargetBase!==-1&&(p[h.morphTargetBase]=!0);k<e.numSupportedMorphTargets;){for(v=0;v<u;v++)!p[v]&&n[v]>t&&(w=v,t=n[w]);o.bindBuffer(o.ARRAY_BUFFER,f.__webglMorphTargetsBuffers[w]);o.vertexAttribPointer(c["morphTarget"+k],3,o.FLOAT,!1,0,0);h.__webglMorphTargetInfluences[k]=t;p[w]=1;t=-1;k++}}e.program.uniforms.morphTargetInfluences!==null&&o.uniform1fv(e.program.uniforms.morphTargetInfluences,h.__webglMorphTargetInfluences)}if(b){if(f.__webglCustomAttributesList){k=
|
|
|
|
+0;for(n=f.__webglCustomAttributesList.length;k<n;k++)c=f.__webglCustomAttributesList[k],a[c.buffer.belongsToAttribute]>=0&&(o.bindBuffer(o.ARRAY_BUFFER,c.buffer),o.vertexAttribPointer(a[c.buffer.belongsToAttribute],c.size,o.FLOAT,!1,0,0))}a.color>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglColorBuffer),o.vertexAttribPointer(a.color,3,o.FLOAT,!1,0,0));a.normal>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglNormalBuffer),o.vertexAttribPointer(a.normal,3,o.FLOAT,!1,0,0));a.tangent>=0&&(o.bindBuffer(o.ARRAY_BUFFER,
|
|
|
|
+f.__webglTangentBuffer),o.vertexAttribPointer(a.tangent,4,o.FLOAT,!1,0,0));a.uv>=0&&(f.__webglUVBuffer?(o.bindBuffer(o.ARRAY_BUFFER,f.__webglUVBuffer),o.vertexAttribPointer(a.uv,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv)):o.disableVertexAttribArray(a.uv));a.uv2>=0&&(f.__webglUV2Buffer?(o.bindBuffer(o.ARRAY_BUFFER,f.__webglUV2Buffer),o.vertexAttribPointer(a.uv2,2,o.FLOAT,!1,0,0),o.enableVertexAttribArray(a.uv2)):o.disableVertexAttribArray(a.uv2));e.skinning&&a.skinVertexA>=0&&a.skinVertexB>=
|
|
|
|
+0&&a.skinIndex>=0&&a.skinWeight>=0&&(o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinVertexABuffer),o.vertexAttribPointer(a.skinVertexA,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinVertexBBuffer),o.vertexAttribPointer(a.skinVertexB,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinIndicesBuffer),o.vertexAttribPointer(a.skinIndex,4,o.FLOAT,!1,0,0),o.bindBuffer(o.ARRAY_BUFFER,f.__webglSkinWeightsBuffer),o.vertexAttribPointer(a.skinWeight,4,o.FLOAT,!1,0,0))}h instanceof THREE.Mesh?(e.wireframe?
|
|
|
|
+(o.lineWidth(e.wireframeLinewidth),b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,f.__webglLineBuffer),o.drawElements(o.LINES,f.__webglLineCount,o.UNSIGNED_SHORT,0)):(b&&o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,f.__webglFaceBuffer),o.drawElements(o.TRIANGLES,f.__webglFaceCount,o.UNSIGNED_SHORT,0)),U.info.render.calls++,U.info.render.vertices+=f.__webglFaceCount,U.info.render.faces+=f.__webglFaceCount/3):h instanceof THREE.Line?(h=h.type===THREE.LineStrip?o.LINE_STRIP:o.LINES,o.lineWidth(e.linewidth),o.drawArrays(h,
|
|
|
|
+0,f.__webglLineCount),U.info.render.calls++):h instanceof THREE.ParticleSystem?(o.drawArrays(o.POINTS,0,f.__webglParticleCount),U.info.render.calls++):h instanceof THREE.Ribbon&&(o.drawArrays(o.TRIANGLE_STRIP,0,f.__webglVertexCount),U.info.render.calls++)}}function f(a,b,c){if(!a.__webglVertexBuffer)a.__webglVertexBuffer=o.createBuffer();if(!a.__webglNormalBuffer)a.__webglNormalBuffer=o.createBuffer();a.hasPos&&(o.bindBuffer(o.ARRAY_BUFFER,a.__webglVertexBuffer),o.bufferData(o.ARRAY_BUFFER,a.positionArray,
|
|
|
|
+o.DYNAMIC_DRAW),o.enableVertexAttribArray(b.attributes.position),o.vertexAttribPointer(b.attributes.position,3,o.FLOAT,!1,0,0));if(a.hasNormal){o.bindBuffer(o.ARRAY_BUFFER,a.__webglNormalBuffer);if(c===THREE.FlatShading){var e,f,h,l,k,n,p,t,w,v,u=a.count*3;for(v=0;v<u;v+=9)c=a.normalArray,e=c[v],f=c[v+1],h=c[v+2],l=c[v+3],n=c[v+4],t=c[v+5],k=c[v+6],p=c[v+7],w=c[v+8],e=(e+l+k)/3,f=(f+n+p)/3,h=(h+t+w)/3,c[v]=e,c[v+1]=f,c[v+2]=h,c[v+3]=e,c[v+4]=f,c[v+5]=h,c[v+6]=e,c[v+7]=f,c[v+8]=h}o.bufferData(o.ARRAY_BUFFER,
|
|
|
|
+a.normalArray,o.DYNAMIC_DRAW);o.enableVertexAttribArray(b.attributes.normal);o.vertexAttribPointer(b.attributes.normal,3,o.FLOAT,!1,0,0)}o.drawArrays(o.TRIANGLES,0,a.count);a.count=0}function k(a){if(ja!==a.doubleSided)a.doubleSided?o.disable(o.CULL_FACE):o.enable(o.CULL_FACE),ja=a.doubleSided;if(sa!==a.flipSided)a.flipSided?o.frontFace(o.CW):o.frontFace(o.CCW),sa=a.flipSided}function n(a){ea!==a&&(a?o.enable(o.DEPTH_TEST):o.disable(o.DEPTH_TEST),ea=a)}function t(a){ga!==a&&(o.depthMask(a),ga=a)}
|
|
|
|
+function v(a,b,c){na!==a&&(a?o.enable(o.POLYGON_OFFSET_FILL):o.disable(o.POLYGON_OFFSET_FILL),na=a);if(a&&(ia!==b||I!==c))o.polygonOffset(b,c),ia=b,I=c}function p(a){va[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);va[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);va[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);va[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);va[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);va[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+
|
|
|
|
+a.n33,a.n44+a.n34);for(var b,a=0;a<6;a++)b=va[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}function x(a){for(var b=a.matrixWorld,c=-a.geometry.boundingSphere.radius*Math.max(a.scale.x,Math.max(a.scale.y,a.scale.z)),e=0;e<6;e++)if(a=va[e].x*b.n14+va[e].y*b.n24+va[e].z*b.n34+va[e].w,a<=c)return!1;return!0}function w(a){var b=a.object.material;b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function z(a){var b=a.object,c=a.buffer,e;e=b.material;if(e instanceof THREE.MeshFaceMaterial){if(c=
|
|
|
|
+c.materialIndex,c>=0)b=b.geometry.materials[c],b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}else if(b=e)b.transparent?(a.transparent=b,a.opaque=null):(a.opaque=b,a.transparent=null)}function u(a,b){return b.z-a.z}function B(a){var b,c,e,t=0,w,v,u,X,z=a.lights;pa||(pa=new THREE.PerspectiveCamera(U.shadowCameraFov,U.shadowMapWidth/U.shadowMapHeight,U.shadowCameraNear,U.shadowCameraFar));b=0;for(c=z.length;b<c;b++)if(e=z[b],e instanceof THREE.SpotLight&&e.castShadow){W=
|
|
|
|
+-1;U.shadowMap[t]||(U.shadowMap[t]=new THREE.WebGLRenderTarget(U.shadowMapWidth,U.shadowMapHeight,{minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBAFormat}));qa[t]||(qa[t]=new THREE.Matrix4);w=U.shadowMap[t];v=qa[t];pa.position.copy(e.position);pa.lookAt(e.target.position);pa.parent==null&&(console.warn("Camera is not on the Scene. Adding it..."),a.add(pa));this.autoUpdateScene&&a.updateMatrixWorld();pa.matrixWorldInverse.getInverse(pa.matrixWorld);v.set(0.5,0,0,0.5,0,0.5,
|
|
|
|
+0,0.5,0,0,0.5,0.5,0,0,0,1);v.multiplySelf(pa.projectionMatrix);v.multiplySelf(pa.matrixWorldInverse);pa.matrixWorldInverse.flattenToArray(ya);pa.projectionMatrix.flattenToArray(Ga);Ca.multiply(pa.projectionMatrix,pa.matrixWorldInverse);p(Ca);K(w);o.clearColor(1,1,1,1);U.clear();o.clearColor(fa.r,fa.g,fa.b,ma);v=a.__webglObjects.length;e=a.__webglObjectsImmediate.length;for(w=0;w<v;w++)u=a.__webglObjects[w],X=u.object,X.visible&&X.castShadow?!(X instanceof THREE.Mesh)||!X.frustumCulled||x(X)?(X.matrixWorld.flattenToArray(X._objectMatrixArray),
|
|
|
|
+E(X,pa,!1),u.render=!0):u.render=!1:u.render=!1;n(!0);D(THREE.NormalBlending);for(w=0;w<v;w++)if(u=a.__webglObjects[w],u.render)X=u.object,buffer=u.buffer,k(X),u=X.customDepthMaterial?X.customDepthMaterial:X.geometry.morphTargets.length?Ha:Da,h(pa,z,null,u,buffer,X);for(w=0;w<e;w++)u=a.__webglObjectsImmediate[w],X=u.object,X.visible&&X.castShadow&&(X.matrixAutoUpdate&&X.matrixWorld.flattenToArray(X._objectMatrixArray),$=-1,E(X,pa,!1),k(X),program=l(pa,z,null,Da,X),X.immediateRenderCallback?X.immediateRenderCallback(program,
|
|
|
|
+o,va):X.render(function(a){f(a,program,Da.shading)}));t++}}function y(a,b){var c,e,f;c=S.attributes;var h=S.uniforms,l=ua/ka,k,n=[],t=ka*0.5,w=ua*0.5,p=!0;o.useProgram(S.program);ra=S.program;$=ea=T=-1;Ra||(o.enableVertexAttribArray(S.attributes.position),o.enableVertexAttribArray(S.attributes.uv),Ra=!0);o.disable(o.CULL_FACE);o.enable(o.BLEND);o.depthMask(!0);o.bindBuffer(o.ARRAY_BUFFER,S.vertexBuffer);o.vertexAttribPointer(c.position,2,o.FLOAT,!1,16,0);o.vertexAttribPointer(c.uv,2,o.FLOAT,!1,16,
|
|
|
|
+8);o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,S.elementBuffer);o.uniformMatrix4fv(h.projectionMatrix,!1,Ga);o.activeTexture(o.TEXTURE0);o.uniform1i(h.map,0);c=0;for(e=a.__webglSprites.length;c<e;c++)if(f=a.__webglSprites[c],f.visible&&f.opacity!==0)f.useScreenCoordinates?f.z=-f.position.z:(f._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,f.matrixWorld,f._modelViewMatrixArray),f.z=-f._modelViewMatrix.n34);a.__webglSprites.sort(u);c=0;for(e=a.__webglSprites.length;c<e;c++)f=a.__webglSprites[c],f.visible&&
|
|
|
|
+f.opacity!==0&&f.map&&f.map.image&&f.map.image.width&&(f.useScreenCoordinates?(o.uniform1i(h.useScreenCoordinates,1),o.uniform3f(h.screenPosition,(f.position.x-t)/t,(w-f.position.y)/w,Math.max(0,Math.min(1,f.position.z)))):(o.uniform1i(h.useScreenCoordinates,0),o.uniform1i(h.affectedByDistance,f.affectedByDistance?1:0),o.uniformMatrix4fv(h.modelViewMatrix,!1,f._modelViewMatrixArray)),k=f.map.image.width/(f.scaleByViewport?ua:1),n[0]=k*l*f.scale.x,n[1]=k*f.scale.y,o.uniform2f(h.uvScale,f.uvScale.x,
|
|
|
|
+f.uvScale.y),o.uniform2f(h.uvOffset,f.uvOffset.x,f.uvOffset.y),o.uniform2f(h.alignment,f.alignment.x,f.alignment.y),o.uniform1f(h.opacity,f.opacity),o.uniform3f(h.color,f.color.r,f.color.g,f.color.b),o.uniform1f(h.rotation,f.rotation),o.uniform2fv(h.scale,n),f.mergeWith3D&&!p?(o.enable(o.DEPTH_TEST),p=!0):!f.mergeWith3D&&p&&(o.disable(o.DEPTH_TEST),p=!1),D(f.blending),J(f.map,0),o.drawElements(o.TRIANGLES,6,o.UNSIGNED_SHORT,0));o.enable(o.CULL_FACE);o.enable(o.DEPTH_TEST);o.depthMask(ga)}function E(a,
|
|
|
|
+b,c){a._modelViewMatrix.multiplyToArray(b.matrixWorldInverse,a.matrixWorld,a._modelViewMatrixArray);c&&THREE.Matrix4.makeInvert3x3(a._modelViewMatrix).transposeIntoArray(a._normalMatrixArray)}function C(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function H(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function L(a,b){for(var c=a.length-1;c>=0;c--)a[c].object===b&&a.splice(c,1)}function R(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}
|
|
|
|
+function D(a){if(a!==T){switch(a){case THREE.AdditiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.SRC_ALPHA,o.ONE);break;case THREE.SubtractiveBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,o.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:o.blendEquation(o.FUNC_ADD);o.blendFunc(o.ZERO,o.SRC_COLOR);break;default:o.blendEquationSeparate(o.FUNC_ADD,o.FUNC_ADD),o.blendFuncSeparate(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA,o.ONE,o.ONE_MINUS_SRC_ALPHA)}T=a}}function O(a,b,c){(c.width&c.width-
|
|
|
|
+1)===0&&(c.height&c.height-1)===0?(o.texParameteri(a,o.TEXTURE_WRAP_S,Z(b.wrapS)),o.texParameteri(a,o.TEXTURE_WRAP_T,Z(b.wrapT)),o.texParameteri(a,o.TEXTURE_MAG_FILTER,Z(b.magFilter)),o.texParameteri(a,o.TEXTURE_MIN_FILTER,Z(b.minFilter)),o.generateMipmap(a)):(o.texParameteri(a,o.TEXTURE_WRAP_S,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_WRAP_T,o.CLAMP_TO_EDGE),o.texParameteri(a,o.TEXTURE_MAG_FILTER,oa(b.magFilter)),o.texParameteri(a,o.TEXTURE_MIN_FILTER,oa(b.minFilter)))}function J(a,b){if(a.needsUpdate){if(!a.__webglInit)a.__webglInit=
|
|
|
|
+!0,a.__webglTexture=o.createTexture(),U.info.memory.textures++;o.activeTexture(o.TEXTURE0+b);o.bindTexture(o.TEXTURE_2D,a.__webglTexture);a instanceof THREE.DataTexture?o.texImage2D(o.TEXTURE_2D,0,Z(a.format),a.image.width,a.image.height,0,Z(a.format),o.UNSIGNED_BYTE,a.image.data):o.texImage2D(o.TEXTURE_2D,0,o.RGBA,o.RGBA,o.UNSIGNED_BYTE,a.image);O(o.TEXTURE_2D,a,a.image);a.needsUpdate=!1}else o.activeTexture(o.TEXTURE0+b),o.bindTexture(o.TEXTURE_2D,a.__webglTexture)}function N(a,b){o.bindRenderbuffer(o.RENDERBUFFER,
|
|
|
|
+a);b.depthBuffer&&!b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_COMPONENT16,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_ATTACHMENT,o.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(o.renderbufferStorage(o.RENDERBUFFER,o.DEPTH_STENCIL,b.width,b.height),o.framebufferRenderbuffer(o.FRAMEBUFFER,o.DEPTH_STENCIL_ATTACHMENT,o.RENDERBUFFER,a)):o.renderbufferStorage(o.RENDERBUFFER,o.RGBA4,b.width,b.height)}function K(a){var b=a instanceof THREE.WebGLRenderTargetCube;
|
|
|
|
+if(a&&!a.__webglFramebuffer){if(a.depthBuffer===void 0)a.depthBuffer=!0;if(a.stencilBuffer===void 0)a.stencilBuffer=!0;a.__webglTexture=o.createTexture();if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture);O(o.TEXTURE_CUBE_MAP,a,a);for(var c=0;c<6;c++){a.__webglFramebuffer[c]=o.createFramebuffer();a.__webglRenderbuffer[c]=o.createRenderbuffer();o.texImage2D(o.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,Z(a.format),a.width,a.height,0,Z(a.format),Z(a.type),
|
|
|
|
+null);var e=a,f=o.TEXTURE_CUBE_MAP_POSITIVE_X+c;o.bindFramebuffer(o.FRAMEBUFFER,a.__webglFramebuffer[c]);o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,f,e.__webglTexture,0);N(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer=o.createFramebuffer(),a.__webglRenderbuffer=o.createRenderbuffer(),o.bindTexture(o.TEXTURE_2D,a.__webglTexture),O(o.TEXTURE_2D,a,a),o.texImage2D(o.TEXTURE_2D,0,Z(a.format),a.width,a.height,0,Z(a.format),Z(a.type),null),c=o.TEXTURE_2D,o.bindFramebuffer(o.FRAMEBUFFER,
|
|
|
|
+a.__webglFramebuffer),o.framebufferTexture2D(o.FRAMEBUFFER,o.COLOR_ATTACHMENT0,c,a.__webglTexture,0),o.bindRenderbuffer(o.RENDERBUFFER,a.__webglRenderbuffer),N(a.__webglRenderbuffer,a);b?o.bindTexture(o.TEXTURE_CUBE_MAP,null):o.bindTexture(o.TEXTURE_2D,null);o.bindRenderbuffer(o.RENDERBUFFER,null);o.bindFramebuffer(o.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,f=e=0):(b=null,c=ka,a=ua,e=Q,f=ha);b!==G&&(o.bindFramebuffer(o.FRAMEBUFFER,b),
|
|
|
|
+o.viewport(e,f,c,a),G=b)}function M(a){a instanceof THREE.WebGLRenderTargetCube?(o.bindTexture(o.TEXTURE_CUBE_MAP,a.__webglTexture),o.generateMipmap(o.TEXTURE_CUBE_MAP),o.bindTexture(o.TEXTURE_CUBE_MAP,null)):(o.bindTexture(o.TEXTURE_2D,a.__webglTexture),o.generateMipmap(o.TEXTURE_2D),o.bindTexture(o.TEXTURE_2D,null))}function Y(a,b){var c;a==="fragment"?c=o.createShader(o.FRAGMENT_SHADER):a==="vertex"&&(c=o.createShader(o.VERTEX_SHADER));o.shaderSource(c,b);o.compileShader(c);if(!o.getShaderParameter(c,
|
|
|
|
+o.COMPILE_STATUS))return console.error(o.getShaderInfoLog(c)),console.error(b),null;return c}function oa(a){switch(a){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return o.NEAREST;default:return o.LINEAR}}function Z(a){switch(a){case THREE.RepeatWrapping:return o.REPEAT;case THREE.ClampToEdgeWrapping:return o.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return o.MIRRORED_REPEAT;case THREE.NearestFilter:return o.NEAREST;case THREE.NearestMipMapNearestFilter:return o.NEAREST_MIPMAP_NEAREST;
|
|
|
|
+case THREE.NearestMipMapLinearFilter:return o.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return o.LINEAR;case THREE.LinearMipMapNearestFilter:return o.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return o.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return o.BYTE;case THREE.UnsignedByteType:return o.UNSIGNED_BYTE;case THREE.ShortType:return o.SHORT;case THREE.UnsignedShortType:return o.UNSIGNED_SHORT;case THREE.IntType:return o.INT;case THREE.UnsignedShortType:return o.UNSIGNED_INT;case THREE.FloatType:return o.FLOAT;
|
|
|
|
+case THREE.AlphaFormat:return o.ALPHA;case THREE.RGBFormat:return o.RGB;case THREE.RGBAFormat:return o.RGBA;case THREE.LuminanceFormat:return o.LUMINANCE;case THREE.LuminanceAlphaFormat:return o.LUMINANCE_ALPHA}return 0}var U=this,o,P=[],ra=null,G=null,W=-1,$=null,la=0,ja=null,sa=null,T=null,ea=null,ga=null,na=null,ia=null,I=null,Q=0,ha=0,ka=0,ua=0,va=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Ca=new THREE.Matrix4,Ga=new Float32Array(16),
|
|
|
|
+ya=new Float32Array(16),Aa=new THREE.Vector4,Ja={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},a=a||{},X=a.canvas!==void 0?a.canvas:document.createElement("canvas"),ca=a.stencil!==void 0?a.stencil:!0,V=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:!1,aa=a.antialias!==void 0?a.antialias:!1,fa=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),ma=a.clearAlpha!==void 0?a.clearAlpha:0,wa=a.maxLights!==
|
|
|
|
+void 0?a.maxLights:4;this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0}};this.maxMorphTargets=8;this.domElement=X;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapBias=0.0039;this.shadowMapDarkness=0.5;this.shadowMapHeight=this.shadowMapWidth=512;this.shadowCameraNear=1;this.shadowCameraFar=
|
|
|
|
+5E3;this.shadowCameraFov=50;this.shadowMap=[];this.shadowMapEnabled=!1;this.shadowMapSoft=this.shadowMapAutoUpdate=!0;var pa,qa=[],a=THREE.ShaderLib.depthRGBA,ta=THREE.UniformsUtils.clone(a.uniforms),Da=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:ta}),Ha=new THREE.ShaderMaterial({fragmentShader:a.fragmentShader,vertexShader:a.vertexShader,uniforms:ta,morphTargets:!0});Da._shadowPass=!0;Ha._shadowPass=!0;try{if(!(o=X.getContext("experimental-webgl",
|
|
|
|
+{antialias:aa,stencil:ca,preserveDrawingBuffer:V})))throw"Error creating WebGL context.";console.log(navigator.userAgent+" | "+o.getParameter(o.VERSION)+" | "+o.getParameter(o.VENDOR)+" | "+o.getParameter(o.RENDERER)+" | "+o.getParameter(o.SHADING_LANGUAGE_VERSION))}catch(za){console.error(za)}o.clearColor(0,0,0,1);o.clearDepth(1);o.clearStencil(0);o.enable(o.DEPTH_TEST);o.depthFunc(o.LEQUAL);o.frontFace(o.CCW);o.cullFace(o.BACK);o.enable(o.CULL_FACE);o.enable(o.BLEND);o.blendEquation(o.FUNC_ADD);
|
|
|
|
+o.blendFunc(o.SRC_ALPHA,o.ONE_MINUS_SRC_ALPHA);o.clearColor(fa.r,fa.g,fa.b,ma);this.context=o;var Ea=o.getParameter(o.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0,S={};S.vertices=new Float32Array(16);S.faces=new Uint16Array(6);ca=0;S.vertices[ca++]=-1;S.vertices[ca++]=-1;S.vertices[ca++]=0;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=-1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=1;S.vertices[ca++]=0;S.vertices[ca++]=-1;S.vertices[ca++]=1;S.vertices[ca++]=
|
|
|
|
+0;ca=S.vertices[ca++]=0;S.faces[ca++]=0;S.faces[ca++]=1;S.faces[ca++]=2;S.faces[ca++]=0;S.faces[ca++]=2;S.faces[ca++]=3;S.vertexBuffer=o.createBuffer();S.elementBuffer=o.createBuffer();o.bindBuffer(o.ARRAY_BUFFER,S.vertexBuffer);o.bufferData(o.ARRAY_BUFFER,S.vertices,o.STATIC_DRAW);o.bindBuffer(o.ELEMENT_ARRAY_BUFFER,S.elementBuffer);o.bufferData(o.ELEMENT_ARRAY_BUFFER,S.faces,o.STATIC_DRAW);S.program=o.createProgram();o.attachShader(S.program,Y("fragment",THREE.ShaderLib.sprite.fragmentShader));
|
|
|
|
+o.attachShader(S.program,Y("vertex",THREE.ShaderLib.sprite.vertexShader));o.linkProgram(S.program);S.attributes={};S.uniforms={};S.attributes.position=o.getAttribLocation(S.program,"position");S.attributes.uv=o.getAttribLocation(S.program,"uv");S.uniforms.uvOffset=o.getUniformLocation(S.program,"uvOffset");S.uniforms.uvScale=o.getUniformLocation(S.program,"uvScale");S.uniforms.rotation=o.getUniformLocation(S.program,"rotation");S.uniforms.scale=o.getUniformLocation(S.program,"scale");S.uniforms.alignment=
|
|
|
|
+o.getUniformLocation(S.program,"alignment");S.uniforms.color=o.getUniformLocation(S.program,"color");S.uniforms.map=o.getUniformLocation(S.program,"map");S.uniforms.opacity=o.getUniformLocation(S.program,"opacity");S.uniforms.useScreenCoordinates=o.getUniformLocation(S.program,"useScreenCoordinates");S.uniforms.affectedByDistance=o.getUniformLocation(S.program,"affectedByDistance");S.uniforms.screenPosition=o.getUniformLocation(S.program,"screenPosition");S.uniforms.modelViewMatrix=o.getUniformLocation(S.program,
|
|
|
|
+"modelViewMatrix");S.uniforms.projectionMatrix=o.getUniformLocation(S.program,"projectionMatrix");var Ra=!1;this.setSize=function(a,b){X.width=a;X.height=b;this.setViewport(0,0,X.width,X.height)};this.setViewport=function(a,b,c,e){Q=a;ha=b;ka=c;ua=e;o.viewport(Q,ha,ka,ua)};this.setScissor=function(a,b,c,e){o.scissor(a,b,c,e)};this.enableScissorTest=function(a){a?o.enable(o.SCISSOR_TEST):o.disable(o.SCISSOR_TEST)};this.setClearColorHex=function(a,b){fa.setHex(a);ma=b;o.clearColor(fa.r,fa.g,fa.b,ma)};
|
|
|
|
+this.setClearColor=function(a,b){fa.copy(a);ma=b;o.clearColor(fa.r,fa.g,fa.b,ma)};this.getClearColor=function(){return fa};this.getClearAlpha=function(){return ma};this.clear=function(a,b,c){var e=0;if(a===void 0||a)e|=o.COLOR_BUFFER_BIT;if(b===void 0||b)e|=o.DEPTH_BUFFER_BIT;if(c===void 0||c)e|=o.STENCIL_BUFFER_BIT;o.clear(e)};this.getContext=function(){return o};this.deallocateObject=function(a){if(a.__webglInit)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrixArray,delete a._modelViewMatrixArray,
|
|
|
|
+delete a._objectMatrixArray,a instanceof THREE.Mesh)for(g in a.geometry.geometryGroups){var b=a.geometry.geometryGroups[g];o.deleteBuffer(b.__webglVertexBuffer);o.deleteBuffer(b.__webglNormalBuffer);o.deleteBuffer(b.__webglTangentBuffer);o.deleteBuffer(b.__webglColorBuffer);o.deleteBuffer(b.__webglUVBuffer);o.deleteBuffer(b.__webglUV2Buffer);o.deleteBuffer(b.__webglSkinVertexABuffer);o.deleteBuffer(b.__webglSkinVertexBBuffer);o.deleteBuffer(b.__webglSkinIndicesBuffer);o.deleteBuffer(b.__webglSkinWeightsBuffer);
|
|
|
|
+o.deleteBuffer(b.__webglFaceBuffer);o.deleteBuffer(b.__webglLineBuffer);if(b.numMorphTargets)for(var c=0,e=b.numMorphTargets;c<e;c++)o.deleteBuffer(b.__webglMorphTargetsBuffers[c]);U.info.memory.geometries--}else if(a instanceof THREE.Ribbon)a=a.geometry,o.deleteBuffer(a.__webglVertexBuffer),o.deleteBuffer(a.__webglColorBuffer),U.info.memory.geometries--;else if(a instanceof THREE.Line)a=a.geometry,o.deleteBuffer(a.__webglVertexBuffer),o.deleteBuffer(a.__webglColorBuffer),U.info.memory.geometries--;
|
|
|
|
+else if(a instanceof THREE.ParticleSystem)a=a.geometry,o.deleteBuffer(a.__webglVertexBuffer),o.deleteBuffer(a.__webglColorBuffer),U.info.memory.geometries--};this.deallocateTexture=function(a){if(a.__webglInit)a.__webglInit=!1,o.deleteTexture(a.__webglTexture),U.info.memory.textures--};this.initMaterial=function(a,b,c,e){var f,h,l,k;a instanceof THREE.MeshDepthMaterial?k="depth":a instanceof THREE.MeshNormalMaterial?k="normal":a instanceof THREE.MeshBasicMaterial?k="basic":a instanceof THREE.MeshLambertMaterial?
|
|
|
|
+k="lambert":a instanceof THREE.MeshPhongMaterial?k="phong":a instanceof THREE.LineBasicMaterial?k="basic":a instanceof THREE.ParticleBasicMaterial&&(k="particle_basic");if(k){var n=THREE.ShaderLib[k];a.uniforms=THREE.UniformsUtils.clone(n.uniforms);a.vertexShader=n.vertexShader;a.fragmentShader=n.fragmentShader}var t,w,p;t=p=n=0;for(w=b.length;t<w;t++)l=b[t],l instanceof THREE.SpotLight&&p++,l instanceof THREE.DirectionalLight&&p++,l instanceof THREE.PointLight&&n++;n+p<=wa?t=p:(t=Math.ceil(wa*p/
|
|
|
|
+(n+p)),n=wa-t);l={directional:t,point:n};n=p=0;for(t=b.length;n<t;n++)w=b[n],w instanceof THREE.SpotLight&&w.castShadow&&p++;var v=50;if(e!==void 0&&e instanceof THREE.SkinnedMesh)v=e.bones.length;var u;a:{t=a.fragmentShader;w=a.vertexShader;var n=a.uniforms,b=a.attributes,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,morphTargets:a.morphTargets,maxMorphTargets:this.maxMorphTargets,maxDirLights:l.directional,
|
|
|
|
+maxPointLights:l.point,maxBones:v,shadowMapEnabled:this.shadowMapEnabled&&e.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapWidth:this.shadowMapWidth,shadowMapHeight:this.shadowMapHeight,maxShadows:p,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel},x,e=[];k?e.push(k):(e.push(t),e.push(w));for(x in c)e.push(x),e.push(c[x]);k=e.join();x=0;for(e=P.length;x<e;x++)if(P[x].code===k){u=P[x].program;break a}x=o.createProgram();e=[Ea?"#define VERTEX_TEXTURES":"",U.gammaInput?"#define GAMMA_INPUT":
|
|
|
|
+"",U.gammaOutput?"#define GAMMA_OUTPUT":"",U.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.perPixel?"#define PHONG_PER_PIXEL":
|
|
|
|
+"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 objectMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nuniform mat4 cameraInverseMatrix;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
|
|
l=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",U.gammaInput?"#define GAMMA_INPUT":"",U.gammaOutput?"#define GAMMA_OUTPUT":"",U.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":
|
|
l=["#ifdef GL_ES\nprecision highp float;\n#endif","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",U.gammaInput?"#define GAMMA_INPUT":"",U.gammaOutput?"#define GAMMA_OUTPUT":"",U.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":
|
|
"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapSoft?"#define SHADOWMAP_WIDTH "+c.shadowMapWidth.toFixed(1):"",c.shadowMapSoft?"#define SHADOWMAP_HEIGHT "+c.shadowMapHeight.toFixed(1):"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");o.attachShader(x,Y("fragment",l+t));o.attachShader(x,
|
|
"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapSoft?"#define SHADOWMAP_WIDTH "+c.shadowMapWidth.toFixed(1):"",c.shadowMapSoft?"#define SHADOWMAP_HEIGHT "+c.shadowMapHeight.toFixed(1):"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");o.attachShader(x,Y("fragment",l+t));o.attachShader(x,
|
|
Y("vertex",e+w));o.linkProgram(x);o.getProgramParameter(x,o.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+o.getProgramParameter(x,o.VALIDATE_STATUS)+", gl error ["+o.getError()+"]");x.uniforms={};x.attributes={};var X,e=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(X in n)e.push(X);X=e;e=0;for(n=X.length;e<n;e++)t=X[e],x.uniforms[t]=o.getUniformLocation(x,
|
|
Y("vertex",e+w));o.linkProgram(x);o.getProgramParameter(x,o.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+o.getProgramParameter(x,o.VALIDATE_STATUS)+", gl error ["+o.getError()+"]");x.uniforms={};x.attributes={};var X,e=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(X in n)e.push(X);X=e;e=0;for(n=X.length;e<n;e++)t=X[e],x.uniforms[t]=o.getUniformLocation(x,
|