diff --git a/build/Three.js b/build/Three.js index 7168713c..50b14d00 100755 --- a/build/Three.js +++ b/build/Three.js @@ -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.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,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;e>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 27492d2b..c219ccfb 100644 --- a/build/custom/ThreeCanvas.js +++ b/build/custom/ThreeCanvas.js @@ -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;aq){A=s;q=t[A]}b.bindBuffer(b.ARRAY_BUFFER,m.__webglMorphTargetsBuffers[A]);b.vertexAttribPointer(n["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,m.__webglVertexBuffer);b.vertexAttribPointer(e.position,3,b.FLOAT,!1,0,0)}if(e.color>=0){b.bindBuffer(b.ARRAY_BUFFER, -m.__webglColorBuffer);b.vertexAttribPointer(e.color,3,b.FLOAT,!1,0,0)}if(e.normal>=0){b.bindBuffer(b.ARRAY_BUFFER,m.__webglNormalBuffer);b.vertexAttribPointer(e.normal,3,b.FLOAT,!1,0,0)}if(e.tangent>=0){b.bindBuffer(b.ARRAY_BUFFER,m.__webglTangentBuffer);b.vertexAttribPointer(e.tangent,4,b.FLOAT,!1,0,0)}if(e.uv>=0)if(m.__webglUVBuffer){b.bindBuffer(b.ARRAY_BUFFER,m.__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(m.__webglUV2Buffer){b.bindBuffer(b.ARRAY_BUFFER,m.__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,m.__webglSkinVertexABuffer);b.vertexAttribPointer(e.skinVertexA,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,m.__webglSkinVertexBBuffer);b.vertexAttribPointer(e.skinVertexB,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER, -m.__webglSkinIndicesBuffer);b.vertexAttribPointer(e.skinIndex,4,b.FLOAT,!1,0,0);b.bindBuffer(b.ARRAY_BUFFER,m.__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,m.__webglLineBuffer);b.drawElements(b.LINES,m.__webglLineCount,b.UNSIGNED_SHORT,0)}else{b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,m.__webglFaceBuffer);b.drawElements(b.TRIANGLES,m.__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,m.__webglLineCount)}else if(u instanceof THREE.ParticleSystem)b.drawArrays(b.POINTS,0,m.__webglParticleCount);else u instanceof THREE.Ribbon&&b.drawArrays(b.TRIANGLE_STRIP,0,m.__webglVertexCount)}}function i(e,n){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(n.attributes.position);b.vertexAttribPointer(n.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(n.attributes.normal);b.vertexAttribPointer(n.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? +q.image.__webglTextureCube);for(s=0;s<6;++s)b.texImage2D(b.TEXTURE_CUBE_MAP_POSITIVE_X+s,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,q.image[s]);q.__webglInit=!0}V(b.TEXTURE_CUBE_MAP,q,q.image[0]);b.bindTexture(b.TEXTURE_CUBE_MAP,null);q.needsUpdate=!1}b.activeTexture(b.TEXTURE0+k);b.bindTexture(b.TEXTURE_CUBE_MAP,q.image.__webglTextureCube)}}else E(q,k)}}b.uniformMatrix4fv(r.modelViewMatrix,!1,n._modelViewMatrixArray);b.uniformMatrix3fv(r.normalMatrix,!1,n._normalMatrixArray);(h instanceof THREE.MeshShaderMaterial|| +h instanceof THREE.MeshPhongMaterial||h.envMap)&&b.uniform3f(r.cameraPosition,e.position.x,e.position.y,e.position.z);(h instanceof THREE.MeshShaderMaterial||h.envMap||h.skinning)&&b.uniformMatrix4fv(r.objectMatrix,!1,n._objectMatrixArray);(h instanceof THREE.MeshPhongMaterial||h instanceof THREE.MeshLambertMaterial||h instanceof THREE.MeshShaderMaterial||h.skinning)&&b.uniformMatrix4fv(r.viewMatrix,!1,Qa);if(h instanceof THREE.ShadowVolumeDynamicMaterial){e=t.directionalLightDirection.value;e[0]= +-m.position.x;e[1]=-m.position.y;e[2]=-m.position.z;b.uniform3fv(r.directionalLightDirection,e);b.uniformMatrix4fv(r.objectMatrix,!1,n._objectMatrixArray);b.uniformMatrix4fv(r.viewMatrix,!1,Qa)}if(h.skinning){b.uniformMatrix4fv(r.cameraInverseMatrix,!1,Qa);b.uniformMatrix4fv(r.boneGlobalMatrices,!1,n.boneMatrices)}return u}function f(e,m,k,h,n,u){if(h.opacity!=0){e=g(e,m,k,h,u).attributes;if(h.morphTargets){m=h.program.attributes;u.morphTargetBase!==-1?b.bindBuffer(b.ARRAY_BUFFER,n.__webglMorphTargetsBuffers[u.morphTargetBase]): +b.bindBuffer(b.ARRAY_BUFFER,n.__webglVertexBuffer);b.vertexAttribPointer(m.position,3,b.FLOAT,!1,0,0);if(u.morphTargetForcedOrder.length){k=0;for(var r=u.morphTargetForcedOrder,t=u.morphTargetInfluences;kq){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 n;for(e=0;e<6;e++){n=ua[e];n.divideScalar(Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z))}}function v(e){for(var n=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*n.n14+ua[h].y*n.n24+ua[h].z*n.n34+ua[h].w;if(e<=k)return!1}return!0}function x(e,n){e.list[e.count]=n;e.count+=1}function y(e){var n,k,h=e.object,m=e.opaque,u=e.transparent;u.count= -0;e=m.count=0;for(n=h.materials.length;e0.0010&&q.scale>0.0010){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, -n){e._modelViewMatrix.multiplyToArray(n.matrixWorldInverse,e.matrixWorld,e._modelViewMatrixArray);THREE.Matrix4.makeInvert3x3(e._modelViewMatrix).transposeIntoArray(e._normalMatrixArray)}function O(e){var n,k,h;if(e instanceof THREE.Mesh){k=e.geometry;for(n in k.geometryGroups){h=k.geometryGroups[n];if(k.__dirtyVertices||k.__dirtyMorphTargets||k.__dirtyElements||k.__dirtyUvs||k.__dirtyNormals||k.__dirtyColors||k.__dirtyTangents){var m=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,m)}if(ib){b.bindBuffer(b.ARRAY_BUFFER,h.__webglNormalBuffer);b.bufferData(b.ARRAY_BUFFER,Ma,m)}if(jb&&Ea.hasTangents){b.bindBuffer(b.ARRAY_BUFFER, -h.__webglTangentBuffer);b.bufferData(b.ARRAY_BUFFER,fa,m)}if(bb&&Va>0){b.bindBuffer(b.ARRAY_BUFFER,h.__webglUVBuffer);b.bufferData(b.ARRAY_BUFFER,db,m)}if(bb&&Wa>0){b.bindBuffer(b.ARRAY_BUFFER,h.__webglUV2Buffer);b.bufferData(b.ARRAY_BUFFER,eb,m)}if(hb){b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h.__webglFaceBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Ja,m);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h.__webglLineBuffer);b.bufferData(b.ELEMENT_ARRAY_BUFFER,Ka,m)}if(w>0){b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinVertexABuffer); -b.bufferData(b.ARRAY_BUFFER,ga,m);b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinVertexBBuffer);b.bufferData(b.ARRAY_BUFFER,ha,m);b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinIndicesBuffer);b.bufferData(b.ARRAY_BUFFER,ia,m);b.bindBuffer(b.ARRAY_BUFFER,h.__webglSkinWeightsBuffer);b.bufferData(b.ARRAY_BUFFER,ja,m)}}}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;n=b.DYNAMIC_DRAW;P=e.vertices;m=e.colors;N=P.length;u=m.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(m); -e.geometryGroups[A].vertices+=r}}function Y(e,n,k){e.push({buffer:n,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,n,k){if((k.width&k.width-1)==0&&(k.height&k.height-1)==0){b.texParameteri(e,b.TEXTURE_WRAP_S,$(n.wrapS));b.texParameteri(e,b.TEXTURE_WRAP_T,$(n.wrapT));b.texParameteri(e,b.TEXTURE_MAG_FILTER,$(n.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,$(n.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(n.magFilter));b.texParameteri(e,b.TEXTURE_MIN_FILTER,Da(n.minFilter))}}function E(e,n){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+n);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 n,k;if(e){n=e.__webglFramebuffer;k=e.width;e=e.height}else{n=null;k=ma;e=xa}if(n!=Ba){b.bindFramebuffer(b.FRAMEBUFFER,n);b.viewport(U,ra,k,e);Ba=n}}function ka(e,n){var k;if(e=="fragment")k=b.createShader(b.FRAGMENT_SHADER);else e=="vertex"&&(k=b.createShader(b.VERTEX_SHADER));b.shaderSource(k,n);b.compileShader(k);if(!b.getShaderParameter(k,b.COMPILE_STATUS)){console.error(b.getShaderInfoLog(k)); -console.error(n);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; +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.0010&&q.scale>0.0010){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,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,n,k,h){try{if(!(b=Q.getContext("experimental-webgl",{antialias:e,stencil:h})))throw"Error creating WebGL context."; -}catch(m){console.error(m)}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(n.r,n.g,n.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]= +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,n){Q.width=e;Q.height=n;this.setViewport(0,0,Q.width,Q.height)};this.setViewport=function(e,n,k,h){U=e;ra=n;ma=k;xa=h;b.viewport(U,ra,ma,xa)};this.setScissor=function(e,n,k,h){b.scissor(e,n,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,n){var k=new THREE.Color(e);b.clearColor(k.r,k.g,k.b,n)};this.setClearColor=function(e,n){b.clearColor(e.r,e.g,e.b,n)};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,n,k,h){var m,u,r,t;if(e instanceof THREE.MeshDepthMaterial)d(e,THREE.ShaderLib.depth);else if(e instanceof THREE.ShadowVolumeDynamicMaterial)d(e, +"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=n.length;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(n,ka("fragment",q+k));b.attachShader(n,ka("vertex",r+t));b.linkProgram(n);b.getProgramParameter(n,b.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+b.getProgramParameter(n,b.VALIDATE_STATUS)+", gl error ["+b.getError()+"]");n.uniforms={};n.attributes={};e.program=n;k=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices","morphTargetInfluences"];for(m in e.uniforms)k.push(m); -m=e.program;t=0;for(n=k.length;t=0&&b.enableVertexAttribArray(u.color);u.normal>=0&&b.enableVertexAttribArray(u.normal); +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);m=0;for(u=this.maxMorphTargets;m0||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;m--){h=k.__webglObjects[m].object;n==h&&k.__webglObjects.splice(m,1)}e.__objectsRemoved.splice(0,1)}n=0;for(k=e.__webglObjects.length;n=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 4f4b6b60..bd6a9ab8 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/scenes/test_scene.js b/examples/scenes/test_scene.js index bb4ceab1..dda76a09 100644 --- a/examples/scenes/test_scene.js +++ b/examples/scenes/test_scene.js @@ -259,7 +259,7 @@ var scene = { "lambert_green": { "type": "MeshLambertMaterial", - "parameters": { color: 0x007711, blending: "AdditiveBlending" } + "parameters": { color: 0x007711, blending: "AdditiveBlending", transparent: true } }, "lambert_blue": { @@ -294,7 +294,7 @@ var scene = { "glass": { "type": "MeshLambertMaterial", - "parameters": { color: 0x101046, envMap: "cube_reflection", opacity: 0.25 } + "parameters": { color: 0x101046, envMap: "cube_reflection", opacity: 0.25, transparent: true } }, "interior": { @@ -440,4 +440,4 @@ var scene = { }; -postMessage( scene ); \ No newline at end of file +postMessage( scene ); diff --git a/examples/webgl_interactive_voxelpainter.html b/examples/webgl_interactive_voxelpainter.html index b4e779da..afd19984 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 d9645e4f..0c469613 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 aacbdbbe..e765f1b4 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 9e08e371..5f2f0ad6 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 dd38cca9..afb9ada7 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 90b7cc8a..cf8bff9c 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_grass.html b/examples/webgl_materials_grass.html index 965d402a..3c12dfc6 100644 --- a/examples/webgl_materials_grass.html +++ b/examples/webgl_materials_grass.html @@ -45,17 +45,17 @@ var texture = generateTextureBase(); texture.needsUpdate = true; - for ( var i = 0; i < 10; i ++ ) { + for ( var i = 0; i < 20; i ++ ) { mesh = levels[ i ] = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial( { map: new THREE.Texture( generateTextureLevel( texture ), new THREE.UVMapping(), THREE.ClampToEdgeWrapping, THREE.ClampToEdgeWrapping ) } ) ); mesh.materials[0].map.needsUpdate = true; mesh.rotation.x = - 90 * ( Math.PI / 180 ); - mesh.position.y = i * 0.5; + mesh.position.y = i * 0.25; scene.addObject( mesh ); } - renderer = new THREE.WebGLRenderer(); + renderer = new THREE.WebGLRenderer( { antialias: false } ); renderer.sortObjects = false; renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); @@ -80,7 +80,7 @@ } - context.globalAlpha = 0.1; + context.globalAlpha = 0.05; context.globalCompositeOperation = 'lighter'; return canvas; @@ -114,16 +114,8 @@ var time = new Date().getTime() / 6000; - camera.position.x = 100 * Math.cos( time ); - camera.position.z = 100 * Math.sin( time ); - - for ( var i = 0, l = levels.length; i < l; i ++ ) { - - mesh = levels[ i ]; - mesh.position.x = Math.sin( time * 4 ) * i * i * 0.02; - mesh.position.z = Math.cos( time * 6 ) * i * i * 0.02; - - } + camera.position.x = 80 * Math.cos( time ); + camera.position.z = 80 * Math.sin( time ); renderer.render( scene, camera ); diff --git a/examples/webgl_materials_video.html b/examples/webgl_materials_video.html index 49abc020..282bfbd1 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 c6a1cfca..fa1e6fff 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 ff9854a7..a6361820 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 fdf50cef..cf65aba1 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 f9e66ab2..d00646db 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 1b1472d1..77ab9a8e 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 62ddd6d3..2c33caa4 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 0a4aac0d..073c951e 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 4c9ea653..934d4432 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 7ab953b2..1c41551f 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 ++; + 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.SmoothShading; - 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.shading = parameters.shading !== undefined ? parameters.shading : THREE.SmoothShading; - 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.setHex( parameters.color ); - if ( parameters.opacity !== undefined ) this.opacity = parameters.opacity; - if ( parameters.map !== undefined ) this.map = parameters.map; - - 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 a0321014..3aae3be8 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 732e5b03..710d5b39 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 ++; + 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.SmoothShading; - 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; - 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.MeshLambertMaterial.prototype = new THREE.Material(); +THREE.MeshLambertMaterial.prototype.constructor = THREE.MeshLambertMaterial; diff --git a/src/materials/MeshNormalMaterial.js b/src/materials/MeshNormalMaterial.js index 064242eb..7f880070 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 36664ccc..80fa898f 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 2d5eb3b1..ceed1890 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 bde7b894..455e3d98 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 0c97e655..e662141a 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 9a77ee39..13012a85 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 3fdc2314..a5e24a31 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/materials/Texture.js b/src/materials/Texture.js index 2de77fd8..09eef634 100644 --- a/src/materials/Texture.js +++ b/src/materials/Texture.js @@ -17,7 +17,6 @@ THREE.Texture = function ( image, mapping, wrapS, wrapT, magFilter, minFilter ) this.minFilter = minFilter !== undefined ? minFilter : THREE.LinearMipMapLinearFilter; this.needsUpdate = false; - //this.needsUpdate = ( image!== undefined && image.getContext ) ? true : false; // true by default for element }; diff --git a/src/objects/Mesh.js b/src/objects/Mesh.js index 1e6de16e..1cef6c97 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 a648eddc..2686b76d 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 f273b00f..fc05a520 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 0be4f905..8f69f814 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):