From 8af4dd49c15f3d60a3e97cab7dfcee23222c89f8 Mon Sep 17 00:00:00 2001 From: "Mr.doob" Date: Thu, 31 Mar 2011 07:22:44 +0100 Subject: [PATCH] =?UTF-8?q?WebGLRenderer=20now=20uses=20material.transpare?= =?UTF-8?q?nt=20to=20determine=20whether=20a=20material=20is=20transparent?= =?UTF-8?q?=20or=20not.=20Moved=20materials/RenderTarget.js=20=E2=9F=B6=20?= =?UTF-8?q?renderer/WebGLRenderTarget.js?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/Three.js | 247 ++++++------ build/custom/ThreeCanvas.js | 41 +- build/custom/ThreeDOM.js | 4 +- build/custom/ThreeExtras.js | 6 +- build/custom/ThreeSVG.js | 40 +- build/custom/ThreeWebGL.js | 362 +++++++++--------- examples/misc_sound.html | 9 +- examples/webgl_interactive_voxelpainter.html | 4 +- examples/webgl_lines_colors.html | 9 +- examples/webgl_lines_cubes.html | 6 +- examples/webgl_lines_splines.html | 6 +- examples/webgl_materials_cars.html | 18 +- examples/webgl_materials_cars_camaro.html | 2 +- examples/webgl_materials_video.html | 9 +- examples/webgl_particles_sprites.html | 2 +- examples/webgl_postprocessing.html | 9 +- examples/webgl_postprocessing_dof.html | 4 +- examples/webgl_ribbons.html | 9 +- examples/webgl_rtt.html | 4 +- examples/webgl_sandbox.html | 2 +- src/materials/LineBasicMaterial.js | 35 +- src/materials/Material.js | 15 + src/materials/MeshBasicMaterial.js | 79 ++-- src/materials/MeshDepthMaterial.js | 28 +- src/materials/MeshLambertMaterial.js | 80 ++-- src/materials/MeshNormalMaterial.js | 28 +- src/materials/MeshPhongMaterial.js | 93 ++--- src/materials/MeshShaderMaterial.js | 56 +-- src/materials/ParticleBasicMaterial.js | 36 +- src/materials/ParticleCanvasMaterial.js | 20 +- src/materials/ParticleDOMMaterial.js | 2 +- src/materials/ShadowVolumeDynamicMaterial.js | 44 ++- src/objects/Mesh.js | 5 +- .../WebGLRenderTarget.js} | 2 +- src/renderers/WebGLRenderer.js | 250 ++++++------ utils/build.py | 6 +- 36 files changed, 691 insertions(+), 881 deletions(-) rename src/{materials/RenderTarget.js => renderers/WebGLRenderTarget.js} (91%) diff --git a/build/Three.js b/build/Three.js index 7168713ce9..091eb3a13d 100755 --- a/build/Three.js +++ b/build/Three.js @@ -48,7 +48,7 @@ c,b)}};THREE.Quaternion=function(a,c,b,e){this.set(a||0,c||0,b||0,e!==undefined? THREE.Quaternion.prototype={set:function(a,c,b,e){this.x=a;this.y=c;this.z=b;this.w=e;return this},setFromEuler:function(a){var c=0.5*Math.PI/360,b=a.x*c,e=a.y*c,f=a.z*c;a=Math.cos(e);e=Math.sin(e);c=Math.cos(-f);f=Math.sin(-f);var g=Math.cos(b);b=Math.sin(b);var h=a*c,j=e*f;this.w=h*g-j*b;this.x=h*b+j*g;this.y=e*c*g+a*f*b;this.z=a*f*g-e*c*b;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*= -1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var c=this.x,b=this.y,e=this.z,f=this.w,g=a.x,h=a.y,j=a.z;a=a.w;this.x=c*a+f*g+b*j-e*h;this.y=b*a+f*h+e*g-c*j;this.z=e*a+f*j+c*h-b*g;this.w=f*a-c*g-b*h-e*j;return this}, multiplyVector3:function(a,c){c||(c=a);var b=a.x,e=a.y,f=a.z,g=this.x,h=this.y,j=this.z,m=this.w,o=m*b+h*f-j*e,n=m*e+j*b-g*f,t=m*f+g*e-h*b;b=-g*b-h*e-j*f;c.x=o*m+b*-g+n*-j-t*-h;c.y=n*m+b*-h+t*-g-o*-j;c.z=t*m+b*-j+o*-h-n*-g;return c}}; -THREE.Quaternion.slerp=function(a,c,b,e){var f=a.w*c.w+a.x*c.x+a.y*c.y+a.z*c.z;if(Math.abs(f)>=1){b.w=a.w;b.x=a.x;b.y=a.y;b.z=a.z;return b}var g=Math.acos(f),h=Math.sqrt(1-f*f);if(Math.abs(h)<0.0010){b.w=0.5*(a.w+c.w);b.x=0.5*(a.x+c.x);b.y=0.5*(a.y+c.y);b.z=0.5*(a.z+c.z);return b}f=Math.sin((1-e)*g)/h;e=Math.sin(e*g)/h;b.w=a.w*f+c.w*e;b.x=a.x*f+c.x*e;b.y=a.y*f+c.y*e;b.z=a.z*f+c.z*e;return b};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; +THREE.Quaternion.slerp=function(a,c,b,e){var f=a.w*c.w+a.x*c.x+a.y*c.y+a.z*c.z;if(Math.abs(f)>=1){b.w=a.w;b.x=a.x;b.y=a.y;b.z=a.z;return b}var g=Math.acos(f),h=Math.sqrt(1-f*f);if(Math.abs(h)<0.001){b.w=0.5*(a.w+c.w);b.x=0.5*(a.x+c.x);b.y=0.5*(a.y+c.y);b.z=0.5*(a.z+c.z);return b}f=Math.sin((1-e)*g)/h;e=Math.sin(e*g)/h;b.w=a.w*f+c.w*e;b.x=a.x*f+c.x*e;b.y=a.y*f+c.y*e;b.z=a.z*f+c.z*e;return b};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; THREE.Face3=function(a,c,b,e,f,g){this.a=a;this.b=c;this.c=b;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materials=g instanceof Array?g:[g];this.centroid=new THREE.Vector3}; THREE.Face4=function(a,c,b,e,f,g,h){this.a=a;this.b=c;this.c=b;this.d=e;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materials=h instanceof Array?h:[h];this.centroid=new THREE.Vector3};THREE.UV=function(a,c){this.set(a||0,c||0)}; THREE.UV.prototype={set:function(a,c){this.u=a;this.v=c;return this},copy:function(a){this.set(a.u,a.v);return this}};THREE.Geometry=function(){this.id="Geometry"+THREE.GeometryIdCounter++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1}; @@ -90,42 +90,33 @@ THREE.Camera.prototype.update=function(a,c,b){if(this.useTarget){this.matrix.loo THREE.AmbientLight.prototype.constructor=THREE.AmbientLight;THREE.DirectionalLight=function(a,c,b){THREE.Light.call(this,a);this.position=new THREE.Vector3(0,1,0);this.intensity=c||1;this.distance=b||0};THREE.DirectionalLight.prototype=new THREE.Light;THREE.DirectionalLight.prototype.constructor=THREE.DirectionalLight;THREE.PointLight=function(a,c,b){THREE.Light.call(this,a);this.position=new THREE.Vector3;this.intensity=c||1;this.distance=b||0};THREE.PointLight.prototype=new THREE.Light; THREE.PointLight.prototype.constructor=THREE.PointLight;THREE.LensFlare=function(a,c,b,e){THREE.Object3D.call(this);this.positionScreen=new THREE.Vector3;this.lensFlares=[];this.customUpdateCallback=undefined;a!==undefined&&this.add(a,c,b,e)};THREE.LensFlare.prototype=new THREE.Object3D;THREE.LensFlare.prototype.constructor=THREE.LensFlare;THREE.LensFlare.prototype.supr=THREE.Object3D.prototype; THREE.LensFlare.prototype.add=function(a,c,b,e){c===undefined&&(c=-1);b===undefined&&(b=0);if(e===undefined)e=THREE.BillboardBlending;b=Math.min(b,Math.max(0,b));this.lensFlares.push({texture:a,size:c,distance:b,x:0,y:0,z:0,scale:1,rotation:1,opacity:1,blending:e})}; -THREE.LensFlare.prototype.updateLensFlares=function(a){var c,b=this.lensFlares.length,e,f=-this.positionScreen.x*2,g=-this.positionScreen.y*2;for(c=0;c0&&N.z<1){Sa=D[S]=D[S]||new THREE.RenderableParticle;S++;J=Sa;J.x=N.x/N.w;J.y=N.y/N.w;J.z=N.z;J.rotation=Da.rotation.z;J.scale.x=Da.scale.x*Math.abs(J.x-(N.x+Z.projectionMatrix.n11)/(N.w+Z.projectionMatrix.n14));J.scale.y=Da.scale.y*Math.abs(J.y-(N.y+Z.projectionMatrix.n22)/(N.w+Z.projectionMatrix.n24));J.materials=Da.materials;Ga.push(J)}}}}ya&&Ga.sort(c);return Ga}}; THREE.DOMRenderer=function(){THREE.Renderer.call(this);var a=null,c=new THREE.Projector,b,e,f,g;this.domElement=document.createElement("div");this.setSize=function(h,j){b=h;e=j;f=b/2;g=e/2};this.render=function(h,j){var m,o,n,t,y,w,z,E;a=c.projectScene(h,j);m=0;for(o=a.length;m>1;Oa=pa.height>>1;aa=da.scale.x*m;Ja=da.scale.y*o;T=aa*Q;ta=Ja*Oa;x.set(P.x-T,P.y-ta,P.x+T,P.y+ta);if(k.instersects(x)){n.save();n.translate(P.x,P.y);n.rotate(-da.rotation); n.scale(aa,-Ja);n.translate(-Q,-Oa);n.drawImage(pa,0,0);n.restore()}}}else if(aa instanceof THREE.ParticleCanvasMaterial){T=da.scale.x*m;ta=da.scale.y*o;x.set(P.x-T,P.y-ta,P.x+T,P.y+ta);if(k.instersects(x)){b(aa.color.__styleString);Ja=aa.color.__styleString;if(G!=Ja)n.fillStyle=G=Ja;n.save();n.translate(P.x,P.y);n.rotate(-da.rotation);n.scale(T,ta);aa.program(n);n.restore()}}}function Qa(P,da,aa,T){a(T.opacity);c(T.blending);n.beginPath();n.moveTo(P.positionScreen.x,P.positionScreen.y);n.lineTo(da.positionScreen.x, da.positionScreen.y);n.closePath();if(T instanceof THREE.LineBasicMaterial){ma.__styleString=T.color.__styleString;P=T.linewidth;if(J!=P)n.lineWidth=J=P;P=T.linecap;if(S!=P)n.lineCap=S=P;P=T.linejoin;if(D!=P)n.lineJoin=D=P;b(ma.__styleString);n.stroke();x.inflate(T.linewidth*2)}}function Va(P,da,aa,T,ta,Ja,pa,Q,Oa){a(Q.opacity);c(Q.blending);W=P.positionScreen.x;d=P.positionScreen.y;Z=da.positionScreen.x;ya=da.positionScreen.y;Ga=aa.positionScreen.x;Ha=aa.positionScreen.y;Ma(W,d,Z,ya,Ga,Ha);if(Q instanceof THREE.MeshBasicMaterial)if(Q.map){if(Q.map.mapping instanceof THREE.UVMapping){Ta=pa.uvs[0];bb(W,d,Z,ya,Ga,Ha,Q.map.image,Ta[T].u,Ta[T].v,Ta[ta].u,Ta[ta].v,Ta[Ja].u,Ta[Ja].v)}}else if(Q.envMap){if(Q.envMap.mapping instanceof THREE.SphericalReflectionMapping){P=va.matrixWorldInverse;C.copy(pa.vertexNormalsWorld[0]);M=(C.x*P.n11+C.y*P.n12+C.z*P.n13)*0.5+0.5;V=-(C.x*P.n21+C.y*P.n22+C.z*P.n23)*0.5+0.5;C.copy(pa.vertexNormalsWorld[1]);na=(C.x*P.n11+C.y*P.n12+C.z*P.n13)*0.5+0.5;Aa=-(C.x*P.n21+C.y*P.n22+ C.z*P.n23)*0.5+0.5;C.copy(pa.vertexNormalsWorld[2]);ca=(C.x*P.n11+C.y*P.n12+C.z*P.n13)*0.5+0.5;ga=-(C.x*P.n21+C.y*P.n22+C.z*P.n23)*0.5+0.5;bb(W,d,Z,ya,Ga,Ha,Q.envMap.image,M,V,na,Aa,ca,ga)}}else Q.wireframe?Pa(Q.color.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(Q.color.__styleString);else if(Q instanceof THREE.MeshLambertMaterial){if(Q.map&&!Q.wireframe){if(Q.map.mapping instanceof THREE.UVMapping){Ta=pa.uvs[0];bb(W,d,Z,ya,Ga,Ha,Q.map.image,Ta[T].u,Ta[T].v,Ta[ta].u, -Ta[ta].v,Ta[Ja].u,Ta[Ja].v)}c(THREE.SubtractiveBlending)}if(p)if(!Q.wireframe&&Q.shading==THREE.SmoothShading&&pa.vertexNormalsWorld.length==3){Ca.r=fa.r=ja.r=F.r;Ca.g=fa.g=ja.g=F.g;Ca.b=fa.b=ja.b=F.b;ia(Oa,pa.v1.positionWorld,pa.vertexNormalsWorld[0],Ca);ia(Oa,pa.v2.positionWorld,pa.vertexNormalsWorld[1],fa);ia(Oa,pa.v3.positionWorld,pa.vertexNormalsWorld[2],ja);Da.r=(fa.r+ja.r)*0.5;Da.g=(fa.g+ja.g)*0.5;Da.b=(fa.b+ja.b)*0.5;Wa=$a(Ca,fa,ja,Da);bb(W,d,Z,ya,Ga,Ha,Wa,0,0,1,0,0,1)}else{A.r=F.r;A.g=F.g; -A.b=F.b;ia(Oa,pa.centroidWorld,pa.normalWorld,A);ma.r=Q.color.r*A.r;ma.g=Q.color.g*A.g;ma.b=Q.color.b*A.b;ma.updateStyleString();Q.wireframe?Pa(ma.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(ma.__styleString)}else Q.wireframe?Pa(Q.color.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(Q.color.__styleString)}else if(Q instanceof THREE.MeshDepthMaterial){Sa=va.near;Xa=va.far;Ca.r=Ca.g=Ca.b=1-Za(P.positionScreen.z,Sa,Xa);fa.r=fa.g=fa.b=1- +Ta[ta].v,Ta[Ja].u,Ta[Ja].v)}c(THREE.SubtractiveBlending)}if(p)if(!Q.wireframe&&Q.shading==THREE.SmoothShading&&pa.vertexNormalsWorld.length==3){Ca.r=fa.r=ja.r=F.r;Ca.g=fa.g=ja.g=F.g;Ca.b=fa.b=ja.b=F.b;ia(Oa,pa.v1.positionWorld,pa.vertexNormalsWorld[0],Ca);ia(Oa,pa.v2.positionWorld,pa.vertexNormalsWorld[1],fa);ia(Oa,pa.v3.positionWorld,pa.vertexNormalsWorld[2],ja);Da.r=(fa.r+ja.r)*0.5;Da.g=(fa.g+ja.g)*0.5;Da.b=(fa.b+ja.b)*0.5;Wa=$a(Ca,fa,ja,Da);bb(W,d,Z,ya,Ga,Ha,Wa,0,0,1,0,0,1)}else{B.r=F.r;B.g=F.g; +B.b=F.b;ia(Oa,pa.centroidWorld,pa.normalWorld,B);ma.r=Q.color.r*B.r;ma.g=Q.color.g*B.g;ma.b=Q.color.b*B.b;ma.updateStyleString();Q.wireframe?Pa(ma.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(ma.__styleString)}else Q.wireframe?Pa(Q.color.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(Q.color.__styleString)}else if(Q instanceof THREE.MeshDepthMaterial){Sa=va.near;Xa=va.far;Ca.r=Ca.g=Ca.b=1-Za(P.positionScreen.z,Sa,Xa);fa.r=fa.g=fa.b=1- Za(da.positionScreen.z,Sa,Xa);ja.r=ja.g=ja.b=1-Za(aa.positionScreen.z,Sa,Xa);Da.r=(fa.r+ja.r)*0.5;Da.g=(fa.g+ja.g)*0.5;Da.b=(fa.b+ja.b)*0.5;Wa=$a(Ca,fa,ja,Da);bb(W,d,Z,ya,Ga,Ha,Wa,0,0,1,0,0,1)}else if(Q instanceof THREE.MeshNormalMaterial){ma.r=Ka(pa.normalWorld.x);ma.g=Ka(pa.normalWorld.y);ma.b=Ka(pa.normalWorld.z);ma.updateStyleString();Q.wireframe?Pa(ma.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(ma.__styleString)}}function eb(P,da,aa,T,ta,Ja,pa,Q,Oa){a(Q.opacity); c(Q.blending);if(Q.map||Q.envMap){Va(P,da,T,0,1,3,pa,Q,Oa);Va(ta,aa,Ja,1,2,3,pa,Q,Oa)}else{W=P.positionScreen.x;d=P.positionScreen.y;Z=da.positionScreen.x;ya=da.positionScreen.y;Ga=aa.positionScreen.x;Ha=aa.positionScreen.y;ra=T.positionScreen.x;X=T.positionScreen.y;qa=ta.positionScreen.x;za=ta.positionScreen.y;ea=Ja.positionScreen.x;U=Ja.positionScreen.y;if(Q instanceof THREE.MeshBasicMaterial){La(W,d,Z,ya,Ga,Ha,ra,X);Q.wireframe?Pa(Q.color.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin): cb(Q.color.__styleString)}else if(Q instanceof THREE.MeshLambertMaterial)if(p)if(!Q.wireframe&&Q.shading==THREE.SmoothShading&&pa.vertexNormalsWorld.length==4){Ca.r=fa.r=ja.r=Da.r=F.r;Ca.g=fa.g=ja.g=Da.g=F.g;Ca.b=fa.b=ja.b=Da.b=F.b;ia(Oa,pa.v1.positionWorld,pa.vertexNormalsWorld[0],Ca);ia(Oa,pa.v2.positionWorld,pa.vertexNormalsWorld[1],fa);ia(Oa,pa.v4.positionWorld,pa.vertexNormalsWorld[3],ja);ia(Oa,pa.v3.positionWorld,pa.vertexNormalsWorld[2],Da);Wa=$a(Ca,fa,ja,Da);Ma(W,d,Z,ya,ra,X);bb(W,d,Z,ya, -ra,X,Wa,0,0,1,0,0,1);Ma(qa,za,Ga,Ha,ea,U);bb(qa,za,Ga,Ha,ea,U,Wa,1,0,1,1,0,1)}else{A.r=F.r;A.g=F.g;A.b=F.b;ia(Oa,pa.centroidWorld,pa.normalWorld,A);ma.r=Q.color.r*A.r;ma.g=Q.color.g*A.g;ma.b=Q.color.b*A.b;ma.updateStyleString();La(W,d,Z,ya,Ga,Ha,ra,X);Q.wireframe?Pa(ma.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(ma.__styleString)}else{La(W,d,Z,ya,Ga,Ha,ra,X);Q.wireframe?Pa(Q.color.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(Q.color.__styleString)}else if(Q instanceof +ra,X,Wa,0,0,1,0,0,1);Ma(qa,za,Ga,Ha,ea,U);bb(qa,za,Ga,Ha,ea,U,Wa,1,0,1,1,0,1)}else{B.r=F.r;B.g=F.g;B.b=F.b;ia(Oa,pa.centroidWorld,pa.normalWorld,B);ma.r=Q.color.r*B.r;ma.g=Q.color.g*B.g;ma.b=Q.color.b*B.b;ma.updateStyleString();La(W,d,Z,ya,Ga,Ha,ra,X);Q.wireframe?Pa(ma.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(ma.__styleString)}else{La(W,d,Z,ya,Ga,Ha,ra,X);Q.wireframe?Pa(Q.color.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(Q.color.__styleString)}else if(Q instanceof THREE.MeshNormalMaterial){ma.r=Ka(pa.normalWorld.x);ma.g=Ka(pa.normalWorld.y);ma.b=Ka(pa.normalWorld.z);ma.updateStyleString();La(W,d,Z,ya,Ga,Ha,ra,X);Q.wireframe?Pa(ma.__styleString,Q.wireframeLinewidth,Q.wireframeLinecap,Q.wireframeLinejoin):cb(ma.__styleString)}else if(Q instanceof THREE.MeshDepthMaterial){Sa=va.near;Xa=va.far;Ca.r=Ca.g=Ca.b=1-Za(P.positionScreen.z,Sa,Xa);fa.r=fa.g=fa.b=1-Za(da.positionScreen.z,Sa,Xa);ja.r=ja.g=ja.b=1-Za(T.positionScreen.z,Sa,Xa);Da.r=Da.g=Da.b=1-Za(aa.positionScreen.z, Sa,Xa);Wa=$a(Ca,fa,ja,Da);Ma(W,d,Z,ya,ra,X);bb(W,d,Z,ya,ra,X,Wa,0,0,1,0,0,1);Ma(qa,za,Ga,Ha,ea,U);bb(qa,za,Ga,Ha,ea,U,Wa,1,0,1,1,0,1)}}}function Ma(P,da,aa,T,ta,Ja){n.beginPath();n.moveTo(P,da);n.lineTo(aa,T);n.lineTo(ta,Ja);n.lineTo(P,da);n.closePath()}function La(P,da,aa,T,ta,Ja,pa,Q){n.beginPath();n.moveTo(P,da);n.lineTo(aa,T);n.lineTo(ta,Ja);n.lineTo(pa,Q);n.lineTo(P,da);n.closePath()}function Pa(P,da,aa,T){if(J!=da)n.lineWidth=J=da;if(S!=aa)n.lineCap=S=aa;if(D!=T)n.lineJoin=D=T;b(P);n.stroke(); x.inflate(da*2)}function cb(P){if(G!=P)n.fillStyle=G=P;n.fill()}function bb(P,da,aa,T,ta,Ja,pa,Q,Oa,Ra,db,hb,jb){var fb,ib;fb=pa.width-1;ib=pa.height-1;Q*=fb;Oa*=ib;Ra*=fb;db*=ib;hb*=fb;jb*=ib;aa-=P;T-=da;ta-=P;Ja-=da;Ra-=Q;db-=Oa;hb-=Q;jb-=Oa;fb=Ra*jb-hb*db;if(fb!=0){ib=1/fb;fb=(jb*aa-db*ta)*ib;db=(jb*T-db*Ja)*ib;aa=(Ra*ta-hb*aa)*ib;T=(Ra*Ja-hb*T)*ib;P=P-fb*Q-aa*Oa;da=da-db*Q-T*Oa;n.save();n.transform(fb,db,aa,T,P,da);n.clip();n.drawImage(pa,0,0);n.restore()}}function $a(P,da,aa,T){var ta=~~(P.r* @@ -191,7 +182,7 @@ Ba;L.x*=m;L.y*=o;Na=0;for(gb=Ba.materials.length;Na0){qa.r+=U.color.r*ma;qa.g+=U.color.g*ma;qa.b+=U.color.b*ma}}else if(U instanceof THREE.PointLight){xa.sub(U.position,X.centroidWorld);xa.normalize();ma=X.normalWorld.dot(xa)*U.intensity;if(ma>0){qa.r+=U.color.r*ma;qa.g+=U.color.g*ma;qa.b+=U.color.b*ma}}}}function c(ra,X,qa,za,ea,U){Z=e(ya++); Z.setAttribute("d","M "+ra.positionScreen.x+" "+ra.positionScreen.y+" L "+X.positionScreen.x+" "+X.positionScreen.y+" L "+qa.positionScreen.x+","+qa.positionScreen.y+"z");if(ea instanceof THREE.MeshBasicMaterial)D.__styleString=ea.color.__styleString;else if(ea instanceof THREE.MeshLambertMaterial)if(S){L.r=N.r;L.g=N.g;L.b=N.b;a(U,za,L);D.r=ea.color.r*L.r;D.g=ea.color.g*L.g;D.b=ea.color.b*L.b;D.updateStyleString()}else D.__styleString=ea.color.__styleString;else if(ea instanceof THREE.MeshDepthMaterial){oa= 1-ea.__2near/(ea.__farPlusNear-za.z*ea.__farMinusNear);D.setRGB(oa,oa,oa)}else ea instanceof THREE.MeshNormalMaterial&&D.setRGB(f(za.normalWorld.x),f(za.normalWorld.y),f(za.normalWorld.z));ea.wireframe?Z.setAttribute("style","fill: none; stroke: "+D.__styleString+"; stroke-width: "+ea.wireframeLinewidth+"; stroke-opacity: "+ea.opacity+"; stroke-linecap: "+ea.wireframeLinecap+"; stroke-linejoin: "+ea.wireframeLinejoin):Z.setAttribute("style","fill: "+D.__styleString+"; fill-opacity: "+ea.opacity); @@ -231,101 +222,101 @@ THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE. vertexShader:["#define PHONG\nvarying vec3 vLightWeighting;\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex, THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.color_vertex,"#ifndef USE_ENVMAP\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\n#endif\nvViewPosition = cameraPosition - mPosition.xyz;\nvec3 transformedNormal = normalize( normalMatrix * normal );\nvNormal = transformedNormal;",THREE.ShaderChunk.lights_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n")},particle_basic:{uniforms:THREE.UniformsLib.particle,fragmentShader:["uniform vec3 psColor;\nuniform float opacity;", THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["uniform float size;\nuniform float scale;",THREE.ShaderChunk.color_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n#ifdef USE_SIZEATTENUATION\ngl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n#else\ngl_PointSize = size;\n#endif\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n")}}; -THREE.WebGLRenderer=function(a){function c(k,B,x){var p,A,F,H=k.vertices,K=H.length,C=k.colors,$=C.length,I=k.__vertexArray,la=k.__colorArray,Y=k.__sortArray,ua=k.__dirtyVertices,sa=k.__dirtyColors;if(x.sortParticles){Da.multiplySelf(x.matrixWorld);for(p=0;pC){$=I;C=K[$]}d.bindBuffer(d.ARRAY_BUFFER,A.__webglMorphTargetsBuffers[$]);d.vertexAttribPointer(B["morphTarget"+x],3,d.FLOAT,!1,0,0);F.__webglMorphTargetInfluences[x]=C;H[$]=1;C=-1;x++}}d.uniform1fv(p.program.uniforms.morphTargetInfluences,F.__webglMorphTargetInfluences)}else{d.bindBuffer(d.ARRAY_BUFFER, -A.__webglVertexBuffer);d.vertexAttribPointer(k.position,3,d.FLOAT,!1,0,0)}if(k.color>=0){d.bindBuffer(d.ARRAY_BUFFER,A.__webglColorBuffer);d.vertexAttribPointer(k.color,3,d.FLOAT,!1,0,0)}if(k.normal>=0){d.bindBuffer(d.ARRAY_BUFFER,A.__webglNormalBuffer);d.vertexAttribPointer(k.normal,3,d.FLOAT,!1,0,0)}if(k.tangent>=0){d.bindBuffer(d.ARRAY_BUFFER,A.__webglTangentBuffer);d.vertexAttribPointer(k.tangent,4,d.FLOAT,!1,0,0)}if(k.uv>=0)if(A.__webglUVBuffer){d.bindBuffer(d.ARRAY_BUFFER,A.__webglUVBuffer); -d.vertexAttribPointer(k.uv,2,d.FLOAT,!1,0,0);d.enableVertexAttribArray(k.uv)}else d.disableVertexAttribArray(k.uv);if(k.uv2>=0)if(A.__webglUV2Buffer){d.bindBuffer(d.ARRAY_BUFFER,A.__webglUV2Buffer);d.vertexAttribPointer(k.uv2,2,d.FLOAT,!1,0,0);d.enableVertexAttribArray(k.uv2)}else d.disableVertexAttribArray(k.uv2);if(p.skinning&&k.skinVertexA>=0&&k.skinVertexB>=0&&k.skinIndex>=0&&k.skinWeight>=0){d.bindBuffer(d.ARRAY_BUFFER,A.__webglSkinVertexABuffer);d.vertexAttribPointer(k.skinVertexA,4,d.FLOAT, -!1,0,0);d.bindBuffer(d.ARRAY_BUFFER,A.__webglSkinVertexBBuffer);d.vertexAttribPointer(k.skinVertexB,4,d.FLOAT,!1,0,0);d.bindBuffer(d.ARRAY_BUFFER,A.__webglSkinIndicesBuffer);d.vertexAttribPointer(k.skinIndex,4,d.FLOAT,!1,0,0);d.bindBuffer(d.ARRAY_BUFFER,A.__webglSkinWeightsBuffer);d.vertexAttribPointer(k.skinWeight,4,d.FLOAT,!1,0,0)}if(F instanceof THREE.Mesh)if(p.wireframe){d.lineWidth(p.wireframeLinewidth);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,A.__webglLineBuffer);d.drawElements(d.LINES,A.__webglLineCount, -d.UNSIGNED_SHORT,0)}else{d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,A.__webglFaceBuffer);d.drawElements(d.TRIANGLES,A.__webglFaceCount,d.UNSIGNED_SHORT,0)}else if(F instanceof THREE.Line){F=F.type==THREE.LineStrip?d.LINE_STRIP:d.LINES;d.lineWidth(p.linewidth);d.drawArrays(F,0,A.__webglLineCount)}else if(F instanceof THREE.ParticleSystem)d.drawArrays(d.POINTS,0,A.__webglParticleCount);else F instanceof THREE.Ribbon&&d.drawArrays(d.TRIANGLE_STRIP,0,A.__webglVertexCount)}}function g(k,B){if(!k.__webglVertexBuffer)k.__webglVertexBuffer= -d.createBuffer();if(!k.__webglNormalBuffer)k.__webglNormalBuffer=d.createBuffer();if(k.hasPos){d.bindBuffer(d.ARRAY_BUFFER,k.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,k.positionArray,d.DYNAMIC_DRAW);d.enableVertexAttribArray(B.attributes.position);d.vertexAttribPointer(B.attributes.position,3,d.FLOAT,!1,0,0)}if(k.hasNormal){d.bindBuffer(d.ARRAY_BUFFER,k.__webglNormalBuffer);d.bufferData(d.ARRAY_BUFFER,k.normalArray,d.DYNAMIC_DRAW);d.enableVertexAttribArray(B.attributes.normal);d.vertexAttribPointer(B.attributes.normal, +C.image[I])}else{C.image.__webglTextureCube=d.createTexture();d.bindTexture(d.TEXTURE_CUBE_MAP,C.image.__webglTextureCube);for(I=0;I<6;++I)d.texImage2D(d.TEXTURE_CUBE_MAP_POSITIVE_X+I,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,C.image[I]);C.__webglInit=!0}N(d.TEXTURE_CUBE_MAP,C,C.image[0]);d.bindTexture(d.TEXTURE_CUBE_MAP,null);C.needsUpdate=!1}d.activeTexture(d.TEXTURE0+x);d.bindTexture(d.TEXTURE_CUBE_MAP,C.image.__webglTextureCube)}}else O(C,x)}}d.uniformMatrix4fv(H.modelViewMatrix,!1,B._modelViewMatrixArray); +d.uniformMatrix3fv(H.normalMatrix,!1,B._normalMatrixArray);(p instanceof THREE.MeshShaderMaterial||p instanceof THREE.MeshPhongMaterial||p.envMap)&&d.uniform3f(H.cameraPosition,k.position.x,k.position.y,k.position.z);(p instanceof THREE.MeshShaderMaterial||p.envMap||p.skinning)&&d.uniformMatrix4fv(H.objectMatrix,!1,B._objectMatrixArray);(p instanceof THREE.MeshPhongMaterial||p instanceof THREE.MeshLambertMaterial||p instanceof THREE.MeshShaderMaterial||p.skinning)&&d.uniformMatrix4fv(H.viewMatrix, +!1,Xa);if(p instanceof THREE.ShadowVolumeDynamicMaterial){k=K.directionalLightDirection.value;k[0]=-A.position.x;k[1]=-A.position.y;k[2]=-A.position.z;d.uniform3fv(H.directionalLightDirection,k);d.uniformMatrix4fv(H.objectMatrix,!1,B._objectMatrixArray);d.uniformMatrix4fv(H.viewMatrix,!1,Xa)}if(p.skinning){d.uniformMatrix4fv(H.cameraInverseMatrix,!1,Xa);d.uniformMatrix4fv(H.boneGlobalMatrices,!1,B.boneMatrices)}return F}function f(k,A,x,p,B,F){if(p.opacity!=0){k=e(k,A,x,p,F).attributes;if(p.morphTargets){A= +p.program.attributes;F.morphTargetBase!==-1?d.bindBuffer(d.ARRAY_BUFFER,B.__webglMorphTargetsBuffers[F.morphTargetBase]):d.bindBuffer(d.ARRAY_BUFFER,B.__webglVertexBuffer);d.vertexAttribPointer(A.position,3,d.FLOAT,!1,0,0);if(F.morphTargetForcedOrder.length){x=0;for(var H=F.morphTargetForcedOrder,K=F.morphTargetInfluences;xC){$=I;C=K[$]}d.bindBuffer(d.ARRAY_BUFFER,B.__webglMorphTargetsBuffers[$]);d.vertexAttribPointer(A["morphTarget"+x],3,d.FLOAT,!1,0,0);F.__webglMorphTargetInfluences[x]=C;H[$]=1;C=-1;x++}}d.uniform1fv(p.program.uniforms.morphTargetInfluences,F.__webglMorphTargetInfluences)}else{d.bindBuffer(d.ARRAY_BUFFER, +B.__webglVertexBuffer);d.vertexAttribPointer(k.position,3,d.FLOAT,!1,0,0)}if(k.color>=0){d.bindBuffer(d.ARRAY_BUFFER,B.__webglColorBuffer);d.vertexAttribPointer(k.color,3,d.FLOAT,!1,0,0)}if(k.normal>=0){d.bindBuffer(d.ARRAY_BUFFER,B.__webglNormalBuffer);d.vertexAttribPointer(k.normal,3,d.FLOAT,!1,0,0)}if(k.tangent>=0){d.bindBuffer(d.ARRAY_BUFFER,B.__webglTangentBuffer);d.vertexAttribPointer(k.tangent,4,d.FLOAT,!1,0,0)}if(k.uv>=0)if(B.__webglUVBuffer){d.bindBuffer(d.ARRAY_BUFFER,B.__webglUVBuffer); +d.vertexAttribPointer(k.uv,2,d.FLOAT,!1,0,0);d.enableVertexAttribArray(k.uv)}else d.disableVertexAttribArray(k.uv);if(k.uv2>=0)if(B.__webglUV2Buffer){d.bindBuffer(d.ARRAY_BUFFER,B.__webglUV2Buffer);d.vertexAttribPointer(k.uv2,2,d.FLOAT,!1,0,0);d.enableVertexAttribArray(k.uv2)}else d.disableVertexAttribArray(k.uv2);if(p.skinning&&k.skinVertexA>=0&&k.skinVertexB>=0&&k.skinIndex>=0&&k.skinWeight>=0){d.bindBuffer(d.ARRAY_BUFFER,B.__webglSkinVertexABuffer);d.vertexAttribPointer(k.skinVertexA,4,d.FLOAT, +!1,0,0);d.bindBuffer(d.ARRAY_BUFFER,B.__webglSkinVertexBBuffer);d.vertexAttribPointer(k.skinVertexB,4,d.FLOAT,!1,0,0);d.bindBuffer(d.ARRAY_BUFFER,B.__webglSkinIndicesBuffer);d.vertexAttribPointer(k.skinIndex,4,d.FLOAT,!1,0,0);d.bindBuffer(d.ARRAY_BUFFER,B.__webglSkinWeightsBuffer);d.vertexAttribPointer(k.skinWeight,4,d.FLOAT,!1,0,0)}if(F instanceof THREE.Mesh)if(p.wireframe){d.lineWidth(p.wireframeLinewidth);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,B.__webglLineBuffer);d.drawElements(d.LINES,B.__webglLineCount, +d.UNSIGNED_SHORT,0)}else{d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,B.__webglFaceBuffer);d.drawElements(d.TRIANGLES,B.__webglFaceCount,d.UNSIGNED_SHORT,0)}else if(F instanceof THREE.Line){F=F.type==THREE.LineStrip?d.LINE_STRIP:d.LINES;d.lineWidth(p.linewidth);d.drawArrays(F,0,B.__webglLineCount)}else if(F instanceof THREE.ParticleSystem)d.drawArrays(d.POINTS,0,B.__webglParticleCount);else F instanceof THREE.Ribbon&&d.drawArrays(d.TRIANGLE_STRIP,0,B.__webglVertexCount)}}function g(k,A){if(!k.__webglVertexBuffer)k.__webglVertexBuffer= +d.createBuffer();if(!k.__webglNormalBuffer)k.__webglNormalBuffer=d.createBuffer();if(k.hasPos){d.bindBuffer(d.ARRAY_BUFFER,k.__webglVertexBuffer);d.bufferData(d.ARRAY_BUFFER,k.positionArray,d.DYNAMIC_DRAW);d.enableVertexAttribArray(A.attributes.position);d.vertexAttribPointer(A.attributes.position,3,d.FLOAT,!1,0,0)}if(k.hasNormal){d.bindBuffer(d.ARRAY_BUFFER,k.__webglNormalBuffer);d.bufferData(d.ARRAY_BUFFER,k.normalArray,d.DYNAMIC_DRAW);d.enableVertexAttribArray(A.attributes.normal);d.vertexAttribPointer(A.attributes.normal, 3,d.FLOAT,!1,0,0)}d.drawArrays(d.TRIANGLES,0,k.count);k.count=0}function h(k){if(X!=k.doubleSided){k.doubleSided?d.disable(d.CULL_FACE):d.enable(d.CULL_FACE);X=k.doubleSided}if(qa!=k.flipSided){k.flipSided?d.frontFace(d.CW):d.frontFace(d.CCW);qa=k.flipSided}}function j(k){if(ea!=k){k?d.enable(d.DEPTH_TEST):d.disable(d.DEPTH_TEST);ea=k}}function m(k){ja[0].set(k.n41-k.n11,k.n42-k.n12,k.n43-k.n13,k.n44-k.n14);ja[1].set(k.n41+k.n11,k.n42+k.n12,k.n43+k.n13,k.n44+k.n14);ja[2].set(k.n41+k.n21,k.n42+k.n22, -k.n43+k.n23,k.n44+k.n24);ja[3].set(k.n41-k.n21,k.n42-k.n22,k.n43-k.n23,k.n44-k.n24);ja[4].set(k.n41-k.n31,k.n42-k.n32,k.n43-k.n33,k.n44-k.n34);ja[5].set(k.n41+k.n31,k.n42+k.n32,k.n43+k.n33,k.n44+k.n34);var B;for(k=0;k<6;k++){B=ja[k];B.divideScalar(Math.sqrt(B.x*B.x+B.y*B.y+B.z*B.z))}}function o(k){for(var B=k.matrixWorld,x=-k.geometry.boundingSphere.radius*Math.max(k.scale.x,Math.max(k.scale.y,k.scale.z)),p=0;p<6;p++){k=ja[p].x*B.n14+ja[p].y*B.n24+ja[p].z*B.n34+ja[p].w;if(k<=x)return!1}return!0}function n(k, -B){k.list[k.count]=B;k.count+=1}function t(k){var B,x,p=k.object,A=k.opaque,F=k.transparent;F.count=0;k=A.count=0;for(B=p.materials.length;k0.0010&&C.scale>0.0010){Y[0]=C.x;Y[1]=C.y;Y[2]=C.z;I=C.size*C.scale/fa;la[0]=I*$;la[1]=I;d.uniform3fv(va.screenPosition,Y);d.uniform1f(va.rotation,C.rotation);d.uniform2fv(va.scale, -la);d.uniform1f(va.opacity,C.opacity);L(C.blending);O(C.texture,0);d.drawElements(d.TRIANGLES,6,d.UNSIGNED_SHORT,0)}}}d.enable(d.CULL_FACE);d.enable(d.DEPTH_TEST);d.depthMask(Ha)}function G(k,B){k._modelViewMatrix.multiplyToArray(B.matrixWorldInverse,k.matrixWorld,k._modelViewMatrixArray);THREE.Matrix4.makeInvert3x3(k._modelViewMatrix).transposeIntoArray(k._normalMatrixArray)}function J(k){var B,x,p;if(k instanceof THREE.Mesh){x=k.geometry;for(B in x.geometryGroups){p=x.geometryGroups[B];if(x.__dirtyVertices|| -x.__dirtyMorphTargets||x.__dirtyElements||x.__dirtyUvs||x.__dirtyNormals||x.__dirtyColors||x.__dirtyTangents){var A=d.DYNAMIC_DRAW,F=void 0,H=void 0,K=void 0,C=void 0;K=void 0;var $=void 0,I=void 0,la=void 0,Y=void 0,ua=void 0,sa=void 0,Ea=void 0,ka=void 0,va=void 0,ha=void 0,ia=void 0,wa=void 0,Qa=void 0;I=void 0;la=void 0;C=void 0;Y=void 0;C=void 0;ha=void 0;ia=void 0;I=void 0;ha=void 0;ia=void 0;wa=void 0;Qa=void 0;ha=void 0;ia=void 0;wa=void 0;Qa=void 0;ha=void 0;ia=void 0;wa=void 0;Qa=void 0; -ha=void 0;ia=void 0;wa=void 0;C=void 0;Y=void 0;$=void 0;K=void 0;K=void 0;var Va=void 0,eb=void 0,Ma=void 0,La=0,Pa=0,cb=0,bb=0,$a=0,Za=0,Ka=0,Ya=0,Ua=0,R=0,Ba=0,Na=p.__vertexArray,gb=p.__uvArray,kb=p.__uv2Array,ab=p.__normalArray,Ia=p.__tangentArray,P=p.__colorArray,da=p.__skinVertexAArray,aa=p.__skinVertexBArray,T=p.__skinIndexArray,ta=p.__skinWeightArray,Ja=p.__morphTargetsArrays,pa=p.__faceArray,Q=p.__lineArray,Oa=p.__needsSmoothNormals;sa=p.__vertexColorType;ua=p.__uvType;Ea=p.__normalType; -var Ra=k.geometry,db=Ra.__dirtyVertices,hb=Ra.__dirtyElements,jb=Ra.__dirtyUvs,fb=Ra.__dirtyNormals,ib=Ra.__dirtyTangents,sb=Ra.__dirtyColors,tb=Ra.__dirtyMorphTargets,ob=Ra.vertices,ub=p.faces,xb=Ra.faces,vb=Ra.faceVertexUvs[0],wb=Ra.faceVertexUvs[1],pb=Ra.skinVerticesA,qb=Ra.skinVerticesB,rb=Ra.skinIndices,mb=Ra.skinWeights,nb=Ra.edgeFaces,lb=Ra.morphTargets;F=0;for(H=ub.length;F0){d.bindBuffer(d.ARRAY_BUFFER,p.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,P,A)}if(fb){d.bindBuffer(d.ARRAY_BUFFER,p.__webglNormalBuffer);d.bufferData(d.ARRAY_BUFFER,ab,A)}if(ib&&Ra.hasTangents){d.bindBuffer(d.ARRAY_BUFFER,p.__webglTangentBuffer);d.bufferData(d.ARRAY_BUFFER,Ia,A)}if(jb&&cb>0){d.bindBuffer(d.ARRAY_BUFFER, -p.__webglUVBuffer);d.bufferData(d.ARRAY_BUFFER,gb,A)}if(jb&&bb>0){d.bindBuffer(d.ARRAY_BUFFER,p.__webglUV2Buffer);d.bufferData(d.ARRAY_BUFFER,kb,A)}if(hb){d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,p.__webglFaceBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,pa,A);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,p.__webglLineBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,Q,A)}if(R>0){d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinVertexABuffer);d.bufferData(d.ARRAY_BUFFER,da,A);d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinVertexBBuffer); -d.bufferData(d.ARRAY_BUFFER,aa,A);d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinIndicesBuffer);d.bufferData(d.ARRAY_BUFFER,T,A);d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinWeightsBuffer);d.bufferData(d.ARRAY_BUFFER,ta,A)}}}x.__dirtyVertices=!1;x.__dirtyMorphTargets=!1;x.__dirtyElements=!1;x.__dirtyUvs=!1;x.__dirtyNormals=!1;x.__dirtyTangents=!1;x.__dirtyColors=!1}else if(k instanceof THREE.Ribbon){x=k.geometry;if(x.__dirtyVertices||x.__dirtyColors){k=x;B=d.DYNAMIC_DRAW;Ea=k.vertices;A=k.colors;ka=Ea.length; -F=A.length;va=k.__vertexArray;H=k.__colorArray;La=k.__dirtyColors;if(k.__dirtyVertices){for(ua=0;ua65535){I[C].counter+=1;$=I[C].hash+"_"+I[C].counter;k.geometryGroups[$]==undefined&&(k.geometryGroups[$]={faces:[],materials:K,vertices:0,numMorphTargets:la})}k.geometryGroups[$].faces.push(A);k.geometryGroups[$].vertices+= -H}}function D(k,B,x){k.push({buffer:B,object:x,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function L(k){if(k!=za){switch(k){case THREE.AdditiveAlphaBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO, -d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,d.FUNC_ADD);d.blendFuncSeparate(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}za=k}}function N(k,B,x){if((x.width&x.width-1)==0&&(x.height&x.height-1)==0){d.texParameteri(k,d.TEXTURE_WRAP_S,W(B.wrapS));d.texParameteri(k,d.TEXTURE_WRAP_T,W(B.wrapT));d.texParameteri(k,d.TEXTURE_MAG_FILTER,W(B.magFilter));d.texParameteri(k,d.TEXTURE_MIN_FILTER,W(B.minFilter));d.generateMipmap(k)}else{d.texParameteri(k,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE); -d.texParameteri(k,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE);d.texParameteri(k,d.TEXTURE_MAG_FILTER,xa(B.magFilter));d.texParameteri(k,d.TEXTURE_MIN_FILTER,xa(B.minFilter))}}function O(k,B){if(k.needsUpdate){if(k.__webglInit){d.bindTexture(d.TEXTURE_2D,k.__webglTexture);d.texSubImage2D(d.TEXTURE_2D,0,0,0,d.RGBA,d.UNSIGNED_BYTE,k.image)}else{k.__webglTexture=d.createTexture();d.bindTexture(d.TEXTURE_2D,k.__webglTexture);d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,k.image);k.__webglInit=!0}N(d.TEXTURE_2D, -k,k.image);d.bindTexture(d.TEXTURE_2D,null);k.needsUpdate=!1}d.activeTexture(d.TEXTURE0+B);d.bindTexture(d.TEXTURE_2D,k.__webglTexture)}function Fa(k){if(k&&!k.__webglFramebuffer){k.__webglFramebuffer=d.createFramebuffer();k.__webglRenderbuffer=d.createRenderbuffer();k.__webglTexture=d.createTexture();d.bindRenderbuffer(d.RENDERBUFFER,k.__webglRenderbuffer);d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,k.width,k.height);d.bindTexture(d.TEXTURE_2D,k.__webglTexture);d.texParameteri(d.TEXTURE_2D, -d.TEXTURE_WRAP_S,W(k.wrapS));d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,W(k.wrapT));d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MAG_FILTER,W(k.magFilter));d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,W(k.minFilter));d.texImage2D(d.TEXTURE_2D,0,W(k.format),k.width,k.height,0,W(k.format),W(k.type),null);d.bindFramebuffer(d.FRAMEBUFFER,k.__webglFramebuffer);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,d.TEXTURE_2D,k.__webglTexture,0);d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_ATTACHMENT, -d.RENDERBUFFER,k.__webglRenderbuffer);d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null);d.bindFramebuffer(d.FRAMEBUFFER,null)}var B,x;if(k){B=k.__webglFramebuffer;x=k.width;k=k.height}else{B=null;x=Ca;k=fa}if(B!=Ga){d.bindFramebuffer(d.FRAMEBUFFER,B);d.viewport(U,ma,x,k);Ga=B}}function oa(k,B){var x;if(k=="fragment")x=d.createShader(d.FRAGMENT_SHADER);else k=="vertex"&&(x=d.createShader(d.VERTEX_SHADER));d.shaderSource(x,B);d.compileShader(x);if(!d.getShaderParameter(x,d.COMPILE_STATUS)){console.error(d.getShaderInfoLog(x)); -console.error(B);return null}return x}function xa(k){switch(k){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST;default:return d.LINEAR}}function W(k){switch(k){case THREE.RepeatWrapping:return d.REPEAT;case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR; -case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return d.BYTE;case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;case THREE.AlphaFormat:return d.ALPHA; -case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0}var d,Z=document.createElement("canvas"),ya=null,Ga=null,Ha=!0,ra=this,X=null,qa=null,za=null,ea=null,U=0,ma=0,Ca=0,fa=0,ja=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Da=new THREE.Matrix4,Sa=new Float32Array(16),Xa=new Float32Array(16),Wa=new THREE.Vector4, -Ta={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},M=!0,V=!0,na=new THREE.Color(0),Aa=0;if(a){if(a.stencil!=undefined)M=a.stencil;if(a.antialias!==undefined)V=a.antialias;a.clearColor!==undefined&&na.setHex(a.clearColor);if(a.clearAlpha!==undefined)Aa=a.clearAlpha}this.maxMorphTargets=8;this.domElement=Z;this.autoClear=!0;this.sortObjects=!0;(function(k,B,x,p){try{if(!(d=Z.getContext("experimental-webgl",{antialias:k,stencil:p})))throw"Error creating WebGL context."; -}catch(A){console.error(A)}d.clearColor(0,0,0,1);d.clearDepth(1);d.enable(d.DEPTH_TEST);d.depthFunc(d.LEQUAL);d.frontFace(d.CCW);d.cullFace(d.BACK);d.enable(d.CULL_FACE);d.enable(d.BLEND);d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA);d.clearColor(B.r,B.g,B.b,x)})(V,na,Aa,M);this.context=d;if(M){var ca={};ca.vertices=new Float32Array(12);ca.faces=new Uint16Array(6);ca.darkness=0.5;ca.vertices[0]=-2;ca.vertices[1]=-1;ca.vertices[2]=-1;ca.vertices[3]=2;ca.vertices[4]=-1; -ca.vertices[5]=-1;ca.vertices[6]=2;ca.vertices[7]=1;ca.vertices[8]=-1;ca.vertices[9]=-2;ca.vertices[10]=1;ca.vertices[11]=-1;ca.faces[0]=0;ca.faces[1]=1;ca.faces[2]=2;ca.faces[3]=0;ca.faces[4]=2;ca.faces[5]=3;ca.vertexBuffer=d.createBuffer();ca.elementBuffer=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,ca.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,ca.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,ca.elementBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,ca.faces,d.STATIC_DRAW);ca.program= -d.createProgram();d.attachShader(ca.program,oa("fragment",THREE.ShaderLib.shadowPost.fragmentShader));d.attachShader(ca.program,oa("vertex",THREE.ShaderLib.shadowPost.vertexShader));d.linkProgram(ca.program);ca.vertexLocation=d.getAttribLocation(ca.program,"position");ca.projectionLocation=d.getUniformLocation(ca.program,"projectionMatrix");ca.darknessLocation=d.getUniformLocation(ca.program,"darkness")}var ga={};ga.vertices=new Float32Array(16);ga.faces=new Uint16Array(6);ga.transparency=0.5;a=0; -ga.vertices[a++]=-1;ga.vertices[a++]=-1;ga.vertices[a++]=0;ga.vertices[a++]=0;ga.vertices[a++]=1;ga.vertices[a++]=-1;ga.vertices[a++]=1;ga.vertices[a++]=0;ga.vertices[a++]=1;ga.vertices[a++]=1;ga.vertices[a++]=1;ga.vertices[a++]=1;ga.vertices[a++]=-1;ga.vertices[a++]=1;ga.vertices[a++]=0;ga.vertices[a++]=1;a=0;ga.faces[a++]=0;ga.faces[a++]=1;ga.faces[a++]=2;ga.faces[a++]=0;ga.faces[a++]=2;ga.faces[a++]=3;ga.vertexBuffer=d.createBuffer();ga.elementBuffer=d.createBuffer();ga.tempTexture=d.createTexture(); -ga.readBackPixels=new Uint8Array(1024);d.bindBuffer(d.ARRAY_BUFFER,ga.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,ga.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,ga.elementBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,ga.faces,d.STATIC_DRAW);d.bindTexture(d.TEXTURE_2D,ga.tempTexture);d.texImage2D(d.TEXTURE_2D,0,d.RGB,16,16,0,d.RGB,d.UNSIGNED_BYTE,null);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE);d.texParameteri(d.TEXTURE_2D, -d.TEXTURE_MAG_FILTER,d.NEAREST);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,d.NEAREST);ga.program=d.createProgram();d.attachShader(ga.program,oa("fragment",THREE.ShaderLib.lensFlare.fragmentShader));d.attachShader(ga.program,oa("vertex",THREE.ShaderLib.lensFlare.vertexShader));d.linkProgram(ga.program);ga.attributes={};ga.uniforms={};ga.attributes.vertex=d.getAttribLocation(ga.program,"position");ga.attributes.uv=d.getAttribLocation(ga.program,"UV");ga.uniforms.map=d.getUniformLocation(ga.program, -"map");ga.uniforms.opacity=d.getUniformLocation(ga.program,"opacity");ga.uniforms.scale=d.getUniformLocation(ga.program,"scale");ga.uniforms.rotation=d.getUniformLocation(ga.program,"rotation");ga.uniforms.screenPosition=d.getUniformLocation(ga.program,"screenPosition");ga.uniforms.renderPink=d.getUniformLocation(ga.program,"renderPink");this.setSize=function(k,B){Z.width=k;Z.height=B;this.setViewport(0,0,Z.width,Z.height)};this.setViewport=function(k,B,x,p){U=k;ma=B;Ca=x;fa=p;d.viewport(U,ma,Ca, -fa)};this.setScissor=function(k,B,x,p){d.scissor(k,B,x,p)};this.enableScissorTest=function(k){k?d.enable(d.SCISSOR_TEST):d.disable(d.SCISSOR_TEST)};this.enableDepthBufferWrite=function(k){Ha=k;d.depthMask(k)};this.setClearColorHex=function(k,B){var x=new THREE.Color(k);d.clearColor(x.r,x.g,x.b,B)};this.setClearColor=function(k,B){d.clearColor(k.r,k.g,k.b,B)};this.clear=function(){d.clear(d.COLOR_BUFFER_BIT|d.DEPTH_BUFFER_BIT|d.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(k){ca.darkness= -k};this.initMaterial=function(k,B,x,p){var A,F,H,K;if(k instanceof THREE.MeshDepthMaterial)b(k,THREE.ShaderLib.depth);else if(k instanceof THREE.ShadowVolumeDynamicMaterial)b(k,THREE.ShaderLib.shadowVolumeDynamic);else if(k instanceof THREE.MeshNormalMaterial)b(k,THREE.ShaderLib.normal);else if(k instanceof THREE.MeshBasicMaterial)b(k,THREE.ShaderLib.basic);else if(k instanceof THREE.MeshLambertMaterial)b(k,THREE.ShaderLib.lambert);else if(k instanceof THREE.MeshPhongMaterial)b(k,THREE.ShaderLib.phong); -else if(k instanceof THREE.LineBasicMaterial)b(k,THREE.ShaderLib.basic);else k instanceof THREE.ParticleBasicMaterial&&b(k,THREE.ShaderLib.particle_basic);if(!k.program){var C,$,I;C=I=K=0;for(H=B.length;C0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+H.maxDirLights,"#define MAX_POINT_LIGHTS "+H.maxPointLights,"#define MAX_BONES "+H.maxBones,H.map?"#define USE_MAP":"",H.envMap?"#define USE_ENVMAP":"",H.lightMap?"#define USE_LIGHTMAP":"",H.vertexColors?"#define USE_COLOR":"",H.skinning?"#define USE_SKINNING":"",H.morphTargets?"#define USE_MORPHTARGETS": -"",H.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"); -d.attachShader(B,oa("fragment",C+x));d.attachShader(B,oa("vertex",H+K));d.linkProgram(B);d.getProgramParameter(B,d.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+d.getProgramParameter(B,d.VALIDATE_STATUS)+", gl error ["+d.getError()+"]");B.uniforms={};B.attributes={};k.program=B;x=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(A in k.uniforms)x.push(A); -A=k.program;K=0;for(B=x.length;K=0&&d.enableVertexAttribArray(F.color);F.normal>=0&&d.enableVertexAttribArray(F.normal); +k.n43+k.n23,k.n44+k.n24);ja[3].set(k.n41-k.n21,k.n42-k.n22,k.n43-k.n23,k.n44-k.n24);ja[4].set(k.n41-k.n31,k.n42-k.n32,k.n43-k.n33,k.n44-k.n34);ja[5].set(k.n41+k.n31,k.n42+k.n32,k.n43+k.n33,k.n44+k.n34);var A;for(k=0;k<6;k++){A=ja[k];A.divideScalar(Math.sqrt(A.x*A.x+A.y*A.y+A.z*A.z))}}function o(k){for(var A=k.matrixWorld,x=-k.geometry.boundingSphere.radius*Math.max(k.scale.x,Math.max(k.scale.y,k.scale.z)),p=0;p<6;p++){k=ja[p].x*A.n14+ja[p].y*A.n24+ja[p].z*A.n34+ja[p].w;if(k<=x)return!1}return!0}function n(k, +A){k.list[k.count]=A;k.count+=1}function t(k){var A,x,p=k.object,B=k.opaque,F=k.transparent;F.count=0;k=B.count=0;for(A=p.materials.length;k0.001&&C.scale>0.001){Y[0]=C.x;Y[1]=C.y;Y[2]=C.z;I=C.size*C.scale/fa;la[0]=I*$;la[1]=I;d.uniform3fv(va.screenPosition,Y);d.uniform1f(va.rotation,C.rotation);d.uniform2fv(va.scale,la);d.uniform1f(va.opacity,C.opacity);L(C.blending);O(C.texture,0);d.drawElements(d.TRIANGLES, +6,d.UNSIGNED_SHORT,0)}}}d.enable(d.CULL_FACE);d.enable(d.DEPTH_TEST);d.depthMask(Ha)}function G(k,A){k._modelViewMatrix.multiplyToArray(A.matrixWorldInverse,k.matrixWorld,k._modelViewMatrixArray);THREE.Matrix4.makeInvert3x3(k._modelViewMatrix).transposeIntoArray(k._normalMatrixArray)}function J(k){var A,x,p;if(k instanceof THREE.Mesh){x=k.geometry;for(A in x.geometryGroups){p=x.geometryGroups[A];if(x.__dirtyVertices||x.__dirtyMorphTargets||x.__dirtyElements||x.__dirtyUvs||x.__dirtyNormals||x.__dirtyColors|| +x.__dirtyTangents){var B=d.DYNAMIC_DRAW,F=void 0,H=void 0,K=void 0,C=void 0;K=void 0;var $=void 0,I=void 0,la=void 0,Y=void 0,ua=void 0,sa=void 0,Ea=void 0,ka=void 0,va=void 0,ha=void 0,ia=void 0,wa=void 0,Qa=void 0;I=void 0;la=void 0;C=void 0;Y=void 0;C=void 0;ha=void 0;ia=void 0;I=void 0;ha=void 0;ia=void 0;wa=void 0;Qa=void 0;ha=void 0;ia=void 0;wa=void 0;Qa=void 0;ha=void 0;ia=void 0;wa=void 0;Qa=void 0;ha=void 0;ia=void 0;wa=void 0;C=void 0;Y=void 0;$=void 0;K=void 0;K=void 0;var Va=void 0,eb= +void 0,Ma=void 0,La=0,Pa=0,cb=0,bb=0,$a=0,Za=0,Ka=0,Ya=0,Ua=0,R=0,Ba=0,Na=p.__vertexArray,gb=p.__uvArray,kb=p.__uv2Array,ab=p.__normalArray,Ia=p.__tangentArray,P=p.__colorArray,da=p.__skinVertexAArray,aa=p.__skinVertexBArray,T=p.__skinIndexArray,ta=p.__skinWeightArray,Ja=p.__morphTargetsArrays,pa=p.__faceArray,Q=p.__lineArray,Oa=p.__needsSmoothNormals;sa=p.__vertexColorType;ua=p.__uvType;Ea=p.__normalType;var Ra=k.geometry,db=Ra.__dirtyVertices,hb=Ra.__dirtyElements,jb=Ra.__dirtyUvs,fb=Ra.__dirtyNormals, +ib=Ra.__dirtyTangents,sb=Ra.__dirtyColors,tb=Ra.__dirtyMorphTargets,ob=Ra.vertices,ub=p.faces,xb=Ra.faces,vb=Ra.faceVertexUvs[0],wb=Ra.faceVertexUvs[1],pb=Ra.skinVerticesA,qb=Ra.skinVerticesB,rb=Ra.skinIndices,mb=Ra.skinWeights,nb=Ra.edgeFaces,lb=Ra.morphTargets;F=0;for(H=ub.length;F0){d.bindBuffer(d.ARRAY_BUFFER,p.__webglColorBuffer);d.bufferData(d.ARRAY_BUFFER,P,B)}if(fb){d.bindBuffer(d.ARRAY_BUFFER,p.__webglNormalBuffer);d.bufferData(d.ARRAY_BUFFER,ab,B)}if(ib&&Ra.hasTangents){d.bindBuffer(d.ARRAY_BUFFER,p.__webglTangentBuffer);d.bufferData(d.ARRAY_BUFFER,Ia,B)}if(jb&&cb>0){d.bindBuffer(d.ARRAY_BUFFER,p.__webglUVBuffer);d.bufferData(d.ARRAY_BUFFER,gb,B)}if(jb&&bb>0){d.bindBuffer(d.ARRAY_BUFFER, +p.__webglUV2Buffer);d.bufferData(d.ARRAY_BUFFER,kb,B)}if(hb){d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,p.__webglFaceBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,pa,B);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,p.__webglLineBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,Q,B)}if(R>0){d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinVertexABuffer);d.bufferData(d.ARRAY_BUFFER,da,B);d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinVertexBBuffer);d.bufferData(d.ARRAY_BUFFER,aa,B);d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinIndicesBuffer); +d.bufferData(d.ARRAY_BUFFER,T,B);d.bindBuffer(d.ARRAY_BUFFER,p.__webglSkinWeightsBuffer);d.bufferData(d.ARRAY_BUFFER,ta,B)}}}x.__dirtyVertices=!1;x.__dirtyMorphTargets=!1;x.__dirtyElements=!1;x.__dirtyUvs=!1;x.__dirtyNormals=!1;x.__dirtyTangents=!1;x.__dirtyColors=!1}else if(k instanceof THREE.Ribbon){x=k.geometry;if(x.__dirtyVertices||x.__dirtyColors){k=x;A=d.DYNAMIC_DRAW;Ea=k.vertices;B=k.colors;ka=Ea.length;F=B.length;va=k.__vertexArray;H=k.__colorArray;La=k.__dirtyColors;if(k.__dirtyVertices){for(ua= +0;ua65535){I[C].counter+=1;$=I[C].hash+"_"+I[C].counter;k.geometryGroups[$]==undefined&&(k.geometryGroups[$]={faces:[],materials:K,vertices:0,numMorphTargets:la})}k.geometryGroups[$].faces.push(B);k.geometryGroups[$].vertices+=H}}function D(k,A,x){k.push({buffer:A,object:x,opaque:{list:[],count:0},transparent:{list:[], +count:0}})}function L(k){if(k!=za){switch(k){case THREE.AdditiveAlphaBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.AdditiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE);break;case THREE.SubtractiveBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:d.blendEquation(d.FUNC_ADD);d.blendFunc(d.ZERO,d.SRC_COLOR);break;default:d.blendEquationSeparate(d.FUNC_ADD,d.FUNC_ADD);d.blendFuncSeparate(d.SRC_ALPHA, +d.ONE_MINUS_SRC_ALPHA,d.ONE,d.ONE_MINUS_SRC_ALPHA)}za=k}}function N(k,A,x){if((x.width&x.width-1)==0&&(x.height&x.height-1)==0){d.texParameteri(k,d.TEXTURE_WRAP_S,W(A.wrapS));d.texParameteri(k,d.TEXTURE_WRAP_T,W(A.wrapT));d.texParameteri(k,d.TEXTURE_MAG_FILTER,W(A.magFilter));d.texParameteri(k,d.TEXTURE_MIN_FILTER,W(A.minFilter));d.generateMipmap(k)}else{d.texParameteri(k,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE);d.texParameteri(k,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE);d.texParameteri(k,d.TEXTURE_MAG_FILTER,xa(A.magFilter)); +d.texParameteri(k,d.TEXTURE_MIN_FILTER,xa(A.minFilter))}}function O(k,A){if(k.needsUpdate){if(k.__webglInit){d.bindTexture(d.TEXTURE_2D,k.__webglTexture);d.texSubImage2D(d.TEXTURE_2D,0,0,0,d.RGBA,d.UNSIGNED_BYTE,k.image)}else{k.__webglTexture=d.createTexture();d.bindTexture(d.TEXTURE_2D,k.__webglTexture);d.texImage2D(d.TEXTURE_2D,0,d.RGBA,d.RGBA,d.UNSIGNED_BYTE,k.image);k.__webglInit=!0}N(d.TEXTURE_2D,k,k.image);d.bindTexture(d.TEXTURE_2D,null);k.needsUpdate=!1}d.activeTexture(d.TEXTURE0+A);d.bindTexture(d.TEXTURE_2D, +k.__webglTexture)}function Fa(k){if(k&&!k.__webglFramebuffer){k.__webglFramebuffer=d.createFramebuffer();k.__webglRenderbuffer=d.createRenderbuffer();k.__webglTexture=d.createTexture();d.bindRenderbuffer(d.RENDERBUFFER,k.__webglRenderbuffer);d.renderbufferStorage(d.RENDERBUFFER,d.DEPTH_COMPONENT16,k.width,k.height);d.bindTexture(d.TEXTURE_2D,k.__webglTexture);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_S,W(k.wrapS));d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,W(k.wrapT));d.texParameteri(d.TEXTURE_2D, +d.TEXTURE_MAG_FILTER,W(k.magFilter));d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,W(k.minFilter));d.texImage2D(d.TEXTURE_2D,0,W(k.format),k.width,k.height,0,W(k.format),W(k.type),null);d.bindFramebuffer(d.FRAMEBUFFER,k.__webglFramebuffer);d.framebufferTexture2D(d.FRAMEBUFFER,d.COLOR_ATTACHMENT0,d.TEXTURE_2D,k.__webglTexture,0);d.framebufferRenderbuffer(d.FRAMEBUFFER,d.DEPTH_ATTACHMENT,d.RENDERBUFFER,k.__webglRenderbuffer);d.bindTexture(d.TEXTURE_2D,null);d.bindRenderbuffer(d.RENDERBUFFER,null); +d.bindFramebuffer(d.FRAMEBUFFER,null)}var A,x;if(k){A=k.__webglFramebuffer;x=k.width;k=k.height}else{A=null;x=Ca;k=fa}if(A!=Ga){d.bindFramebuffer(d.FRAMEBUFFER,A);d.viewport(U,ma,x,k);Ga=A}}function oa(k,A){var x;if(k=="fragment")x=d.createShader(d.FRAGMENT_SHADER);else k=="vertex"&&(x=d.createShader(d.VERTEX_SHADER));d.shaderSource(x,A);d.compileShader(x);if(!d.getShaderParameter(x,d.COMPILE_STATUS)){console.error(d.getShaderInfoLog(x));console.error(A);return null}return x}function xa(k){switch(k){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return d.NEAREST; +default:return d.LINEAR}}function W(k){switch(k){case THREE.RepeatWrapping:return d.REPEAT;case THREE.ClampToEdgeWrapping:return d.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return d.MIRRORED_REPEAT;case THREE.NearestFilter:return d.NEAREST;case THREE.NearestMipMapNearestFilter:return d.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return d.NEAREST_MIPMAP_LINEAR;case THREE.LinearFilter:return d.LINEAR;case THREE.LinearMipMapNearestFilter:return d.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return d.LINEAR_MIPMAP_LINEAR; +case THREE.ByteType:return d.BYTE;case THREE.UnsignedByteType:return d.UNSIGNED_BYTE;case THREE.ShortType:return d.SHORT;case THREE.UnsignedShortType:return d.UNSIGNED_SHORT;case THREE.IntType:return d.INT;case THREE.UnsignedShortType:return d.UNSIGNED_INT;case THREE.FloatType:return d.FLOAT;case THREE.AlphaFormat:return d.ALPHA;case THREE.RGBFormat:return d.RGB;case THREE.RGBAFormat:return d.RGBA;case THREE.LuminanceFormat:return d.LUMINANCE;case THREE.LuminanceAlphaFormat:return d.LUMINANCE_ALPHA}return 0} +var d,Z=document.createElement("canvas"),ya=null,Ga=null,Ha=!0,ra=this,X=null,qa=null,za=null,ea=null,U=0,ma=0,Ca=0,fa=0,ja=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],Da=new THREE.Matrix4,Sa=new Float32Array(16),Xa=new Float32Array(16),Wa=new THREE.Vector4,Ta={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},M=!0,V=!0,na=new THREE.Color(0),Aa=0;if(a){if(a.stencil!= +undefined)M=a.stencil;if(a.antialias!==undefined)V=a.antialias;a.clearColor!==undefined&&na.setHex(a.clearColor);if(a.clearAlpha!==undefined)Aa=a.clearAlpha}this.maxMorphTargets=8;this.domElement=Z;this.autoClear=!0;this.sortObjects=!0;(function(k,A,x,p){try{if(!(d=Z.getContext("experimental-webgl",{antialias:k,stencil:p})))throw"Error creating WebGL context.";}catch(B){console.error(B)}d.clearColor(0,0,0,1);d.clearDepth(1);d.enable(d.DEPTH_TEST);d.depthFunc(d.LEQUAL);d.frontFace(d.CCW);d.cullFace(d.BACK); +d.enable(d.CULL_FACE);d.enable(d.BLEND);d.blendEquation(d.FUNC_ADD);d.blendFunc(d.SRC_ALPHA,d.ONE_MINUS_SRC_ALPHA);d.clearColor(A.r,A.g,A.b,x)})(V,na,Aa,M);this.context=d;if(M){var ca={};ca.vertices=new Float32Array(12);ca.faces=new Uint16Array(6);ca.darkness=0.5;ca.vertices[0]=-2;ca.vertices[1]=-1;ca.vertices[2]=-1;ca.vertices[3]=2;ca.vertices[4]=-1;ca.vertices[5]=-1;ca.vertices[6]=2;ca.vertices[7]=1;ca.vertices[8]=-1;ca.vertices[9]=-2;ca.vertices[10]=1;ca.vertices[11]=-1;ca.faces[0]=0;ca.faces[1]= +1;ca.faces[2]=2;ca.faces[3]=0;ca.faces[4]=2;ca.faces[5]=3;ca.vertexBuffer=d.createBuffer();ca.elementBuffer=d.createBuffer();d.bindBuffer(d.ARRAY_BUFFER,ca.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,ca.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,ca.elementBuffer);d.bufferData(d.ELEMENT_ARRAY_BUFFER,ca.faces,d.STATIC_DRAW);ca.program=d.createProgram();d.attachShader(ca.program,oa("fragment",THREE.ShaderLib.shadowPost.fragmentShader));d.attachShader(ca.program,oa("vertex",THREE.ShaderLib.shadowPost.vertexShader)); +d.linkProgram(ca.program);ca.vertexLocation=d.getAttribLocation(ca.program,"position");ca.projectionLocation=d.getUniformLocation(ca.program,"projectionMatrix");ca.darknessLocation=d.getUniformLocation(ca.program,"darkness")}var ga={};ga.vertices=new Float32Array(16);ga.faces=new Uint16Array(6);ga.transparency=0.5;a=0;ga.vertices[a++]=-1;ga.vertices[a++]=-1;ga.vertices[a++]=0;ga.vertices[a++]=0;ga.vertices[a++]=1;ga.vertices[a++]=-1;ga.vertices[a++]=1;ga.vertices[a++]=0;ga.vertices[a++]=1;ga.vertices[a++]= +1;ga.vertices[a++]=1;ga.vertices[a++]=1;ga.vertices[a++]=-1;ga.vertices[a++]=1;ga.vertices[a++]=0;ga.vertices[a++]=1;a=0;ga.faces[a++]=0;ga.faces[a++]=1;ga.faces[a++]=2;ga.faces[a++]=0;ga.faces[a++]=2;ga.faces[a++]=3;ga.vertexBuffer=d.createBuffer();ga.elementBuffer=d.createBuffer();ga.tempTexture=d.createTexture();ga.readBackPixels=new Uint8Array(1024);d.bindBuffer(d.ARRAY_BUFFER,ga.vertexBuffer);d.bufferData(d.ARRAY_BUFFER,ga.vertices,d.STATIC_DRAW);d.bindBuffer(d.ELEMENT_ARRAY_BUFFER,ga.elementBuffer); +d.bufferData(d.ELEMENT_ARRAY_BUFFER,ga.faces,d.STATIC_DRAW);d.bindTexture(d.TEXTURE_2D,ga.tempTexture);d.texImage2D(d.TEXTURE_2D,0,d.RGB,16,16,0,d.RGB,d.UNSIGNED_BYTE,null);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_S,d.CLAMP_TO_EDGE);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_WRAP_T,d.CLAMP_TO_EDGE);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MAG_FILTER,d.NEAREST);d.texParameteri(d.TEXTURE_2D,d.TEXTURE_MIN_FILTER,d.NEAREST);ga.program=d.createProgram();d.attachShader(ga.program,oa("fragment",THREE.ShaderLib.lensFlare.fragmentShader)); +d.attachShader(ga.program,oa("vertex",THREE.ShaderLib.lensFlare.vertexShader));d.linkProgram(ga.program);ga.attributes={};ga.uniforms={};ga.attributes.vertex=d.getAttribLocation(ga.program,"position");ga.attributes.uv=d.getAttribLocation(ga.program,"UV");ga.uniforms.map=d.getUniformLocation(ga.program,"map");ga.uniforms.opacity=d.getUniformLocation(ga.program,"opacity");ga.uniforms.scale=d.getUniformLocation(ga.program,"scale");ga.uniforms.rotation=d.getUniformLocation(ga.program,"rotation");ga.uniforms.screenPosition= +d.getUniformLocation(ga.program,"screenPosition");ga.uniforms.renderPink=d.getUniformLocation(ga.program,"renderPink");this.setSize=function(k,A){Z.width=k;Z.height=A;this.setViewport(0,0,Z.width,Z.height)};this.setViewport=function(k,A,x,p){U=k;ma=A;Ca=x;fa=p;d.viewport(U,ma,Ca,fa)};this.setScissor=function(k,A,x,p){d.scissor(k,A,x,p)};this.enableScissorTest=function(k){k?d.enable(d.SCISSOR_TEST):d.disable(d.SCISSOR_TEST)};this.enableDepthBufferWrite=function(k){Ha=k;d.depthMask(k)};this.setClearColorHex= +function(k,A){var x=new THREE.Color(k);d.clearColor(x.r,x.g,x.b,A)};this.setClearColor=function(k,A){d.clearColor(k.r,k.g,k.b,A)};this.clear=function(){d.clear(d.COLOR_BUFFER_BIT|d.DEPTH_BUFFER_BIT|d.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(k){ca.darkness=k};this.initMaterial=function(k,A,x,p){var B,F,H,K;if(k instanceof THREE.MeshDepthMaterial)b(k,THREE.ShaderLib.depth);else if(k instanceof THREE.ShadowVolumeDynamicMaterial)b(k,THREE.ShaderLib.shadowVolumeDynamic);else if(k instanceof +THREE.MeshNormalMaterial)b(k,THREE.ShaderLib.normal);else if(k instanceof THREE.MeshBasicMaterial)b(k,THREE.ShaderLib.basic);else if(k instanceof THREE.MeshLambertMaterial)b(k,THREE.ShaderLib.lambert);else if(k instanceof THREE.MeshPhongMaterial)b(k,THREE.ShaderLib.phong);else if(k instanceof THREE.LineBasicMaterial)b(k,THREE.ShaderLib.basic);else k instanceof THREE.ParticleBasicMaterial&&b(k,THREE.ShaderLib.particle_basic);if(!k.program){var C,$,I;C=I=K=0;for(H=A.length;C0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+H.maxDirLights,"#define MAX_POINT_LIGHTS "+ +H.maxPointLights,"#define MAX_BONES "+H.maxBones,H.map?"#define USE_MAP":"",H.envMap?"#define USE_ENVMAP":"",H.lightMap?"#define USE_LIGHTMAP":"",H.vertexColors?"#define USE_COLOR":"",H.skinning?"#define USE_SKINNING":"",H.morphTargets?"#define USE_MORPHTARGETS":"",H.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"); +d.attachShader(A,oa("fragment",C+x));d.attachShader(A,oa("vertex",H+K));d.linkProgram(A);d.getProgramParameter(A,d.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+d.getProgramParameter(A,d.VALIDATE_STATUS)+", gl error ["+d.getError()+"]");A.uniforms={};A.attributes={};k.program=A;x=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(B in k.uniforms)x.push(B); +B=k.program;K=0;for(A=x.length;K=0&&d.enableVertexAttribArray(F.color);F.normal>=0&&d.enableVertexAttribArray(F.normal); F.tangent>=0&&d.enableVertexAttribArray(F.tangent);if(k.skinning&&F.skinVertexA>=0&&F.skinVertexB>=0&&F.skinIndex>=0&&F.skinWeight>=0){d.enableVertexAttribArray(F.skinVertexA);d.enableVertexAttribArray(F.skinVertexB);d.enableVertexAttribArray(F.skinIndex);d.enableVertexAttribArray(F.skinWeight)}if(k.morphTargets){k.numSupportedMorphTargets=0;if(F.morphTarget0>=0){d.enableVertexAttribArray(F.morphTarget0);k.numSupportedMorphTargets++}if(F.morphTarget1>=0){d.enableVertexAttribArray(F.morphTarget1); k.numSupportedMorphTargets++}if(F.morphTarget2>=0){d.enableVertexAttribArray(F.morphTarget2);k.numSupportedMorphTargets++}if(F.morphTarget3>=0){d.enableVertexAttribArray(F.morphTarget3);k.numSupportedMorphTargets++}if(F.morphTarget4>=0){d.enableVertexAttribArray(F.morphTarget4);k.numSupportedMorphTargets++}if(F.morphTarget5>=0){d.enableVertexAttribArray(F.morphTarget5);k.numSupportedMorphTargets++}if(F.morphTarget6>=0){d.enableVertexAttribArray(F.morphTarget6);k.numSupportedMorphTargets++}if(F.morphTarget7>= -0){d.enableVertexAttribArray(F.morphTarget7);k.numSupportedMorphTargets++}p.__webglMorphTargetInfluences=new Float32Array(this.maxMorphTargets);A=0;for(F=this.maxMorphTargets;A0||Ea.faceVertexUvs.length>0)H.__uvArray=new Float32Array(C*2);if(Ea.faceUvs.length>1||Ea.faceVertexUvs.length>1)H.__uv2Array=new Float32Array(C*2)}if(K.geometry.skinWeights.length&&K.geometry.skinIndices.length){H.__skinVertexAArray=new Float32Array(C*4);H.__skinVertexBArray=new Float32Array(C*4);H.__skinIndexArray= new Float32Array(C*4);H.__skinWeightArray=new Float32Array(C*4)}H.__faceArray=new Uint16Array(Y*3+(K.geometry.edgeFaces?K.geometry.edgeFaces.length*6:0));H.__lineArray=new Uint16Array(ua*2);if(H.numMorphTargets){Ea=void 0;ka=void 0;H.__morphTargetsArrays=[];Ea=0;for(ka=H.numMorphTargets;Ea=0;A--){p=x.__webglObjects[A].object;B==p&&x.__webglObjects.splice(A,1)}k.__objectsRemoved.splice(0,1)}B=0;for(x=k.__webglObjects.length;B0}}; +6:0);H.__webglLineCount=ua*2;B.__dirtyVertices=!0;B.__dirtyMorphTargets=!0;B.__dirtyElements=!0;B.__dirtyUvs=!0;B.__dirtyNormals=!0;B.__dirtyTangents=!0;B.__dirtyColors=!0}A instanceof THREE.ShadowVolume?D(x.__webglShadowVolumes,F,A):D(x.__webglObjects,F,A)}}else if(A instanceof THREE.LensFlare)D(x.__webglLensFlares,undefined,A);else if(A instanceof THREE.Ribbon){B=A.geometry;if(!B.__webglVertexBuffer){p=B;p.__webglVertexBuffer=d.createBuffer();p.__webglColorBuffer=d.createBuffer();p=B;F=p.vertices.length; +p.__vertexArray=new Float32Array(F*3);p.__colorArray=new Float32Array(F*3);p.__webglVertexCount=F;B.__dirtyVertices=!0;B.__dirtyColors=!0}D(x.__webglObjects,B,A)}else if(A instanceof THREE.Line){B=A.geometry;if(!B.__webglVertexBuffer){p=B;p.__webglVertexBuffer=d.createBuffer();p.__webglColorBuffer=d.createBuffer();p=B;F=p.vertices.length;p.__vertexArray=new Float32Array(F*3);p.__colorArray=new Float32Array(F*3);p.__webglLineCount=F;B.__dirtyVertices=!0;B.__dirtyColors=!0}D(x.__webglObjects,B,A)}else if(A instanceof +THREE.ParticleSystem){B=A.geometry;if(!B.__webglVertexBuffer){p=B;p.__webglVertexBuffer=d.createBuffer();p.__webglColorBuffer=d.createBuffer();p=B;F=p.vertices.length;p.__vertexArray=new Float32Array(F*3);p.__colorArray=new Float32Array(F*3);p.__sortArray=[];p.__webglParticleCount=F;B.__dirtyVertices=!0;B.__dirtyColors=!0}D(x.__webglObjects,B,A)}else THREE.MarchingCubes!==undefined&&A instanceof THREE.MarchingCubes&&x.__webglObjectsImmediate.push({object:A,opaque:{list:[],count:0},transparent:{list:[], +count:0}});k.__objectsAdded.splice(0,1)}for(;k.__objectsRemoved.length;){A=k.__objectsRemoved[0];x=k;B=void 0;p=void 0;for(B=x.__webglObjects.length-1;B>=0;B--){p=x.__webglObjects[B].object;A==p&&x.__webglObjects.splice(B,1)}k.__objectsRemoved.splice(0,1)}A=0;for(x=k.__webglObjects.length;A0}}; +THREE.WebGLRenderTarget=function(a,c,b){this.width=a;this.height=c;b=b||{};this.wrapS=b.wrapS!==undefined?b.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=b.wrapT!==undefined?b.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=b.magFilter!==undefined?b.magFilter:THREE.LinearFilter;this.minFilter=b.minFilter!==undefined?b.minFilter:THREE.LinearMipMapLinearFilter;this.format=b.format!==undefined?b.format:THREE.RGBFormat;this.type=b.type!==undefined?b.type:THREE.UnsignedByteType}; THREE.SoundRenderer=function(){this.volume=1;this.domElement=document.createElement("div");this.domElement.id="THREESound";this.cameraPosition=new THREE.Vector3;this.soundPosition=new THREE.Vector3;this.render=function(a,c,b){b&&a.update(undefined,!1,c);b=a.sounds;var e,f=b.length;for(e=0;e25&&(g=25);f=(g-1)*0.5;b=Array(g);for(c=e=0;c=0?y:y+f;y=this.verticalAngleMap.srcRange;w=this.verticalAngleMap.dstRange; @@ -382,7 +373,7 @@ for(e=a+a/2;e<2*a;e++)j.faces.push(new THREE.Face4(2*a+1,(2*e-2*a+2)%a+a,(2*e-2* var Icosahedron=function(a){function c(t,y,w){var z=Math.sqrt(t*t+y*y+w*w);return f.vertices.push(new THREE.Vertex(new THREE.Vector3(t/z,y/z,w/z)))-1}function b(t,y,w,z){z.faces.push(new THREE.Face3(t,y,w))}function e(t,y){var w=f.vertices[t].position,z=f.vertices[y].position;return c((w.x+z.x)/2,(w.y+z.y)/2,(w.z+z.z)/2)}var f=this,g=new THREE.Geometry,h;this.subdivisions=a||0;THREE.Geometry.call(this);a=(1+Math.sqrt(5))/2;c(-1,a,0);c(1,a,0);c(-1,-a,0);c(1,-a,0);c(0,-1,a);c(0,1,a);c(0,-1,-a);c(0, 1,-a);c(a,0,-1);c(a,0,1);c(-a,0,-1);c(-a,0,1);b(0,11,5,g);b(0,5,1,g);b(0,1,7,g);b(0,7,10,g);b(0,10,11,g);b(1,5,9,g);b(5,11,4,g);b(11,10,2,g);b(10,7,6,g);b(7,1,8,g);b(3,9,4,g);b(3,4,2,g);b(3,2,6,g);b(3,6,8,g);b(3,8,9,g);b(4,9,5,g);b(2,4,11,g);b(6,2,10,g);b(8,6,7,g);b(9,8,1,g);for(a=0;a>7)-127;na|=(ca&127)<<16|Aa<<8;if(na==0&&k==-127)return 0;return(1-2*(ga>>7))*(1+na*Math.pow(2,-23))*Math.pow(2,k)}function j(M,V){var na=n(M,V),Aa=n(M,V+1),ca=n(M,V+2);return(n(M,V+3)<<24)+(ca<<16)+(Aa<<8)+na}function m(M,V){var na=n(M,V);return(n(M,V+1)<<8)+na}function o(M,V){var na=n(M,V);return na>127? na-256:na}function n(M,V){return M.charCodeAt(V)&255}function t(M){var V,na,Aa;V=j(a,M);na=j(a,M+O);Aa=j(a,M+Fa);M=m(a,M+oa);THREE.BinaryLoader.prototype.f3(J,V,na,Aa,M)}function y(M){var V,na,Aa,ca,ga,k;V=j(a,M);na=j(a,M+O);Aa=j(a,M+Fa);ca=m(a,M+oa);ga=j(a,M+xa);k=j(a,M+W);M=j(a,M+d);THREE.BinaryLoader.prototype.f3n(J,L,V,na,Aa,ca,ga,k,M)}function w(M){var V,na,Aa,ca;V=j(a,M);na=j(a,M+Z);Aa=j(a,M+ya);ca=j(a,M+Ga);M=m(a,M+Ha);THREE.BinaryLoader.prototype.f4(J,V,na,Aa,ca,M)}function z(M){var V,na, -Aa,ca,ga,k,B,x;V=j(a,M);na=j(a,M+Z);Aa=j(a,M+ya);ca=j(a,M+Ga);ga=m(a,M+Ha);k=j(a,M+ra);B=j(a,M+X);x=j(a,M+qa);M=j(a,M+za);THREE.BinaryLoader.prototype.f4n(J,L,V,na,Aa,ca,ga,k,B,x,M)}function E(M){var V,na;V=j(a,M);na=j(a,M+ea);M=j(a,M+U);THREE.BinaryLoader.prototype.uv3(J.faceVertexUvs[0],N[V*2],N[V*2+1],N[na*2],N[na*2+1],N[M*2],N[M*2+1])}function G(M){var V,na,Aa;V=j(a,M);na=j(a,M+ma);Aa=j(a,M+Ca);M=j(a,M+fa);THREE.BinaryLoader.prototype.uv4(J.faceVertexUvs[0],N[V*2],N[V*2+1],N[na*2],N[na*2+1],N[Aa* +Aa,ca,ga,k,A,x;V=j(a,M);na=j(a,M+Z);Aa=j(a,M+ya);ca=j(a,M+Ga);ga=m(a,M+Ha);k=j(a,M+ra);A=j(a,M+X);x=j(a,M+qa);M=j(a,M+za);THREE.BinaryLoader.prototype.f4n(J,L,V,na,Aa,ca,ga,k,A,x,M)}function E(M){var V,na;V=j(a,M);na=j(a,M+ea);M=j(a,M+U);THREE.BinaryLoader.prototype.uv3(J.faceVertexUvs[0],N[V*2],N[V*2+1],N[na*2],N[na*2+1],N[M*2],N[M*2+1])}function G(M){var V,na,Aa;V=j(a,M);na=j(a,M+ma);Aa=j(a,M+Ca);M=j(a,M+fa);THREE.BinaryLoader.prototype.uv4(J.faceVertexUvs[0],N[V*2],N[V*2+1],N[na*2],N[na*2+1],N[Aa* 2],N[Aa*2+1],N[M*2],N[M*2+1])}var J=this,S=0,D,L=[],N=[],O,Fa,oa,xa,W,d,Z,ya,Ga,Ha,ra,X,qa,za,ea,U,ma,Ca,fa,ja,Da,Sa,Xa,Wa,Ta;THREE.Geometry.call(this);THREE.Loader.prototype.init_materials(J,e,g);D={signature:a.substr(S,8),header_bytes:n(a,S+8),vertex_coordinate_bytes:n(a,S+9),normal_coordinate_bytes:n(a,S+10),uv_coordinate_bytes:n(a,S+11),vertex_index_bytes:n(a,S+12),normal_index_bytes:n(a,S+13),uv_index_bytes:n(a,S+14),material_index_bytes:n(a,S+15),nvertices:j(a,S+16),nnormals:j(a,S+16+4),nuvs:j(a, S+16+8),ntri_flat:j(a,S+16+12),ntri_smooth:j(a,S+16+16),ntri_flat_uv:j(a,S+16+20),ntri_smooth_uv:j(a,S+16+24),nquad_flat:j(a,S+16+28),nquad_smooth:j(a,S+16+32),nquad_flat_uv:j(a,S+16+36),nquad_smooth_uv:j(a,S+16+40)};S+=D.header_bytes;O=D.vertex_index_bytes;Fa=D.vertex_index_bytes*2;oa=D.vertex_index_bytes*3;xa=D.vertex_index_bytes*3+D.material_index_bytes;W=D.vertex_index_bytes*3+D.material_index_bytes+D.normal_index_bytes;d=D.vertex_index_bytes*3+D.material_index_bytes+D.normal_index_bytes*2;Z= D.vertex_index_bytes;ya=D.vertex_index_bytes*2;Ga=D.vertex_index_bytes*3;Ha=D.vertex_index_bytes*4;ra=D.vertex_index_bytes*4+D.material_index_bytes;X=D.vertex_index_bytes*4+D.material_index_bytes+D.normal_index_bytes;qa=D.vertex_index_bytes*4+D.material_index_bytes+D.normal_index_bytes*2;za=D.vertex_index_bytes*4+D.material_index_bytes+D.normal_index_bytes*3;ea=D.uv_index_bytes;U=D.uv_index_bytes*2;ma=D.uv_index_bytes;Ca=D.uv_index_bytes*2;fa=D.uv_index_bytes*3;g=D.vertex_index_bytes*3+D.material_index_bytes; diff --git a/build/custom/ThreeCanvas.js b/build/custom/ThreeCanvas.js index ee8e1aec38..c8820e28ee 100644 --- a/build/custom/ThreeCanvas.js +++ b/build/custom/ThreeCanvas.js @@ -48,7 +48,7 @@ b,c)}};THREE.Quaternion=function(a,b,c,e){this.set(a||0,b||0,c||0,e!==undefined? THREE.Quaternion.prototype={set:function(a,b,c,e){this.x=a;this.y=b;this.z=c;this.w=e;return this},setFromEuler:function(a){var b=0.5*Math.PI/360,c=a.x*b,e=a.y*b,d=a.z*b;a=Math.cos(e);e=Math.sin(e);b=Math.cos(-d);d=Math.sin(-d);var f=Math.cos(c);c=Math.sin(c);var g=a*b,i=e*d;this.w=g*f-i*c;this.x=g*c+i*f;this.y=e*b*f+a*d*c;this.z=a*d*f-e*b*c;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*= -1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var b=this.x,c=this.y,e=this.z,d=this.w,f=a.x,g=a.y,i=a.z;a=a.w;this.x=b*a+d*f+c*i-e*g;this.y=c*a+d*g+e*f-b*i;this.z=e*a+d*i+b*g-c*f;this.w=d*a-b*f-c*g-e*i;return this}, multiplyVector3:function(a,b){b||(b=a);var c=a.x,e=a.y,d=a.z,f=this.x,g=this.y,i=this.z,h=this.w,j=h*c+g*d-i*e,k=h*e+i*c-f*d,n=h*d+f*e-g*c;c=-f*c-g*e-i*d;b.x=j*h+c*-f+k*-i-n*-g;b.y=k*h+c*-g+n*-f-j*-i;b.z=n*h+c*-i+j*-g-k*-f;return b}}; -THREE.Quaternion.slerp=function(a,b,c,e){var d=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(d)>=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var f=Math.acos(d),g=Math.sqrt(1-d*d);if(Math.abs(g)<0.0010){c.w=0.5*(a.w+b.w);c.x=0.5*(a.x+b.x);c.y=0.5*(a.y+b.y);c.z=0.5*(a.z+b.z);return c}d=Math.sin((1-e)*f)/g;e=Math.sin(e*f)/g;c.w=a.w*d+b.w*e;c.x=a.x*d+b.x*e;c.y=a.y*d+b.y*e;c.z=a.z*d+b.z*e;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; +THREE.Quaternion.slerp=function(a,b,c,e){var d=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(d)>=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var f=Math.acos(d),g=Math.sqrt(1-d*d);if(Math.abs(g)<0.001){c.w=0.5*(a.w+b.w);c.x=0.5*(a.x+b.x);c.y=0.5*(a.y+b.y);c.z=0.5*(a.z+b.z);return c}d=Math.sin((1-e)*f)/g;e=Math.sin(e*f)/g;c.w=a.w*d+b.w*e;c.x=a.x*d+b.x*e;c.y=a.y*d+b.y*e;c.z=a.z*d+b.z*e;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; THREE.Face3=function(a,b,c,e,d,f){this.a=a;this.b=b;this.c=c;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=d instanceof THREE.Color?d:new THREE.Color;this.vertexColors=d instanceof Array?d:[];this.vertexTangents=[];this.materials=f instanceof Array?f:[f];this.centroid=new THREE.Vector3}; THREE.Face4=function(a,b,c,e,d,f,g){this.a=a;this.b=b;this.c=c;this.d=e;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materials=g instanceof Array?g:[g];this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.set(a||0,b||0)}; THREE.UV.prototype={set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.set(a.u,a.v);return this}};THREE.Geometry=function(){this.id="Geometry"+THREE.GeometryIdCounter++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1}; @@ -83,29 +83,22 @@ THREE.Camera.prototype.translate=function(a,b){this.matrix.rotateAxis(b);this.po THREE.Camera.prototype.update=function(a,b,c){if(this.useTarget){this.matrix.lookAt(this.position,this.target.position,this.up);this.matrix.setPosition(this.position);a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse);b=!0}else{this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate= !1;b=!0;THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse)}}for(a=0;a=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var g=Math.acos(d),f=Math.sqrt(1-d*d);if(Math.abs(f)<0.0010){c.w=0.5*(a.w+b.w);c.x=0.5*(a.x+b.x);c.y=0.5*(a.y+b.y);c.z=0.5*(a.z+b.z);return c}d=Math.sin((1-e)*g)/f;e=Math.sin(e*g)/f;c.w=a.w*d+b.w*e;c.x=a.x*d+b.x*e;c.y=a.y*d+b.y*e;c.z=a.z*d+b.z*e;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; +THREE.Quaternion.slerp=function(a,b,c,e){var d=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(d)>=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var g=Math.acos(d),f=Math.sqrt(1-d*d);if(Math.abs(f)<0.001){c.w=0.5*(a.w+b.w);c.x=0.5*(a.x+b.x);c.y=0.5*(a.y+b.y);c.z=0.5*(a.z+b.z);return c}d=Math.sin((1-e)*g)/f;e=Math.sin(e*g)/f;c.w=a.w*d+b.w*e;c.x=a.x*d+b.x*e;c.y=a.y*d+b.y*e;c.z=a.z*d+b.z*e;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; THREE.Face3=function(a,b,c,e,d,g){this.a=a;this.b=b;this.c=c;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=d instanceof THREE.Color?d:new THREE.Color;this.vertexColors=d instanceof Array?d:[];this.vertexTangents=[];this.materials=g instanceof Array?g:[g];this.centroid=new THREE.Vector3}; THREE.Face4=function(a,b,c,e,d,g,f){this.a=a;this.b=b;this.c=c;this.d=e;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=g instanceof THREE.Color?g:new THREE.Color;this.vertexColors=g instanceof Array?g:[];this.vertexTangents=[];this.materials=f instanceof Array?f:[f];this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.set(a||0,b||0)}; THREE.UV.prototype={set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.set(a.u,a.v);return this}}; @@ -72,7 +72,7 @@ THREE.Animation.prototype.getPrevKeyWith=function(a,b,c){var e=this.data.hierarc THREE.Camera=function(a,b,c,e,d){THREE.Object3D.call(this);this.fov=a||50;this.aspect=b||1;this.near=c||0.1;this.far=e||2E3;this.target=d||new THREE.Object3D;this.useTarget=!0;this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=null;this.updateProjectionMatrix()};THREE.Camera.prototype=new THREE.Object3D;THREE.Camera.prototype.constructor=THREE.Camera;THREE.Camera.prototype.supr=THREE.Object3D.prototype; THREE.Camera.prototype.translate=function(a,b){this.matrix.rotateAxis(b);this.position.addSelf(b.multiplyScalar(a));this.target.position.addSelf(b.multiplyScalar(a))};THREE.Camera.prototype.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)};THREE.Camera.prototype.updateMatrix=function(){this.update(undefined,!0)}; THREE.Camera.prototype.update=function(a,b,c){if(this.useTarget){this.matrix.lookAt(this.position,this.target.position,this.up);this.matrix.setPosition(this.position);a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse);b=!0}else{this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate= -!1;b=!0;THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse)}}for(a=0;a25&&(f=25);d=(f-1)*0.5;b=Array(f);for(e=c=0;e=0?p:p+d;p=this.verticalAngleMap.srcRange;w=this.verticalAngleMap.dstRange; @@ -50,7 +50,7 @@ for(c=a+a/2;c<2*a;c++)h.faces.push(new THREE.Face4(2*a+1,(2*c-2*a+2)%a+a,(2*c-2* var Icosahedron=function(a){function e(m,p,w){var t=Math.sqrt(m*m+p*p+w*w);return d.vertices.push(new THREE.Vertex(new THREE.Vector3(m/t,p/t,w/t)))-1}function b(m,p,w,t){t.faces.push(new THREE.Face3(m,p,w))}function c(m,p){var w=d.vertices[m].position,t=d.vertices[p].position;return e((w.x+t.x)/2,(w.y+t.y)/2,(w.z+t.z)/2)}var d=this,f=new THREE.Geometry,g;this.subdivisions=a||0;THREE.Geometry.call(this);a=(1+Math.sqrt(5))/2;e(-1,a,0);e(1,a,0);e(-1,-a,0);e(1,-a,0);e(0,-1,a);e(0,1,a);e(0,-1,-a);e(0, 1,-a);e(a,0,-1);e(a,0,1);e(-a,0,-1);e(-a,0,1);b(0,11,5,f);b(0,5,1,f);b(0,1,7,f);b(0,7,10,f);b(0,10,11,f);b(1,5,9,f);b(5,11,4,f);b(11,10,2,f);b(10,7,6,f);b(7,1,8,f);b(3,9,4,f);b(3,4,2,f);b(3,2,6,f);b(3,6,8,f);b(3,8,9,f);b(4,9,5,f);b(2,4,11,f);b(6,2,10,f);b(8,6,7,f);b(9,8,1,f);for(a=0;a=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var f=Math.acos(d),g=Math.sqrt(1-d*d);if(Math.abs(g)<0.0010){c.w=0.5*(a.w+b.w);c.x=0.5*(a.x+b.x);c.y=0.5*(a.y+b.y);c.z=0.5*(a.z+b.z);return c}d=Math.sin((1-e)*f)/g;e=Math.sin(e*f)/g;c.w=a.w*d+b.w*e;c.x=a.x*d+b.x*e;c.y=a.y*d+b.y*e;c.z=a.z*d+b.z*e;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; +THREE.Quaternion.slerp=function(a,b,c,e){var d=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;if(Math.abs(d)>=1){c.w=a.w;c.x=a.x;c.y=a.y;c.z=a.z;return c}var f=Math.acos(d),g=Math.sqrt(1-d*d);if(Math.abs(g)<0.001){c.w=0.5*(a.w+b.w);c.x=0.5*(a.x+b.x);c.y=0.5*(a.y+b.y);c.z=0.5*(a.z+b.z);return c}d=Math.sin((1-e)*f)/g;e=Math.sin(e*f)/g;c.w=a.w*d+b.w*e;c.x=a.x*d+b.x*e;c.y=a.y*d+b.y*e;c.z=a.z*d+b.z*e;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; THREE.Face3=function(a,b,c,e,d,f){this.a=a;this.b=b;this.c=c;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=d instanceof THREE.Color?d:new THREE.Color;this.vertexColors=d instanceof Array?d:[];this.vertexTangents=[];this.materials=f instanceof Array?f:[f];this.centroid=new THREE.Vector3}; THREE.Face4=function(a,b,c,e,d,f,g){this.a=a;this.b=b;this.c=c;this.d=e;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materials=g instanceof Array?g:[g];this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.set(a||0,b||0)}; THREE.UV.prototype={set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.set(a.u,a.v);return this}};THREE.Geometry=function(){this.id="Geometry"+THREE.GeometryIdCounter++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1}; @@ -83,28 +83,22 @@ THREE.Camera.prototype.translate=function(a,b){this.matrix.rotateAxis(b);this.po THREE.Camera.prototype.update=function(a,b,c){if(this.useTarget){this.matrix.lookAt(this.position,this.target.position,this.up);this.matrix.setPosition(this.position);a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse);b=!0}else{this.matrixAutoUpdate&&(b|=this.updateMatrix());if(b||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate= !1;b=!0;THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse)}}for(a=0;a>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+","+~~(this.g* +THREE.Color.prototype={autoUpdate:!0,copy:function(a){this.r=a.r;this.g=a.g;this.b=a.b;this.hex=a.hex;this.__styleString=a.__styleString},setRGB:function(a,c,d){this.r=a;this.g=c;this.b=d;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHSV:function(a,c,d){var g,f,i,j,o,p;if(d==0)g=f=i=0;else{j=Math.floor(a*6);o=a*6-j;a=d*(1-c);p=d*(1-c*o);c=d*(1-c*(1-o));switch(j){case 1:g=p;f=d;i=a;break;case 2:g=a;f=d;i=c;break;case 3:g=a;f=p;i=d;break;case 4:g=c;f=a;i=d;break;case 5:g=d;f=a; +i=p;break;case 6:case 0:g=d;f=c;i=a}}this.r=g;this.g=f;this.b=i;if(this.autoUpdate){this.updateHex();this.updateStyleString()}},setHex:function(a){this.hex=~~a&16777215;if(this.autoUpdate){this.updateRGB();this.updateStyleString()}},updateHex:function(){this.hex=~~(this.r*255)<<16^~~(this.g*255)<<8^~~(this.b*255)},updateRGB:function(){this.r=(this.hex>>16&255)/255;this.g=(this.hex>>8&255)/255;this.b=(this.hex&255)/255},updateStyleString:function(){this.__styleString="rgb("+~~(this.r*255)+","+~~(this.g* 255)+","+~~(this.b*255)+")"},clone:function(){return new THREE.Color(this.hex)}};THREE.Vector2=function(a,c){this.set(a||0,c||0)}; THREE.Vector2.prototype={set:function(a,c){this.x=a;this.y=c;return this},copy:function(a){this.set(a.x,a.y);return this},addSelf:function(a){this.set(this.x+a.x,this.y+a.y);return this},add:function(a,c){this.set(a.x+c.x,a.y+c.y);return this},subSelf:function(a){this.set(this.x-a.x,this.y-a.y);return this},sub:function(a,c){this.set(a.x-c.x,a.y-c.y);return this},multiplyScalar:function(a){this.set(this.x*a,this.y*a);return this},negate:function(){this.set(-this.x,-this.y);return this},unit:function(){this.multiplyScalar(1/ this.length());return this},length:function(){return Math.sqrt(this.lengthSq())},lengthSq:function(){return this.x*this.x+this.y*this.y},clone:function(){return new THREE.Vector2(this.x,this.y)}};THREE.Vector3=function(a,c,d){this.set(a||0,c||0,d||0)}; @@ -12,122 +12,114 @@ this.length();a>0?this.multiplyScalar(1/a):this.set(0,0,0);return this},setPosit 1.0E-4&&Math.abs(this.z)<1.0E-4},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}};THREE.Vector4=function(a,c,d,g){this.set(a||0,c||0,d||0,g||1)}; THREE.Vector4.prototype={set:function(a,c,d,g){this.x=a;this.y=c;this.z=d;this.w=g;return this},copy:function(a){this.set(a.x,a.y,a.z,a.w||1);return this},add:function(a,c){this.set(a.x+c.x,a.y+c.y,a.z+c.z,a.w+c.w);return this},addSelf:function(a){this.set(this.x+a.x,this.y+a.y,this.z+a.z,this.w+a.w);return this},sub:function(a,c){this.set(a.x-c.x,a.y-c.y,a.z-c.z,a.w-c.w);return this},subSelf:function(a){this.set(this.x-a.x,this.y-a.y,this.z-a.z,this.w-a.w);return this},multiplyScalar:function(a){this.set(this.x* a,this.y*a,this.z*a,this.w*a);return this},divideScalar:function(a){this.set(this.x/a,this.y/a,this.z/a,this.w/a);return this},lerpSelf:function(a,c){this.set(this.x+(a.x-this.x)*c,this.y+(a.y-this.y)*c,this.z+(a.z-this.z)*c,this.w+(a.w-this.w)*c)},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)}};THREE.Ray=function(a,c){this.origin=a||new THREE.Vector3;this.direction=c||new THREE.Vector3}; -THREE.Ray.prototype={intersectScene:function(a){var c,d,g=a.objects,f=[];a=0;for(c=g.length;a0&&Q>0&&S+Q< -1}var d,g,f,h,i,n,o,t,x,y,B,z=a.geometry,H=z.vertices,J=[];d=0;for(g=z.faces.length;do?g:o;f=f>t?f:t}a()}; -this.add3Points=function(o,t,x,y,B,z){if(n){n=!1;c=ox?o>B?o:B:x>B?x:B;f=t>y?t>z?t:z:y>z?y:z}else{c=ox?o>B?o>g?o:g:B>g?B:g:x>B?x>g?x:g:B>g?B:g;f=t>y?t>z?t>f?t:f:z>f?z:f:y>z?y>f?y:f:z>f?z:f}a()};this.addRectangle=function(o){if(n){n=!1;c=o.getLeft();d=o.getTop();g=o.getRight();f=o.getBottom()}else{c=co.getRight()? -g:o.getRight();f=f>o.getBottom()?f:o.getBottom()}a()};this.inflate=function(o){c-=o;d-=o;g+=o;f+=o;a()};this.minSelf=function(o){c=c>o.getLeft()?c:o.getLeft();d=d>o.getTop()?d:o.getTop();g=g=0&&Math.min(f,o.getBottom())-Math.max(d,o.getTop())>=0};this.empty=function(){n=!0;f=g=d=c=0;a()};this.isEmpty=function(){return n}}; +THREE.Ray.prototype={intersectScene:function(a){var c,d,g=a.objects,f=[];a=0;for(c=g.length;a0&&T>0&&V+T<1}var d,g, +f,i,j,o,p,v,x,y,D,z=a.geometry,K=z.vertices,M=[];d=0;for(g=z.faces.length;dp?g:p;f=f>v?f:v}a()}; +this.add3Points=function(p,v,x,y,D,z){if(o){o=!1;c=px?p>D?p:D:x>D?x:D;f=v>y?v>z?v:z:y>z?y:z}else{c=px?p>D?p>g?p:g:D>g?D:g:x>D?x>g?x:g:D>g?D:g;f=v>y?v>z?v>f?v:f:z>f?z:f:y>z?y>f?y:f:z>f?z:f}a()};this.addRectangle=function(p){if(o){o=!1;c=p.getLeft();d=p.getTop();g=p.getRight();f=p.getBottom()}else{c=cp.getRight()? +g:p.getRight();f=f>p.getBottom()?f:p.getBottom()}a()};this.inflate=function(p){c-=p;d-=p;g+=p;f+=p;a()};this.minSelf=function(p){c=c>p.getLeft()?c:p.getLeft();d=d>p.getTop()?d:p.getTop();g=g=0&&Math.min(f,p.getBottom())-Math.max(d,p.getTop())>=0};this.empty=function(){o=!0;f=g=d=c=0;a()};this.isEmpty=function(){return o}}; THREE.Matrix3=function(){this.m=[]};THREE.Matrix3.prototype={transpose:function(){var a,c=this.m;a=c[1];c[1]=c[3];c[3]=a;a=c[2];c[2]=c[6];c[6]=a;a=c[5];c[5]=c[7];c[7]=a;return this},transposeIntoArray:function(a){var c=this.m;a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return this}}; -THREE.Matrix4=function(a,c,d,g,f,h,i,n,o,t,x,y,B,z,H,J){this.set(a||1,c||0,d||0,g||0,f||0,h||1,i||0,n||0,o||0,t||0,x||1,y||0,B||0,z||0,H||0,J||1);this.flat=Array(16);this.m33=new THREE.Matrix3}; -THREE.Matrix4.prototype={set:function(a,c,d,g,f,h,i,n,o,t,x,y,B,z,H,J){this.n11=a;this.n12=c;this.n13=d;this.n14=g;this.n21=f;this.n22=h;this.n23=i;this.n24=n;this.n31=o;this.n32=t;this.n33=x;this.n34=y;this.n41=B;this.n42=z;this.n43=H;this.n44=J;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a,c,d){var g=THREE.Matrix4.__v1, -f=THREE.Matrix4.__v2,h=THREE.Matrix4.__v3;h.sub(a,c).normalize();if(h.length()===0)h.z=1;g.cross(d,h).normalize();if(g.length()===0){h.x+=1.0E-4;g.cross(d,h).normalize()}f.cross(h,g).normalize();this.n11=g.x;this.n12=f.x;this.n13=h.x;this.n21=g.y;this.n22=f.y;this.n23=h.y;this.n31=g.z;this.n32=f.z;this.n33=h.z;return this},multiplyVector3:function(a){var c=a.x,d=a.y,g=a.z,f=1/(this.n41*c+this.n42*d+this.n43*g+this.n44);a.x=(this.n11*c+this.n12*d+this.n13*g+this.n14)*f;a.y=(this.n21*c+this.n22*d+this.n23* +THREE.Matrix4=function(a,c,d,g,f,i,j,o,p,v,x,y,D,z,K,M){this.set(a||1,c||0,d||0,g||0,f||0,i||1,j||0,o||0,p||0,v||0,x||1,y||0,D||0,z||0,K||0,M||1);this.flat=Array(16);this.m33=new THREE.Matrix3}; +THREE.Matrix4.prototype={set:function(a,c,d,g,f,i,j,o,p,v,x,y,D,z,K,M){this.n11=a;this.n12=c;this.n13=d;this.n14=g;this.n21=f;this.n22=i;this.n23=j;this.n24=o;this.n31=p;this.n32=v;this.n33=x;this.n34=y;this.n41=D;this.n42=z;this.n43=K;this.n44=M;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},copy:function(a){this.set(a.n11,a.n12,a.n13,a.n14,a.n21,a.n22,a.n23,a.n24,a.n31,a.n32,a.n33,a.n34,a.n41,a.n42,a.n43,a.n44);return this},lookAt:function(a,c,d){var g=THREE.Matrix4.__v1, +f=THREE.Matrix4.__v2,i=THREE.Matrix4.__v3;i.sub(a,c).normalize();if(i.length()===0)i.z=1;g.cross(d,i).normalize();if(g.length()===0){i.x+=1.0E-4;g.cross(d,i).normalize()}f.cross(i,g).normalize();this.n11=g.x;this.n12=f.x;this.n13=i.x;this.n21=g.y;this.n22=f.y;this.n23=i.y;this.n31=g.z;this.n32=f.z;this.n33=i.z;return this},multiplyVector3:function(a){var c=a.x,d=a.y,g=a.z,f=1/(this.n41*c+this.n42*d+this.n43*g+this.n44);a.x=(this.n11*c+this.n12*d+this.n13*g+this.n14)*f;a.y=(this.n21*c+this.n22*d+this.n23* g+this.n24)*f;a.z=(this.n31*c+this.n32*d+this.n33*g+this.n34)*f;return a},multiplyVector4:function(a){var c=a.x,d=a.y,g=a.z,f=a.w;a.x=this.n11*c+this.n12*d+this.n13*g+this.n14*f;a.y=this.n21*c+this.n22*d+this.n23*g+this.n24*f;a.z=this.n31*c+this.n32*d+this.n33*g+this.n34*f;a.w=this.n41*c+this.n42*d+this.n43*g+this.n44*f;return a},rotateAxis:function(a){var c=a.x,d=a.y,g=a.z;a.x=c*this.n11+d*this.n12+g*this.n13;a.y=c*this.n21+d*this.n22+g*this.n23;a.z=c*this.n31+d*this.n32+g*this.n33;a.normalize(); -return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,g=a.n12,f=a.n13,h=a.n14,i=a.n21,n=a.n22,o=a.n23,t=a.n24,x=a.n31,y=a.n32,B=a.n33,z=a.n34,H=a.n41,J=a.n42,Q=a.n43,K=a.n44,ia=c.n11,la=c.n12,va=c.n13,S=c.n14,D=c.n21,fa=c.n22, -b=c.n23,oa=c.n24,ra=c.n31,R=c.n32,O=c.n33,pa=c.n34;this.n11=d*ia+g*D+f*ra;this.n12=d*la+g*fa+f*R;this.n13=d*va+g*b+f*O;this.n14=d*S+g*oa+f*pa+h;this.n21=i*ia+n*D+o*ra;this.n22=i*la+n*fa+o*R;this.n23=i*va+n*b+o*O;this.n24=i*S+n*oa+o*pa+t;this.n31=x*ia+y*D+B*ra;this.n32=x*la+y*fa+B*R;this.n33=x*va+y*b+B*O;this.n34=x*S+y*oa+B*pa+z;this.n41=H*ia+J*D+Q*ra;this.n42=H*la+J*fa+Q*R;this.n43=H*va+J*b+Q*O;this.n44=H*S+J*oa+Q*pa+K;return this},multiplyToArray:function(a,c,d){this.multiply(a,c);d[0]=this.n11; -d[1]=this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34;d[15]=this.n44;return this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*= -a;return this},determinant:function(){var a=this.n11,c=this.n12,d=this.n13,g=this.n14,f=this.n21,h=this.n22,i=this.n23,n=this.n24,o=this.n31,t=this.n32,x=this.n33,y=this.n34,B=this.n41,z=this.n42,H=this.n43,J=this.n44;return g*i*t*B-d*n*t*B-g*h*x*B+c*n*x*B+d*h*y*B-c*i*y*B-g*i*o*z+d*n*o*z+g*f*x*z-a*n*x*z-d*f*y*z+a*i*y*z+g*h*o*H-c*n*o*H-g*f*t*H+a*n*t*H+c*f*y*H-a*h*y*H-d*h*o*J+c*i*o*J+d*f*t*J-a*i*t*J-c*f*x*J+a*h*x*J},transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31= +return a},crossVector:function(a){var c=new THREE.Vector4;c.x=this.n11*a.x+this.n12*a.y+this.n13*a.z+this.n14*a.w;c.y=this.n21*a.x+this.n22*a.y+this.n23*a.z+this.n24*a.w;c.z=this.n31*a.x+this.n32*a.y+this.n33*a.z+this.n34*a.w;c.w=a.w?this.n41*a.x+this.n42*a.y+this.n43*a.z+this.n44*a.w:1;return c},multiply:function(a,c){var d=a.n11,g=a.n12,f=a.n13,i=a.n14,j=a.n21,o=a.n22,p=a.n23,v=a.n24,x=a.n31,y=a.n32,D=a.n33,z=a.n34,K=a.n41,M=a.n42,T=a.n43,O=a.n44,pa=c.n11,Y=c.n12,qa=c.n13,V=c.n14,E=c.n21,Fa=c.n22, +ka=c.n23,Da=c.n24,$=c.n31,b=c.n32,Q=c.n33,la=c.n34;this.n11=d*pa+g*E+f*$;this.n12=d*Y+g*Fa+f*b;this.n13=d*qa+g*ka+f*Q;this.n14=d*V+g*Da+f*la+i;this.n21=j*pa+o*E+p*$;this.n22=j*Y+o*Fa+p*b;this.n23=j*qa+o*ka+p*Q;this.n24=j*V+o*Da+p*la+v;this.n31=x*pa+y*E+D*$;this.n32=x*Y+y*Fa+D*b;this.n33=x*qa+y*ka+D*Q;this.n34=x*V+y*Da+D*la+z;this.n41=K*pa+M*E+T*$;this.n42=K*Y+M*Fa+T*b;this.n43=K*qa+M*ka+T*Q;this.n44=K*V+M*Da+T*la+O;return this},multiplyToArray:function(a,c,d){this.multiply(a,c);d[0]=this.n11;d[1]= +this.n21;d[2]=this.n31;d[3]=this.n41;d[4]=this.n12;d[5]=this.n22;d[6]=this.n32;d[7]=this.n42;d[8]=this.n13;d[9]=this.n23;d[10]=this.n33;d[11]=this.n43;d[12]=this.n14;d[13]=this.n24;d[14]=this.n34;d[15]=this.n44;return this},multiplySelf:function(a){this.multiply(this,a);return this},multiplyScalar:function(a){this.n11*=a;this.n12*=a;this.n13*=a;this.n14*=a;this.n21*=a;this.n22*=a;this.n23*=a;this.n24*=a;this.n31*=a;this.n32*=a;this.n33*=a;this.n34*=a;this.n41*=a;this.n42*=a;this.n43*=a;this.n44*= +a;return this},determinant:function(){var a=this.n11,c=this.n12,d=this.n13,g=this.n14,f=this.n21,i=this.n22,j=this.n23,o=this.n24,p=this.n31,v=this.n32,x=this.n33,y=this.n34,D=this.n41,z=this.n42,K=this.n43,M=this.n44;return g*j*v*D-d*o*v*D-g*i*x*D+c*o*x*D+d*i*y*D-c*j*y*D-g*j*p*z+d*o*p*z+g*f*x*z-a*o*x*z-d*f*y*z+a*j*y*z+g*i*p*K-c*o*p*K-g*f*v*K+a*o*v*K+c*f*y*K-a*i*y*K-d*i*p*M+c*j*p*M+d*f*v*M-a*j*v*M-c*f*x*M+a*i*x*M},transpose:function(){var a;a=this.n21;this.n21=this.n12;this.n12=a;a=this.n31;this.n31= this.n13;this.n13=a;a=this.n32;this.n32=this.n23;this.n23=a;a=this.n41;this.n41=this.n14;this.n14=a;a=this.n42;this.n42=this.n24;this.n24=a;a=this.n43;this.n43=this.n34;this.n43=a;return this},clone:function(){var a=new THREE.Matrix4;a.n11=this.n11;a.n12=this.n12;a.n13=this.n13;a.n14=this.n14;a.n21=this.n21;a.n22=this.n22;a.n23=this.n23;a.n24=this.n24;a.n31=this.n31;a.n32=this.n32;a.n33=this.n33;a.n34=this.n34;a.n41=this.n41;a.n42=this.n42;a.n43=this.n43;a.n44=this.n44;return a},flatten:function(){this.flat[0]= this.n11;this.flat[1]=this.n21;this.flat[2]=this.n31;this.flat[3]=this.n41;this.flat[4]=this.n12;this.flat[5]=this.n22;this.flat[6]=this.n32;this.flat[7]=this.n42;this.flat[8]=this.n13;this.flat[9]=this.n23;this.flat[10]=this.n33;this.flat[11]=this.n43;this.flat[12]=this.n14;this.flat[13]=this.n24;this.flat[14]=this.n34;this.flat[15]=this.n44;return this.flat},flattenToArray:function(a){a[0]=this.n11;a[1]=this.n21;a[2]=this.n31;a[3]=this.n41;a[4]=this.n12;a[5]=this.n22;a[6]=this.n32;a[7]=this.n42; a[8]=this.n13;a[9]=this.n23;a[10]=this.n33;a[11]=this.n43;a[12]=this.n14;a[13]=this.n24;a[14]=this.n34;a[15]=this.n44;return a},flattenToArrayOffset:function(a,c){a[c]=this.n11;a[c+1]=this.n21;a[c+2]=this.n31;a[c+3]=this.n41;a[c+4]=this.n12;a[c+5]=this.n22;a[c+6]=this.n32;a[c+7]=this.n42;a[c+8]=this.n13;a[c+9]=this.n23;a[c+10]=this.n33;a[c+11]=this.n43;a[c+12]=this.n14;a[c+13]=this.n24;a[c+14]=this.n34;a[c+15]=this.n44;return a},setTranslation:function(a,c,d){this.set(1,0,0,a,0,1,0,c,0,0,1,d,0,0, 0,1);return this},setScale:function(a,c,d){this.set(a,0,0,0,0,c,0,0,0,0,d,0,0,0,0,1);return this},setRotationX:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,c,-a,0,0,a,c,0,0,0,0,1);return this},setRotationY:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,0,a,0,0,1,0,0,-a,0,c,0,0,0,0,1);return this},setRotationZ:function(a){var c=Math.cos(a);a=Math.sin(a);this.set(c,-a,0,0,a,c,0,0,0,0,1,0,0,0,0,1);return this},setRotationAxis:function(a,c){var d=Math.cos(c),g=Math.sin(c),f= -1-d,h=a.x,i=a.y,n=a.z,o=f*h,t=f*i;this.set(o*h+d,o*i-g*n,o*n+g*i,0,o*i+g*n,t*i+d,t*n-g*h,0,o*n-g*i,t*n+g*h,f*n*n+d,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},setRotationFromEuler:function(a){var c=a.x,d=a.y,g=a.z;a=Math.cos(c);c=Math.sin(c);var f=Math.cos(d);d=Math.sin(d);var h=Math.cos(g);g=Math.sin(g);var i=a*d,n=c*d;this.n11=f*h;this.n12=-f*g;this.n13=d;this.n21=n*h+a*g;this.n22=-n*g+a*h;this.n23=-c*f;this.n31=-i*h+c*g;this.n32=i*g+c*h;this.n33= -a*f;return this},setRotationFromQuaternion:function(a){var c=a.x,d=a.y,g=a.z,f=a.w,h=c+c,i=d+d,n=g+g;a=c*h;var o=c*i;c*=n;var t=d*i;d*=n;g*=n;h*=f;i*=f;f*=n;this.n11=1-(t+g);this.n12=o-f;this.n13=c+i;this.n21=o+f;this.n22=1-(a+g);this.n23=d-h;this.n31=c-i;this.n32=d+h;this.n33=1-(a+t);return this},scale:function(a){var c=a.x,d=a.y;a=a.z;this.n11*=c;this.n12*=d;this.n13*=a;this.n21*=c;this.n22*=d;this.n23*=a;this.n31*=c;this.n32*=d;this.n33*=a;this.n41*=c;this.n42*=d;this.n43*=a;return this},extractPosition:function(a){this.n14= +1-d,i=a.x,j=a.y,o=a.z,p=f*i,v=f*j;this.set(p*i+d,p*j-g*o,p*o+g*j,0,p*j+g*o,v*j+d,v*o-g*i,0,p*o-g*j,v*o+g*i,f*o*o+d,0,0,0,0,1);return this},setPosition:function(a){this.n14=a.x;this.n24=a.y;this.n34=a.z;return this},setRotationFromEuler:function(a){var c=a.x,d=a.y,g=a.z;a=Math.cos(c);c=Math.sin(c);var f=Math.cos(d);d=Math.sin(d);var i=Math.cos(g);g=Math.sin(g);var j=a*d,o=c*d;this.n11=f*i;this.n12=-f*g;this.n13=d;this.n21=o*i+a*g;this.n22=-o*g+a*i;this.n23=-c*f;this.n31=-j*i+c*g;this.n32=j*g+c*i;this.n33= +a*f;return this},setRotationFromQuaternion:function(a){var c=a.x,d=a.y,g=a.z,f=a.w,i=c+c,j=d+d,o=g+g;a=c*i;var p=c*j;c*=o;var v=d*j;d*=o;g*=o;i*=f;j*=f;f*=o;this.n11=1-(v+g);this.n12=p-f;this.n13=c+j;this.n21=p+f;this.n22=1-(a+g);this.n23=d-i;this.n31=c-j;this.n32=d+i;this.n33=1-(a+v);return this},scale:function(a){var c=a.x,d=a.y;a=a.z;this.n11*=c;this.n12*=d;this.n13*=a;this.n21*=c;this.n22*=d;this.n23*=a;this.n31*=c;this.n32*=d;this.n33*=a;this.n41*=c;this.n42*=d;this.n43*=a;return this},extractPosition:function(a){this.n14= a.n14;this.n24=a.n24;this.n34=a.n34},extractRotation:function(a,c){var d=1/c.x,g=1/c.y,f=1/c.z;this.n11=a.n11*d;this.n21=a.n21*d;this.n31=a.n31*d;this.n12=a.n12*g;this.n22=a.n22*g;this.n32=a.n32*g;this.n13=a.n13*f;this.n23=a.n23*f;this.n33=a.n33*f}}; -THREE.Matrix4.makeInvert=function(a,c){var d=a.n11,g=a.n12,f=a.n13,h=a.n14,i=a.n21,n=a.n22,o=a.n23,t=a.n24,x=a.n31,y=a.n32,B=a.n33,z=a.n34,H=a.n41,J=a.n42,Q=a.n43,K=a.n44;c===undefined&&(c=new THREE.Matrix4);c.n11=o*z*J-t*B*J+t*y*Q-n*z*Q-o*y*K+n*B*K;c.n12=h*B*J-f*z*J-h*y*Q+g*z*Q+f*y*K-g*B*K;c.n13=f*t*J-h*o*J+h*n*Q-g*t*Q-f*n*K+g*o*K;c.n14=h*o*y-f*t*y-h*n*B+g*t*B+f*n*z-g*o*z;c.n21=t*B*H-o*z*H-t*x*Q+i*z*Q+o*x*K-i*B*K;c.n22=f*z*H-h*B*H+h*x*Q-d*z*Q-f*x*K+d*B*K;c.n23=h*o*H-f*t*H-h*i*Q+d*t*Q+f*i*K-d*o*K; -c.n24=f*t*x-h*o*x+h*i*B-d*t*B-f*i*z+d*o*z;c.n31=n*z*H-t*y*H+t*x*J-i*z*J-n*x*K+i*y*K;c.n32=h*y*H-g*z*H-h*x*J+d*z*J+g*x*K-d*y*K;c.n33=f*t*H-h*n*H+h*i*J-d*t*J-g*i*K+d*n*K;c.n34=h*n*x-g*t*x-h*i*y+d*t*y+g*i*z-d*n*z;c.n41=o*y*H-n*B*H-o*x*J+i*B*J+n*x*Q-i*y*Q;c.n42=g*B*H-f*y*H+f*x*J-d*B*J-g*x*Q+d*y*Q;c.n43=f*n*H-g*o*H-f*i*J+d*o*J+g*i*Q-d*n*Q;c.n44=g*o*x-f*n*x+f*i*y-d*o*y-g*i*B+d*n*B;c.multiplyScalar(1/a.determinant());return c}; -THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,g=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,h=a.n32*a.n21-a.n31*a.n22,i=-a.n33*a.n12+a.n32*a.n13,n=a.n33*a.n11-a.n31*a.n13,o=-a.n32*a.n11+a.n31*a.n12,t=a.n23*a.n12-a.n22*a.n13,x=-a.n23*a.n11+a.n21*a.n13,y=a.n22*a.n11-a.n21*a.n12;a=a.n11*g+a.n21*i+a.n31*t;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*g;d[1]=a*f;d[2]=a*h;d[3]=a*i;d[4]=a*n;d[5]=a*o;d[6]=a*t;d[7]=a*x;d[8]=a*y;return c}; -THREE.Matrix4.makeFrustum=function(a,c,d,g,f,h){var i;i=new THREE.Matrix4;i.n11=2*f/(c-a);i.n12=0;i.n13=(c+a)/(c-a);i.n14=0;i.n21=0;i.n22=2*f/(g-d);i.n23=(g+d)/(g-d);i.n24=0;i.n31=0;i.n32=0;i.n33=-(h+f)/(h-f);i.n34=-2*h*f/(h-f);i.n41=0;i.n42=0;i.n43=-1;i.n44=0;return i};THREE.Matrix4.makePerspective=function(a,c,d,g){var f;a=d*Math.tan(a*Math.PI/360);f=-a;return THREE.Matrix4.makeFrustum(f*c,a*c,f,a,d,g)}; -THREE.Matrix4.makeOrtho=function(a,c,d,g,f,h){var i,n,o,t;i=new THREE.Matrix4;n=c-a;o=d-g;t=h-f;i.n11=2/n;i.n12=0;i.n13=0;i.n14=-((c+a)/n);i.n21=0;i.n22=2/o;i.n23=0;i.n24=-((d+g)/o);i.n31=0;i.n32=0;i.n33=-2/t;i.n34=-((h+f)/t);i.n41=0;i.n42=0;i.n43=0;i.n44=1;return i};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3; +THREE.Matrix4.makeInvert=function(a,c){var d=a.n11,g=a.n12,f=a.n13,i=a.n14,j=a.n21,o=a.n22,p=a.n23,v=a.n24,x=a.n31,y=a.n32,D=a.n33,z=a.n34,K=a.n41,M=a.n42,T=a.n43,O=a.n44;c===undefined&&(c=new THREE.Matrix4);c.n11=p*z*M-v*D*M+v*y*T-o*z*T-p*y*O+o*D*O;c.n12=i*D*M-f*z*M-i*y*T+g*z*T+f*y*O-g*D*O;c.n13=f*v*M-i*p*M+i*o*T-g*v*T-f*o*O+g*p*O;c.n14=i*p*y-f*v*y-i*o*D+g*v*D+f*o*z-g*p*z;c.n21=v*D*K-p*z*K-v*x*T+j*z*T+p*x*O-j*D*O;c.n22=f*z*K-i*D*K+i*x*T-d*z*T-f*x*O+d*D*O;c.n23=i*p*K-f*v*K-i*j*T+d*v*T+f*j*O-d*p*O; +c.n24=f*v*x-i*p*x+i*j*D-d*v*D-f*j*z+d*p*z;c.n31=o*z*K-v*y*K+v*x*M-j*z*M-o*x*O+j*y*O;c.n32=i*y*K-g*z*K-i*x*M+d*z*M+g*x*O-d*y*O;c.n33=f*v*K-i*o*K+i*j*M-d*v*M-g*j*O+d*o*O;c.n34=i*o*x-g*v*x-i*j*y+d*v*y+g*j*z-d*o*z;c.n41=p*y*K-o*D*K-p*x*M+j*D*M+o*x*T-j*y*T;c.n42=g*D*K-f*y*K+f*x*M-d*D*M-g*x*T+d*y*T;c.n43=f*o*K-g*p*K-f*j*M+d*p*M+g*j*T-d*o*T;c.n44=g*p*x-f*o*x+f*j*y-d*p*y-g*j*D+d*o*D;c.multiplyScalar(1/a.determinant());return c}; +THREE.Matrix4.makeInvert3x3=function(a){var c=a.m33,d=c.m,g=a.n33*a.n22-a.n32*a.n23,f=-a.n33*a.n21+a.n31*a.n23,i=a.n32*a.n21-a.n31*a.n22,j=-a.n33*a.n12+a.n32*a.n13,o=a.n33*a.n11-a.n31*a.n13,p=-a.n32*a.n11+a.n31*a.n12,v=a.n23*a.n12-a.n22*a.n13,x=-a.n23*a.n11+a.n21*a.n13,y=a.n22*a.n11-a.n21*a.n12;a=a.n11*g+a.n21*j+a.n31*v;if(a==0)throw"matrix not invertible";a=1/a;d[0]=a*g;d[1]=a*f;d[2]=a*i;d[3]=a*j;d[4]=a*o;d[5]=a*p;d[6]=a*v;d[7]=a*x;d[8]=a*y;return c}; +THREE.Matrix4.makeFrustum=function(a,c,d,g,f,i){var j;j=new THREE.Matrix4;j.n11=2*f/(c-a);j.n12=0;j.n13=(c+a)/(c-a);j.n14=0;j.n21=0;j.n22=2*f/(g-d);j.n23=(g+d)/(g-d);j.n24=0;j.n31=0;j.n32=0;j.n33=-(i+f)/(i-f);j.n34=-2*i*f/(i-f);j.n41=0;j.n42=0;j.n43=-1;j.n44=0;return j};THREE.Matrix4.makePerspective=function(a,c,d,g){var f;a=d*Math.tan(a*Math.PI/360);f=-a;return THREE.Matrix4.makeFrustum(f*c,a*c,f,a,d,g)}; +THREE.Matrix4.makeOrtho=function(a,c,d,g,f,i){var j,o,p,v;j=new THREE.Matrix4;o=c-a;p=d-g;v=i-f;j.n11=2/o;j.n12=0;j.n13=0;j.n14=-((c+a)/o);j.n21=0;j.n22=2/p;j.n23=0;j.n24=-((d+g)/p);j.n31=0;j.n32=0;j.n33=-2/v;j.n34=-((i+f)/v);j.n41=0;j.n42=0;j.n43=0;j.n44=1;return j};THREE.Matrix4.__v1=new THREE.Vector3;THREE.Matrix4.__v2=new THREE.Vector3;THREE.Matrix4.__v3=new THREE.Vector3; THREE.Object3D=function(){this.parent=undefined;this.children=[];this.up=new THREE.Vector3(0,1,0);this.position=new THREE.Vector3;this.rotation=new THREE.Vector3;this.scale=new THREE.Vector3(1,1,1);this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixRotationWorld=new THREE.Matrix4;this.matrixAutoUpdate=!0;this.matrixWorldNeedsUpdate=!0;this.quaternion=new THREE.Quaternion;this.useQuaternion=!1;this.boundRadius=0;this.boundRadiusScale=1;this.visible= !0;this._vector=new THREE.Vector3}; THREE.Object3D.prototype={translate:function(a,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(a))},translateX:function(a){this.translate(a,this._vector.set(1,0,0))},translateY:function(a){this.translate(a,this._vector.set(0,1,0))},translateZ:function(a){this.translate(a,this._vector.set(0,0,1))},lookAt:function(a){this.matrix.lookAt(this.position,a,this.up);this.rotationAutoUpdate&&this.rotation.setRotationFromMatrix(this.matrix)},addChild:function(a){if(this.children.indexOf(a)===-1){a.parent!== undefined&&a.parent.removeChild(a);a.parent=this;this.children.push(a);for(var c=this;c instanceof THREE.Scene===!1&&c!==undefined;)c=c.parent;c!==undefined&&c.addChildRecurse(a)}},removeChild:function(a){var c=this.children.indexOf(a);if(c!==-1){a.parent=undefined;this.children.splice(c,1)}},updateMatrix:function(){this.matrix.setPosition(this.position);this.useQuaternion?this.matrix.setRotationFromQuaternion(this.quaternion):this.matrix.setRotationFromEuler(this.rotation);if(this.scale.x!==1||this.scale.y!== 1||this.scale.z!==1){this.matrix.scale(this.scale);this.boundRadiusScale=Math.max(this.scale.x,Math.max(this.scale.y,this.scale.z))}this.matrixWorldNeedsUpdate=!0},update:function(a,c,d){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||c){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixRotationWorld.extractRotation(this.matrixWorld,this.scale);this.matrixWorldNeedsUpdate=!1;c=!0}a=0;for(var g=this.children.length;a=1){d.w=a.w;d.x=a.x;d.y=a.y;d.z=a.z;return d}var h=Math.acos(f),i=Math.sqrt(1-f*f);if(Math.abs(i)<0.0010){d.w=0.5*(a.w+c.w);d.x=0.5*(a.x+c.x);d.y=0.5*(a.y+c.y);d.z=0.5*(a.z+c.z);return d}f=Math.sin((1-g)*h)/i;g=Math.sin(g*h)/i;d.w=a.w*f+c.w*g;d.x=a.x*f+c.x*g;d.y=a.y*f+c.y*g;d.z=a.z*f+c.z*g;return d};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; -THREE.Face3=function(a,c,d,g,f,h){this.a=a;this.b=c;this.c=d;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materials=h instanceof Array?h:[h];this.centroid=new THREE.Vector3}; -THREE.Face4=function(a,c,d,g,f,h,i){this.a=a;this.b=c;this.c=d;this.d=g;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=h instanceof THREE.Color?h:new THREE.Color;this.vertexColors=h instanceof Array?h:[];this.vertexTangents=[];this.materials=i instanceof Array?i:[i];this.centroid=new THREE.Vector3};THREE.UV=function(a,c){this.set(a||0,c||0)}; +THREE.Quaternion.prototype={set:function(a,c,d,g){this.x=a;this.y=c;this.z=d;this.w=g;return this},setFromEuler:function(a){var c=0.5*Math.PI/360,d=a.x*c,g=a.y*c,f=a.z*c;a=Math.cos(g);g=Math.sin(g);c=Math.cos(-f);f=Math.sin(-f);var i=Math.cos(d);d=Math.sin(d);var j=a*c,o=g*f;this.w=j*i-o*d;this.x=j*d+o*i;this.y=g*c*i+a*f*d;this.z=a*f*i-g*c*d;return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*= +-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);if(a==0)this.w=this.z=this.y=this.x=0;else{a=1/a;this.x*=a;this.y*=a;this.z*=a;this.w*=a}return this},multiplySelf:function(a){var c=this.x,d=this.y,g=this.z,f=this.w,i=a.x,j=a.y,o=a.z;a=a.w;this.x=c*a+f*i+d*o-g*j;this.y=d*a+f*j+g*i-c*o;this.z=g*a+f*o+c*j-d*i;this.w=f*a-c*i-d*j-g*o;return this}, +multiplyVector3:function(a,c){c||(c=a);var d=a.x,g=a.y,f=a.z,i=this.x,j=this.y,o=this.z,p=this.w,v=p*d+j*f-o*g,x=p*g+o*d-i*f,y=p*f+i*g-j*d;d=-i*d-j*g-o*f;c.x=v*p+d*-i+x*-o-y*-j;c.y=x*p+d*-j+y*-i-v*-o;c.z=y*p+d*-o+v*-j-x*-i;return c}}; +THREE.Quaternion.slerp=function(a,c,d,g){var f=a.w*c.w+a.x*c.x+a.y*c.y+a.z*c.z;if(Math.abs(f)>=1){d.w=a.w;d.x=a.x;d.y=a.y;d.z=a.z;return d}var i=Math.acos(f),j=Math.sqrt(1-f*f);if(Math.abs(j)<0.001){d.w=0.5*(a.w+c.w);d.x=0.5*(a.x+c.x);d.y=0.5*(a.y+c.y);d.z=0.5*(a.z+c.z);return d}f=Math.sin((1-g)*i)/j;g=Math.sin(g*i)/j;d.w=a.w*f+c.w*g;d.x=a.x*f+c.x*g;d.y=a.y*f+c.y*g;d.z=a.z*f+c.z*g;return d};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; +THREE.Face3=function(a,c,d,g,f,i){this.a=a;this.b=c;this.c=d;this.normal=g instanceof THREE.Vector3?g:new THREE.Vector3;this.vertexNormals=g instanceof Array?g:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materials=i instanceof Array?i:[i];this.centroid=new THREE.Vector3}; +THREE.Face4=function(a,c,d,g,f,i,j){this.a=a;this.b=c;this.c=d;this.d=g;this.normal=f instanceof THREE.Vector3?f:new THREE.Vector3;this.vertexNormals=f instanceof Array?f:[];this.color=i instanceof THREE.Color?i:new THREE.Color;this.vertexColors=i instanceof Array?i:[];this.vertexTangents=[];this.materials=j instanceof Array?j:[j];this.centroid=new THREE.Vector3};THREE.UV=function(a,c){this.set(a||0,c||0)}; THREE.UV.prototype={set:function(a,c){this.u=a;this.v=c;return this},copy:function(a){this.set(a.u,a.v);return this}};THREE.Geometry=function(){this.id="Geometry"+THREE.GeometryIdCounter++;this.vertices=[];this.colors=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.hasTangents=!1}; THREE.Geometry.prototype={computeCentroids:function(){var a,c,d;a=0;for(c=this.faces.length;a0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var c=1,d=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x; +d.vertexNormals[1].copy(g[d.b]);d.vertexNormals[2].copy(g[d.c])}else if(d instanceof THREE.Face4){d.vertexNormals[0].copy(g[d.a]);d.vertexNormals[1].copy(g[d.b]);d.vertexNormals[2].copy(g[d.c]);d.vertexNormals[3].copy(g[d.d])}}},computeTangents:function(){function a(W,na,aa,oa,U,ra,ma){o=W.vertices[na].position;p=W.vertices[aa].position;v=W.vertices[oa].position;x=j[U];y=j[ra];D=j[ma];z=p.x-o.x;K=v.x-o.x;M=p.y-o.y;T=v.y-o.y;O=p.z-o.z;pa=v.z-o.z;Y=y.u-x.u;qa=D.u-x.u;V=y.v-x.v;E=D.v-x.v;Fa=1/(Y*E-qa* +V);b.set((E*z-V*K)*Fa,(E*M-V*T)*Fa,(E*O-V*pa)*Fa);Q.set((Y*K-qa*z)*Fa,(Y*T-qa*M)*Fa,(Y*pa-qa*O)*Fa);Da[na].addSelf(b);Da[aa].addSelf(b);Da[oa].addSelf(b);$[na].addSelf(Q);$[aa].addSelf(Q);$[oa].addSelf(Q)}var c,d,g,f,i,j,o,p,v,x,y,D,z,K,M,T,O,pa,Y,qa,V,E,Fa,ka,Da=[],$=[],b=new THREE.Vector3,Q=new THREE.Vector3,la=new THREE.Vector3,Ba=new THREE.Vector3,Ca=new THREE.Vector3;c=0;for(d=this.vertices.length;c0){this.boundingBox={x:[this.vertices[0].position.x,this.vertices[0].position.x],y:[this.vertices[0].position.y,this.vertices[0].position.y],z:[this.vertices[0].position.z,this.vertices[0].position.z]};for(var c=1,d=this.vertices.length;cthis.boundingBox.x[1])this.boundingBox.x[1]=a.position.x; if(a.position.ythis.boundingBox.y[1])this.boundingBox.y[1]=a.position.y;if(a.position.zthis.boundingBox.z[1])this.boundingBox.z[1]=a.position.z}}},computeBoundingSphere:function(){for(var a=this.boundingSphere===null?0:this.boundingSphere.radius,c=0,d=this.vertices.length;c1){console.log("THREE.Animation.update: Warning! Scale out of bounds:"+g+" on bone "+z);g=g<0?0:1}if(d==="pos"){d=a.position;if(this.interpolationType===THREE.AnimationHandler.LINEAR){d.x=f[0]+(h[0]-f[0])*g;d.y=f[1]+(h[1]-f[1])*g;d.z=f[2]+(h[2]-f[2])*g}else if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){this.points[0]= -this.getPrevKeyWith("pos",z,i.index-1).pos;this.points[1]=f;this.points[2]=h;this.points[3]=this.getNextKeyWith("pos",z,n.index+1).pos;g=g*0.33+0.33;f=this.interpolateCatmullRom(this.points,g);d.x=f[0];d.y=f[1];d.z=f[2];if(this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){g=this.interpolateCatmullRom(this.points,g*1.01);this.target.set(g[0],g[1],g[2]);this.target.subSelf(d);this.target.y=0;this.target.normalize();g=Math.atan2(this.target.x,this.target.z);a.rotation.set(0,g,0)}}}else if(d=== -"rot")THREE.Quaternion.slerp(f,h,a.quaternion,g);else if(d==="scl"){d=a.scale;d.x=f[0]+(h[0]-f[0])*g;d.y=f[1]+(h[1]-f[1])*g;d.z=f[2]+(h[2]-f[2])*g}}}}if(this.JITCompile&&x[0][t]===undefined){this.hierarchy[0].update(undefined,!0);for(z=0;za.length-2?h:h+1;d[3]=h>a.length-3?h:h+2;h=a[d[0]];n=a[d[1]];o=a[d[2]];t=a[d[3]];d=f*f;i=f*d;g[0]=this.interpolate(h[0],n[0],o[0],t[0],f,d,i);g[1]=this.interpolate(h[1],n[1],o[1],t[1],f,d,i);g[2]=this.interpolate(h[2],n[2],o[2],t[2],f,d,i);return g}; -THREE.Animation.prototype.interpolate=function(a,c,d,g,f,h,i){a=(d-a)*0.5;g=(g-c)*0.5;return(2*(c-d)+a+g)*i+(-3*(c-d)-2*a-g)*h+a*f+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,d){var g=this.data.hierarchy[c].keys;if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=d1){console.log("THREE.Animation.update: Warning! Scale out of bounds:"+g+" on bone "+z);g=g<0?0:1}if(d==="pos"){d=a.position;if(this.interpolationType===THREE.AnimationHandler.LINEAR){d.x=f[0]+(i[0]-f[0])*g;d.y=f[1]+(i[1]-f[1])*g;d.z=f[2]+(i[2]-f[2])*g}else if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){this.points[0]= +this.getPrevKeyWith("pos",z,j.index-1).pos;this.points[1]=f;this.points[2]=i;this.points[3]=this.getNextKeyWith("pos",z,o.index+1).pos;g=g*0.33+0.33;f=this.interpolateCatmullRom(this.points,g);d.x=f[0];d.y=f[1];d.z=f[2];if(this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD){g=this.interpolateCatmullRom(this.points,g*1.01);this.target.set(g[0],g[1],g[2]);this.target.subSelf(d);this.target.y=0;this.target.normalize();g=Math.atan2(this.target.x,this.target.z);a.rotation.set(0,g,0)}}}else if(d=== +"rot")THREE.Quaternion.slerp(f,i,a.quaternion,g);else if(d==="scl"){d=a.scale;d.x=f[0]+(i[0]-f[0])*g;d.y=f[1]+(i[1]-f[1])*g;d.z=f[2]+(i[2]-f[2])*g}}}}if(this.JITCompile&&x[0][v]===undefined){this.hierarchy[0].update(undefined,!0);for(z=0;za.length-2?i:i+1;d[3]=i>a.length-3?i:i+2;i=a[d[0]];o=a[d[1]];p=a[d[2]];v=a[d[3]];d=f*f;j=f*d;g[0]=this.interpolate(i[0],o[0],p[0],v[0],f,d,j);g[1]=this.interpolate(i[1],o[1],p[1],v[1],f,d,j);g[2]=this.interpolate(i[2],o[2],p[2],v[2],f,d,j);return g}; +THREE.Animation.prototype.interpolate=function(a,c,d,g,f,i,j){a=(d-a)*0.5;g=(g-c)*0.5;return(2*(c-d)+a+g)*j+(-3*(c-d)-2*a-g)*i+a*f+c};THREE.Animation.prototype.getNextKeyWith=function(a,c,d){var g=this.data.hierarchy[c].keys;if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=d0?d:0:d>=0?d:d+g.length;d>=0;d--)if(g[d][a]!==undefined)return g[d];return this.data.hierarchy[c].keys[g.length-1]}; THREE.Camera=function(a,c,d,g,f){THREE.Object3D.call(this);this.fov=a||50;this.aspect=c||1;this.near=d||0.1;this.far=g||2E3;this.target=f||new THREE.Object3D;this.useTarget=!0;this.matrixWorldInverse=new THREE.Matrix4;this.projectionMatrix=null;this.updateProjectionMatrix()};THREE.Camera.prototype=new THREE.Object3D;THREE.Camera.prototype.constructor=THREE.Camera;THREE.Camera.prototype.supr=THREE.Object3D.prototype; THREE.Camera.prototype.translate=function(a,c){this.matrix.rotateAxis(c);this.position.addSelf(c.multiplyScalar(a));this.target.position.addSelf(c.multiplyScalar(a))};THREE.Camera.prototype.updateProjectionMatrix=function(){this.projectionMatrix=THREE.Matrix4.makePerspective(this.fov,this.aspect,this.near,this.far)};THREE.Camera.prototype.updateMatrix=function(){this.update(undefined,!0)}; THREE.Camera.prototype.update=function(a,c,d){if(this.useTarget){this.matrix.lookAt(this.position,this.target.position,this.up);this.matrix.setPosition(this.position);a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse);c=!0}else{this.matrixAutoUpdate&&(c|=this.updateMatrix());if(c||this.matrixWorldNeedsUpdate){a?this.matrixWorld.multiply(a,this.matrix):this.matrixWorld.copy(this.matrix);this.matrixWorldNeedsUpdate= !1;c=!0;THREE.Matrix4.makeInvert(this.matrixWorld,this.matrixWorldInverse)}}for(a=0;a1){a=d.matrixWorldInverse;a=-(a.n31*this.position.x+a.n32*this.position.y+a.n33*this.position.z+a.n34);this.LODs[0].object3D.visible=!0;for(var g=1;g=this.LODs[g].visibleAtDistance){this.LODs[g-1].object3D.visible= !1;this.LODs[g].object3D.visible=!0}else break;for(;g=0&&sa>=0&&U>=0&&ga>=0)return!0;else if(Ba<0&&sa<0||U<0&&ga<0)return!1;else{if(Ba<0)pa=Math.max(pa,Ba/(Ba-sa));else sa<0&&(Aa=Math.min(Aa,Ba/(Ba-sa)));if(U<0)pa=Math.max(pa,U/(U-ga));else ga<0&&(Aa=Math.min(Aa,U/(U-ga)));if(AaBa&&i.positionScreen.z0&&S.z<1){Ea=la[ia]=la[ia]||new THREE.RenderableParticle;ia++;K=Ea;K.x=S.x/S.w;K.y=S.y/S.w;K.z=S.z;K.rotation=na.rotation.z;K.scale.x=na.scale.x*Math.abs(K.x-(S.x+O.projectionMatrix.n11)/(S.w+O.projectionMatrix.n14));K.scale.y=na.scale.y*Math.abs(K.y-(S.y+O.projectionMatrix.n22)/(S.w+O.projectionMatrix.n24));K.materials=na.materials;Aa.push(K)}}}}pa&&Aa.sort(c);return Aa}}; +THREE.Projector=function(){function a(){var b=p[o]=p[o]||new THREE.RenderableVertex;o++;return b}function c(b,Q){return Q.z-b.z}function d(b,Q){var la=0,Ba=1,Ca=b.z+b.w,ta=Q.z+Q.w,W=-b.z+b.w,na=-Q.z+Q.w;if(Ca>=0&&ta>=0&&W>=0&&na>=0)return!0;else if(Ca<0&&ta<0||W<0&&na<0)return!1;else{if(Ca<0)la=Math.max(la,Ca/(Ca-ta));else ta<0&&(Ba=Math.min(Ba,Ca/(Ca-ta)));if(W<0)la=Math.max(la,W/(W-na));else na<0&&(Ba=Math.min(Ba,W/(W-na)));if(BaCa&&j.positionScreen.z0&&V.z<1){La=Y[pa]=Y[pa]||new THREE.RenderableParticle;pa++;O=La;O.x=V.x/V.w;O.y=V.y/V.w;O.z=V.z;O.rotation=ca.rotation.z;O.scale.x=ca.scale.x*Math.abs(O.x-(V.x+Q.projectionMatrix.n11)/(V.w+Q.projectionMatrix.n14));O.scale.y=ca.scale.y*Math.abs(O.y-(V.y+Q.projectionMatrix.n22)/(V.w+Q.projectionMatrix.n24));O.materials=ca.materials;Ba.push(O)}}}}la&&Ba.sort(c);return Ba}}; THREE.SoundRenderer=function(){this.volume=1;this.domElement=document.createElement("div");this.domElement.id="THREESound";this.cameraPosition=new THREE.Vector3;this.soundPosition=new THREE.Vector3;this.render=function(a,c,d){d&&a.update(undefined,!1,c);d=a.sounds;var g,f=d.length;for(g=0;gk){A=u;k=r[A]}b.bindBuffer(b.ARRAY_BUFFER,q.__webglMorphTargetsBuffers[A]);b.vertexAttribPointer(p["morphTarget"+m],3,b.FLOAT,!1,0,0);s.__webglMorphTargetInfluences[m]=k;v[A]=1;k=-1;m++}}b.uniform1fv(j.program.uniforms.morphTargetInfluences,s.__webglMorphTargetInfluences)}else{b.bindBuffer(b.ARRAY_BUFFER,q.__webglVertexBuffer);b.vertexAttribPointer(e.position,3,b.FLOAT,!1,0,0)}if(e.color>=0){b.bindBuffer(b.ARRAY_BUFFER,q.__webglColorBuffer); -b.vertexAttribPointer(e.color,3,b.FLOAT,!1,0,0)}if(e.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,q.__webglNormalBuffer);b.vertexAttribPointer(e.normal,3,b.FLOAT,!1,0,0)}if(e.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,q.__webglTangentBuffer);b.vertexAttribPointer(e.tangent,4,b.FLOAT,!1,0,0)}if(e.uv>=0)if(q.__webglUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,q.__webglUVBuffer);b.vertexAttribPointer(e.uv,2,b.FLOAT,!1,0,0);b.enableVertexAttribArray(e.uv)}else b.disableVertexAttribArray(e.uv);if(e.uv2>=0)if(q.__webglUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER, -q.__webglUV2Buffer);b.vertexAttribPointer(e.uv2,2,b.FLOAT,!1,0,0);b.enableVertexAttribArray(e.uv2)}else b.disableVertexAttribArray(e.uv2);if(j.skinning&&e.skinVertexA>=0&&e.skinVertexB>=0&&e.skinIndex>=0&&e.skinWeight>=0){b.bindBuffer(b.ARRAY_BUFFER,q.__webglSkinVertexABuffer);b.vertexAttribPointer(e.skinVertexA,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,q.__webglSkinVertexBBuffer);b.vertexAttribPointer(e.skinVertexB,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,q.__webglSkinIndicesBuffer);b.vertexAttribPointer(e.skinIndex, -4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,q.__webglSkinWeightsBuffer);b.vertexAttribPointer(e.skinWeight,4,b.FLOAT,!1,0,0)}if(s instanceof THREE.Mesh)if(j.wireframe){b.lineWidth(j.wireframeLinewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,q.__webglLineBuffer);b.drawElements(b.LINES,q.__webglLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,q.__webglFaceBuffer);b.drawElements(b.TRIANGLES,q.__webglFaceCount,b.UNSIGNED_SHORT,0)}else if(s instanceof THREE.Line){s=s.type==THREE.LineStrip? -b.LINE_STRIP:b.LINES;b.lineWidth(j.linewidth);b.drawArrays(s,0,q.__webglLineCount)}else if(s instanceof THREE.ParticleSystem)b.drawArrays(b.POINTS,0,q.__webglParticleCount);else s instanceof THREE.Ribbon&&b.drawArrays(b.TRIANGLE_STRIP,0,q.__webglVertexCount)}}function h(e,p){if(!e.__webglVertexBuffer)e.__webglVertexBuffer=b.createBuffer();if(!e.__webglNormalBuffer)e.__webglNormalBuffer=b.createBuffer();if(e.hasPos){b.bindBuffer(b.ARRAY_BUFFER,e.__webglVertexBuffer);b.bufferData(b.ARRAY_BUFFER,e.positionArray, -b.DYNAMIC_DRAW);b.enableVertexAttribArray(p.attributes.position);b.vertexAttribPointer(p.attributes.position,3,b.FLOAT,!1,0,0)}if(e.hasNormal){b.bindBuffer(b.ARRAY_BUFFER,e.__webglNormalBuffer);b.bufferData(b.ARRAY_BUFFER,e.normalArray,b.DYNAMIC_DRAW);b.enableVertexAttribArray(p.attributes.normal);b.vertexAttribPointer(p.attributes.normal,3,b.FLOAT,!1,0,0)}b.drawArrays(b.TRIANGLES,0,e.count);e.count=0}function i(e){if(pa!=e.doubleSided){e.doubleSided?b.disable(b.CULL_FACE):b.enable(b.CULL_FACE);pa= -e.doubleSided}if(Aa!=e.flipSided){e.flipSided?b.frontFace(b.CW):b.frontFace(b.CCW);Aa=e.flipSided}}function n(e){if(sa!=e){e?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST);sa=e}}function o(e){P[0].set(e.n41-e.n11,e.n42-e.n12,e.n43-e.n13,e.n44-e.n14);P[1].set(e.n41+e.n11,e.n42+e.n12,e.n43+e.n13,e.n44+e.n14);P[2].set(e.n41+e.n21,e.n42+e.n22,e.n43+e.n23,e.n44+e.n24);P[3].set(e.n41-e.n21,e.n42-e.n22,e.n43-e.n23,e.n44-e.n24);P[4].set(e.n41-e.n31,e.n42-e.n32,e.n43-e.n33,e.n44-e.n34);P[5].set(e.n41+e.n31, -e.n42+e.n32,e.n43+e.n33,e.n44+e.n34);var p;for(e=0;e<6;e++){p=P[e];p.divideScalar(Math.sqrt(p.x*p.x+p.y*p.y+p.z*p.z))}}function t(e){for(var p=e.matrixWorld,m=-e.geometry.boundingSphere.radius*Math.max(e.scale.x,Math.max(e.scale.y,e.scale.z)),j=0;j<6;j++){e=P[j].x*p.n14+P[j].y*p.n24+P[j].z*p.n34+P[j].w;if(e<=m)return!1}return!0}function x(e,p){e.list[e.count]=p;e.count+=1}function y(e){var p,m,j=e.object,q=e.opaque,s=e.transparent;s.count=0;e=q.count=0;for(p=j.materials.length;e0){b.bindBuffer(b.ARRAY_BUFFER,j.__webglColorBuffer);b.bufferData(b.ARRAY_BUFFER,za,q)}if(db){b.bindBuffer(b.ARRAY_BUFFER,j.__webglNormalBuffer);b.bufferData(b.ARRAY_BUFFER,La,q)}if(eb&&Da.hasTangents){b.bindBuffer(b.ARRAY_BUFFER,j.__webglTangentBuffer);b.bufferData(b.ARRAY_BUFFER,$,q)}if(Xa&& -Qa>0){b.bindBuffer(b.ARRAY_BUFFER,j.__webglUVBuffer);b.bufferData(b.ARRAY_BUFFER,Za,q)}if(Xa&&Ra>0){b.bindBuffer(b.ARRAY_BUFFER,j.__webglUV2Buffer);b.bufferData(b.ARRAY_BUFFER,$a,q)}if(cb){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,j.__webglFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Ja,q);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,j.__webglLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Ka,q)}if(w>0){b.bindBuffer(b.ARRAY_BUFFER,j.__webglSkinVertexABuffer);b.bufferData(b.ARRAY_BUFFER,aa,q);b.bindBuffer(b.ARRAY_BUFFER, -j.__webglSkinVertexBBuffer);b.bufferData(b.ARRAY_BUFFER,ca,q);b.bindBuffer(b.ARRAY_BUFFER,j.__webglSkinIndicesBuffer);b.bufferData(b.ARRAY_BUFFER,da,q);b.bindBuffer(b.ARRAY_BUFFER,j.__webglSkinWeightsBuffer);b.bufferData(b.ARRAY_BUFFER,ea,q)}}}m.__dirtyVertices=!1;m.__dirtyMorphTargets=!1;m.__dirtyElements=!1;m.__dirtyUvs=!1;m.__dirtyNormals=!1;m.__dirtyTangents=!1;m.__dirtyColors=!1}else if(e instanceof THREE.Ribbon){m=e.geometry;if(m.__dirtyVertices||m.__dirtyColors){e=m;p=b.DYNAMIC_DRAW;W=e.vertices; -q=e.colors;N=W.length;s=q.length;T=e.__vertexArray;v=e.__colorArray;V=e.__dirtyColors;if(e.__dirtyVertices){for(L=0;L65535){u[k].counter+=1;A=u[k].hash+"_"+u[k].counter;e.geometryGroups[A]==undefined&&(e.geometryGroups[A]={faces:[],materials:r,vertices:0,numMorphTargets:G})}e.geometryGroups[A].faces.push(q);e.geometryGroups[A].vertices+=v}}function K(e,p, -m){e.push({buffer:p,object:m,opaque:{list:[],count:0},transparent:{list:[],count:0}})}function ia(e){if(e!=Ba){switch(e){case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE);break;case THREE.SubtractiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.SRC_COLOR);break;default:b.blendEquationSeparate(b.FUNC_ADD,b.FUNC_ADD);b.blendFuncSeparate(b.SRC_ALPHA, -b.ONE_MINUS_SRC_ALPHA,b.ONE,b.ONE_MINUS_SRC_ALPHA)}Ba=e}}function la(e,p,m){if((m.width&m.width-1)==0&&(m.height&m.height-1)==0){b.texParameteri(e,b.TEXTURE_WRAP_S,fa(p.wrapS));b.texParameteri(e,b.TEXTURE_WRAP_T,fa(p.wrapT));b.texParameteri(e,b.TEXTURE_MAG_FILTER,fa(p.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,fa(p.minFilter));b.generateMipmap(e)}else{b.texParameteri(e,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(e,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(e,b.TEXTURE_MAG_FILTER, -D(p.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,D(p.minFilter))}}function va(e){if(e&&!e.__webglFramebuffer){e.__webglFramebuffer=b.createFramebuffer();e.__webglRenderbuffer=b.createRenderbuffer();e.__webglTexture=b.createTexture();b.bindRenderbuffer(b.RENDERBUFFER,e.__webglRenderbuffer);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,e.width,e.height);b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,fa(e.wrapS));b.texParameteri(b.TEXTURE_2D, -b.TEXTURE_WRAP_T,fa(e.wrapT));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,fa(e.magFilter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,fa(e.minFilter));b.texImage2D(b.TEXTURE_2D,0,fa(e.format),e.width,e.height,0,fa(e.format),fa(e.type),null);b.bindFramebuffer(b.FRAMEBUFFER,e.__webglFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,e.__webglTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e.__webglRenderbuffer);b.bindTexture(b.TEXTURE_2D, -null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null)}var p,m;if(e){p=e.__webglFramebuffer;m=e.width;e=e.height}else{p=null;m=ha;e=ja}if(p!=R){b.bindFramebuffer(b.FRAMEBUFFER,p);b.viewport(U,ga,m,e);R=p}}function S(e,p){var m;if(e=="fragment")m=b.createShader(b.FRAGMENT_SHADER);else e=="vertex"&&(m=b.createShader(b.VERTEX_SHADER));b.shaderSource(m,p);b.compileShader(m);if(!b.getShaderParameter(m,b.COMPILE_STATUS)){console.error(b.getShaderInfoLog(m));console.error(p); -return null}return m}function D(e){switch(e){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return b.NEAREST;default:return b.LINEAR}}function fa(e){switch(e){case THREE.RepeatWrapping:return b.REPEAT;case THREE.ClampToEdgeWrapping:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return b.MIRRORED_REPEAT;case THREE.NearestFilter:return b.NEAREST;case THREE.NearestMipMapNearestFilter:return b.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return b.NEAREST_MIPMAP_LINEAR; +THREE.WebGLRenderer=function(a){function c(e,m,k){var h,n,u,r=e.vertices,t=r.length,q=e.colors,A=q.length,s=e.__vertexArray,G=e.__colorArray,B=e.__sortArray,L=e.__dirtyVertices,I=e.__dirtyColors;if(k.sortParticles){ca.multiplySelf(k.matrixWorld);for(h=0;hq){A=s;q=t[A]}b.bindBuffer(b.ARRAY_BUFFER,n.__webglMorphTargetsBuffers[A]);b.vertexAttribPointer(m["morphTarget"+k],3,b.FLOAT,!1,0,0);u.__webglMorphTargetInfluences[k]=q;r[A]=1;q=-1;k++}}b.uniform1fv(h.program.uniforms.morphTargetInfluences,u.__webglMorphTargetInfluences)}else{b.bindBuffer(b.ARRAY_BUFFER,n.__webglVertexBuffer);b.vertexAttribPointer(e.position,3,b.FLOAT,!1,0,0)}if(e.color>=0){b.bindBuffer(b.ARRAY_BUFFER, +n.__webglColorBuffer);b.vertexAttribPointer(e.color,3,b.FLOAT,!1,0,0)}if(e.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,n.__webglNormalBuffer);b.vertexAttribPointer(e.normal,3,b.FLOAT,!1,0,0)}if(e.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,n.__webglTangentBuffer);b.vertexAttribPointer(e.tangent,4,b.FLOAT,!1,0,0)}if(e.uv>=0)if(n.__webglUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,n.__webglUVBuffer);b.vertexAttribPointer(e.uv,2,b.FLOAT,!1,0,0);b.enableVertexAttribArray(e.uv)}else b.disableVertexAttribArray(e.uv);if(e.uv2>= +0)if(n.__webglUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,n.__webglUV2Buffer);b.vertexAttribPointer(e.uv2,2,b.FLOAT,!1,0,0);b.enableVertexAttribArray(e.uv2)}else b.disableVertexAttribArray(e.uv2);if(h.skinning&&e.skinVertexA>=0&&e.skinVertexB>=0&&e.skinIndex>=0&&e.skinWeight>=0){b.bindBuffer(b.ARRAY_BUFFER,n.__webglSkinVertexABuffer);b.vertexAttribPointer(e.skinVertexA,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,n.__webglSkinVertexBBuffer);b.vertexAttribPointer(e.skinVertexB,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER, +n.__webglSkinIndicesBuffer);b.vertexAttribPointer(e.skinIndex,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,n.__webglSkinWeightsBuffer);b.vertexAttribPointer(e.skinWeight,4,b.FLOAT,!1,0,0)}if(u instanceof THREE.Mesh)if(h.wireframe){b.lineWidth(h.wireframeLinewidth);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,n.__webglLineBuffer);b.drawElements(b.LINES,n.__webglLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,n.__webglFaceBuffer);b.drawElements(b.TRIANGLES,n.__webglFaceCount,b.UNSIGNED_SHORT, +0)}else if(u instanceof THREE.Line){u=u.type==THREE.LineStrip?b.LINE_STRIP:b.LINES;b.lineWidth(h.linewidth);b.drawArrays(u,0,n.__webglLineCount)}else if(u instanceof THREE.ParticleSystem)b.drawArrays(b.POINTS,0,n.__webglParticleCount);else u instanceof THREE.Ribbon&&b.drawArrays(b.TRIANGLE_STRIP,0,n.__webglVertexCount)}}function i(e,m){if(!e.__webglVertexBuffer)e.__webglVertexBuffer=b.createBuffer();if(!e.__webglNormalBuffer)e.__webglNormalBuffer=b.createBuffer();if(e.hasPos){b.bindBuffer(b.ARRAY_BUFFER, +e.__webglVertexBuffer);b.bufferData(b.ARRAY_BUFFER,e.positionArray,b.DYNAMIC_DRAW);b.enableVertexAttribArray(m.attributes.position);b.vertexAttribPointer(m.attributes.position,3,b.FLOAT,!1,0,0)}if(e.hasNormal){b.bindBuffer(b.ARRAY_BUFFER,e.__webglNormalBuffer);b.bufferData(b.ARRAY_BUFFER,e.normalArray,b.DYNAMIC_DRAW);b.enableVertexAttribArray(m.attributes.normal);b.vertexAttribPointer(m.attributes.normal,3,b.FLOAT,!1,0,0)}b.drawArrays(b.TRIANGLES,0,e.count);e.count=0}function j(e){if(W!=e.doubleSided){e.doubleSided? +b.disable(b.CULL_FACE):b.enable(b.CULL_FACE);W=e.doubleSided}if(na!=e.flipSided){e.flipSided?b.frontFace(b.CW):b.frontFace(b.CCW);na=e.flipSided}}function o(e){if(oa!=e){e?b.enable(b.DEPTH_TEST):b.disable(b.DEPTH_TEST);oa=e}}function p(e){ua[0].set(e.n41-e.n11,e.n42-e.n12,e.n43-e.n13,e.n44-e.n14);ua[1].set(e.n41+e.n11,e.n42+e.n12,e.n43+e.n13,e.n44+e.n14);ua[2].set(e.n41+e.n21,e.n42+e.n22,e.n43+e.n23,e.n44+e.n24);ua[3].set(e.n41-e.n21,e.n42-e.n22,e.n43-e.n23,e.n44-e.n24);ua[4].set(e.n41-e.n31,e.n42- +e.n32,e.n43-e.n33,e.n44-e.n34);ua[5].set(e.n41+e.n31,e.n42+e.n32,e.n43+e.n33,e.n44+e.n34);var m;for(e=0;e<6;e++){m=ua[e];m.divideScalar(Math.sqrt(m.x*m.x+m.y*m.y+m.z*m.z))}}function v(e){for(var m=e.matrixWorld,k=-e.geometry.boundingSphere.radius*Math.max(e.scale.x,Math.max(e.scale.y,e.scale.z)),h=0;h<6;h++){e=ua[h].x*m.n14+ua[h].y*m.n24+ua[h].z*m.n34+ua[h].w;if(e<=k)return!1}return!0}function x(e,m){e.list[e.count]=m;e.count+=1}function y(e){var m,k,h=e.object,n=e.opaque,u=e.transparent;u.count= +0;e=n.count=0;for(m=h.materials.length;e0.001&&q.scale>0.001){B[0]=q.x;B[1]=q.y;B[2]=q.z;s=q.size*q.scale/xa;G[0]=s*A;G[1]=s;b.uniform3fv(R.screenPosition,B);b.uniform1f(R.rotation,q.rotation);b.uniform2fv(R.scale,G);b.uniform1f(R.opacity,q.opacity);qa(q.blending);E(q.texture,0);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}}}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(Ca)}function T(e,m){e._modelViewMatrix.multiplyToArray(m.matrixWorldInverse,e.matrixWorld,e._modelViewMatrixArray); +THREE.Matrix4.makeInvert3x3(e._modelViewMatrix).transposeIntoArray(e._normalMatrixArray)}function O(e){var m,k,h;if(e instanceof THREE.Mesh){k=e.geometry;for(m in k.geometryGroups){h=k.geometryGroups[m];if(k.__dirtyVertices||k.__dirtyMorphTargets||k.__dirtyElements||k.__dirtyUvs||k.__dirtyNormals||k.__dirtyColors||k.__dirtyTangents){var n=b.DYNAMIC_DRAW,u=void 0,r=void 0,t=void 0,q=void 0;t=void 0;var A=void 0,s=void 0,G=void 0,B=void 0,L=void 0,I=void 0,P=void 0,N=void 0,R=void 0,C=void 0,F=void 0, +J=void 0,da=void 0;s=void 0;G=void 0;q=void 0;B=void 0;q=void 0;C=void 0;F=void 0;s=void 0;C=void 0;F=void 0;J=void 0;da=void 0;C=void 0;F=void 0;J=void 0;da=void 0;C=void 0;F=void 0;J=void 0;da=void 0;C=void 0;F=void 0;J=void 0;q=void 0;B=void 0;A=void 0;t=void 0;t=void 0;var ya=void 0,Oa=void 0,ea=void 0,X=0,va=0,Va=0,Wa=0,Ga=0,Ha=0,Z=0,Ia=0,sa=0,w=0,wa=0,za=h.__vertexArray,db=h.__uvArray,eb=h.__uv2Array,Ma=h.__normalArray,fa=h.__tangentArray,Aa=h.__colorArray,ga=h.__skinVertexAArray,ha=h.__skinVertexBArray, +ia=h.__skinIndexArray,ja=h.__skinWeightArray,fb=h.__morphTargetsArrays,Ja=h.__faceArray,Ka=h.__lineArray,mb=h.__needsSmoothNormals;I=h.__vertexColorType;L=h.__uvType;P=h.__normalType;var Ea=e.geometry,gb=Ea.__dirtyVertices,hb=Ea.__dirtyElements,bb=Ea.__dirtyUvs,ib=Ea.__dirtyNormals,jb=Ea.__dirtyTangents,kb=Ea.__dirtyColors,lb=Ea.__dirtyMorphTargets,Xa=Ea.vertices,nb=h.faces,rb=Ea.faces,ob=Ea.faceVertexUvs[0],pb=Ea.faceVertexUvs[1],Ya=Ea.skinVerticesA,Za=Ea.skinVerticesB,$a=Ea.skinIndices,Sa=Ea.skinWeights, +Ua=Ea.edgeFaces,Pa=Ea.morphTargets;u=0;for(r=nb.length;u0){b.bindBuffer(b.ARRAY_BUFFER,h.__webglColorBuffer);b.bufferData(b.ARRAY_BUFFER,Aa,n)}if(ib){b.bindBuffer(b.ARRAY_BUFFER,h.__webglNormalBuffer);b.bufferData(b.ARRAY_BUFFER,Ma,n)}if(jb&&Ea.hasTangents){b.bindBuffer(b.ARRAY_BUFFER,h.__webglTangentBuffer);b.bufferData(b.ARRAY_BUFFER,fa,n)}if(bb&&Va>0){b.bindBuffer(b.ARRAY_BUFFER, +h.__webglUVBuffer);b.bufferData(b.ARRAY_BUFFER,db,n)}if(bb&&Wa>0){b.bindBuffer(b.ARRAY_BUFFER,h.__webglUV2Buffer);b.bufferData(b.ARRAY_BUFFER,eb,n)}if(hb){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h.__webglFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Ja,n);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h.__webglLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Ka,n)}if(w>0){b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinVertexABuffer);b.bufferData(b.ARRAY_BUFFER,ga,n);b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinVertexBBuffer); +b.bufferData(b.ARRAY_BUFFER,ha,n);b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinIndicesBuffer);b.bufferData(b.ARRAY_BUFFER,ia,n);b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinWeightsBuffer);b.bufferData(b.ARRAY_BUFFER,ja,n)}}}k.__dirtyVertices=!1;k.__dirtyMorphTargets=!1;k.__dirtyElements=!1;k.__dirtyUvs=!1;k.__dirtyNormals=!1;k.__dirtyTangents=!1;k.__dirtyColors=!1}else if(e instanceof THREE.Ribbon){k=e.geometry;if(k.__dirtyVertices||k.__dirtyColors){e=k;m=b.DYNAMIC_DRAW;P=e.vertices;n=e.colors;N=P.length; +u=n.length;R=e.__vertexArray;r=e.__colorArray;X=e.__dirtyColors;if(e.__dirtyVertices){for(L=0;L65535){s[q].counter+=1;A=s[q].hash+"_"+s[q].counter;e.geometryGroups[A]==undefined&&(e.geometryGroups[A]={faces:[],materials:t,vertices:0,numMorphTargets:G})}e.geometryGroups[A].faces.push(n);e.geometryGroups[A].vertices+=r}}function Y(e,m,k){e.push({buffer:m,object:k, +opaque:{list:[],count:0},transparent:{list:[],count:0}})}function qa(e){if(e!=aa){switch(e){case THREE.AdditiveAlphaBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE);break;case THREE.AdditiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE);break;case THREE.SubtractiveBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.ONE_MINUS_SRC_COLOR);break;case THREE.MultiplyBlending:b.blendEquation(b.FUNC_ADD);b.blendFunc(b.ZERO,b.SRC_COLOR);break;default:b.blendEquationSeparate(b.FUNC_ADD, +b.FUNC_ADD);b.blendFuncSeparate(b.SRC_ALPHA,b.ONE_MINUS_SRC_ALPHA,b.ONE,b.ONE_MINUS_SRC_ALPHA)}aa=e}}function V(e,m,k){if((k.width&k.width-1)==0&&(k.height&k.height-1)==0){b.texParameteri(e,b.TEXTURE_WRAP_S,$(m.wrapS));b.texParameteri(e,b.TEXTURE_WRAP_T,$(m.wrapT));b.texParameteri(e,b.TEXTURE_MAG_FILTER,$(m.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,$(m.minFilter));b.generateMipmap(e)}else{b.texParameteri(e,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(e,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE); +b.texParameteri(e,b.TEXTURE_MAG_FILTER,Da(m.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,Da(m.minFilter))}}function E(e,m){if(e.needsUpdate){if(e.__webglInit){b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texSubImage2D(b.TEXTURE_2D,0,0,0,b.RGBA,b.UNSIGNED_BYTE,e.image)}else{e.__webglTexture=b.createTexture();b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,e.image);e.__webglInit=!0}V(b.TEXTURE_2D,e,e.image);b.bindTexture(b.TEXTURE_2D,null); +e.needsUpdate=!1}b.activeTexture(b.TEXTURE0+m);b.bindTexture(b.TEXTURE_2D,e.__webglTexture)}function Fa(e){if(e&&!e.__webglFramebuffer){e.__webglFramebuffer=b.createFramebuffer();e.__webglRenderbuffer=b.createRenderbuffer();e.__webglTexture=b.createTexture();b.bindRenderbuffer(b.RENDERBUFFER,e.__webglRenderbuffer);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,e.width,e.height);b.bindTexture(b.TEXTURE_2D,e.__webglTexture);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,$(e.wrapS));b.texParameteri(b.TEXTURE_2D, +b.TEXTURE_WRAP_T,$(e.wrapT));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,$(e.magFilter));b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,$(e.minFilter));b.texImage2D(b.TEXTURE_2D,0,$(e.format),e.width,e.height,0,$(e.format),$(e.type),null);b.bindFramebuffer(b.FRAMEBUFFER,e.__webglFramebuffer);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,e.__webglTexture,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e.__webglRenderbuffer);b.bindTexture(b.TEXTURE_2D, +null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null)}var m,k;if(e){m=e.__webglFramebuffer;k=e.width;e=e.height}else{m=null;k=ma;e=xa}if(m!=Ba){b.bindFramebuffer(b.FRAMEBUFFER,m);b.viewport(U,ra,k,e);Ba=m}}function ka(e,m){var k;if(e=="fragment")k=b.createShader(b.FRAGMENT_SHADER);else e=="vertex"&&(k=b.createShader(b.VERTEX_SHADER));b.shaderSource(k,m);b.compileShader(k);if(!b.getShaderParameter(k,b.COMPILE_STATUS)){console.error(b.getShaderInfoLog(k));console.error(m); +return null}return k}function Da(e){switch(e){case THREE.NearestFilter:case THREE.NearestMipMapNearestFilter:case THREE.NearestMipMapLinearFilter:return b.NEAREST;default:return b.LINEAR}}function $(e){switch(e){case THREE.RepeatWrapping:return b.REPEAT;case THREE.ClampToEdgeWrapping:return b.CLAMP_TO_EDGE;case THREE.MirroredRepeatWrapping:return b.MIRRORED_REPEAT;case THREE.NearestFilter:return b.NEAREST;case THREE.NearestMipMapNearestFilter:return b.NEAREST_MIPMAP_NEAREST;case THREE.NearestMipMapLinearFilter:return b.NEAREST_MIPMAP_LINEAR; case THREE.LinearFilter:return b.LINEAR;case THREE.LinearMipMapNearestFilter:return b.LINEAR_MIPMAP_NEAREST;case THREE.LinearMipMapLinearFilter:return b.LINEAR_MIPMAP_LINEAR;case THREE.ByteType:return b.BYTE;case THREE.UnsignedByteType:return b.UNSIGNED_BYTE;case THREE.ShortType:return b.SHORT;case THREE.UnsignedShortType:return b.UNSIGNED_SHORT;case THREE.IntType:return b.INT;case THREE.UnsignedShortType:return b.UNSIGNED_INT;case THREE.FloatType:return b.FLOAT;case THREE.AlphaFormat:return b.ALPHA; -case THREE.RGBFormat:return b.RGB;case THREE.RGBAFormat:return b.RGBA;case THREE.LuminanceFormat:return b.LUMINANCE;case THREE.LuminanceAlphaFormat:return b.LUMINANCE_ALPHA}return 0}var b,oa=document.createElement("canvas"),ra=null,R=null,O=this,pa=null,Aa=null,Ba=null,sa=null,U=0,ga=0,ha=0,ja=0,P=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],ma=new THREE.Matrix4,ka=new Float32Array(16),Ca=new Float32Array(16),Fa=new THREE.Vector4,na= -{ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},Ea=!0,Wa=new THREE.Color(0),Ya=0;if(a){if(a.antialias!==undefined)Ea=a.antialias;a.clearColor!==undefined&&Wa.setHex(a.clearColor);if(a.clearAlpha!==undefined)Ya=a.clearAlpha}this.maxMorphTargets=8;this.domElement=oa;this.autoClear=!0;this.sortObjects=!0;(function(e,p,m){try{if(!(b=oa.getContext("experimental-webgl",{antialias:e,stencil:!0})))throw"Error creating WebGL context.";}catch(j){console.error(j)}b.clearColor(0, -0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE_MINUS_SRC_ALPHA);b.clearColor(p.r,p.g,p.b,m)})(Ea,Wa,Ya);this.context=b;var wa={};a=[];Ea=[];a[0]=-2;a[1]=-1;a[2]=-1;a[3]=2;a[4]=-1;a[5]=-1;a[6]=2;a[7]=1;a[8]=-1;a[9]=-2;a[10]=1;a[11]=-1;Ea[0]=0;Ea[1]=1;Ea[2]=2;Ea[3]=0;Ea[4]=2;Ea[5]=3;wa.vertexBuffer=b.createBuffer();wa.elementBuffer=b.createBuffer(); -b.bindBuffer(b.ARRAY_BUFFER,wa.vertexBuffer);b.bufferData(b.ARRAY_BUFFER,new Float32Array(a),b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,wa.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,new Uint16Array(Ea),b.STATIC_DRAW);wa.program=b.createProgram();b.attachShader(wa.program,S("fragment",THREE.ShaderLib.shadowPost.fragmentShader));b.attachShader(wa.program,S("vertex",THREE.ShaderLib.shadowPost.vertexShader));b.linkProgram(wa.program);wa.vertexLocation=b.getAttribLocation(wa.program,"position"); -wa.projectionLocation=b.getUniformLocation(wa.program,"projectionMatrix");this.setSize=function(e,p){oa.width=e;oa.height=p;this.setViewport(0,0,oa.width,oa.height)};this.setViewport=function(e,p,m,j){U=e;ga=p;ha=m;ja=j;b.viewport(U,ga,ha,ja)};this.setScissor=function(e,p,m,j){b.scissor(e,p,m,j)};this.enableScissorTest=function(e){e?b.enable(b.SCISSOR_TEST):b.disable(b.SCISSOR_TEST)};this.enableDepthBufferWrite=function(e){b.depthMask(e)};this.setClearColorHex=function(e,p){var m=new THREE.Color(e); -b.clearColor(m.r,m.g,m.b,p)};this.setClearColor=function(e,p){b.clearColor(e.r,e.g,e.b,p)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT|b.STENCIL_BUFFER_BIT)};this.initMaterial=function(e,p,m,j){var q,s,v,r;if(e instanceof THREE.MeshDepthMaterial)d(e,THREE.ShaderLib.depth);else if(e instanceof THREE.ShadowVolumeDynamicMaterial)d(e,THREE.ShaderLib.shadowVolumeDynamic);else if(e instanceof THREE.MeshNormalMaterial)d(e,THREE.ShaderLib.normal);else if(e instanceof THREE.MeshBasicMaterial)d(e, -THREE.ShaderLib.basic);else if(e instanceof THREE.MeshLambertMaterial)d(e,THREE.ShaderLib.lambert);else if(e instanceof THREE.MeshPhongMaterial)d(e,THREE.ShaderLib.phong);else if(e instanceof THREE.LineBasicMaterial)d(e,THREE.ShaderLib.basic);else e instanceof THREE.ParticleBasicMaterial&&d(e,THREE.ShaderLib.particle_basic);if(!e.program){var k,A,u;k=u=r=0;for(v=p.length;k0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+v.maxDirLights,"#define MAX_POINT_LIGHTS "+v.maxPointLights,"#define MAX_BONES "+v.maxBones, -v.map?"#define USE_MAP":"",v.envMap?"#define USE_ENVMAP":"",v.lightMap?"#define USE_LIGHTMAP":"",v.vertexColors?"#define USE_COLOR":"",v.skinning?"#define USE_SKINNING":"",v.morphTargets?"#define USE_MORPHTARGETS":"",v.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.attachShader(p,S("fragment",k+m));b.attachShader(p,S("vertex",v+r));b.linkProgram(p);b.getProgramParameter(p,b.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+b.getProgramParameter(p,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");p.uniforms={};p.attributes={};e.program=p;m=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(q in e.uniforms)m.push(q); -q=e.program;r=0;for(p=m.length;r=0&&b.enableVertexAttribArray(s.color);s.normal>=0&&b.enableVertexAttribArray(s.normal); -s.tangent>=0&&b.enableVertexAttribArray(s.tangent);if(e.skinning&&s.skinVertexA>=0&&s.skinVertexB>=0&&s.skinIndex>=0&&s.skinWeight>=0){b.enableVertexAttribArray(s.skinVertexA);b.enableVertexAttribArray(s.skinVertexB);b.enableVertexAttribArray(s.skinIndex);b.enableVertexAttribArray(s.skinWeight)}if(e.morphTargets){e.numSupportedMorphTargets=0;if(s.morphTarget0>=0){b.enableVertexAttribArray(s.morphTarget0);e.numSupportedMorphTargets++}if(s.morphTarget1>=0){b.enableVertexAttribArray(s.morphTarget1); -e.numSupportedMorphTargets++}if(s.morphTarget2>=0){b.enableVertexAttribArray(s.morphTarget2);e.numSupportedMorphTargets++}if(s.morphTarget3>=0){b.enableVertexAttribArray(s.morphTarget3);e.numSupportedMorphTargets++}if(s.morphTarget4>=0){b.enableVertexAttribArray(s.morphTarget4);e.numSupportedMorphTargets++}if(s.morphTarget5>=0){b.enableVertexAttribArray(s.morphTarget5);e.numSupportedMorphTargets++}if(s.morphTarget6>=0){b.enableVertexAttribArray(s.morphTarget6);e.numSupportedMorphTargets++}if(s.morphTarget7>= -0){b.enableVertexAttribArray(s.morphTarget7);e.numSupportedMorphTargets++}j.__webglMorphTargetInfluences=new Float32Array(this.maxMorphTargets);q=0;for(s=this.maxMorphTargets;q0||W.faceVertexUvs.length>0)v.__uvArray= -new Float32Array(k*2);if(W.faceUvs.length>1||W.faceVertexUvs.length>1)v.__uv2Array=new Float32Array(k*2)}if(r.geometry.skinWeights.length&&r.geometry.skinIndices.length){v.__skinVertexAArray=new Float32Array(k*4);v.__skinVertexBArray=new Float32Array(k*4);v.__skinIndexArray=new Float32Array(k*4);v.__skinWeightArray=new Float32Array(k*4)}v.__faceArray=new Uint16Array(F*3+(r.geometry.edgeFaces?r.geometry.edgeFaces.length*6:0));v.__lineArray=new Uint16Array(L*2);if(v.numMorphTargets){W=void 0;N=void 0; -v.__morphTargetsArrays=[];W=0;for(N=v.numMorphTargets;W=0;q--){j=m.__webglObjects[q].object;p==j&&m.__webglObjects.splice(q,1)}e.__objectsRemoved.splice(0,1)}p=0;for(m=e.__webglObjects.length;p< -m;p++)J(e.__webglObjects[p].object,e);p=0;for(m=e.__webglShadowVolumes.length;p0}}; +case THREE.RGBFormat:return b.RGB;case THREE.RGBAFormat:return b.RGBA;case THREE.LuminanceFormat:return b.LUMINANCE;case THREE.LuminanceAlphaFormat:return b.LUMINANCE_ALPHA}return 0}var b,Q=document.createElement("canvas"),la=null,Ba=null,Ca=!0,ta=this,W=null,na=null,aa=null,oa=null,U=0,ra=0,ma=0,xa=0,ua=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],ca=new THREE.Matrix4,La=new Float32Array(16),Qa=new Float32Array(16),Ra=new THREE.Vector4, +cb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]}},Na=!0,ab=!0,Ta=new THREE.Color(0),qb=0;if(a){if(a.stencil!=undefined)Na=a.stencil;if(a.antialias!==undefined)ab=a.antialias;a.clearColor!==undefined&&Ta.setHex(a.clearColor);if(a.clearAlpha!==undefined)qb=a.clearAlpha}this.maxMorphTargets=8;this.domElement=Q;this.autoClear=!0;this.sortObjects=!0;(function(e,m,k,h){try{if(!(b=Q.getContext("experimental-webgl",{antialias:e,stencil:h})))throw"Error creating WebGL context."; +}catch(n){console.error(n)}b.clearColor(0,0,0,1);b.clearDepth(1);b.enable(b.DEPTH_TEST);b.depthFunc(b.LEQUAL);b.frontFace(b.CCW);b.cullFace(b.BACK);b.enable(b.CULL_FACE);b.enable(b.BLEND);b.blendEquation(b.FUNC_ADD);b.blendFunc(b.SRC_ALPHA,b.ONE_MINUS_SRC_ALPHA);b.clearColor(m.r,m.g,m.b,k)})(ab,Ta,qb,Na);this.context=b;if(Na){var S={};S.vertices=new Float32Array(12);S.faces=new Uint16Array(6);S.darkness=0.5;S.vertices[0]=-2;S.vertices[1]=-1;S.vertices[2]=-1;S.vertices[3]=2;S.vertices[4]=-1;S.vertices[5]= +-1;S.vertices[6]=2;S.vertices[7]=1;S.vertices[8]=-1;S.vertices[9]=-2;S.vertices[10]=1;S.vertices[11]=-1;S.faces[0]=0;S.faces[1]=1;S.faces[2]=2;S.faces[3]=0;S.faces[4]=2;S.faces[5]=3;S.vertexBuffer=b.createBuffer();S.elementBuffer=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,S.vertexBuffer);b.bufferData(b.ARRAY_BUFFER,S.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,S.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,S.faces,b.STATIC_DRAW);S.program=b.createProgram();b.attachShader(S.program, +ka("fragment",THREE.ShaderLib.shadowPost.fragmentShader));b.attachShader(S.program,ka("vertex",THREE.ShaderLib.shadowPost.vertexShader));b.linkProgram(S.program);S.vertexLocation=b.getAttribLocation(S.program,"position");S.projectionLocation=b.getUniformLocation(S.program,"projectionMatrix");S.darknessLocation=b.getUniformLocation(S.program,"darkness")}var H={};H.vertices=new Float32Array(16);H.faces=new Uint16Array(6);H.transparency=0.5;a=0;H.vertices[a++]=-1;H.vertices[a++]=-1;H.vertices[a++]=0; +H.vertices[a++]=0;H.vertices[a++]=1;H.vertices[a++]=-1;H.vertices[a++]=1;H.vertices[a++]=0;H.vertices[a++]=1;H.vertices[a++]=1;H.vertices[a++]=1;H.vertices[a++]=1;H.vertices[a++]=-1;H.vertices[a++]=1;H.vertices[a++]=0;H.vertices[a++]=1;a=0;H.faces[a++]=0;H.faces[a++]=1;H.faces[a++]=2;H.faces[a++]=0;H.faces[a++]=2;H.faces[a++]=3;H.vertexBuffer=b.createBuffer();H.elementBuffer=b.createBuffer();H.tempTexture=b.createTexture();H.readBackPixels=new Uint8Array(1024);b.bindBuffer(b.ARRAY_BUFFER,H.vertexBuffer); +b.bufferData(b.ARRAY_BUFFER,H.vertices,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,H.elementBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,H.faces,b.STATIC_DRAW);b.bindTexture(b.TEXTURE_2D,H.tempTexture);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16,0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER, +b.NEAREST);H.program=b.createProgram();b.attachShader(H.program,ka("fragment",THREE.ShaderLib.lensFlare.fragmentShader));b.attachShader(H.program,ka("vertex",THREE.ShaderLib.lensFlare.vertexShader));b.linkProgram(H.program);H.attributes={};H.uniforms={};H.attributes.vertex=b.getAttribLocation(H.program,"position");H.attributes.uv=b.getAttribLocation(H.program,"UV");H.uniforms.map=b.getUniformLocation(H.program,"map");H.uniforms.opacity=b.getUniformLocation(H.program,"opacity");H.uniforms.scale=b.getUniformLocation(H.program, +"scale");H.uniforms.rotation=b.getUniformLocation(H.program,"rotation");H.uniforms.screenPosition=b.getUniformLocation(H.program,"screenPosition");H.uniforms.renderPink=b.getUniformLocation(H.program,"renderPink");this.setSize=function(e,m){Q.width=e;Q.height=m;this.setViewport(0,0,Q.width,Q.height)};this.setViewport=function(e,m,k,h){U=e;ra=m;ma=k;xa=h;b.viewport(U,ra,ma,xa)};this.setScissor=function(e,m,k,h){b.scissor(e,m,k,h)};this.enableScissorTest=function(e){e?b.enable(b.SCISSOR_TEST):b.disable(b.SCISSOR_TEST)}; +this.enableDepthBufferWrite=function(e){Ca=e;b.depthMask(e)};this.setClearColorHex=function(e,m){var k=new THREE.Color(e);b.clearColor(k.r,k.g,k.b,m)};this.setClearColor=function(e,m){b.clearColor(e.r,e.g,e.b,m)};this.clear=function(){b.clear(b.COLOR_BUFFER_BIT|b.DEPTH_BUFFER_BIT|b.STENCIL_BUFFER_BIT)};this.setStencilShadowDarkness=function(e){S.darkness=e};this.initMaterial=function(e,m,k,h){var n,u,r,t;if(e instanceof THREE.MeshDepthMaterial)d(e,THREE.ShaderLib.depth);else if(e instanceof THREE.ShadowVolumeDynamicMaterial)d(e, +THREE.ShaderLib.shadowVolumeDynamic);else if(e instanceof THREE.MeshNormalMaterial)d(e,THREE.ShaderLib.normal);else if(e instanceof THREE.MeshBasicMaterial)d(e,THREE.ShaderLib.basic);else if(e instanceof THREE.MeshLambertMaterial)d(e,THREE.ShaderLib.lambert);else if(e instanceof THREE.MeshPhongMaterial)d(e,THREE.ShaderLib.phong);else if(e instanceof THREE.LineBasicMaterial)d(e,THREE.ShaderLib.basic);else e instanceof THREE.ParticleBasicMaterial&&d(e,THREE.ShaderLib.particle_basic);if(!e.program){var q, +A,s;q=s=t=0;for(r=m.length;q +0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+r.maxDirLights,"#define MAX_POINT_LIGHTS "+r.maxPointLights,"#define MAX_BONES "+r.maxBones,r.map?"#define USE_MAP":"",r.envMap?"#define USE_ENVMAP":"",r.lightMap?"#define USE_LIGHTMAP":"",r.vertexColors?"#define USE_COLOR":"",r.skinning?"#define USE_SKINNING":"",r.morphTargets?"#define USE_MORPHTARGETS":"",r.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.attachShader(m,ka("fragment",q+k));b.attachShader(m,ka("vertex",r+t));b.linkProgram(m);b.getProgramParameter(m,b.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+b.getProgramParameter(m,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");m.uniforms={};m.attributes={};e.program=m;k=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(n in e.uniforms)k.push(n); +n=e.program;t=0;for(m=k.length;t=0&&b.enableVertexAttribArray(u.color);u.normal>=0&&b.enableVertexAttribArray(u.normal); +u.tangent>=0&&b.enableVertexAttribArray(u.tangent);if(e.skinning&&u.skinVertexA>=0&&u.skinVertexB>=0&&u.skinIndex>=0&&u.skinWeight>=0){b.enableVertexAttribArray(u.skinVertexA);b.enableVertexAttribArray(u.skinVertexB);b.enableVertexAttribArray(u.skinIndex);b.enableVertexAttribArray(u.skinWeight)}if(e.morphTargets){e.numSupportedMorphTargets=0;if(u.morphTarget0>=0){b.enableVertexAttribArray(u.morphTarget0);e.numSupportedMorphTargets++}if(u.morphTarget1>=0){b.enableVertexAttribArray(u.morphTarget1); +e.numSupportedMorphTargets++}if(u.morphTarget2>=0){b.enableVertexAttribArray(u.morphTarget2);e.numSupportedMorphTargets++}if(u.morphTarget3>=0){b.enableVertexAttribArray(u.morphTarget3);e.numSupportedMorphTargets++}if(u.morphTarget4>=0){b.enableVertexAttribArray(u.morphTarget4);e.numSupportedMorphTargets++}if(u.morphTarget5>=0){b.enableVertexAttribArray(u.morphTarget5);e.numSupportedMorphTargets++}if(u.morphTarget6>=0){b.enableVertexAttribArray(u.morphTarget6);e.numSupportedMorphTargets++}if(u.morphTarget7>= +0){b.enableVertexAttribArray(u.morphTarget7);e.numSupportedMorphTargets++}h.__webglMorphTargetInfluences=new Float32Array(this.maxMorphTargets);n=0;for(u=this.maxMorphTargets;n0||P.faceVertexUvs.length>0)r.__uvArray=new Float32Array(q*2);if(P.faceUvs.length>1||P.faceVertexUvs.length>1)r.__uv2Array=new Float32Array(q*2)}if(t.geometry.skinWeights.length&&t.geometry.skinIndices.length){r.__skinVertexAArray=new Float32Array(q*4);r.__skinVertexBArray=new Float32Array(q*4);r.__skinIndexArray=new Float32Array(q*4);r.__skinWeightArray=new Float32Array(q*4)}r.__faceArray=new Uint16Array(B*3+(t.geometry.edgeFaces? +t.geometry.edgeFaces.length*6:0));r.__lineArray=new Uint16Array(L*2);if(r.numMorphTargets){P=void 0;N=void 0;r.__morphTargetsArrays=[];P=0;for(N=r.numMorphTargets;P=0;n--){h=k.__webglObjects[n].object;m==h&&k.__webglObjects.splice(n,1)}e.__objectsRemoved.splice(0,1)}m=0;for(k=e.__webglObjects.length;m0}}; +THREE.WebGLRenderTarget=function(a,c,d){this.width=a;this.height=c;d=d||{};this.wrapS=d.wrapS!==undefined?d.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=d.wrapT!==undefined?d.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=d.magFilter!==undefined?d.magFilter:THREE.LinearFilter;this.minFilter=d.minFilter!==undefined?d.minFilter:THREE.LinearMipMapLinearFilter;this.format=d.format!==undefined?d.format:THREE.RGBFormat;this.type=d.type!==undefined?d.type:THREE.UnsignedByteType}; diff --git a/examples/misc_sound.html b/examples/misc_sound.html index 4f4b6b607f..bd6a9ab873 100644 --- a/examples/misc_sound.html +++ b/examples/misc_sound.html @@ -161,9 +161,9 @@ postprocessing.camera.position.z = 100; var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter }; - postprocessing.rtTexture1 = new THREE.RenderTarget( window.innerWidth, window.innerHeight, pars ); - postprocessing.rtTexture2 = new THREE.RenderTarget( 512, 512, pars ); - postprocessing.rtTexture3 = new THREE.RenderTarget( 512, 512, pars ); + postprocessing.rtTexture1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, pars ); + postprocessing.rtTexture2 = new THREE.WebGLRenderTarget( 512, 512, pars ); + postprocessing.rtTexture3 = new THREE.WebGLRenderTarget( 512, 512, pars ); var screen_shader = ShaderUtils.lib["screen"]; var screen_uniforms = Uniforms.clone( screen_shader.uniforms ); @@ -176,7 +176,8 @@ uniforms: screen_uniforms, vertexShader: screen_shader.vertexShader, fragmentShader: screen_shader.fragmentShader, - blending: THREE.AdditiveBlending + blending: THREE.AdditiveBlending, + transparent: true } ); diff --git a/examples/webgl_interactive_voxelpainter.html b/examples/webgl_interactive_voxelpainter.html index b4e779da89..afd199844c 100644 --- a/examples/webgl_interactive_voxelpainter.html +++ b/examples/webgl_interactive_voxelpainter.html @@ -62,7 +62,7 @@ // roll-over helpers rollOverGeo = new Cube( 50, 50, 50 ); - rollOverMaterial = new THREE.MeshBasicMaterial( { color: 0xff0000, opacity: 0.5 } ); + rollOverMaterial = new THREE.MeshBasicMaterial( { color: 0xff0000, opacity: 0.5, transparent: true } ); rollOverMesh = new THREE.Mesh( rollOverGeo, rollOverMaterial ); scene.addObject( rollOverMesh ); @@ -70,7 +70,7 @@ // cubes cubeGeo = new Cube( 50, 50, 50 ); - cubeMaterial = new THREE.MeshLambertMaterial( { color: 0x00ff80, opacity: 1, shading: THREE.FlatShading, map: ImageUtils.loadTexture( "textures/square-outline-textured.png" ) } ); + cubeMaterial = new THREE.MeshLambertMaterial( { color: 0x00ff80, shading: THREE.FlatShading, map: ImageUtils.loadTexture( "textures/square-outline-textured.png" ) } ); cubeMaterial.color.setHSV( 0.1, 0.7, 1.0 ); // picking diff --git a/examples/webgl_lines_colors.html b/examples/webgl_lines_colors.html index d9645e4f08..0c469613fd 100644 --- a/examples/webgl_lines_colors.html +++ b/examples/webgl_lines_colors.html @@ -141,9 +141,9 @@ sceneScreen = new THREE.Scene(); var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter }; - rtTexture1 = new THREE.RenderTarget( window.innerWidth, window.innerHeight, pars ); - rtTexture2 = new THREE.RenderTarget( 512, 512, pars ); - rtTexture3 = new THREE.RenderTarget( 512, 512, pars ); + rtTexture1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, pars ); + rtTexture2 = new THREE.WebGLRenderTarget( 512, 512, pars ); + rtTexture3 = new THREE.WebGLRenderTarget( 512, 512, pars ); var screen_shader = ShaderUtils.lib["screen"]; var screen_uniforms = Uniforms.clone( screen_shader.uniforms ); @@ -156,7 +156,8 @@ uniforms: screen_uniforms, vertexShader: screen_shader.vertexShader, fragmentShader: screen_shader.fragmentShader, - blending: THREE.AdditiveBlending + blending: THREE.AdditiveBlending, + transparent: true } ); diff --git a/examples/webgl_lines_cubes.html b/examples/webgl_lines_cubes.html index aacbdbbe77..e765f1b470 100644 --- a/examples/webgl_lines_cubes.html +++ b/examples/webgl_lines_cubes.html @@ -92,9 +92,9 @@ // lines var line, p, scale = 0.3, d = 125, c1 = 0x553300, c2 = 0x555555, c3 = 0x992800, g1 = geometry, - m1 = new THREE.LineBasicMaterial( { color: c1, opacity: 1, blending: THREE.AdditiveBlending } ), - m2 = new THREE.LineBasicMaterial( { color: c2, opacity: 1, blending: THREE.AdditiveBlending } ), - m3 = new THREE.LineBasicMaterial( { color: c3, opacity: 1, blending: THREE.AdditiveBlending } ), + m1 = new THREE.LineBasicMaterial( { color: c1, opacity: 1, blending: THREE.AdditiveBlending, transparent: true } ), + m2 = new THREE.LineBasicMaterial( { color: c2, opacity: 1, blending: THREE.AdditiveBlending, transparent: true } ), + m3 = new THREE.LineBasicMaterial( { color: c3, opacity: 1, blending: THREE.AdditiveBlending, transparent: true } ), parameters = [ [ m3, scale*0.5, [0,0,0], g1 ], [ m2, scale*0.5, [d, 0, 0], g1 ], [ m2, scale*0.5, [-d, 0, 0], g1 ], [ m2, scale*0.5, [0,d,0], g1 ], [ m2, scale*0.5, [d, d, 0], g1 ], [ m2, scale*0.5, [-d, d, 0], g1 ], [ m2, scale*0.5, [0,-d,0], g1 ], [ m2, scale*0.5, [d, -d, 0], g1 ], [ m2, scale*0.5, [-d, -d, 0], g1 ], diff --git a/examples/webgl_lines_splines.html b/examples/webgl_lines_splines.html index 9e08e37101..5f2f0ad622 100644 --- a/examples/webgl_lines_splines.html +++ b/examples/webgl_lines_splines.html @@ -154,9 +154,9 @@ sceneScreen = new THREE.Scene(); var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter }; - rtTexture1 = new THREE.RenderTarget( window.innerWidth, window.innerHeight, pars ); - rtTexture2 = new THREE.RenderTarget( 512, 512, pars ); - rtTexture3 = new THREE.RenderTarget( 512, 512, pars ); + rtTexture1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, pars ); + rtTexture2 = new THREE.WebGLRenderTarget( 512, 512, pars ); + rtTexture3 = new THREE.WebGLRenderTarget( 512, 512, pars ); var screen_shader = ShaderUtils.lib["screen"]; var screen_uniforms = Uniforms.clone( screen_shader.uniforms ); diff --git a/examples/webgl_materials_cars.html b/examples/webgl_materials_cars.html index dd38cca903..afb9ada771 100644 --- a/examples/webgl_materials_cars.html +++ b/examples/webgl_materials_cars.html @@ -248,17 +248,17 @@ "Dark chrome": new THREE.MeshLambertMaterial( { color: 0x444444, envMap: textureCube } ), "Darker chrome":new THREE.MeshLambertMaterial( { color: 0x222222, envMap: textureCube } ), - "Black glass": new THREE.MeshLambertMaterial( { color: 0x101016, envMap: textureCube, opacity: 0.975 } ), - "Dark glass": new THREE.MeshLambertMaterial( { color: 0x101046, envMap: textureCube, opacity: 0.25 } ), - "Blue glass": new THREE.MeshLambertMaterial( { color: 0x668899, envMap: textureCube, opacity: 0.75 } ), - "Light glass": new THREE.MeshBasicMaterial( { color: 0x223344, envMap: textureCube, opacity: 0.25, combine: THREE.MixOperation, reflectivity: 0.25 } ), + "Black glass": new THREE.MeshLambertMaterial( { color: 0x101016, envMap: textureCube, opacity: 0.975, transparent: true } ), + "Dark glass": new THREE.MeshLambertMaterial( { color: 0x101046, envMap: textureCube, opacity: 0.25, transparent: true } ), + "Blue glass": new THREE.MeshLambertMaterial( { color: 0x668899, envMap: textureCube, opacity: 0.75, transparent: true } ), + "Light glass": new THREE.MeshBasicMaterial( { color: 0x223344, envMap: textureCube, opacity: 0.25, transparent: true, combine: THREE.MixOperation, reflectivity: 0.25 } ), - "Red glass": new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.75 } ), - "Yellow glass": new THREE.MeshLambertMaterial( { color: 0xffffaa, opacity: 0.75 } ), - "Orange glass": new THREE.MeshLambertMaterial( { color: 0x995500, opacity: 0.75 } ), + "Red glass": new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.75, transparent: true } ), + "Yellow glass": new THREE.MeshLambertMaterial( { color: 0xffffaa, opacity: 0.75, transparent: true } ), + "Orange glass": new THREE.MeshLambertMaterial( { color: 0x995500, opacity: 0.75, transparent: true } ), - "Orange glass 50": new THREE.MeshLambertMaterial( { color: 0xffbb00, opacity: 0.5 } ), - "Red glass 50": new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.5 } ), + "Orange glass 50": new THREE.MeshLambertMaterial( { color: 0xffbb00, opacity: 0.5, transparent: true } ), + "Red glass 50": new THREE.MeshLambertMaterial( { color: 0xff0000, opacity: 0.5, transparent: true } ), "Fullblack rough": new THREE.MeshLambertMaterial( { color: 0x000000 } ), "Black rough": new THREE.MeshLambertMaterial( { color: 0x050505 } ), diff --git a/examples/webgl_materials_cars_camaro.html b/examples/webgl_materials_cars_camaro.html index 90b7cc8a80..cf8bff9c42 100644 --- a/examples/webgl_materials_cars_camaro.html +++ b/examples/webgl_materials_cars_camaro.html @@ -126,7 +126,7 @@ body: [], chrome: new THREE.MeshLambertMaterial( { color: 0xffffff, envMap: textureCube } ), darkchrome: new THREE.MeshLambertMaterial( { color: 0x444444, envMap: textureCube } ), - glass: new THREE.MeshBasicMaterial( { color: 0x223344, envMap: textureCube, opacity: 0.25, combine: THREE.MixOperation, reflectivity: 0.25 } ), + glass: new THREE.MeshBasicMaterial( { color: 0x223344, envMap: textureCube, opacity: 0.25, combine: THREE.MixOperation, reflectivity: 0.25, transparent: true } ), tire: new THREE.MeshLambertMaterial( { color: 0x050505 } ), interior: new THREE.MeshPhongMaterial( { color: 0x050505, shininess: 20 } ), black: new THREE.MeshLambertMaterial( { color: 0x000000 } ) diff --git a/examples/webgl_materials_video.html b/examples/webgl_materials_video.html index 49abc020dc..282bfbd11b 100644 --- a/examples/webgl_materials_video.html +++ b/examples/webgl_materials_video.html @@ -204,9 +204,9 @@ postprocessing.camera.position.z = 100; var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter }; - postprocessing.rtTexture1 = new THREE.RenderTarget( window.innerWidth, window.innerHeight, pars ); - postprocessing.rtTexture2 = new THREE.RenderTarget( 512, 512, pars ); - postprocessing.rtTexture3 = new THREE.RenderTarget( 512, 512, pars ); + postprocessing.rtTexture1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, pars ); + postprocessing.rtTexture2 = new THREE.WebGLRenderTarget( 512, 512, pars ); + postprocessing.rtTexture3 = new THREE.WebGLRenderTarget( 512, 512, pars ); var screen_shader = ShaderUtils.lib["screen"]; var screen_uniforms = Uniforms.clone( screen_shader.uniforms ); @@ -219,7 +219,8 @@ uniforms: screen_uniforms, vertexShader: screen_shader.vertexShader, fragmentShader: screen_shader.fragmentShader, - blending: THREE.AdditiveBlending + blending: THREE.AdditiveBlending, + transparent: true } ); diff --git a/examples/webgl_particles_sprites.html b/examples/webgl_particles_sprites.html index c6a1cfcac6..fa1e6fff40 100644 --- a/examples/webgl_particles_sprites.html +++ b/examples/webgl_particles_sprites.html @@ -91,7 +91,7 @@ sprite = parameters[i][1]; size = parameters[i][2]; - materials[i] = new THREE.ParticleBasicMaterial( { size: size, map: sprite, blending: THREE.AdditiveBlending, depthTest: false } ); + materials[i] = new THREE.ParticleBasicMaterial( { size: size, map: sprite, blending: THREE.AdditiveBlending, depthTest: false, transparent : true } ); materials[i].color.setHSV( color[0], color[1], color[2] ); particles = new THREE.ParticleSystem( geometry, materials[i] ); diff --git a/examples/webgl_postprocessing.html b/examples/webgl_postprocessing.html index ff9854a7d6..a6361820c8 100644 --- a/examples/webgl_postprocessing.html +++ b/examples/webgl_postprocessing.html @@ -107,9 +107,9 @@ directionalLight.position.normalize(); sceneModel.addLight( directionalLight ); - rtTexture1 = new THREE.RenderTarget( window.innerWidth, window.innerHeight, { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter } ); - rtTexture2 = new THREE.RenderTarget( 256, 512, { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter } ); - rtTexture3 = new THREE.RenderTarget( 512, 256, { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter } ); + rtTexture1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter } ); + rtTexture2 = new THREE.WebGLRenderTarget( 256, 512, { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter } ); + rtTexture3 = new THREE.WebGLRenderTarget( 512, 256, { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter } ); materialColor = new THREE.MeshShaderMaterial( { @@ -131,7 +131,8 @@ uniforms: screen_uniforms, vertexShader: screen_shader.vertexShader, fragmentShader: screen_shader.fragmentShader, - blending: THREE.AdditiveBlending + blending: THREE.AdditiveBlending, + transparent: true } ); diff --git a/examples/webgl_postprocessing_dof.html b/examples/webgl_postprocessing_dof.html index fdf50cef17..cf65aba169 100644 --- a/examples/webgl_postprocessing_dof.html +++ b/examples/webgl_postprocessing_dof.html @@ -241,8 +241,8 @@ postprocessing.camera.position.z = 100; var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter }; - postprocessing.rtTextureDepth = new THREE.RenderTarget( window.innerWidth, height, pars ); - postprocessing.rtTextureColor = new THREE.RenderTarget( window.innerWidth, height, pars ); + postprocessing.rtTextureDepth = new THREE.WebGLRenderTarget( window.innerWidth, height, pars ); + postprocessing.rtTextureColor = new THREE.WebGLRenderTarget( window.innerWidth, height, pars ); var bokeh_shader = ShaderExtras["bokeh"]; diff --git a/examples/webgl_ribbons.html b/examples/webgl_ribbons.html index f9e66ab231..d00646db08 100644 --- a/examples/webgl_ribbons.html +++ b/examples/webgl_ribbons.html @@ -232,9 +232,9 @@ postprocessing.camera.position.z = 100; var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter }; - postprocessing.rtTexture1 = new THREE.RenderTarget( window.innerWidth, window.innerHeight, pars ); - postprocessing.rtTexture2 = new THREE.RenderTarget( 512, 512, pars ); - postprocessing.rtTexture3 = new THREE.RenderTarget( 512, 512, pars ); + postprocessing.rtTexture1 = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, pars ); + postprocessing.rtTexture2 = new THREE.WebGLRenderTarget( 512, 512, pars ); + postprocessing.rtTexture3 = new THREE.WebGLRenderTarget( 512, 512, pars ); var screen_shader = ShaderUtils.lib["screen"]; var screen_uniforms = Uniforms.clone( screen_shader.uniforms ); @@ -247,7 +247,8 @@ uniforms: screen_uniforms, vertexShader: screen_shader.vertexShader, fragmentShader: screen_shader.fragmentShader, - blending: THREE.AdditiveBlending + blending: THREE.AdditiveBlending, + transparent: true } ); diff --git a/examples/webgl_rtt.html b/examples/webgl_rtt.html index 1b1472d16b..77ab9a8e84 100644 --- a/examples/webgl_rtt.html +++ b/examples/webgl_rtt.html @@ -122,7 +122,7 @@ light.position.z = 1; light.position.normalize(); sceneRTT.addLight( light ); - + light = new THREE.DirectionalLight( 0xffaaaa, 1.5 ); light.position.x = 0; light.position.y = 0; @@ -130,7 +130,7 @@ light.position.normalize(); sceneRTT.addLight( light ); - rtTexture = new THREE.RenderTarget( window.innerWidth, window.innerHeight, { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter } ); + rtTexture = new THREE.WebGLRenderTarget( window.innerWidth, window.innerHeight, { minFilter: THREE.LinearFilter, magFilter: THREE.NearestFilter } ); material = new THREE.MeshShaderMaterial( { diff --git a/examples/webgl_sandbox.html b/examples/webgl_sandbox.html index 62ddd6d387..2c33caa454 100644 --- a/examples/webgl_sandbox.html +++ b/examples/webgl_sandbox.html @@ -74,7 +74,6 @@ - @@ -95,6 +94,7 @@ + diff --git a/src/materials/LineBasicMaterial.js b/src/materials/LineBasicMaterial.js index 0a4aac0d19..073c951ea0 100644 --- a/src/materials/LineBasicMaterial.js +++ b/src/materials/LineBasicMaterial.js @@ -19,34 +19,19 @@ THREE.LineBasicMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.color = new THREE.Color( 0xffffff ); - this.opacity = 1.0; + parameters = parameters || {}; - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); - this.linewidth = 1.0; - this.linecap = 'round'; // implemented just in CanvasRenderer - this.linejoin = 'round'; // implemented just in CanvasRenderer + this.linewidth = parameters.linewidth !== undefined ? parameters.linewidth : 1; + this.linecap = parameters.linecap !== undefined ? parameters.linecap : 'round'; + this.linejoin = parameters.linejoin !== undefined ? parameters.linejoin : 'round'; - this.vertexColors = false; - - if ( parameters ) { - - if ( parameters.color !== undefined ) this.color.setHex( parameters.color ); - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.linewidth !== undefined ) this.linewidth = parameters.linewidth; - if ( parameters.linecap !== undefined ) this.linecap = parameters.linecap; - if ( parameters.linejoin !== undefined ) this.linejoin = parameters.linejoin; - - if ( parameters.vertexColors !== undefined ) this.vertexColors = parameters.vertexColors; - - } + this.vertexColors = parameters.vertexColors ? parameters.vertexColors : false; }; + +THREE.LineBasicMaterial.prototype = new THREE.Material(); +THREE.LineBasicMaterial.prototype.constructor = THREE.LineBasicMaterial; diff --git a/src/materials/Material.js b/src/materials/Material.js index 4c9ea653d3..934d44323c 100644 --- a/src/materials/Material.js +++ b/src/materials/Material.js @@ -2,6 +2,21 @@ * @author mr.doob / http://mrdoob.com/ */ +THREE.Material = function ( parameters ) { + + this.id = THREE.MaterialCounter.value ++; + + parameters = parameters || {}; + + this.opacity = parameters.opacity !== undefined ? parameters.opacity : 1; + this.transparent = parameters.transparent !== undefined ? parameters.transparent : false; + + this.blending = parameters.blending !== undefined ? parameters.blending : THREE.NormalBlending; + this.depthTest = parameters.depthTest !== undefined ? parameters.depthTest : true; + + +} + THREE.NoShading = 0; THREE.FlatShading = 1; THREE.SmoothShading = 2; diff --git a/src/materials/MeshBasicMaterial.js b/src/materials/MeshBasicMaterial.js index 7ab953b267..1c41551f4d 100644 --- a/src/materials/MeshBasicMaterial.js +++ b/src/materials/MeshBasicMaterial.js @@ -6,21 +6,21 @@ * color: , * opacity: , * map: new THREE.Texture( ), - + * * lightMap: new THREE.Texture( ), - + * * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , - + * * shading: THREE.SmoothShading, * blending: THREE.NormalBlending, * depthTest: , - + * * wireframe: , * wireframeLinewidth: , - + * * vertexColors: false / THREE.VertexColors / THREE.FaceColors, * skinning: * } @@ -28,63 +28,36 @@ THREE.MeshBasicMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; - - this.color = new THREE.Color( 0xffffff ); - this.opacity = 1.0; - this.map = null; + THREE.Material.call( this, parameters ); - this.lightMap = null; + parameters = parameters || {}; - this.envMap = null; - this.combine = THREE.MultiplyOperation; - this.reflectivity = 1.0; - this.refractionRatio = 0.98; + this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); - this.fog = true; // implemented just in WebGLRenderer2 + this.map = parameters.map !== undefined ? parameters.map : null; - this.shading = THREE.SmoothShading; - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.lightMap = parameters.lightMap !== undefined ? parameters.lightMap : null; - this.wireframe = false; - this.wireframeLinewidth = 1.0; - this.wireframeLinecap = 'round'; // implemented just in CanvasRenderer - this.wireframeLinejoin = 'round'; // implemented just in CanvasRenderer + this.envMap = parameters.envMap !== undefined ? parameters.envMap : null; + this.combine = parameters.combine !== undefined ? parameters.combine : THREE.MultiplyOperation; + this.reflectivity = parameters.reflectivity !== undefined ? parameters.reflectivity : 1; + this.refractionRatio = parameters.refractionRatio !== undefined ? parameters.refractionRatio : 0.98; - this.vertexColors = false; + // this.enableFog = parameters.enableFog ? parameters.enableFog : true; - this.skinning = false; - this.morphTargets = false; + this.shading = parameters.shading !== undefined ? parameters.shading : THREE.SmoothShading; - if ( parameters ) { + this.wireframe = parameters.wireframe !== undefined ? parameters.wireframe : false; + this.wireframeLinewidth = parameters.wireframeLinewidth !== undefined ? parameters.wireframeLinewidth : 1; + this.wireframeLinecap = parameters.wireframeLinecap !== undefined ? parameters.wireframeLinecap : 'round'; + this.wireframeLinejoin = parameters.wireframeLinejoin !== undefined ? parameters.wireframeLinejoin : 'round'; - if ( parameters.color !== undefined ) this.color.setHex( parameters.color ); - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - if ( parameters.map !== undefined ) this.map = parameters.map; + this.vertexColors = parameters.vertexColors !== undefined ? parameters.vertexColors : false; - if ( parameters.lightMap !== undefined ) this.lightMap = parameters.lightMap; - - if ( parameters.envMap !== undefined ) this.envMap = parameters.envMap; - if ( parameters.combine !== undefined ) this.combine = parameters.combine; - if ( parameters.reflectivity !== undefined ) this.reflectivity = parameters.reflectivity; - if ( parameters.refractionRatio !== undefined ) this.refractionRatio = parameters.refractionRatio; - - if ( parameters.fog !== undefined ) this.fog = parameters.fog; - - if ( parameters.shading !== undefined ) this.shading = parameters.shading; - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.wireframe !== undefined ) this.wireframe = parameters.wireframe; - if ( parameters.wireframeLinewidth !== undefined ) this.wireframeLinewidth = parameters.wireframeLinewidth; - if ( parameters.wireframeLinecap !== undefined ) this.wireframeLinecap = parameters.wireframeLinecap; - if ( parameters.wireframeLinejoin !== undefined ) this.wireframeLinejoin = parameters.wireframeLinejoin; - - if ( parameters.vertexColors !== undefined ) this.vertexColors = parameters.vertexColors; - if ( parameters.skinning !== undefined ) this.skinning = parameters.skinning; - if ( parameters.morphTargets !== undefined ) this.morphTargets = parameters.morphTargets; - - } + this.skinning = parameters.skinning !== undefined ? parameters.skinning : false; + this.morphTargets = parameters.morphTargets !== undefined ? parameters.morphTargets : false; }; + +THREE.MeshBasicMaterial.prototype = new THREE.Material(); +THREE.MeshBasicMaterial.prototype.constructor = THREE.MeshBasicMaterial; diff --git a/src/materials/MeshDepthMaterial.js b/src/materials/MeshDepthMaterial.js index a0321014b5..3aae3be850 100644 --- a/src/materials/MeshDepthMaterial.js +++ b/src/materials/MeshDepthMaterial.js @@ -15,28 +15,16 @@ THREE.MeshDepthMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.opacity = 1.0; + parameters = parameters || {}; - this.shading = THREE.SmoothShading; // doesn't really apply here, normals are not used - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.shading = parameters.shading !== undefined ? parameters.shading : THREE.SmoothShading; // doesn't really apply here, normals are not used - this.wireframe = false; - this.wireframeLinewidth = 1.0; - - if ( parameters ) { - - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - - if ( parameters.shading !== undefined ) this.shading = parameters.shading; - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.wireframe !== undefined ) this.wireframe = parameters.wireframe; - if ( parameters.wireframeLinewidth !== undefined ) this.wireframeLinewidth = parameters.wireframeLinewidth; - - } + this.wireframe = parameters.wireframe !== undefined ? parameters.wireframe : false; + this.wireframeLinewidth = parameters.wireframeLinewidth !== undefined ? parameters.wireframeLinewidth : 1; }; + +THREE.MeshDepthMaterial.prototype = new THREE.Material(); +THREE.MeshDepthMaterial.prototype.constructor = THREE.MeshDepthMaterial; diff --git a/src/materials/MeshLambertMaterial.js b/src/materials/MeshLambertMaterial.js index 732e5b031c..710d5b3969 100644 --- a/src/materials/MeshLambertMaterial.js +++ b/src/materials/MeshLambertMaterial.js @@ -6,84 +6,58 @@ * color: , * opacity: , * map: new THREE.Texture( ), - + * * lightMap: new THREE.Texture( ), - + * * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , - + * * shading: THREE.SmoothShading, * blending: THREE.NormalBlending, * depthTest: , - + * * wireframe: , * wireframeLinewidth: , - - * vertexColors: , + * + * vertexColors: false / THREE.VertexColors / THREE.FaceColors, * skinning: * } */ THREE.MeshLambertMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; - - this.color = new THREE.Color( 0xffffff ); - this.opacity = 1.0; - this.map = null; + THREE.Material.call( this, parameters ); - this.lightMap = null; + parameters = parameters || {}; - this.envMap = null; - this.combine = THREE.MultiplyOperation; - this.reflectivity = 1.0; - this.refractionRatio = 0.98; + this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); - this.fog = true; // implemented just in WebGLRenderer2 + this.map = parameters.map !== undefined ? parameters.map : null; - this.shading = THREE.SmoothShading; - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.lightMap = parameters.lightMap !== undefined ? parameters.lightMap : null; - this.wireframe = false; - this.wireframeLinewidth = 1.0; - this.wireframeLinecap = 'round'; // implemented just in CanvasRenderer - this.wireframeLinejoin = 'round'; // implemented just in CanvasRenderer + this.envMap = parameters.envMap !== undefined ? parameters.envMap : null; + this.combine = parameters.combine !== undefined ? parameters.combine : THREE.MultiplyOperation; + this.reflectivity = parameters.reflectivity !== undefined ? parameters.reflectivity : 1; + this.refractionRatio = parameters.refractionRatio !== undefined ? parameters.refractionRatio : 0.98; - this.vertexColors = false; - this.skinning = false; - this.morphTargets = false; + // this.enableFog = parameters.enableFog ? parameters.enableFog : true; - if ( parameters ) { + this.shading = parameters.shading !== undefined ? parameters.shading : THREE.SmoothShading; - if ( parameters.color !== undefined ) this.color.setHex( parameters.color ); - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - if ( parameters.map !== undefined ) this.map = parameters.map; + this.wireframe = parameters.wireframe !== undefined ? parameters.wireframe : false; + this.wireframeLinewidth = parameters.wireframeLinewidth !== undefined ? parameters.wireframeLinewidth : 1; + this.wireframeLinecap = parameters.wireframeLinecap !== undefined ? parameters.wireframeLinecap : 'round'; + this.wireframeLinejoin = parameters.wireframeLinejoin !== undefined ? parameters.wireframeLinejoin : 'round'; - if ( parameters.lightMap !== undefined ) this.lightMap = parameters.lightMap; + this.vertexColors = parameters.vertexColors !== undefined ? parameters.vertexColors : false; - if ( parameters.envMap !== undefined ) this.envMap = parameters.envMap; - if ( parameters.combine !== undefined ) this.combine = parameters.combine; - if ( parameters.reflectivity !== undefined ) this.reflectivity = parameters.reflectivity; - if ( parameters.refractionRatio !== undefined ) this.refractionRatio = parameters.refractionRatio; - - if ( parameters.fog !== undefined ) this.fog = parameters.fog; - - if ( parameters.shading !== undefined ) this.shading = parameters.shading; - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.wireframe !== undefined ) this.wireframe = parameters.wireframe; - if ( parameters.wireframeLinewidth !== undefined ) this.wireframeLinewidth = parameters.wireframeLinewidth; - if ( parameters.wireframeLinecap !== undefined ) this.wireframeLinecap = parameters.wireframeLinecap; - if ( parameters.wireframeLinejoin !== undefined ) this.wireframeLinejoin = parameters.wireframeLinejoin; - - if ( parameters.vertexColors !== undefined ) this.vertexColors = parameters.vertexColors; - if ( parameters.skinning !== undefined ) this.skinning = parameters.skinning; - if ( parameters.morphTargets !== undefined ) this.morphTargets = parameters.morphTargets; - - } + this.skinning = parameters.skinning !== undefined ? parameters.skinning : false; + this.morphTargets = parameters.morphTargets !== undefined ? parameters.morphTargets : false; }; + +THREE.MeshLambertMaterial.prototype = new THREE.Material(); +THREE.MeshLambertMaterial.prototype.constructor = THREE.MeshLambertMaterial; diff --git a/src/materials/MeshNormalMaterial.js b/src/materials/MeshNormalMaterial.js index 064242ebb5..7f88007012 100644 --- a/src/materials/MeshNormalMaterial.js +++ b/src/materials/MeshNormalMaterial.js @@ -15,28 +15,16 @@ THREE.MeshNormalMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.opacity = 1.0; + parameters = parameters || {}; - this.shading = THREE.FlatShading; - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.shading = parameters.shading ? parameters.shading : THREE.FlatShading; - this.wireframe = false; - this.wireframeLinewidth = 1.0; - - if ( parameters ) { - - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - - if ( parameters.shading !== undefined ) this.shading = parameters.shading; - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.wireframe !== undefined ) this.wireframe = parameters.wireframe; - if ( parameters.wireframeLinewidth !== undefined ) this.wireframeLinewidth = parameters.wireframeLinewidth; - - } + this.wireframe = parameters.wireframe ? parameters.wireframe : false; + this.wireframeLinewidth = parameters.wireframeLinewidth ? parameters.wireframeLinewidth : 1; }; + +THREE.MeshNormalMaterial.prototype = new THREE.Material(); +THREE.MeshNormalMaterial.prototype.constructor = THREE.MeshNormalMaterial; diff --git a/src/materials/MeshPhongMaterial.js b/src/materials/MeshPhongMaterial.js index 36664ccc11..80fa898f16 100644 --- a/src/materials/MeshPhongMaterial.js +++ b/src/materials/MeshPhongMaterial.js @@ -8,94 +8,63 @@ * specular: , * shininess: , * opacity: , - + * * map: new THREE.Texture( ), - + * * lightMap: new THREE.Texture( ), - + * * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , - + * * shading: THREE.SmoothShading, * blending: THREE.NormalBlending, * depthTest: , - + * * wireframe: , * wireframeLinewidth: , - - * vertexColors: , + * + * vertexColors: false / THREE.VertexColors / THREE.FaceColors, * skinning: * } */ THREE.MeshPhongMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.color = new THREE.Color( 0xffffff ); - this.ambient = new THREE.Color( 0x050505 ); - this.specular = new THREE.Color( 0x111111 ); - this.shininess = 30.0; - this.opacity = 1.0; + parameters = parameters || {}; - this.map = null; + this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); + this.ambient = parameters.ambient !== undefined ? new THREE.Color( parameters.ambient ) : new THREE.Color( 0x050505 ); + this.specular = parameters.specular !== undefined ? new THREE.Color( parameters.specular ) : new THREE.Color( 0x111111 ); + this.shininess = parameters.shininess !== undefined ? parameters.shininess : 30; - this.lightMap = null; + this.map = parameters.map !== undefined ? parameters.map : null; - this.envMap = null; - this.combine = THREE.MultiplyOperation; - this.reflectivity = 1.0; - this.refractionRatio = 0.98; + this.lightMap = parameters.lightMap !== undefined ? parameters.lightMap : null; - this.fog = true; // implemented just in WebGLRenderer2 + this.envMap = parameters.envMap !== undefined ? parameters.envMap : null; + this.combine = parameters.combine !== undefined ? parameters.combine : THREE.MultiplyOperation; + this.reflectivity = parameters.reflectivity !== undefined ? parameters.reflectivity : 1; + this.refractionRatio = parameters.refractionRatio !== undefined ? parameters.refractionRatio : 0.98; - this.shading = THREE.SmoothShading; - this.blending = THREE.NormalBlending; - this.depthTest = true; + // this.enableFog = parameters.enableFog ? parameters.enableFog : true; - this.wireframe = false; - this.wireframeLinewidth = 1.0; - this.wireframeLinecap = 'round'; // implemented just in CanvasRenderer - this.wireframeLinejoin = 'round'; // implemented just in CanvasRenderer + this.shading = parameters.shading !== undefined ? parameters.shading : THREE.SmoothShading; - this.vertexColors = false; - this.skinning = false; - this.morphTargets = false; + this.wireframe = parameters.wireframe !== undefined ? parameters.wireframe : false; + this.wireframeLinewidth = parameters.wireframeLinewidth !== undefined ? parameters.wireframeLinewidth : 1; + this.wireframeLinecap = parameters.wireframeLinecap !== undefined ? parameters.wireframeLinecap : 'round'; + this.wireframeLinejoin = parameters.wireframeLinejoin !== undefined ? parameters.wireframeLinejoin : 'round'; - if ( parameters ) { + this.vertexColors = parameters.vertexColors !== undefined ? parameters.vertexColors : false; - if ( parameters.color !== undefined ) this.color = new THREE.Color( parameters.color ); - if ( parameters.ambient !== undefined ) this.ambient = new THREE.Color( parameters.ambient ); - if ( parameters.specular !== undefined ) this.specular = new THREE.Color( parameters.specular ); - if ( parameters.shininess !== undefined ) this.shininess = parameters.shininess; - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - - if ( parameters.lightMap !== undefined ) this.lightMap = parameters.lightMap; - - if ( parameters.map !== undefined ) this.map = parameters.map; - - if ( parameters.envMap !== undefined ) this.envMap = parameters.envMap; - if ( parameters.combine !== undefined ) this.combine = parameters.combine; - if ( parameters.reflectivity !== undefined ) this.reflectivity = parameters.reflectivity; - if ( parameters.refractionRatio !== undefined ) this.refractionRatio = parameters.refractionRatio; - - if ( parameters.fog !== undefined ) this.fog = parameters.fog; - - if ( parameters.shading !== undefined ) this.shading = parameters.shading; - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.wireframe !== undefined ) this.wireframe = parameters.wireframe; - if ( parameters.wireframeLinewidth !== undefined ) this.wireframeLinewidth = parameters.wireframeLinewidth; - if ( parameters.wireframeLinecap !== undefined ) this.wireframeLinecap = parameters.wireframeLinecap; - if ( parameters.wireframeLinejoin !== undefined ) this.wireframeLinejoin = parameters.wireframeLinejoin; - - if ( parameters.vertexColors !== undefined ) this.vertexColors = parameters.vertexColors; - if ( parameters.skinning !== undefined ) this.skinning = parameters.skinning; - if ( parameters.morphTargets !== undefined ) this.morphTargets = parameters.morphTargets; - - } + this.skinning = parameters.skinning !== undefined ? parameters.skinning : false; + this.morphTargets = parameters.morphTargets !== undefined ? parameters.morphTargets : false; }; + +THREE.MeshPhongMaterial.prototype = new THREE.Material(); +THREE.MeshPhongMaterial.prototype.constructor = THREE.MeshPhongMaterial; diff --git a/src/materials/MeshShaderMaterial.js b/src/materials/MeshShaderMaterial.js index 2d5eb3b17e..ceed18900e 100644 --- a/src/materials/MeshShaderMaterial.js +++ b/src/materials/MeshShaderMaterial.js @@ -23,51 +23,25 @@ THREE.MeshShaderMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.fragmentShader = "void main() {}"; - this.vertexShader = "void main() {}"; - this.uniforms = {}; + parameters = parameters || {}; - this.opacity = 1.0; // set to < 1.0 to renderer in transparent batch + this.fragmentShader = parameters.fragmentShader !== undefined ? parameters.fragmentShader : "void main() {}"; + this.vertexShader = parameters.vertexShader !== undefined ? parameters.vertexShader : "void main() {}"; + this.uniforms = parameters.uniforms !== undefined ? parameters.uniforms : {}; - this.shading = THREE.SmoothShading; - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.shading = parameters.shading !== undefined ? parameters.shading : THREE.SmoothShading; - this.wireframe = false; - this.wireframeLinewidth = 1.0; - this.wireframeLinecap = 'round'; // doesn't make sense here - this.wireframeLinejoin = 'round'; // not implemented in WebGLRenderer (and this material doesn't make sense in CanvasRenderer) + this.wireframe = parameters.wireframe !== undefined ? parameters.wireframe : false; + this.wireframeLinewidth = parameters.wireframeLinewidth !== undefined ? parameters.wireframeLinewidth : 1; - this.lights = false; // set to use scene lights - this.vertexColors = false; // set to use "color" attribute stream - this.skinning = false; // set to use skinning attribute streams - this.morphTargets = false; // set to use morph targets - - if ( parameters ) { - - if ( parameters.fragmentShader !== undefined ) this.fragmentShader = parameters.fragmentShader; - if ( parameters.vertexShader !== undefined ) this.vertexShader = parameters.vertexShader; - - if ( parameters.uniforms !== undefined ) this.uniforms = parameters.uniforms; - - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - - if ( parameters.shading !== undefined ) this.shading = parameters.shading; - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.wireframe !== undefined ) this.wireframe = parameters.wireframe; - if ( parameters.wireframeLinewidth !== undefined ) this.wireframeLinewidth = parameters.wireframeLinewidth; - if ( parameters.wireframeLinecap !== undefined ) this.wireframeLinecap = parameters.wireframeLinecap; - if ( parameters.wireframeLinejoin !== undefined ) this.wireframeLinejoin = parameters.wireframeLinejoin; - - if ( parameters.lights !== undefined ) this.lights = parameters.lights; - if ( parameters.vertexColors !== undefined ) this.vertexColors = parameters.vertexColors; - if ( parameters.skinning !== undefined ) this.skinning = parameters.skinning; - if ( parameters.morphTargets !== undefined ) this.morphTargets = parameters.morphTargets; - - } + this.lights = parameters.lights !== undefined ? parameters.lights : false; // set to use scene lights + this.vertexColors = parameters.vertexColors !== undefined ? parameters.vertexColors : false; // set to use "color" attribute stream + this.skinning = parameters.skinning !== undefined ? parameters.skinning : false; // set to use skinning attribute streams + this.morphTargets = parameters.morphTargets !== undefined ? parameters.morphTargets : false; // set to use morph targets }; + +THREE.MeshShaderMaterial.prototype = new THREE.Material(); +THREE.MeshShaderMaterial.prototype.constructor = THREE.MeshShaderMaterial; diff --git a/src/materials/ParticleBasicMaterial.js b/src/materials/ParticleBasicMaterial.js index bde7b894a6..455e3d98c2 100644 --- a/src/materials/ParticleBasicMaterial.js +++ b/src/materials/ParticleBasicMaterial.js @@ -18,36 +18,20 @@ THREE.ParticleBasicMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.color = new THREE.Color( 0xffffff ); - this.opacity = 1.0; - this.map = null; + parameters = parameters || {}; - this.size = 1.0; - this.sizeAttenuation = true; + this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.map = parameters.map !== undefined ? parameters.map : null; - this.offset = new THREE.Vector2(); // TODO: expose to parameters (implemented just in CanvasRenderer) + this.size = parameters.size !== undefined ? parameters.size : 1; + this.sizeAttenuation = parameters.sizeAttenuation !== undefined ? parameters.sizeAttenuation : true; - this.vertexColors = false; - - if ( parameters ) { - - if ( parameters.color !== undefined ) this.color.setHex( parameters.color ); - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - if ( parameters.map !== undefined ) this.map = parameters.map; - - if ( parameters.size !== undefined ) this.size = parameters.size; - if ( parameters.sizeAttenuation !== undefined ) this.sizeAttenuation = parameters.sizeAttenuation; - - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - if ( parameters.depthTest !== undefined ) this.depthTest = parameters.depthTest; - - if ( parameters.vertexColors !== undefined ) this.vertexColors = parameters.vertexColors; - - } + this.vertexColors = parameters.vertexColors !== undefined ? parameters.vertexColors : false; }; + +THREE.ParticleBasicMaterial.prototype = new THREE.Material(); +THREE.ParticleBasicMaterial.prototype.constructor = THREE.ParticleBasicMaterial; diff --git a/src/materials/ParticleCanvasMaterial.js b/src/materials/ParticleCanvasMaterial.js index 0c97e65583..e662141a48 100644 --- a/src/materials/ParticleCanvasMaterial.js +++ b/src/materials/ParticleCanvasMaterial.js @@ -11,20 +11,14 @@ THREE.ParticleCanvasMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.color = new THREE.Color( 0xffffff ); - this.program = function ( context, color ) {}; - this.opacity = 1; - this.blending = THREE.NormalBlending; + parameters = parameters || {}; - if ( parameters ) { - - if ( parameters.color !== undefined ) this.color.setHex( parameters.color ); - if ( parameters.program !== undefined ) this.program = parameters.program; - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - if ( parameters.blending !== undefined ) this.blending = parameters.blending; - - } + this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); + this.program = parameters.program !== undefined ? parameters.program : function ( context, color ) {}; }; + +THREE.ParticleCanvasMaterial.prototype = new THREE.Material(); +THREE.ParticleCanvasMaterial.prototype.constructor = THREE.ParticleCanvasMaterial; diff --git a/src/materials/ParticleDOMMaterial.js b/src/materials/ParticleDOMMaterial.js index 9a77ee3983..13012a8536 100644 --- a/src/materials/ParticleDOMMaterial.js +++ b/src/materials/ParticleDOMMaterial.js @@ -4,7 +4,7 @@ THREE.ParticleDOMMaterial = function ( domElement ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this ); this.domElement = domElement; diff --git a/src/materials/ShadowVolumeDynamicMaterial.js b/src/materials/ShadowVolumeDynamicMaterial.js index 3fdc2314df..a5e24a3187 100644 --- a/src/materials/ShadowVolumeDynamicMaterial.js +++ b/src/materials/ShadowVolumeDynamicMaterial.js @@ -28,32 +28,36 @@ THREE.ShadowVolumeDynamicMaterial = function ( parameters ) { - this.id = THREE.MaterialCounter.value ++; + THREE.Material.call( this, parameters ); - this.color = new THREE.Color( 0xffffff ); - this.opacity = 1.0; - this.map = null; + parameters = parameters || {}; - this.lightMap = null; + this.color = parameters.color !== undefined ? new THREE.Color( parameters.color ) : new THREE.Color( 0xffffff ); - this.envMap = null; - this.combine = THREE.MultiplyOperation; - this.reflectivity = 1.0; - this.refractionRatio = 0.98; + this.map = parameters.map !== undefined ? parameters.map : null; - this.fog = true; // implemented just in WebGLRenderer2 + this.lightMap = parameters.lightMap !== undefined ? parameters.lightMap : null; - this.shading = THREE.FlatShading; - this.blending = THREE.NormalBlending; - this.depthTest = true; + this.envMap = parameters.envMap !== undefined ? parameters.envMap : null; + this.combine = parameters.combine !== undefined ? parameters.combine : THREE.MultiplyOperation; + this.reflectivity = parameters.reflectivity !== undefined ? parameters.reflectivity : 1; + this.refractionRatio = parameters.refractionRatio !== undefined ? parameters.refractionRatio : 0.98; - this.wireframe = false; - this.wireframeLinewidth = 1.0; - this.wireframeLinecap = 'round'; // implemented just in CanvasRenderer - this.wireframeLinejoin = 'round'; // implemented just in CanvasRenderer + // this.enableFog = parameters.enableFog ? parameters.enableFog : true; - this.vertexColors = false; - this.skinning = false; - this.morphTargets = false; + this.shading = parameters.shading !== undefined ? parameters.shading : THREE.SmoothShading; + + this.wireframe = parameters.wireframe !== undefined ? parameters.wireframe : false; + this.wireframeLinewidth = parameters.wireframeLinewidth !== undefined ? parameters.wireframeLinewidth : 1; + this.wireframeLinecap = parameters.wireframeLinecap !== undefined ? parameters.wireframeLinecap : 'round'; + this.wireframeLinejoin = parameters.wireframeLinejoin !== undefined ? parameters.wireframeLinejoin : 'round'; + + this.vertexColors = parameters.vertexColors !== undefined ? parameters.vertexColors : false; + + this.skinning = parameters.skinning !== undefined ? parameters.skinning : false; + this.morphTargets = parameters.morphTargets !== undefined ? parameters.morphTargets : false; }; + +THREE.ShadowVolumeDynamicMaterial.prototype = new THREE.Material(); +THREE.ShadowVolumeDynamicMaterial.prototype.constructor = THREE.ShadowVolumeDynamicMaterial; diff --git a/src/objects/Mesh.js b/src/objects/Mesh.js index 1e6de16ef4..1cef6c970e 100644 --- a/src/objects/Mesh.js +++ b/src/objects/Mesh.js @@ -63,11 +63,10 @@ THREE.Mesh.prototype.supr = THREE.Object3D.prototype; THREE.Mesh.prototype.getMorphTargetIndexByName = function( name ) { - if( this.morphTargetDictionary[ name ] !== undefined ) { - + if ( this.morphTargetDictionary[ name ] !== undefined ) { + return this.morphTargetDictionary[ name ]; } - console.log( "THREE.Mesh.getMorphTargetIndexByName: morph target " + name + " does not exist. Returning 0." ); return 0; diff --git a/src/materials/RenderTarget.js b/src/renderers/WebGLRenderTarget.js similarity index 91% rename from src/materials/RenderTarget.js rename to src/renderers/WebGLRenderTarget.js index a648eddc33..2686b76d62 100644 --- a/src/materials/RenderTarget.js +++ b/src/renderers/WebGLRenderTarget.js @@ -2,7 +2,7 @@ * @author szimek / https://github.com/szimek/ */ -THREE.RenderTarget = function ( width, height, options ) { +THREE.WebGLRenderTarget = function ( width, height, options ) { this.width = width; this.height = height; diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index f273b00fa6..fc05a52008 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -2376,11 +2376,7 @@ THREE.WebGLRenderer = function ( parameters ) { for ( m = 0, ml = object.materials.length; m < ml; m++ ) { material = object.materials[ m ]; - - if ( ( material.opacity && material.opacity < 1.0 ) || material.blending != THREE.NormalBlending ) - addToFixedArray( transparent, material ); - else - addToFixedArray( opaque, material ); + material.transparent ? addToFixedArray( transparent, material ) : addToFixedArray( opaque, material ); } @@ -2406,31 +2402,14 @@ THREE.WebGLRenderer = function ( parameters ) { for ( i = 0, l = buffer.materials.length; i < l; i++ ) { material = buffer.materials[ i ]; - - if ( material ) { - - if ( ( material.opacity && material.opacity < 1.0 ) || material.blending != THREE.NormalBlending ) - addToFixedArray( transparent, material ); - else - addToFixedArray( opaque, material ); - - } + if ( material ) material.transparent ? addToFixedArray( transparent, material ) : addToFixedArray( opaque, material ); } } else { material = meshMaterial; - - if ( ( material.opacity && material.opacity < 1.0 ) || material.blending != THREE.NormalBlending ) { - - addToFixedArray( transparent, material ); - - } else { - - addToFixedArray( opaque, material ); - - } + if ( material ) material.transparent ? addToFixedArray( transparent, material ) : addToFixedArray( opaque, material ); } @@ -2549,7 +2528,7 @@ THREE.WebGLRenderer = function ( parameters ) { setBlending( THREE.NormalBlending ); - for ( o = 0; o < ol; o++ ) { + for ( o = 0; o < ol; o ++ ) { webglObject = scene.__webglObjects[ o ]; @@ -2561,7 +2540,7 @@ THREE.WebGLRenderer = function ( parameters ) { setObjectFaces( object ); - for( i = 0; i < opaque.count; i++ ) { + for ( i = 0; i < opaque.count; i ++ ) { material = opaque.list[ i ]; @@ -2604,7 +2583,7 @@ THREE.WebGLRenderer = function ( parameters ) { // transparent pass - for ( o = 0; o < ol; o++ ) { + for ( o = 0; o < ol; o ++ ) { webglObject = scene.__webglObjects[ o ]; @@ -2616,7 +2595,7 @@ THREE.WebGLRenderer = function ( parameters ) { setObjectFaces( object ); - for( i = 0; i < transparent.count; i++ ) { + for ( i = 0; i < transparent.count; i ++ ) { material = transparent.list[ i ]; @@ -2644,7 +2623,7 @@ THREE.WebGLRenderer = function ( parameters ) { setObjectFaces( object ); - for( i = 0; i < transparent.count; i++ ) { + for ( i = 0; i < transparent.count; i ++ ) { material = transparent.list[ i ]; @@ -2662,18 +2641,18 @@ THREE.WebGLRenderer = function ( parameters ) { // render stencil shadows - if( stencil && scene.__webglShadowVolumes.length && scene.lights.length ) { + if ( stencil && scene.__webglShadowVolumes.length && scene.lights.length ) { renderStencilShadows( scene ); - + } // render lens flares - - if( scene.__webglLensFlares.length ) { - + + if ( scene.__webglLensFlares.length ) { + renderLensFlares( scene, camera ); - + } @@ -2688,8 +2667,6 @@ THREE.WebGLRenderer = function ( parameters ) { }; - - /* * Stencil Shadows @@ -2701,7 +2678,7 @@ THREE.WebGLRenderer = function ( parameters ) { */ function renderStencilShadows( scene ) { - + // setup stencil _gl.enable( _gl.POLYGON_OFFSET_FILL ); @@ -2709,40 +2686,39 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.enable( _gl.STENCIL_TEST ); _gl.depthMask( false ); _gl.colorMask( false, false, false, false ); - + _gl.stencilFunc( _gl.ALWAYS, 1, 0xFF ); _gl.stencilOpSeparate( _gl.BACK, _gl.KEEP, _gl.INCR, _gl.KEEP ); _gl.stencilOpSeparate( _gl.FRONT, _gl.KEEP, _gl.DECR, _gl.KEEP ); - + // loop through all directional lights - + var l, ll = scene.lights.length; var p; var light, lights = scene.lights; - var dirLight = []; + var dirLight = []; var object, geometryGroup, material; - var program; + var program; var p_uniforms; - var m_uniforms; - var attributes; + var m_uniforms; + var attributes; var o, ol = scene.__webglShadowVolumes.length; - - for( l = 0; l < ll; l++ ) { - + + for ( l = 0; l < ll; l++ ) { + light = scene.lights[ l ]; - - if( light instanceof THREE.DirectionalLight ) { + + if ( light instanceof THREE.DirectionalLight ) { dirLight[ 0 ] = -light.position.x; dirLight[ 1 ] = -light.position.y; dirLight[ 2 ] = -light.position.z; - // render all volumes - - for( o = 0; o < ol; o++ ) { - + + for ( o = 0; o < ol; o++ ) { + object = scene.__webglShadowVolumes[ o ].object; geometryGroup = scene.__webglShadowVolumes[ o ].buffer; material = object.materials[ 0 ]; @@ -2751,12 +2727,11 @@ THREE.WebGLRenderer = function ( parameters ) { program = material.program, p_uniforms = program.uniforms, - m_uniforms = material.uniforms, - attributes = program.attributes; + m_uniforms = material.uniforms, + attributes = program.attributes; + if ( _currentProgram !== program ) { - if( _currentProgram !== program ) { - _gl.useProgram( program ); _currentProgram = program; @@ -2783,7 +2758,7 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.cullFace( _gl.BACK ); _gl.drawElements( _gl.TRIANGLES, geometryGroup.__webglFaceCount, _gl.UNSIGNED_SHORT, 0 ); - + } } @@ -2797,10 +2772,10 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.colorMask( true, true, true, true ); _gl.stencilFunc( _gl.NOTEQUAL, 0, 0xFF ); _gl.stencilOp( _gl.KEEP, _gl.KEEP, _gl.KEEP ); - _gl.disable( _gl.DEPTH_TEST ); + _gl.disable( _gl.DEPTH_TEST ); - // draw darkening polygon + // draw darkening polygon _oldBlending = ""; _currentProgram = _stencilShadow.program; @@ -2808,23 +2783,24 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.useProgram( _stencilShadow.program ); _gl.uniformMatrix4fv( _stencilShadow.projectionLocation, false, _projectionMatrixArray ); _gl.uniform1f( _stencilShadow.darknessLocation, _stencilShadow.darkness ); - + _gl.bindBuffer( _gl.ARRAY_BUFFER, _stencilShadow.vertexBuffer ); _gl.vertexAttribPointer( _stencilShadow.vertexLocation, 3, _gl.FLOAT, false, 0, 0 ); _gl.enableVertexAttribArray( _stencilShadow.vertexLocation ); _gl.blendFunc( _gl.ONE, _gl.ONE_MINUS_SRC_ALPHA ); _gl.blendEquation( _gl.FUNC_ADD ); - + _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, _stencilShadow.elementBuffer ); _gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 ); // disable stencil - _gl.disable ( _gl.STENCIL_TEST ); - _gl.enable ( _gl.DEPTH_TEST ); - _gl.depthMask( _currentDepthMask ); + _gl.disable( _gl.STENCIL_TEST ); + _gl.enable( _gl.DEPTH_TEST ); + _gl.depthMask( _currentDepthMask ); + } /* @@ -2837,7 +2813,7 @@ THREE.WebGLRenderer = function ( parameters ) { */ function renderLensFlares( scene, camera ) { - + var object, objectZ, geometryGroup, material; var o, ol = scene.__webglLensFlares.length; var f, fl, flare; @@ -2869,7 +2845,7 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.uniform1i( uniforms.map, 0 ); _gl.activeTexture( _gl.TEXTURE0 ); - + _gl.uniform1f( uniforms.opacity, 1 ); _gl.uniform1f( uniforms.rotation, 0 ); _gl.uniform2fv( uniforms.scale, scale ); @@ -2886,34 +2862,34 @@ THREE.WebGLRenderer = function ( parameters ) { _gl.depthMask( false ); - for( o = 0; o < ol; o++ ) { - + for ( o = 0; o < ol; o ++ ) { + // calc object screen position - + object = scene.__webglLensFlares[ o ].object; - + tempPosition.set( object.matrixWorld.n14, object.matrixWorld.n24, object.matrixWorld.n34 ); - + camera.matrixWorldInverse.multiplyVector3( tempPosition ); objectZ = tempPosition.z; camera.projectionMatrix.multiplyVector3( tempPosition ); - - + + // setup arrays for gl programs - + screenPosition[ 0 ] = tempPosition.x; screenPosition[ 1 ] = tempPosition.y; screenPosition[ 2 ] = tempPosition.z; - + screenPositionPixels[ 0 ] = screenPosition[ 0 ] * halfViewportWidth + halfViewportWidth; screenPositionPixels[ 1 ] = screenPosition[ 1 ] * halfViewportHeight + halfViewportHeight; - + // save current RGB to temp texture - + _gl.copyTexSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, screenPositionPixels[ 0 ] - 8, screenPositionPixels[ 1 ] - 8, 16, 16 ); - + // render pink quad _gl.uniform3fv( uniforms.screenPosition, screenPosition ); @@ -2927,17 +2903,16 @@ THREE.WebGLRenderer = function ( parameters ) { // read back try { - + _gl.readPixels( screenPositionPixels[ 0 ] - 8, screenPositionPixels[ 1 ] - 8, 16, 16, _gl.RGBA, _gl.UNSIGNED_BYTE, _lensFlare.readBackPixels ); - - } - catch( error ) { - + + } catch( error ) { + console.log( "WebGLRenderer.renderLensFlare: readPixels failed!" ); } - if( _gl.getError()) { - + if ( _gl.getError() ) { + console.log( "WebGLRenderer.renderLensFlare: readPixels failed!" ); } @@ -2953,99 +2928,98 @@ THREE.WebGLRenderer = function ( parameters ) { sampleIndex = ( sampleMidX - sampleX ) + ( sampleMidY - sampleY ); // upper left if( _lensFlare.readBackPixels[ sampleIndex + 0 ] === 255 && _lensFlare.readBackPixels[ sampleIndex + 1 ] === 0 && - _lensFlare.readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; + _lensFlare.readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; sampleIndex = ( sampleMidX + sampleX ) + ( sampleMidY - sampleY ); // upper right if( readBackPixels[ sampleIndex + 0 ] === 255 && readBackPixels[ sampleIndex + 1 ] === 0 && - readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; + readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; sampleIndex = ( sampleMidX + sampleX ) + ( sampleMidY + sampleY ); // lower right if( readBackPixels[ sampleIndex + 0 ] === 255 && readBackPixels[ sampleIndex + 1 ] === 0 && - readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; + readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; sampleIndex = ( sampleMidX - sampleX ) + ( sampleMidY + sampleY ); // lower left if( readBackPixels[ sampleIndex + 0 ] === 255 && readBackPixels[ sampleIndex + 1 ] === 0 && - readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; + readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; sampleIndex = sampleMidX + sampleMidY; // center if( readBackPixels[ sampleIndex + 0 ] === 255 && readBackPixels[ sampleIndex + 1 ] === 0 && - readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; + readBackPixels[ sampleIndex + 2 ] === 255 ) visibility += 0.2; object.positionScreen.x = screenPosition[ 0 ]; object.positionScreen.y = screenPosition[ 1 ]; object.positionScreen.z = screenPosition[ 2 ]; - if( object.customUpdateCallback ) { - + if ( object.customUpdateCallback ) { + object.customUpdateCallback( visibility, object ); - + } else { - + object.updateLensFlares( visibility ); - + } // restore graphics - + _gl.uniform1i( uniforms.renderPink, 0 ); _gl.disable( _gl.DEPTH_TEST ); _gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 ); } - - + + // loop through all lens flares and draw their flares // setup gl - - for( o = 0; o < ol; o++ ) { - + + for ( o = 0; o < ol; o ++ ) { + object = scene.__webglLensFlares[ o ].object; - for( f = 0, fl = object.lensFlares.length; f < fl; f++ ) { - + for ( f = 0, fl = object.lensFlares.length; f < fl; f ++ ) { + flare = object.lensFlares[ f ]; - - if( flare.opacity > 0.001 && flare.scale > 0.001 ) { + + if ( flare.opacity > 0.001 && flare.scale > 0.001 ) { screenPosition[ 0 ] = flare.x; screenPosition[ 1 ] = flare.y; screenPosition[ 2 ] = flare.z; - + size = flare.size * flare.scale / _viewportHeight; scale[ 0 ] = size * invAspect; scale[ 1 ] = size; - - + _gl.uniform3fv( uniforms.screenPosition, screenPosition ); _gl.uniform1f( uniforms.rotation, flare.rotation ); _gl.uniform2fv( uniforms.scale, scale ); _gl.uniform1f( uniforms.opacity, flare.opacity ); - + setBlending( flare.blending ); setTexture( flare.texture, 0 ); - + // todo: only draw if loaded - + _gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 ); + } - + } } - // restore gl - + _gl.enable( _gl.CULL_FACE ); _gl.enable( _gl.DEPTH_TEST ); _gl.depthMask( _currentDepthMask ); - } + } function setupMatrices ( object, camera ) { @@ -3053,7 +3027,7 @@ THREE.WebGLRenderer = function ( parameters ) { object._modelViewMatrix.multiplyToArray( camera.matrixWorldInverse, object.matrixWorld, object._modelViewMatrixArray ); THREE.Matrix4.makeInvert3x3( object._modelViewMatrix ).transposeIntoArray( object._normalMatrixArray ); - }; + } this.initWebGLObjects = function ( scene ) { @@ -3092,7 +3066,7 @@ THREE.WebGLRenderer = function ( parameters ) { updateObject( scene.__webglShadowVolumes[ o ].object, scene ); } - + for ( var o = 0, ol = scene.__webglLensFlares.length; o < ol; o ++ ) { updateObject( scene.__webglLensFlares[ o ].object, scene ); @@ -3165,9 +3139,9 @@ THREE.WebGLRenderer = function ( parameters ) { } } else if ( object instanceof THREE.LensFlare ) { - + addBuffer( scene.__webglLensFlares, undefined, object ); - + } else if ( object instanceof THREE.Ribbon ) { geometry = object.geometry; @@ -3404,19 +3378,21 @@ THREE.WebGLRenderer = function ( parameters ) { function addBuffer ( objlist, buffer, object ) { - objlist.push( { buffer: buffer, object: object, - opaque: { list: [], count: 0 }, - transparent: { list: [], count: 0 } - } ); + objlist.push( { + buffer: buffer, object: object, + opaque: { list: [], count: 0 }, + transparent: { list: [], count: 0 } + } ); }; function addBufferImmediate ( objlist, object ) { - objlist.push( { object: object, - opaque: { list: [], count: 0 }, - transparent: { list: [], count: 0 } - } ); + objlist.push( { + object: object, + opaque: { list: [], count: 0 }, + transparent: { list: [], count: 0 } + } ); }; @@ -3566,13 +3542,13 @@ THREE.WebGLRenderer = function ( parameters ) { "attribute vec2 uv2;", "#ifdef USE_COLOR", - + "attribute vec3 color;", - + "#endif", "#ifdef USE_MORPHTARGETS", - + "attribute vec3 morphTarget0;", "attribute vec3 morphTarget1;", "attribute vec3 morphTarget2;", @@ -3581,18 +3557,18 @@ THREE.WebGLRenderer = function ( parameters ) { "attribute vec3 morphTarget5;", "attribute vec3 morphTarget6;", "attribute vec3 morphTarget7;", - + "#endif", "#ifdef USE_SKINNING", - + "attribute vec4 skinVertexA;", "attribute vec4 skinVertexB;", "attribute vec4 skinIndex;", "attribute vec4 skinWeight;", "#endif", - + "" ].join("\n"); @@ -3705,10 +3681,10 @@ THREE.WebGLRenderer = function ( parameters ) { switch ( blending ) { case THREE.AdditiveAlphaBlending: - + _gl.blendEquation( _gl.FUNC_ADD ); _gl.blendFunc( _gl.SRC_ALPHA, _gl.ONE ); - + break; case THREE.AdditiveBlending: diff --git a/utils/build.py b/utils/build.py index 0be4f905e3..8f69f81446 100644 --- a/utils/build.py +++ b/utils/build.py @@ -52,7 +52,6 @@ COMMON_FILES = [ 'materials/ParticleCanvasMaterial.js', 'materials/ParticleDOMMaterial.js', 'materials/Texture.js', -'materials/RenderTarget.js', 'materials/Uniforms.js', 'objects/Particle.js', 'objects/ParticleSystem.js', @@ -73,6 +72,7 @@ COMMON_FILES = [ 'renderers/SVGRenderer.js', 'renderers/WebGLShaders.js', 'renderers/WebGLRenderer.js', +'renderers/WebGLRenderTarget.js', 'renderers/SoundRenderer.js', 'renderers/renderables/RenderableVertex.js', 'renderers/renderables/RenderableFace3.js', @@ -273,7 +273,6 @@ WEBGL_FILES = [ 'materials/ParticleBasicMaterial.js', 'materials/ShadowVolumeDynamicMaterial.js', 'materials/Texture.js', -'materials/RenderTarget.js', 'materials/Uniforms.js', 'objects/Particle.js', 'objects/ParticleSystem.js', @@ -291,7 +290,8 @@ WEBGL_FILES = [ 'renderers/Projector.js', 'renderers/SoundRenderer.js', 'renderers/WebGLShaders.js', -'renderers/WebGLRenderer.js' +'renderers/WebGLRenderer.js', +'renderers/WebGLRenderTarget.js' ] def merge(files): -- GitLab