Browse Source

Fixed bug in frustum culling when camera is part of hierarchy.

Thanks to empaempa for the fix.
alteredq 14 years ago
parent
commit
67341e776a
3 changed files with 60 additions and 60 deletions
  1. 29 29
      build/Three.js
  2. 28 28
      build/custom/ThreeWebGL.js
  3. 3 3
      src/renderers/WebGLRenderer.js

+ 29 - 29
build/Three.js

@@ -259,35 +259,35 @@ maxDirLights:z.directional,maxPointLights:z.point,maxBones:B};q=f.createProgram(
 B=[f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0?"#define VERTEX_TEXTURES":"","#define MAX_DIR_LIGHTS "+B.maxDirLights,"#define MAX_POINT_LIGHTS "+B.maxPointLights,"#define MAX_BONES "+B.maxBones,B.map?"#define USE_MAP":"",B.envMap?"#define USE_ENVMAP":"",B.lightMap?"#define USE_LIGHTMAP":"",B.vertexColors?"#define USE_COLOR":"",B.skinning?"#define USE_SKINNING":"",B.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 vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n");
 f.attachShader(q,N("fragment",z+n));f.attachShader(q,N("vertex",B+H));f.linkProgram(q);f.getProgramParameter(q,f.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+f.getProgramParameter(q,f.VALIDATE_STATUS)+", gl error ["+f.getError()+"]");q.uniforms={};q.attributes={};m.program=q;q=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices"];for(p in m.uniforms)q.push(p);p=m.program;n=0;for(H=q.length;n<
 H;n++){z=q[n];p.uniforms[z]=f.getUniformLocation(p,z)}p=m.program;q=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];n=0;for(H=q.length;n<H;n++){z=q[n];p.attributes[z]=f.getAttribLocation(p,z)}p=m.program.attributes;f.enableVertexAttribArray(p.position);p.color>=0&&f.enableVertexAttribArray(p.color);p.normal>=0&&f.enableVertexAttribArray(p.normal);p.tangent>=0&&f.enableVertexAttribArray(p.tangent);if(m.skinning&&p.skinVertexA>=0&&p.skinVertexB>=
-0&&p.skinIndex>=0&&p.skinWeight>=0){f.enableVertexAttribArray(p.skinVertexA);f.enableVertexAttribArray(p.skinVertexB);f.enableVertexAttribArray(p.skinIndex);f.enableVertexAttribArray(p.skinWeight)}};this.render=function(m,z,q,n){var p,B,C,G,Q,H,O,la,ka=m.lights,ra=m.fog;z.matrixAutoUpdate&&z.update();z.matrixWorldInverse.flattenToArray(aa);z.projectionMatrix.flattenToArray(ha);ya.multiply(z.projectionMatrix,z.matrixWorldInverse);k(ya);m.update(undefined,!1,z);this.initWebGLObjects(m);x(q);(this.autoClear||
-n)&&this.clear();Q=m.__webglObjects.length;for(n=0;n<Q;n++){p=m.__webglObjects[n];O=p.object;if(O.visible)if(!(O instanceof THREE.Mesh)||l(O)){O.matrixWorld.flattenToArray(O._objectMatrixArray);y(O,z);u(p);p.render=!0;if(this.sortObjects){ma.copy(O.position);ya.multiplyVector3(ma);p.z=ma.z}}else p.render=!1;else p.render=!1}this.sortObjects&&m.__webglObjects.sort(t);H=m.__webglObjectsImmediate.length;for(n=0;n<H;n++){p=m.__webglObjectsImmediate[n];O=p.object;if(O.visible){O.matrixAutoUpdate&&O.matrixWorld.flattenToArray(O._objectMatrixArray);
-y(O,z);v(p)}}w(THREE.NormalBlending);for(n=0;n<Q;n++){p=m.__webglObjects[n];if(p.render){O=p.object;la=p.buffer;C=p.opaque;h(O);for(p=0;p<C.count;p++){G=C.list[p];j(G.depthTest);e(z,ka,ra,G,la,O)}}}for(n=0;n<H;n++){p=m.__webglObjectsImmediate[n];O=p.object;if(O.visible){C=p.opaque;h(O);for(p=0;p<C.count;p++){G=C.list[p];j(G.depthTest);B=d(z,ka,ra,G,O);O.render(function(sa){g(sa,B)})}}}for(n=0;n<Q;n++){p=m.__webglObjects[n];if(p.render){O=p.object;la=p.buffer;C=p.transparent;h(O);for(p=0;p<C.count;p++){G=
-C.list[p];w(G.blending);j(G.depthTest);e(z,ka,ra,G,la,O)}}}for(n=0;n<H;n++){p=m.__webglObjectsImmediate[n];O=p.object;if(O.visible){C=p.transparent;h(O);for(p=0;p<C.count;p++){G=C.list[p];w(G.blending);j(G.depthTest);B=d(z,ka,ra,G,O);O.render(function(sa){g(sa,B)})}}}if(q&&q.minFilter!==THREE.NearestFilter&&q.minFilter!==THREE.LinearFilter){f.bindTexture(f.TEXTURE_2D,q.__webGLTexture);f.generateMipmap(f.TEXTURE_2D);f.bindTexture(f.TEXTURE_2D,null)}};this.initWebGLObjects=function(m){if(!m.__webglObjects){m.__webglObjects=
-[];m.__webglObjectsImmediate=[]}for(;m.__objectsAdded.length;){var z=m.__objectsAdded[0],q=m,n=void 0,p=void 0,B=void 0;if(z._modelViewMatrix==undefined){z._modelViewMatrix=new THREE.Matrix4;z._normalMatrixArray=new Float32Array(9);z._modelViewMatrixArray=new Float32Array(16);z._objectMatrixArray=new Float32Array(16);z.matrixWorld.flattenToArray(z._objectMatrixArray)}if(z instanceof THREE.Mesh){p=z.geometry;p.geometryGroups==undefined&&A(p);for(n in p.geometryGroups){B=p.geometryGroups[n];if(!B.__webGLVertexBuffer){var C=
-B;C.__webGLVertexBuffer=f.createBuffer();C.__webGLNormalBuffer=f.createBuffer();C.__webGLTangentBuffer=f.createBuffer();C.__webGLColorBuffer=f.createBuffer();C.__webGLUVBuffer=f.createBuffer();C.__webGLUV2Buffer=f.createBuffer();C.__webGLSkinVertexABuffer=f.createBuffer();C.__webGLSkinVertexBBuffer=f.createBuffer();C.__webGLSkinIndicesBuffer=f.createBuffer();C.__webGLSkinWeightsBuffer=f.createBuffer();C.__webGLFaceBuffer=f.createBuffer();C.__webGLLineBuffer=f.createBuffer();C=B;var G=z,Q=void 0,H=
-void 0,O=0,la=0,ka=0,ra=G.geometry.faces,sa=C.faces;Q=0;for(H=sa.length;Q<H;Q++){fi=sa[Q];face=ra[fi];if(face instanceof THREE.Face3){O+=3;la+=1;ka+=3}else if(face instanceof THREE.Face4){O+=4;la+=2;ka+=4}}C.__vertexArray=new Float32Array(O*3);C.__normalArray=new Float32Array(O*3);C.__tangentArray=new Float32Array(O*4);C.__colorArray=new Float32Array(O*3);C.__uvArray=new Float32Array(O*2);C.__uv2Array=new Float32Array(O*2);C.__skinVertexAArray=new Float32Array(O*4);C.__skinVertexBArray=new Float32Array(O*
-4);C.__skinIndexArray=new Float32Array(O*4);C.__skinWeightArray=new Float32Array(O*4);C.__faceArray=new Uint16Array(la*3);C.__lineArray=new Uint16Array(ka*2);H=Q=C;O=void 0;ra=void 0;var oa=void 0,pa=void 0;oa=void 0;sa=!1;O=0;for(ra=G.materials.length;O<ra;O++){oa=G.materials[O];if(oa instanceof THREE.MeshFaceMaterial){oa=0;for(pa=H.materials.length;oa<pa;oa++)if(H.materials[oa]&&H.materials[oa].shading!=undefined&&H.materials[oa].shading==THREE.SmoothShading){sa=!0;break}}else if(oa&&oa.shading!=
-undefined&&oa.shading==THREE.SmoothShading){sa=!0;break}if(sa)break}Q.__needsSmoothNormals=sa;C.__webGLFaceCount=la*3;C.__webGLLineCount=ka*2;p.__dirtyVertices=!0;p.__dirtyElements=!0;p.__dirtyUvs=!0;p.__dirtyNormals=!0;p.__dirtyTangents=!0;p.__dirtyColors=!0}D(q.__webglObjects,B,z)}}else if(z instanceof THREE.Ribbon){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);
-n.__colorArray=new Float32Array(B*3);n.__webGLVertexCount=B;p.__dirtyVertices=!0;p.__dirtyColors=!0}D(q.__webglObjects,p,z)}else if(z instanceof THREE.Line){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__webGLLineCount=B;p.__dirtyVertices=!0;p.__dirtyColors=!0}D(q.__webglObjects,p,z)}else if(z instanceof THREE.ParticleSystem){p=
-z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__sortArray=[];n.__webGLParticleCount=B;p.__dirtyVertices=!0;p.__dirtyColors=!0}D(q.__webglObjects,p,z)}else THREE.MarchingCubes!==undefined&&z instanceof THREE.MarchingCubes&&q.__webglObjectsImmediate.push({object:z,opaque:{list:[],count:0},transparent:{list:[],count:0}});m.__objectsAdded.splice(0,
-1)}for(;m.__objectsRemoved.length;){z=m.__objectsRemoved[0];q=m;p=void 0;n=void 0;for(p=q.__webglObjects.length-1;p>=0;p--){n=q.__webglObjects[p].object;z==n&&q.__webglObjects.splice(p,1)}m.__objectsRemoved.splice(0,1)}z=0;for(q=m.__webglObjects.length;z<q;z++){n=m.__webglObjects[z].object;B=void 0;p=void 0;C=void 0;if(n instanceof THREE.Mesh){p=n.geometry;for(B in p.geometryGroups){C=p.geometryGroups[B];if(p.__dirtyVertices||p.__dirtyElements||p.__dirtyUvs||p.__dirtyNormals||p.__dirtyColors||p.__dirtyTangents){la=
-f.DYNAMIC_DRAW;ka=void 0;Q=void 0;var Ja=void 0,P=void 0,Ga=void 0,Ea=void 0,Fa=void 0;Ja=void 0;var W=void 0,X=void 0,$=void 0,Aa=void 0;W=void 0;X=void 0;$=void 0;P=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;P=void 0;Ea=void 0;Ga=void 0;Fa=void 0;var Ha=pa=oa=sa=ra=O=G=H=0,Da=0,E=0,Ca=C.__vertexArray,Ra=C.__uvArray,Ua=C.__uv2Array,Ma=C.__normalArray,
-Ba=C.__tangentArray,J=C.__colorArray,Y=C.__skinVertexAArray,U=C.__skinVertexBArray,K=C.__skinIndexArray,S=C.__skinWeightArray,ua=C.__faceArray,wa=C.__lineArray,Ia=C.__needsSmoothNormals,za=n.geometry,Pa=za.__dirtyVertices,Ka=za.__dirtyElements,La=za.__dirtyUvs,Ta=za.__dirtyNormals,Na=za.__dirtyTangents,Qa=za.__dirtyColors,Oa=za.vertices,Za=C.faces,$a=za.faces,ab=za.uvs,bb=za.uvs2,Sa=za.colors,Wa=za.skinVerticesA,Xa=za.skinVerticesB,Ya=za.skinIndices,Va=za.skinWeights;ka=0;for(Q=Za.length;ka<Q;ka++){Ja=
-Za[ka];P=$a[Ja];Fa=ab[Ja];Ja=bb[Ja];Ga=P.vertexNormals;Ea=P.normal;if(P instanceof THREE.Face3){if(Pa){W=Oa[P.a].position;X=Oa[P.b].position;$=Oa[P.c].position;Ca[G]=W.x;Ca[G+1]=W.y;Ca[G+2]=W.z;Ca[G+3]=X.x;Ca[G+4]=X.y;Ca[G+5]=X.z;Ca[G+6]=$.x;Ca[G+7]=$.y;Ca[G+8]=$.z;G+=9}if(Va.length){W=Va[P.a];X=Va[P.b];$=Va[P.c];S[E]=W.x;S[E+1]=W.y;S[E+2]=W.z;S[E+3]=W.w;S[E+4]=X.x;S[E+5]=X.y;S[E+6]=X.z;S[E+7]=X.w;S[E+8]=$.x;S[E+9]=$.y;S[E+10]=$.z;S[E+11]=$.w;W=Ya[P.a];X=Ya[P.b];$=Ya[P.c];K[E]=W.x;K[E+1]=W.y;K[E+
-2]=W.z;K[E+3]=W.w;K[E+4]=X.x;K[E+5]=X.y;K[E+6]=X.z;K[E+7]=X.w;K[E+8]=$.x;K[E+9]=$.y;K[E+10]=$.z;K[E+11]=$.w;W=Wa[P.a];X=Wa[P.b];$=Wa[P.c];Y[E]=W.x;Y[E+1]=W.y;Y[E+2]=W.z;Y[E+3]=1;Y[E+4]=X.x;Y[E+5]=X.y;Y[E+6]=X.z;Y[E+7]=1;Y[E+8]=$.x;Y[E+9]=$.y;Y[E+10]=$.z;Y[E+11]=1;W=Xa[P.a];X=Xa[P.b];$=Xa[P.c];U[E]=W.x;U[E+1]=W.y;U[E+2]=W.z;U[E+3]=1;U[E+4]=X.x;U[E+5]=X.y;U[E+6]=X.z;U[E+7]=1;U[E+8]=$.x;U[E+9]=$.y;U[E+10]=$.z;U[E+11]=1;E+=12}if(Qa&&Sa.length){W=Sa[P.a];X=Sa[P.b];$=Sa[P.c];J[Da]=W.r;J[Da+1]=W.g;J[Da+
-2]=W.b;J[Da+3]=X.r;J[Da+4]=X.g;J[Da+5]=X.b;J[Da+6]=$.r;J[Da+7]=$.g;J[Da+8]=$.b;Da+=9}if(Na&&za.hasTangents){W=Oa[P.a].tangent;X=Oa[P.b].tangent;$=Oa[P.c].tangent;Ba[pa]=W.x;Ba[pa+1]=W.y;Ba[pa+2]=W.z;Ba[pa+3]=W.w;Ba[pa+4]=X.x;Ba[pa+5]=X.y;Ba[pa+6]=X.z;Ba[pa+7]=X.w;Ba[pa+8]=$.x;Ba[pa+9]=$.y;Ba[pa+10]=$.z;Ba[pa+11]=$.w;pa+=12}if(Ta)if(Ga.length==3&&Ia)for(P=0;P<3;P++){Ea=Ga[P];Ma[oa]=Ea.x;Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;oa+=3}else for(P=0;P<3;P++){Ma[oa]=Ea.x;Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;oa+=3}if(La&&Fa)for(P=
-0;P<3;P++){Ga=Fa[P];Ra[O]=Ga.u;Ra[O+1]=Ga.v;O+=2}if(La&&Ja)for(P=0;P<3;P++){Fa=Ja[P];Ua[ra]=Fa.u;Ua[ra+1]=Fa.v;ra+=2}if(Ka){ua[sa]=H;ua[sa+1]=H+1;ua[sa+2]=H+2;sa+=3;wa[Ha]=H;wa[Ha+1]=H+1;wa[Ha+2]=H;wa[Ha+3]=H+2;wa[Ha+4]=H+1;wa[Ha+5]=H+2;Ha+=6;H+=3}}else if(P instanceof THREE.Face4){if(Pa){W=Oa[P.a].position;X=Oa[P.b].position;$=Oa[P.c].position;Aa=Oa[P.d].position;Ca[G]=W.x;Ca[G+1]=W.y;Ca[G+2]=W.z;Ca[G+3]=X.x;Ca[G+4]=X.y;Ca[G+5]=X.z;Ca[G+6]=$.x;Ca[G+7]=$.y;Ca[G+8]=$.z;Ca[G+9]=Aa.x;Ca[G+10]=Aa.y;Ca[G+
-11]=Aa.z;G+=12}if(Va.length){W=Va[P.a];X=Va[P.b];$=Va[P.c];Aa=Va[P.d];S[E]=W.x;S[E+1]=W.y;S[E+2]=W.z;S[E+3]=W.w;S[E+4]=X.x;S[E+5]=X.y;S[E+6]=X.z;S[E+7]=X.w;S[E+8]=$.x;S[E+9]=$.y;S[E+10]=$.z;S[E+11]=$.w;S[E+12]=Aa.x;S[E+13]=Aa.y;S[E+14]=Aa.z;S[E+15]=Aa.w;W=Ya[P.a];X=Ya[P.b];$=Ya[P.c];Aa=Ya[P.d];K[E]=W.x;K[E+1]=W.y;K[E+2]=W.z;K[E+3]=W.w;K[E+4]=X.x;K[E+5]=X.y;K[E+6]=X.z;K[E+7]=X.w;K[E+8]=$.x;K[E+9]=$.y;K[E+10]=$.z;K[E+11]=$.w;K[E+12]=Aa.x;K[E+13]=Aa.y;K[E+14]=Aa.z;K[E+15]=Aa.w;W=Wa[P.a];X=Wa[P.b];$=
-Wa[P.c];Aa=Wa[P.d];Y[E]=W.x;Y[E+1]=W.y;Y[E+2]=W.z;Y[E+3]=1;Y[E+4]=X.x;Y[E+5]=X.y;Y[E+6]=X.z;Y[E+7]=1;Y[E+8]=$.x;Y[E+9]=$.y;Y[E+10]=$.z;Y[E+11]=1;Y[E+12]=Aa.x;Y[E+13]=Aa.y;Y[E+14]=Aa.z;Y[E+15]=1;W=Xa[P.a];X=Xa[P.b];$=Xa[P.c];Aa=Xa[P.d];U[E]=W.x;U[E+1]=W.y;U[E+2]=W.z;U[E+3]=1;U[E+4]=X.x;U[E+5]=X.y;U[E+6]=X.z;U[E+7]=1;U[E+8]=$.x;U[E+9]=$.y;U[E+10]=$.z;U[E+11]=1;U[E+12]=Aa.x;U[E+13]=Aa.y;U[E+14]=Aa.z;U[E+15]=1;E+=16}if(Qa&&Sa.length){W=Sa[P.a];X=Sa[P.b];$=Sa[P.c];Aa=Sa[P.d];J[Da]=W.r;J[Da+1]=W.g;J[Da+
-2]=W.b;J[Da+3]=X.r;J[Da+4]=X.g;J[Da+5]=X.b;J[Da+6]=$.r;J[Da+7]=$.g;J[Da+8]=$.b;J[Da+9]=Aa.r;J[Da+10]=Aa.g;J[Da+11]=Aa.b;Da+=12}if(Na&&za.hasTangents){W=Oa[P.a].tangent;X=Oa[P.b].tangent;$=Oa[P.c].tangent;P=Oa[P.d].tangent;Ba[pa]=W.x;Ba[pa+1]=W.y;Ba[pa+2]=W.z;Ba[pa+3]=W.w;Ba[pa+4]=X.x;Ba[pa+5]=X.y;Ba[pa+6]=X.z;Ba[pa+7]=X.w;Ba[pa+8]=$.x;Ba[pa+9]=$.y;Ba[pa+10]=$.z;Ba[pa+11]=$.w;Ba[pa+12]=P.x;Ba[pa+13]=P.y;Ba[pa+14]=P.z;Ba[pa+15]=P.w;pa+=16}if(Ta)if(Ga.length==4&&Ia)for(P=0;P<4;P++){Ea=Ga[P];Ma[oa]=Ea.x;
-Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;oa+=3}else for(P=0;P<4;P++){Ma[oa]=Ea.x;Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;oa+=3}if(La&&Fa)for(P=0;P<4;P++){Ga=Fa[P];Ra[O]=Ga.u;Ra[O+1]=Ga.v;O+=2}if(La&&Ja)for(P=0;P<4;P++){Fa=Ja[P];Ua[ra]=Fa.u;Ua[ra+1]=Fa.v;ra+=2}if(Ka){ua[sa]=H;ua[sa+1]=H+1;ua[sa+2]=H+2;ua[sa+3]=H;ua[sa+4]=H+2;ua[sa+5]=H+3;sa+=6;wa[Ha]=H;wa[Ha+1]=H+1;wa[Ha+2]=H;wa[Ha+3]=H+3;wa[Ha+4]=H+1;wa[Ha+5]=H+2;wa[Ha+6]=H+2;wa[Ha+7]=H+3;Ha+=8;H+=4}}}if(Pa){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,
-Ca,la)}if(Qa&&Sa.length){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,J,la)}if(Ta){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLNormalBuffer);f.bufferData(f.ARRAY_BUFFER,Ma,la)}if(Na&&za.hasTangents){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLTangentBuffer);f.bufferData(f.ARRAY_BUFFER,Ba,la)}if(La&&O>0){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLUVBuffer);f.bufferData(f.ARRAY_BUFFER,Ra,la)}if(La&&ra>0){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLUV2Buffer);f.bufferData(f.ARRAY_BUFFER,Ua,la)}if(Ka){f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,
-C.__webGLFaceBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,ua,la);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,C.__webGLLineBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,wa,la)}if(E>0){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLSkinVertexABuffer);f.bufferData(f.ARRAY_BUFFER,Y,la);f.bindBuffer(f.ARRAY_BUFFER,C.__webGLSkinVertexBBuffer);f.bufferData(f.ARRAY_BUFFER,U,la);f.bindBuffer(f.ARRAY_BUFFER,C.__webGLSkinIndicesBuffer);f.bufferData(f.ARRAY_BUFFER,K,la);f.bindBuffer(f.ARRAY_BUFFER,C.__webGLSkinWeightsBuffer);f.bufferData(f.ARRAY_BUFFER,
-S,la)}}}p.__dirtyVertices=!1;p.__dirtyElements=!1;p.__dirtyUvs=!1;p.__dirtyNormals=!1;p.__dirtyTangents=!1;p.__dirtyColors=!1}else if(n instanceof THREE.Ribbon){p=n.geometry;if(p.__dirtyVertices||p.__dirtyColors){n=p;B=f.DYNAMIC_DRAW;H=void 0;H=void 0;G=void 0;C=void 0;O=n.vertices;la=n.colors;ra=O.length;ka=la.length;sa=n.__vertexArray;Q=n.__colorArray;oa=n.__dirtyColors;if(n.__dirtyVertices){for(H=0;H<ra;H++){G=O[H].position;C=H*3;sa[C]=G.x;sa[C+1]=G.y;sa[C+2]=G.z}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLVertexBuffer);
-f.bufferData(f.ARRAY_BUFFER,sa,B)}if(oa){for(H=0;H<ka;H++){color=la[H];C=H*3;Q[C]=color.r;Q[C+1]=color.g;Q[C+2]=color.b}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,Q,B)}}p.__dirtyVertices=!1;p.__dirtyColors=!1}else if(n instanceof THREE.Line){p=n.geometry;if(p.__dirtyVertices||p.__dirtyColors){n=p;B=f.DYNAMIC_DRAW;H=void 0;H=void 0;G=void 0;C=void 0;O=n.vertices;la=n.colors;ra=O.length;ka=la.length;sa=n.__vertexArray;Q=n.__colorArray;oa=n.__dirtyColors;if(n.__dirtyVertices){for(H=
-0;H<ra;H++){G=O[H].position;C=H*3;sa[C]=G.x;sa[C+1]=G.y;sa[C+2]=G.z}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,sa,B)}if(oa){for(H=0;H<ka;H++){color=la[H];C=H*3;Q[C]=color.r;Q[C+1]=color.g;Q[C+2]=color.b}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,Q,B)}}p.__dirtyVertices=!1;p.__dirtyColors=!1}else if(n instanceof THREE.ParticleSystem){p=n.geometry;(p.__dirtyVertices||p.__dirtyColors||n.sortParticles)&&c(p,f.DYNAMIC_DRAW,n);p.__dirtyVertices=
-!1;p.__dirtyColors=!1}}};this.setFaceCulling=function(m,z){if(m){!z||z=="ccw"?f.frontFace(f.CCW):f.frontFace(f.CW);if(m=="back")f.cullFace(f.BACK);else m=="front"?f.cullFace(f.FRONT):f.cullFace(f.FRONT_AND_BACK);f.enable(f.CULL_FACE)}else f.disable(f.CULL_FACE)};this.supportsVertexTextures=function(){return f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}};
-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 d,e=b.length;for(d=0;d<e;d++){a=b[d];this.soundPosition.set(a.matrixWorld.n14,a.matrixWorld.n24,a.matrixWorld.n34);this.soundPosition.subSelf(c.position);if(a.isPlaying&&a.isLoaded){a.isAddedToDOM||a.addToDOM(this.domElement);a.calculateVolumeAndPan(this.soundPosition)}}}};
+0&&p.skinIndex>=0&&p.skinWeight>=0){f.enableVertexAttribArray(p.skinVertexA);f.enableVertexAttribArray(p.skinVertexB);f.enableVertexAttribArray(p.skinIndex);f.enableVertexAttribArray(p.skinWeight)}};this.render=function(m,z,q,n){var p,B,C,G,Q,H,O,la,ka=m.lights,ra=m.fog;z.matrixAutoUpdate&&z.parent===undefined&&z.update(undefined,!0);m.update(undefined,!1,z);z.matrixWorldInverse.flattenToArray(aa);z.projectionMatrix.flattenToArray(ha);ya.multiply(z.projectionMatrix,z.matrixWorldInverse);k(ya);this.initWebGLObjects(m);
+x(q);(this.autoClear||n)&&this.clear();Q=m.__webglObjects.length;for(n=0;n<Q;n++){p=m.__webglObjects[n];O=p.object;if(O.visible)if(!(O instanceof THREE.Mesh)||l(O)){O.matrixWorld.flattenToArray(O._objectMatrixArray);y(O,z);u(p);p.render=!0;if(this.sortObjects){ma.copy(O.position);ya.multiplyVector3(ma);p.z=ma.z}}else p.render=!1;else p.render=!1}this.sortObjects&&m.__webglObjects.sort(t);H=m.__webglObjectsImmediate.length;for(n=0;n<H;n++){p=m.__webglObjectsImmediate[n];O=p.object;if(O.visible){O.matrixAutoUpdate&&
+O.matrixWorld.flattenToArray(O._objectMatrixArray);y(O,z);v(p)}}w(THREE.NormalBlending);for(n=0;n<Q;n++){p=m.__webglObjects[n];if(p.render){O=p.object;la=p.buffer;C=p.opaque;h(O);for(p=0;p<C.count;p++){G=C.list[p];j(G.depthTest);e(z,ka,ra,G,la,O)}}}for(n=0;n<H;n++){p=m.__webglObjectsImmediate[n];O=p.object;if(O.visible){C=p.opaque;h(O);for(p=0;p<C.count;p++){G=C.list[p];j(G.depthTest);B=d(z,ka,ra,G,O);O.render(function(sa){g(sa,B)})}}}for(n=0;n<Q;n++){p=m.__webglObjects[n];if(p.render){O=p.object;
+la=p.buffer;C=p.transparent;h(O);for(p=0;p<C.count;p++){G=C.list[p];w(G.blending);j(G.depthTest);e(z,ka,ra,G,la,O)}}}for(n=0;n<H;n++){p=m.__webglObjectsImmediate[n];O=p.object;if(O.visible){C=p.transparent;h(O);for(p=0;p<C.count;p++){G=C.list[p];w(G.blending);j(G.depthTest);B=d(z,ka,ra,G,O);O.render(function(sa){g(sa,B)})}}}if(q&&q.minFilter!==THREE.NearestFilter&&q.minFilter!==THREE.LinearFilter){f.bindTexture(f.TEXTURE_2D,q.__webGLTexture);f.generateMipmap(f.TEXTURE_2D);f.bindTexture(f.TEXTURE_2D,
+null)}};this.initWebGLObjects=function(m){if(!m.__webglObjects){m.__webglObjects=[];m.__webglObjectsImmediate=[]}for(;m.__objectsAdded.length;){var z=m.__objectsAdded[0],q=m,n=void 0,p=void 0,B=void 0;if(z._modelViewMatrix==undefined){z._modelViewMatrix=new THREE.Matrix4;z._normalMatrixArray=new Float32Array(9);z._modelViewMatrixArray=new Float32Array(16);z._objectMatrixArray=new Float32Array(16);z.matrixWorld.flattenToArray(z._objectMatrixArray)}if(z instanceof THREE.Mesh){p=z.geometry;p.geometryGroups==
+undefined&&A(p);for(n in p.geometryGroups){B=p.geometryGroups[n];if(!B.__webGLVertexBuffer){var C=B;C.__webGLVertexBuffer=f.createBuffer();C.__webGLNormalBuffer=f.createBuffer();C.__webGLTangentBuffer=f.createBuffer();C.__webGLColorBuffer=f.createBuffer();C.__webGLUVBuffer=f.createBuffer();C.__webGLUV2Buffer=f.createBuffer();C.__webGLSkinVertexABuffer=f.createBuffer();C.__webGLSkinVertexBBuffer=f.createBuffer();C.__webGLSkinIndicesBuffer=f.createBuffer();C.__webGLSkinWeightsBuffer=f.createBuffer();
+C.__webGLFaceBuffer=f.createBuffer();C.__webGLLineBuffer=f.createBuffer();C=B;var G=z,Q=void 0,H=void 0,O=0,la=0,ka=0,ra=G.geometry.faces,sa=C.faces;Q=0;for(H=sa.length;Q<H;Q++){fi=sa[Q];face=ra[fi];if(face instanceof THREE.Face3){O+=3;la+=1;ka+=3}else if(face instanceof THREE.Face4){O+=4;la+=2;ka+=4}}C.__vertexArray=new Float32Array(O*3);C.__normalArray=new Float32Array(O*3);C.__tangentArray=new Float32Array(O*4);C.__colorArray=new Float32Array(O*3);C.__uvArray=new Float32Array(O*2);C.__uv2Array=
+new Float32Array(O*2);C.__skinVertexAArray=new Float32Array(O*4);C.__skinVertexBArray=new Float32Array(O*4);C.__skinIndexArray=new Float32Array(O*4);C.__skinWeightArray=new Float32Array(O*4);C.__faceArray=new Uint16Array(la*3);C.__lineArray=new Uint16Array(ka*2);H=Q=C;O=void 0;ra=void 0;var oa=void 0,pa=void 0;oa=void 0;sa=!1;O=0;for(ra=G.materials.length;O<ra;O++){oa=G.materials[O];if(oa instanceof THREE.MeshFaceMaterial){oa=0;for(pa=H.materials.length;oa<pa;oa++)if(H.materials[oa]&&H.materials[oa].shading!=
+undefined&&H.materials[oa].shading==THREE.SmoothShading){sa=!0;break}}else if(oa&&oa.shading!=undefined&&oa.shading==THREE.SmoothShading){sa=!0;break}if(sa)break}Q.__needsSmoothNormals=sa;C.__webGLFaceCount=la*3;C.__webGLLineCount=ka*2;p.__dirtyVertices=!0;p.__dirtyElements=!0;p.__dirtyUvs=!0;p.__dirtyNormals=!0;p.__dirtyTangents=!0;p.__dirtyColors=!0}D(q.__webglObjects,B,z)}}else if(z instanceof THREE.Ribbon){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=
+f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__webGLVertexCount=B;p.__dirtyVertices=!0;p.__dirtyColors=!0}D(q.__webglObjects,p,z)}else if(z instanceof THREE.Line){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__webGLLineCount=B;p.__dirtyVertices=!0;p.__dirtyColors=
+!0}D(q.__webglObjects,p,z)}else if(z instanceof THREE.ParticleSystem){p=z.geometry;if(!p.__webGLVertexBuffer){n=p;n.__webGLVertexBuffer=f.createBuffer();n.__webGLColorBuffer=f.createBuffer();n=p;B=n.vertices.length;n.__vertexArray=new Float32Array(B*3);n.__colorArray=new Float32Array(B*3);n.__sortArray=[];n.__webGLParticleCount=B;p.__dirtyVertices=!0;p.__dirtyColors=!0}D(q.__webglObjects,p,z)}else THREE.MarchingCubes!==undefined&&z instanceof THREE.MarchingCubes&&q.__webglObjectsImmediate.push({object:z,
+opaque:{list:[],count:0},transparent:{list:[],count:0}});m.__objectsAdded.splice(0,1)}for(;m.__objectsRemoved.length;){z=m.__objectsRemoved[0];q=m;p=void 0;n=void 0;for(p=q.__webglObjects.length-1;p>=0;p--){n=q.__webglObjects[p].object;z==n&&q.__webglObjects.splice(p,1)}m.__objectsRemoved.splice(0,1)}z=0;for(q=m.__webglObjects.length;z<q;z++){n=m.__webglObjects[z].object;B=void 0;p=void 0;C=void 0;if(n instanceof THREE.Mesh){p=n.geometry;for(B in p.geometryGroups){C=p.geometryGroups[B];if(p.__dirtyVertices||
+p.__dirtyElements||p.__dirtyUvs||p.__dirtyNormals||p.__dirtyColors||p.__dirtyTangents){la=f.DYNAMIC_DRAW;ka=void 0;Q=void 0;var Ja=void 0,P=void 0,Ga=void 0,Ea=void 0,Fa=void 0;Ja=void 0;var W=void 0,X=void 0,$=void 0,Aa=void 0;W=void 0;X=void 0;$=void 0;P=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;W=void 0;X=void 0;$=void 0;Aa=void 0;P=void 0;Ea=void 0;Ga=void 0;Fa=void 0;var Ha=pa=oa=
+sa=ra=O=G=H=0,Da=0,E=0,Ca=C.__vertexArray,Ra=C.__uvArray,Ua=C.__uv2Array,Ma=C.__normalArray,Ba=C.__tangentArray,J=C.__colorArray,Y=C.__skinVertexAArray,U=C.__skinVertexBArray,K=C.__skinIndexArray,S=C.__skinWeightArray,ua=C.__faceArray,wa=C.__lineArray,Ia=C.__needsSmoothNormals,za=n.geometry,Pa=za.__dirtyVertices,Ka=za.__dirtyElements,La=za.__dirtyUvs,Ta=za.__dirtyNormals,Na=za.__dirtyTangents,Qa=za.__dirtyColors,Oa=za.vertices,Za=C.faces,$a=za.faces,ab=za.uvs,bb=za.uvs2,Sa=za.colors,Wa=za.skinVerticesA,
+Xa=za.skinVerticesB,Ya=za.skinIndices,Va=za.skinWeights;ka=0;for(Q=Za.length;ka<Q;ka++){Ja=Za[ka];P=$a[Ja];Fa=ab[Ja];Ja=bb[Ja];Ga=P.vertexNormals;Ea=P.normal;if(P instanceof THREE.Face3){if(Pa){W=Oa[P.a].position;X=Oa[P.b].position;$=Oa[P.c].position;Ca[G]=W.x;Ca[G+1]=W.y;Ca[G+2]=W.z;Ca[G+3]=X.x;Ca[G+4]=X.y;Ca[G+5]=X.z;Ca[G+6]=$.x;Ca[G+7]=$.y;Ca[G+8]=$.z;G+=9}if(Va.length){W=Va[P.a];X=Va[P.b];$=Va[P.c];S[E]=W.x;S[E+1]=W.y;S[E+2]=W.z;S[E+3]=W.w;S[E+4]=X.x;S[E+5]=X.y;S[E+6]=X.z;S[E+7]=X.w;S[E+8]=$.x;
+S[E+9]=$.y;S[E+10]=$.z;S[E+11]=$.w;W=Ya[P.a];X=Ya[P.b];$=Ya[P.c];K[E]=W.x;K[E+1]=W.y;K[E+2]=W.z;K[E+3]=W.w;K[E+4]=X.x;K[E+5]=X.y;K[E+6]=X.z;K[E+7]=X.w;K[E+8]=$.x;K[E+9]=$.y;K[E+10]=$.z;K[E+11]=$.w;W=Wa[P.a];X=Wa[P.b];$=Wa[P.c];Y[E]=W.x;Y[E+1]=W.y;Y[E+2]=W.z;Y[E+3]=1;Y[E+4]=X.x;Y[E+5]=X.y;Y[E+6]=X.z;Y[E+7]=1;Y[E+8]=$.x;Y[E+9]=$.y;Y[E+10]=$.z;Y[E+11]=1;W=Xa[P.a];X=Xa[P.b];$=Xa[P.c];U[E]=W.x;U[E+1]=W.y;U[E+2]=W.z;U[E+3]=1;U[E+4]=X.x;U[E+5]=X.y;U[E+6]=X.z;U[E+7]=1;U[E+8]=$.x;U[E+9]=$.y;U[E+10]=$.z;U[E+
+11]=1;E+=12}if(Qa&&Sa.length){W=Sa[P.a];X=Sa[P.b];$=Sa[P.c];J[Da]=W.r;J[Da+1]=W.g;J[Da+2]=W.b;J[Da+3]=X.r;J[Da+4]=X.g;J[Da+5]=X.b;J[Da+6]=$.r;J[Da+7]=$.g;J[Da+8]=$.b;Da+=9}if(Na&&za.hasTangents){W=Oa[P.a].tangent;X=Oa[P.b].tangent;$=Oa[P.c].tangent;Ba[pa]=W.x;Ba[pa+1]=W.y;Ba[pa+2]=W.z;Ba[pa+3]=W.w;Ba[pa+4]=X.x;Ba[pa+5]=X.y;Ba[pa+6]=X.z;Ba[pa+7]=X.w;Ba[pa+8]=$.x;Ba[pa+9]=$.y;Ba[pa+10]=$.z;Ba[pa+11]=$.w;pa+=12}if(Ta)if(Ga.length==3&&Ia)for(P=0;P<3;P++){Ea=Ga[P];Ma[oa]=Ea.x;Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;
+oa+=3}else for(P=0;P<3;P++){Ma[oa]=Ea.x;Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;oa+=3}if(La&&Fa)for(P=0;P<3;P++){Ga=Fa[P];Ra[O]=Ga.u;Ra[O+1]=Ga.v;O+=2}if(La&&Ja)for(P=0;P<3;P++){Fa=Ja[P];Ua[ra]=Fa.u;Ua[ra+1]=Fa.v;ra+=2}if(Ka){ua[sa]=H;ua[sa+1]=H+1;ua[sa+2]=H+2;sa+=3;wa[Ha]=H;wa[Ha+1]=H+1;wa[Ha+2]=H;wa[Ha+3]=H+2;wa[Ha+4]=H+1;wa[Ha+5]=H+2;Ha+=6;H+=3}}else if(P instanceof THREE.Face4){if(Pa){W=Oa[P.a].position;X=Oa[P.b].position;$=Oa[P.c].position;Aa=Oa[P.d].position;Ca[G]=W.x;Ca[G+1]=W.y;Ca[G+2]=W.z;Ca[G+3]=X.x;
+Ca[G+4]=X.y;Ca[G+5]=X.z;Ca[G+6]=$.x;Ca[G+7]=$.y;Ca[G+8]=$.z;Ca[G+9]=Aa.x;Ca[G+10]=Aa.y;Ca[G+11]=Aa.z;G+=12}if(Va.length){W=Va[P.a];X=Va[P.b];$=Va[P.c];Aa=Va[P.d];S[E]=W.x;S[E+1]=W.y;S[E+2]=W.z;S[E+3]=W.w;S[E+4]=X.x;S[E+5]=X.y;S[E+6]=X.z;S[E+7]=X.w;S[E+8]=$.x;S[E+9]=$.y;S[E+10]=$.z;S[E+11]=$.w;S[E+12]=Aa.x;S[E+13]=Aa.y;S[E+14]=Aa.z;S[E+15]=Aa.w;W=Ya[P.a];X=Ya[P.b];$=Ya[P.c];Aa=Ya[P.d];K[E]=W.x;K[E+1]=W.y;K[E+2]=W.z;K[E+3]=W.w;K[E+4]=X.x;K[E+5]=X.y;K[E+6]=X.z;K[E+7]=X.w;K[E+8]=$.x;K[E+9]=$.y;K[E+10]=
+$.z;K[E+11]=$.w;K[E+12]=Aa.x;K[E+13]=Aa.y;K[E+14]=Aa.z;K[E+15]=Aa.w;W=Wa[P.a];X=Wa[P.b];$=Wa[P.c];Aa=Wa[P.d];Y[E]=W.x;Y[E+1]=W.y;Y[E+2]=W.z;Y[E+3]=1;Y[E+4]=X.x;Y[E+5]=X.y;Y[E+6]=X.z;Y[E+7]=1;Y[E+8]=$.x;Y[E+9]=$.y;Y[E+10]=$.z;Y[E+11]=1;Y[E+12]=Aa.x;Y[E+13]=Aa.y;Y[E+14]=Aa.z;Y[E+15]=1;W=Xa[P.a];X=Xa[P.b];$=Xa[P.c];Aa=Xa[P.d];U[E]=W.x;U[E+1]=W.y;U[E+2]=W.z;U[E+3]=1;U[E+4]=X.x;U[E+5]=X.y;U[E+6]=X.z;U[E+7]=1;U[E+8]=$.x;U[E+9]=$.y;U[E+10]=$.z;U[E+11]=1;U[E+12]=Aa.x;U[E+13]=Aa.y;U[E+14]=Aa.z;U[E+15]=1;E+=
+16}if(Qa&&Sa.length){W=Sa[P.a];X=Sa[P.b];$=Sa[P.c];Aa=Sa[P.d];J[Da]=W.r;J[Da+1]=W.g;J[Da+2]=W.b;J[Da+3]=X.r;J[Da+4]=X.g;J[Da+5]=X.b;J[Da+6]=$.r;J[Da+7]=$.g;J[Da+8]=$.b;J[Da+9]=Aa.r;J[Da+10]=Aa.g;J[Da+11]=Aa.b;Da+=12}if(Na&&za.hasTangents){W=Oa[P.a].tangent;X=Oa[P.b].tangent;$=Oa[P.c].tangent;P=Oa[P.d].tangent;Ba[pa]=W.x;Ba[pa+1]=W.y;Ba[pa+2]=W.z;Ba[pa+3]=W.w;Ba[pa+4]=X.x;Ba[pa+5]=X.y;Ba[pa+6]=X.z;Ba[pa+7]=X.w;Ba[pa+8]=$.x;Ba[pa+9]=$.y;Ba[pa+10]=$.z;Ba[pa+11]=$.w;Ba[pa+12]=P.x;Ba[pa+13]=P.y;Ba[pa+
+14]=P.z;Ba[pa+15]=P.w;pa+=16}if(Ta)if(Ga.length==4&&Ia)for(P=0;P<4;P++){Ea=Ga[P];Ma[oa]=Ea.x;Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;oa+=3}else for(P=0;P<4;P++){Ma[oa]=Ea.x;Ma[oa+1]=Ea.y;Ma[oa+2]=Ea.z;oa+=3}if(La&&Fa)for(P=0;P<4;P++){Ga=Fa[P];Ra[O]=Ga.u;Ra[O+1]=Ga.v;O+=2}if(La&&Ja)for(P=0;P<4;P++){Fa=Ja[P];Ua[ra]=Fa.u;Ua[ra+1]=Fa.v;ra+=2}if(Ka){ua[sa]=H;ua[sa+1]=H+1;ua[sa+2]=H+2;ua[sa+3]=H;ua[sa+4]=H+2;ua[sa+5]=H+3;sa+=6;wa[Ha]=H;wa[Ha+1]=H+1;wa[Ha+2]=H;wa[Ha+3]=H+3;wa[Ha+4]=H+1;wa[Ha+5]=H+2;wa[Ha+6]=H+2;wa[Ha+
+7]=H+3;Ha+=8;H+=4}}}if(Pa){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,Ca,la)}if(Qa&&Sa.length){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,J,la)}if(Ta){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLNormalBuffer);f.bufferData(f.ARRAY_BUFFER,Ma,la)}if(Na&&za.hasTangents){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLTangentBuffer);f.bufferData(f.ARRAY_BUFFER,Ba,la)}if(La&&O>0){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLUVBuffer);f.bufferData(f.ARRAY_BUFFER,
+Ra,la)}if(La&&ra>0){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLUV2Buffer);f.bufferData(f.ARRAY_BUFFER,Ua,la)}if(Ka){f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,C.__webGLFaceBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,ua,la);f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,C.__webGLLineBuffer);f.bufferData(f.ELEMENT_ARRAY_BUFFER,wa,la)}if(E>0){f.bindBuffer(f.ARRAY_BUFFER,C.__webGLSkinVertexABuffer);f.bufferData(f.ARRAY_BUFFER,Y,la);f.bindBuffer(f.ARRAY_BUFFER,C.__webGLSkinVertexBBuffer);f.bufferData(f.ARRAY_BUFFER,U,la);f.bindBuffer(f.ARRAY_BUFFER,
+C.__webGLSkinIndicesBuffer);f.bufferData(f.ARRAY_BUFFER,K,la);f.bindBuffer(f.ARRAY_BUFFER,C.__webGLSkinWeightsBuffer);f.bufferData(f.ARRAY_BUFFER,S,la)}}}p.__dirtyVertices=!1;p.__dirtyElements=!1;p.__dirtyUvs=!1;p.__dirtyNormals=!1;p.__dirtyTangents=!1;p.__dirtyColors=!1}else if(n instanceof THREE.Ribbon){p=n.geometry;if(p.__dirtyVertices||p.__dirtyColors){n=p;B=f.DYNAMIC_DRAW;H=void 0;H=void 0;G=void 0;C=void 0;O=n.vertices;la=n.colors;ra=O.length;ka=la.length;sa=n.__vertexArray;Q=n.__colorArray;
+oa=n.__dirtyColors;if(n.__dirtyVertices){for(H=0;H<ra;H++){G=O[H].position;C=H*3;sa[C]=G.x;sa[C+1]=G.y;sa[C+2]=G.z}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,sa,B)}if(oa){for(H=0;H<ka;H++){color=la[H];C=H*3;Q[C]=color.r;Q[C+1]=color.g;Q[C+2]=color.b}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,Q,B)}}p.__dirtyVertices=!1;p.__dirtyColors=!1}else if(n instanceof THREE.Line){p=n.geometry;if(p.__dirtyVertices||p.__dirtyColors){n=p;B=
+f.DYNAMIC_DRAW;H=void 0;H=void 0;G=void 0;C=void 0;O=n.vertices;la=n.colors;ra=O.length;ka=la.length;sa=n.__vertexArray;Q=n.__colorArray;oa=n.__dirtyColors;if(n.__dirtyVertices){for(H=0;H<ra;H++){G=O[H].position;C=H*3;sa[C]=G.x;sa[C+1]=G.y;sa[C+2]=G.z}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLVertexBuffer);f.bufferData(f.ARRAY_BUFFER,sa,B)}if(oa){for(H=0;H<ka;H++){color=la[H];C=H*3;Q[C]=color.r;Q[C+1]=color.g;Q[C+2]=color.b}f.bindBuffer(f.ARRAY_BUFFER,n.__webGLColorBuffer);f.bufferData(f.ARRAY_BUFFER,
+Q,B)}}p.__dirtyVertices=!1;p.__dirtyColors=!1}else if(n instanceof THREE.ParticleSystem){p=n.geometry;(p.__dirtyVertices||p.__dirtyColors||n.sortParticles)&&c(p,f.DYNAMIC_DRAW,n);p.__dirtyVertices=!1;p.__dirtyColors=!1}}};this.setFaceCulling=function(m,z){if(m){!z||z=="ccw"?f.frontFace(f.CCW):f.frontFace(f.CW);if(m=="back")f.cullFace(f.BACK);else m=="front"?f.cullFace(f.FRONT):f.cullFace(f.FRONT_AND_BACK);f.enable(f.CULL_FACE)}else f.disable(f.CULL_FACE)};this.supportsVertexTextures=function(){return f.getParameter(f.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>
+0}};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 d,e=b.length;for(d=0;d<e;d++){a=b[d];this.soundPosition.set(a.matrixWorld.n14,a.matrixWorld.n24,a.matrixWorld.n34);this.soundPosition.subSelf(c.position);if(a.isPlaying&&a.isLoaded){a.isAddedToDOM||a.addToDOM(this.domElement);a.calculateVolumeAndPan(this.soundPosition)}}}};
 THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableFace3=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.v3=new THREE.Vertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[];this.faceMaterials=this.meshMaterials=null;this.overdraw=!1;this.uvs=[null,null,null]};
 THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.materials=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.Vertex;this.v2=new THREE.Vertex;this.materials=null};
 var GeometryUtils={merge:function(a,c){var b=c instanceof THREE.Mesh,d=a.vertices.length,e=b?c.geometry:c,g=a.vertices,h=e.vertices,j=a.faces,k=e.faces,l=a.uvs;e=e.uvs;b&&c.matrixAutoUpdate&&c.updateMatrix();for(var o=0,v=h.length;o<v;o++){var u=new THREE.Vertex(h[o].position.clone());b&&c.matrix.multiplyVector3(u.position);g.push(u)}o=0;for(v=k.length;o<v;o++){h=k[o];var t,y=h.vertexNormals;if(h instanceof THREE.Face3)t=new THREE.Face3(h.a+d,h.b+d,h.c+d);else h instanceof THREE.Face4&&(t=new THREE.Face4(h.a+

+ 28 - 28
build/custom/ThreeWebGL.js

@@ -196,31 +196,31 @@ n=c.createProgram();k=["#ifdef GL_ES\nprecision highp float;\n#endif","#define M
 "","#define MAX_DIR_LIGHTS "+w.maxDirLights,"#define MAX_POINT_LIGHTS "+w.maxPointLights,"#define MAX_BONES "+w.maxBones,w.map?"#define USE_MAP":"",w.envMap?"#define USE_ENVMAP":"",w.lightMap?"#define USE_LIGHTMAP":"",w.vertexColors?"#define USE_COLOR":"",w.skinning?"#define USE_SKINNING":"",w.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 vec3 color;\nattribute vec2 uv;\nattribute vec2 uv2;\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n"].join("\n");
 c.attachShader(n,Z("fragment",k+h));c.attachShader(n,Z("vertex",w+t));c.linkProgram(n);c.getProgramParameter(n,c.LINK_STATUS)||alert("Could not initialise shaders\nVALIDATE_STATUS: "+c.getProgramParameter(n,c.VALIDATE_STATUS)+", gl error ["+c.getError()+"]");n.uniforms={};n.attributes={};f.program=n;n=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","cameraInverseMatrix","boneGlobalMatrices"];for(j in f.uniforms)n.push(j);j=f.program;h=0;for(t=n.length;h<
 t;h++){k=n[h];j.uniforms[k]=c.getUniformLocation(j,k)}j=f.program;n=["position","normal","uv","uv2","tangent","color","skinVertexA","skinVertexB","skinIndex","skinWeight"];h=0;for(t=n.length;h<t;h++){k=n[h];j.attributes[k]=c.getAttribLocation(j,k)}j=f.program.attributes;c.enableVertexAttribArray(j.position);j.color>=0&&c.enableVertexAttribArray(j.color);j.normal>=0&&c.enableVertexAttribArray(j.normal);j.tangent>=0&&c.enableVertexAttribArray(j.tangent);if(f.skinning&&j.skinVertexA>=0&&j.skinVertexB>=
-0&&j.skinIndex>=0&&j.skinWeight>=0){c.enableVertexAttribArray(j.skinVertexA);c.enableVertexAttribArray(j.skinVertexB);c.enableVertexAttribArray(j.skinIndex);c.enableVertexAttribArray(j.skinWeight)}};this.render=function(f,k,n,h){var j,w,r,v,D,t,z,M,R=f.lights,O=f.fog;k.matrixAutoUpdate&&k.update();k.matrixWorldInverse.flattenToArray(La);k.projectionMatrix.flattenToArray(Ra);Ia.multiply(k.projectionMatrix,k.matrixWorldInverse);o(Ia);f.update(undefined,!1,k);this.initWebGLObjects(f);S(n);(this.autoClear||
-h)&&this.clear();D=f.__webglObjects.length;for(h=0;h<D;h++){j=f.__webglObjects[h];z=j.object;if(z.visible)if(!(z instanceof THREE.Mesh)||q(z)){z.matrixWorld.flattenToArray(z._objectMatrixArray);G(z,k);A(j);j.render=!0;if(this.sortObjects){Da.copy(z.position);Ia.multiplyVector3(Da);j.z=Da.z}}else j.render=!1;else j.render=!1}this.sortObjects&&f.__webglObjects.sort(B);t=f.__webglObjectsImmediate.length;for(h=0;h<t;h++){j=f.__webglObjectsImmediate[h];z=j.object;if(z.visible){z.matrixAutoUpdate&&z.matrixWorld.flattenToArray(z._objectMatrixArray);
-G(z,k);x(j)}}J(THREE.NormalBlending);for(h=0;h<D;h++){j=f.__webglObjects[h];if(j.render){z=j.object;M=j.buffer;r=j.opaque;m(z);for(j=0;j<r.count;j++){v=r.list[j];p(v.depthTest);g(k,R,O,v,M,z)}}}for(h=0;h<t;h++){j=f.__webglObjectsImmediate[h];z=j.object;if(z.visible){r=j.opaque;m(z);for(j=0;j<r.count;j++){v=r.list[j];p(v.depthTest);w=e(k,R,O,v,z);z.render(function(L){l(L,w)})}}}for(h=0;h<D;h++){j=f.__webglObjects[h];if(j.render){z=j.object;M=j.buffer;r=j.transparent;m(z);for(j=0;j<r.count;j++){v=r.list[j];
-J(v.blending);p(v.depthTest);g(k,R,O,v,M,z)}}}for(h=0;h<t;h++){j=f.__webglObjectsImmediate[h];z=j.object;if(z.visible){r=j.transparent;m(z);for(j=0;j<r.count;j++){v=r.list[j];J(v.blending);p(v.depthTest);w=e(k,R,O,v,z);z.render(function(L){l(L,w)})}}}if(n&&n.minFilter!==THREE.NearestFilter&&n.minFilter!==THREE.LinearFilter){c.bindTexture(c.TEXTURE_2D,n.__webGLTexture);c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}};this.initWebGLObjects=function(f){if(!f.__webglObjects){f.__webglObjects=
-[];f.__webglObjectsImmediate=[]}for(;f.__objectsAdded.length;){var k=f.__objectsAdded[0],n=f,h=void 0,j=void 0,w=void 0;if(k._modelViewMatrix==undefined){k._modelViewMatrix=new THREE.Matrix4;k._normalMatrixArray=new Float32Array(9);k._modelViewMatrixArray=new Float32Array(16);k._objectMatrixArray=new Float32Array(16);k.matrixWorld.flattenToArray(k._objectMatrixArray)}if(k instanceof THREE.Mesh){j=k.geometry;j.geometryGroups==undefined&&H(j);for(h in j.geometryGroups){w=j.geometryGroups[h];if(!w.__webGLVertexBuffer){var r=
-w;r.__webGLVertexBuffer=c.createBuffer();r.__webGLNormalBuffer=c.createBuffer();r.__webGLTangentBuffer=c.createBuffer();r.__webGLColorBuffer=c.createBuffer();r.__webGLUVBuffer=c.createBuffer();r.__webGLUV2Buffer=c.createBuffer();r.__webGLSkinVertexABuffer=c.createBuffer();r.__webGLSkinVertexBBuffer=c.createBuffer();r.__webGLSkinIndicesBuffer=c.createBuffer();r.__webGLSkinWeightsBuffer=c.createBuffer();r.__webGLFaceBuffer=c.createBuffer();r.__webGLLineBuffer=c.createBuffer();r=w;var v=k,D=void 0,t=
-void 0,z=0,M=0,R=0,O=v.geometry.faces,L=r.faces;D=0;for(t=L.length;D<t;D++){fi=L[D];face=O[fi];if(face instanceof THREE.Face3){z+=3;M+=1;R+=3}else if(face instanceof THREE.Face4){z+=4;M+=2;R+=4}}r.__vertexArray=new Float32Array(z*3);r.__normalArray=new Float32Array(z*3);r.__tangentArray=new Float32Array(z*4);r.__colorArray=new Float32Array(z*3);r.__uvArray=new Float32Array(z*2);r.__uv2Array=new Float32Array(z*2);r.__skinVertexAArray=new Float32Array(z*4);r.__skinVertexBArray=new Float32Array(z*4);
-r.__skinIndexArray=new Float32Array(z*4);r.__skinWeightArray=new Float32Array(z*4);r.__faceArray=new Uint16Array(M*3);r.__lineArray=new Uint16Array(R*2);t=D=r;z=void 0;O=void 0;var N=void 0,K=void 0;N=void 0;L=!1;z=0;for(O=v.materials.length;z<O;z++){N=v.materials[z];if(N instanceof THREE.MeshFaceMaterial){N=0;for(K=t.materials.length;N<K;N++)if(t.materials[N]&&t.materials[N].shading!=undefined&&t.materials[N].shading==THREE.SmoothShading){L=!0;break}}else if(N&&N.shading!=undefined&&N.shading==THREE.SmoothShading){L=
-!0;break}if(L)break}D.__needsSmoothNormals=L;r.__webGLFaceCount=M*3;r.__webGLLineCount=R*2;j.__dirtyVertices=!0;j.__dirtyElements=!0;j.__dirtyUvs=!0;j.__dirtyNormals=!0;j.__dirtyTangents=!0;j.__dirtyColors=!0}I(n.__webglObjects,w,k)}}else if(k instanceof THREE.Ribbon){j=k.geometry;if(!j.__webGLVertexBuffer){h=j;h.__webGLVertexBuffer=c.createBuffer();h.__webGLColorBuffer=c.createBuffer();h=j;w=h.vertices.length;h.__vertexArray=new Float32Array(w*3);h.__colorArray=new Float32Array(w*3);h.__webGLVertexCount=
-w;j.__dirtyVertices=!0;j.__dirtyColors=!0}I(n.__webglObjects,j,k)}else if(k instanceof THREE.Line){j=k.geometry;if(!j.__webGLVertexBuffer){h=j;h.__webGLVertexBuffer=c.createBuffer();h.__webGLColorBuffer=c.createBuffer();h=j;w=h.vertices.length;h.__vertexArray=new Float32Array(w*3);h.__colorArray=new Float32Array(w*3);h.__webGLLineCount=w;j.__dirtyVertices=!0;j.__dirtyColors=!0}I(n.__webglObjects,j,k)}else if(k instanceof THREE.ParticleSystem){j=k.geometry;if(!j.__webGLVertexBuffer){h=j;h.__webGLVertexBuffer=
-c.createBuffer();h.__webGLColorBuffer=c.createBuffer();h=j;w=h.vertices.length;h.__vertexArray=new Float32Array(w*3);h.__colorArray=new Float32Array(w*3);h.__sortArray=[];h.__webGLParticleCount=w;j.__dirtyVertices=!0;j.__dirtyColors=!0}I(n.__webglObjects,j,k)}else THREE.MarchingCubes!==undefined&&k instanceof THREE.MarchingCubes&&n.__webglObjectsImmediate.push({object:k,opaque:{list:[],count:0},transparent:{list:[],count:0}});f.__objectsAdded.splice(0,1)}for(;f.__objectsRemoved.length;){k=f.__objectsRemoved[0];
-n=f;j=void 0;h=void 0;for(j=n.__webglObjects.length-1;j>=0;j--){h=n.__webglObjects[j].object;k==h&&n.__webglObjects.splice(j,1)}f.__objectsRemoved.splice(0,1)}k=0;for(n=f.__webglObjects.length;k<n;k++){h=f.__webglObjects[k].object;w=void 0;j=void 0;r=void 0;if(h instanceof THREE.Mesh){j=h.geometry;for(w in j.geometryGroups){r=j.geometryGroups[w];if(j.__dirtyVertices||j.__dirtyElements||j.__dirtyUvs||j.__dirtyNormals||j.__dirtyColors||j.__dirtyTangents){M=c.DYNAMIC_DRAW;R=void 0;D=void 0;var ja=void 0,
-y=void 0,ga=void 0,ea=void 0,ia=void 0;ja=void 0;var C=void 0,E=void 0,F=void 0,Q=void 0;C=void 0;E=void 0;F=void 0;y=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;y=void 0;ea=void 0;ga=void 0;ia=void 0;var ka=K=N=L=O=z=v=t=0,Y=0,s=0,aa=r.__vertexArray,Ja=r.__uvArray,Ka=r.__uv2Array,oa=r.__normalArray,T=r.__tangentArray,ca=r.__colorArray,U=r.__skinVertexAArray,
-V=r.__skinVertexBArray,W=r.__skinIndexArray,X=r.__skinWeightArray,ta=r.__faceArray,la=r.__lineArray,Wa=r.__needsSmoothNormals,ha=h.geometry,Ma=ha.__dirtyVertices,Na=ha.__dirtyElements,Ea=ha.__dirtyUvs,Oa=ha.__dirtyNormals,Pa=ha.__dirtyTangents,Qa=ha.__dirtyColors,ma=ha.vertices,Xa=r.faces,Ya=ha.faces,Za=ha.uvs,$a=ha.uvs2,ua=ha.colors,ya=ha.skinVerticesA,za=ha.skinVerticesB,Aa=ha.skinIndices,wa=ha.skinWeights;R=0;for(D=Xa.length;R<D;R++){ja=Xa[R];y=Ya[ja];ia=Za[ja];ja=$a[ja];ga=y.vertexNormals;ea=
-y.normal;if(y instanceof THREE.Face3){if(Ma){C=ma[y.a].position;E=ma[y.b].position;F=ma[y.c].position;aa[v]=C.x;aa[v+1]=C.y;aa[v+2]=C.z;aa[v+3]=E.x;aa[v+4]=E.y;aa[v+5]=E.z;aa[v+6]=F.x;aa[v+7]=F.y;aa[v+8]=F.z;v+=9}if(wa.length){C=wa[y.a];E=wa[y.b];F=wa[y.c];X[s]=C.x;X[s+1]=C.y;X[s+2]=C.z;X[s+3]=C.w;X[s+4]=E.x;X[s+5]=E.y;X[s+6]=E.z;X[s+7]=E.w;X[s+8]=F.x;X[s+9]=F.y;X[s+10]=F.z;X[s+11]=F.w;C=Aa[y.a];E=Aa[y.b];F=Aa[y.c];W[s]=C.x;W[s+1]=C.y;W[s+2]=C.z;W[s+3]=C.w;W[s+4]=E.x;W[s+5]=E.y;W[s+6]=E.z;W[s+7]=
-E.w;W[s+8]=F.x;W[s+9]=F.y;W[s+10]=F.z;W[s+11]=F.w;C=ya[y.a];E=ya[y.b];F=ya[y.c];U[s]=C.x;U[s+1]=C.y;U[s+2]=C.z;U[s+3]=1;U[s+4]=E.x;U[s+5]=E.y;U[s+6]=E.z;U[s+7]=1;U[s+8]=F.x;U[s+9]=F.y;U[s+10]=F.z;U[s+11]=1;C=za[y.a];E=za[y.b];F=za[y.c];V[s]=C.x;V[s+1]=C.y;V[s+2]=C.z;V[s+3]=1;V[s+4]=E.x;V[s+5]=E.y;V[s+6]=E.z;V[s+7]=1;V[s+8]=F.x;V[s+9]=F.y;V[s+10]=F.z;V[s+11]=1;s+=12}if(Qa&&ua.length){C=ua[y.a];E=ua[y.b];F=ua[y.c];ca[Y]=C.r;ca[Y+1]=C.g;ca[Y+2]=C.b;ca[Y+3]=E.r;ca[Y+4]=E.g;ca[Y+5]=E.b;ca[Y+6]=F.r;ca[Y+
-7]=F.g;ca[Y+8]=F.b;Y+=9}if(Pa&&ha.hasTangents){C=ma[y.a].tangent;E=ma[y.b].tangent;F=ma[y.c].tangent;T[K]=C.x;T[K+1]=C.y;T[K+2]=C.z;T[K+3]=C.w;T[K+4]=E.x;T[K+5]=E.y;T[K+6]=E.z;T[K+7]=E.w;T[K+8]=F.x;T[K+9]=F.y;T[K+10]=F.z;T[K+11]=F.w;K+=12}if(Oa)if(ga.length==3&&Wa)for(y=0;y<3;y++){ea=ga[y];oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}else for(y=0;y<3;y++){oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}if(Ea&&ia)for(y=0;y<3;y++){ga=ia[y];Ja[z]=ga.u;Ja[z+1]=ga.v;z+=2}if(Ea&&ja)for(y=0;y<3;y++){ia=ja[y];Ka[O]=
-ia.u;Ka[O+1]=ia.v;O+=2}if(Na){ta[L]=t;ta[L+1]=t+1;ta[L+2]=t+2;L+=3;la[ka]=t;la[ka+1]=t+1;la[ka+2]=t;la[ka+3]=t+2;la[ka+4]=t+1;la[ka+5]=t+2;ka+=6;t+=3}}else if(y instanceof THREE.Face4){if(Ma){C=ma[y.a].position;E=ma[y.b].position;F=ma[y.c].position;Q=ma[y.d].position;aa[v]=C.x;aa[v+1]=C.y;aa[v+2]=C.z;aa[v+3]=E.x;aa[v+4]=E.y;aa[v+5]=E.z;aa[v+6]=F.x;aa[v+7]=F.y;aa[v+8]=F.z;aa[v+9]=Q.x;aa[v+10]=Q.y;aa[v+11]=Q.z;v+=12}if(wa.length){C=wa[y.a];E=wa[y.b];F=wa[y.c];Q=wa[y.d];X[s]=C.x;X[s+1]=C.y;X[s+2]=C.z;
-X[s+3]=C.w;X[s+4]=E.x;X[s+5]=E.y;X[s+6]=E.z;X[s+7]=E.w;X[s+8]=F.x;X[s+9]=F.y;X[s+10]=F.z;X[s+11]=F.w;X[s+12]=Q.x;X[s+13]=Q.y;X[s+14]=Q.z;X[s+15]=Q.w;C=Aa[y.a];E=Aa[y.b];F=Aa[y.c];Q=Aa[y.d];W[s]=C.x;W[s+1]=C.y;W[s+2]=C.z;W[s+3]=C.w;W[s+4]=E.x;W[s+5]=E.y;W[s+6]=E.z;W[s+7]=E.w;W[s+8]=F.x;W[s+9]=F.y;W[s+10]=F.z;W[s+11]=F.w;W[s+12]=Q.x;W[s+13]=Q.y;W[s+14]=Q.z;W[s+15]=Q.w;C=ya[y.a];E=ya[y.b];F=ya[y.c];Q=ya[y.d];U[s]=C.x;U[s+1]=C.y;U[s+2]=C.z;U[s+3]=1;U[s+4]=E.x;U[s+5]=E.y;U[s+6]=E.z;U[s+7]=1;U[s+8]=F.x;
-U[s+9]=F.y;U[s+10]=F.z;U[s+11]=1;U[s+12]=Q.x;U[s+13]=Q.y;U[s+14]=Q.z;U[s+15]=1;C=za[y.a];E=za[y.b];F=za[y.c];Q=za[y.d];V[s]=C.x;V[s+1]=C.y;V[s+2]=C.z;V[s+3]=1;V[s+4]=E.x;V[s+5]=E.y;V[s+6]=E.z;V[s+7]=1;V[s+8]=F.x;V[s+9]=F.y;V[s+10]=F.z;V[s+11]=1;V[s+12]=Q.x;V[s+13]=Q.y;V[s+14]=Q.z;V[s+15]=1;s+=16}if(Qa&&ua.length){C=ua[y.a];E=ua[y.b];F=ua[y.c];Q=ua[y.d];ca[Y]=C.r;ca[Y+1]=C.g;ca[Y+2]=C.b;ca[Y+3]=E.r;ca[Y+4]=E.g;ca[Y+5]=E.b;ca[Y+6]=F.r;ca[Y+7]=F.g;ca[Y+8]=F.b;ca[Y+9]=Q.r;ca[Y+10]=Q.g;ca[Y+11]=Q.b;Y+=
-12}if(Pa&&ha.hasTangents){C=ma[y.a].tangent;E=ma[y.b].tangent;F=ma[y.c].tangent;y=ma[y.d].tangent;T[K]=C.x;T[K+1]=C.y;T[K+2]=C.z;T[K+3]=C.w;T[K+4]=E.x;T[K+5]=E.y;T[K+6]=E.z;T[K+7]=E.w;T[K+8]=F.x;T[K+9]=F.y;T[K+10]=F.z;T[K+11]=F.w;T[K+12]=y.x;T[K+13]=y.y;T[K+14]=y.z;T[K+15]=y.w;K+=16}if(Oa)if(ga.length==4&&Wa)for(y=0;y<4;y++){ea=ga[y];oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}else for(y=0;y<4;y++){oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}if(Ea&&ia)for(y=0;y<4;y++){ga=ia[y];Ja[z]=ga.u;Ja[z+1]=ga.v;
-z+=2}if(Ea&&ja)for(y=0;y<4;y++){ia=ja[y];Ka[O]=ia.u;Ka[O+1]=ia.v;O+=2}if(Na){ta[L]=t;ta[L+1]=t+1;ta[L+2]=t+2;ta[L+3]=t;ta[L+4]=t+2;ta[L+5]=t+3;L+=6;la[ka]=t;la[ka+1]=t+1;la[ka+2]=t;la[ka+3]=t+3;la[ka+4]=t+1;la[ka+5]=t+2;la[ka+6]=t+2;la[ka+7]=t+3;ka+=8;t+=4}}}if(Ma){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLVertexBuffer);c.bufferData(c.ARRAY_BUFFER,aa,M)}if(Qa&&ua.length){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLColorBuffer);c.bufferData(c.ARRAY_BUFFER,ca,M)}if(Oa){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLNormalBuffer);
-c.bufferData(c.ARRAY_BUFFER,oa,M)}if(Pa&&ha.hasTangents){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLTangentBuffer);c.bufferData(c.ARRAY_BUFFER,T,M)}if(Ea&&z>0){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLUVBuffer);c.bufferData(c.ARRAY_BUFFER,Ja,M)}if(Ea&&O>0){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLUV2Buffer);c.bufferData(c.ARRAY_BUFFER,Ka,M)}if(Na){c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,r.__webGLFaceBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,ta,M);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,r.__webGLLineBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,
-la,M)}if(s>0){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinVertexABuffer);c.bufferData(c.ARRAY_BUFFER,U,M);c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinVertexBBuffer);c.bufferData(c.ARRAY_BUFFER,V,M);c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinIndicesBuffer);c.bufferData(c.ARRAY_BUFFER,W,M);c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinWeightsBuffer);c.bufferData(c.ARRAY_BUFFER,X,M)}}}j.__dirtyVertices=!1;j.__dirtyElements=!1;j.__dirtyUvs=!1;j.__dirtyNormals=!1;j.__dirtyTangents=!1;j.__dirtyColors=!1}else if(h instanceof
-THREE.Ribbon){j=h.geometry;if(j.__dirtyVertices||j.__dirtyColors){h=j;w=c.DYNAMIC_DRAW;t=void 0;t=void 0;v=void 0;r=void 0;z=h.vertices;M=h.colors;O=z.length;R=M.length;L=h.__vertexArray;D=h.__colorArray;N=h.__dirtyColors;if(h.__dirtyVertices){for(t=0;t<O;t++){v=z[t].position;r=t*3;L[r]=v.x;L[r+1]=v.y;L[r+2]=v.z}c.bindBuffer(c.ARRAY_BUFFER,h.__webGLVertexBuffer);c.bufferData(c.ARRAY_BUFFER,L,w)}if(N){for(t=0;t<R;t++){color=M[t];r=t*3;D[r]=color.r;D[r+1]=color.g;D[r+2]=color.b}c.bindBuffer(c.ARRAY_BUFFER,
-h.__webGLColorBuffer);c.bufferData(c.ARRAY_BUFFER,D,w)}}j.__dirtyVertices=!1;j.__dirtyColors=!1}else if(h instanceof THREE.Line){j=h.geometry;if(j.__dirtyVertices||j.__dirtyColors){h=j;w=c.DYNAMIC_DRAW;t=void 0;t=void 0;v=void 0;r=void 0;z=h.vertices;M=h.colors;O=z.length;R=M.length;L=h.__vertexArray;D=h.__colorArray;N=h.__dirtyColors;if(h.__dirtyVertices){for(t=0;t<O;t++){v=z[t].position;r=t*3;L[r]=v.x;L[r+1]=v.y;L[r+2]=v.z}c.bindBuffer(c.ARRAY_BUFFER,h.__webGLVertexBuffer);c.bufferData(c.ARRAY_BUFFER,
-L,w)}if(N){for(t=0;t<R;t++){color=M[t];r=t*3;D[r]=color.r;D[r+1]=color.g;D[r+2]=color.b}c.bindBuffer(c.ARRAY_BUFFER,h.__webGLColorBuffer);c.bufferData(c.ARRAY_BUFFER,D,w)}}j.__dirtyVertices=!1;j.__dirtyColors=!1}else if(h instanceof THREE.ParticleSystem){j=h.geometry;(j.__dirtyVertices||j.__dirtyColors||h.sortParticles)&&b(j,c.DYNAMIC_DRAW,h);j.__dirtyVertices=!1;j.__dirtyColors=!1}}};this.setFaceCulling=function(f,k){if(f){!k||k=="ccw"?c.frontFace(c.CCW):c.frontFace(c.CW);if(f=="back")c.cullFace(c.BACK);
-else f=="front"?c.cullFace(c.FRONT):c.cullFace(c.FRONT_AND_BACK);c.enable(c.CULL_FACE)}else c.disable(c.CULL_FACE)};this.supportsVertexTextures=function(){return c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}};
+0&&j.skinIndex>=0&&j.skinWeight>=0){c.enableVertexAttribArray(j.skinVertexA);c.enableVertexAttribArray(j.skinVertexB);c.enableVertexAttribArray(j.skinIndex);c.enableVertexAttribArray(j.skinWeight)}};this.render=function(f,k,n,h){var j,w,r,v,D,t,z,M,R=f.lights,O=f.fog;k.matrixAutoUpdate&&k.parent===undefined&&k.update(undefined,!0);f.update(undefined,!1,k);k.matrixWorldInverse.flattenToArray(La);k.projectionMatrix.flattenToArray(Ra);Ia.multiply(k.projectionMatrix,k.matrixWorldInverse);o(Ia);this.initWebGLObjects(f);
+S(n);(this.autoClear||h)&&this.clear();D=f.__webglObjects.length;for(h=0;h<D;h++){j=f.__webglObjects[h];z=j.object;if(z.visible)if(!(z instanceof THREE.Mesh)||q(z)){z.matrixWorld.flattenToArray(z._objectMatrixArray);G(z,k);A(j);j.render=!0;if(this.sortObjects){Da.copy(z.position);Ia.multiplyVector3(Da);j.z=Da.z}}else j.render=!1;else j.render=!1}this.sortObjects&&f.__webglObjects.sort(B);t=f.__webglObjectsImmediate.length;for(h=0;h<t;h++){j=f.__webglObjectsImmediate[h];z=j.object;if(z.visible){z.matrixAutoUpdate&&
+z.matrixWorld.flattenToArray(z._objectMatrixArray);G(z,k);x(j)}}J(THREE.NormalBlending);for(h=0;h<D;h++){j=f.__webglObjects[h];if(j.render){z=j.object;M=j.buffer;r=j.opaque;m(z);for(j=0;j<r.count;j++){v=r.list[j];p(v.depthTest);g(k,R,O,v,M,z)}}}for(h=0;h<t;h++){j=f.__webglObjectsImmediate[h];z=j.object;if(z.visible){r=j.opaque;m(z);for(j=0;j<r.count;j++){v=r.list[j];p(v.depthTest);w=e(k,R,O,v,z);z.render(function(L){l(L,w)})}}}for(h=0;h<D;h++){j=f.__webglObjects[h];if(j.render){z=j.object;M=j.buffer;
+r=j.transparent;m(z);for(j=0;j<r.count;j++){v=r.list[j];J(v.blending);p(v.depthTest);g(k,R,O,v,M,z)}}}for(h=0;h<t;h++){j=f.__webglObjectsImmediate[h];z=j.object;if(z.visible){r=j.transparent;m(z);for(j=0;j<r.count;j++){v=r.list[j];J(v.blending);p(v.depthTest);w=e(k,R,O,v,z);z.render(function(L){l(L,w)})}}}if(n&&n.minFilter!==THREE.NearestFilter&&n.minFilter!==THREE.LinearFilter){c.bindTexture(c.TEXTURE_2D,n.__webGLTexture);c.generateMipmap(c.TEXTURE_2D);c.bindTexture(c.TEXTURE_2D,null)}};this.initWebGLObjects=
+function(f){if(!f.__webglObjects){f.__webglObjects=[];f.__webglObjectsImmediate=[]}for(;f.__objectsAdded.length;){var k=f.__objectsAdded[0],n=f,h=void 0,j=void 0,w=void 0;if(k._modelViewMatrix==undefined){k._modelViewMatrix=new THREE.Matrix4;k._normalMatrixArray=new Float32Array(9);k._modelViewMatrixArray=new Float32Array(16);k._objectMatrixArray=new Float32Array(16);k.matrixWorld.flattenToArray(k._objectMatrixArray)}if(k instanceof THREE.Mesh){j=k.geometry;j.geometryGroups==undefined&&H(j);for(h in j.geometryGroups){w=
+j.geometryGroups[h];if(!w.__webGLVertexBuffer){var r=w;r.__webGLVertexBuffer=c.createBuffer();r.__webGLNormalBuffer=c.createBuffer();r.__webGLTangentBuffer=c.createBuffer();r.__webGLColorBuffer=c.createBuffer();r.__webGLUVBuffer=c.createBuffer();r.__webGLUV2Buffer=c.createBuffer();r.__webGLSkinVertexABuffer=c.createBuffer();r.__webGLSkinVertexBBuffer=c.createBuffer();r.__webGLSkinIndicesBuffer=c.createBuffer();r.__webGLSkinWeightsBuffer=c.createBuffer();r.__webGLFaceBuffer=c.createBuffer();r.__webGLLineBuffer=
+c.createBuffer();r=w;var v=k,D=void 0,t=void 0,z=0,M=0,R=0,O=v.geometry.faces,L=r.faces;D=0;for(t=L.length;D<t;D++){fi=L[D];face=O[fi];if(face instanceof THREE.Face3){z+=3;M+=1;R+=3}else if(face instanceof THREE.Face4){z+=4;M+=2;R+=4}}r.__vertexArray=new Float32Array(z*3);r.__normalArray=new Float32Array(z*3);r.__tangentArray=new Float32Array(z*4);r.__colorArray=new Float32Array(z*3);r.__uvArray=new Float32Array(z*2);r.__uv2Array=new Float32Array(z*2);r.__skinVertexAArray=new Float32Array(z*4);r.__skinVertexBArray=
+new Float32Array(z*4);r.__skinIndexArray=new Float32Array(z*4);r.__skinWeightArray=new Float32Array(z*4);r.__faceArray=new Uint16Array(M*3);r.__lineArray=new Uint16Array(R*2);t=D=r;z=void 0;O=void 0;var N=void 0,K=void 0;N=void 0;L=!1;z=0;for(O=v.materials.length;z<O;z++){N=v.materials[z];if(N instanceof THREE.MeshFaceMaterial){N=0;for(K=t.materials.length;N<K;N++)if(t.materials[N]&&t.materials[N].shading!=undefined&&t.materials[N].shading==THREE.SmoothShading){L=!0;break}}else if(N&&N.shading!=undefined&&
+N.shading==THREE.SmoothShading){L=!0;break}if(L)break}D.__needsSmoothNormals=L;r.__webGLFaceCount=M*3;r.__webGLLineCount=R*2;j.__dirtyVertices=!0;j.__dirtyElements=!0;j.__dirtyUvs=!0;j.__dirtyNormals=!0;j.__dirtyTangents=!0;j.__dirtyColors=!0}I(n.__webglObjects,w,k)}}else if(k instanceof THREE.Ribbon){j=k.geometry;if(!j.__webGLVertexBuffer){h=j;h.__webGLVertexBuffer=c.createBuffer();h.__webGLColorBuffer=c.createBuffer();h=j;w=h.vertices.length;h.__vertexArray=new Float32Array(w*3);h.__colorArray=
+new Float32Array(w*3);h.__webGLVertexCount=w;j.__dirtyVertices=!0;j.__dirtyColors=!0}I(n.__webglObjects,j,k)}else if(k instanceof THREE.Line){j=k.geometry;if(!j.__webGLVertexBuffer){h=j;h.__webGLVertexBuffer=c.createBuffer();h.__webGLColorBuffer=c.createBuffer();h=j;w=h.vertices.length;h.__vertexArray=new Float32Array(w*3);h.__colorArray=new Float32Array(w*3);h.__webGLLineCount=w;j.__dirtyVertices=!0;j.__dirtyColors=!0}I(n.__webglObjects,j,k)}else if(k instanceof THREE.ParticleSystem){j=k.geometry;
+if(!j.__webGLVertexBuffer){h=j;h.__webGLVertexBuffer=c.createBuffer();h.__webGLColorBuffer=c.createBuffer();h=j;w=h.vertices.length;h.__vertexArray=new Float32Array(w*3);h.__colorArray=new Float32Array(w*3);h.__sortArray=[];h.__webGLParticleCount=w;j.__dirtyVertices=!0;j.__dirtyColors=!0}I(n.__webglObjects,j,k)}else THREE.MarchingCubes!==undefined&&k instanceof THREE.MarchingCubes&&n.__webglObjectsImmediate.push({object:k,opaque:{list:[],count:0},transparent:{list:[],count:0}});f.__objectsAdded.splice(0,
+1)}for(;f.__objectsRemoved.length;){k=f.__objectsRemoved[0];n=f;j=void 0;h=void 0;for(j=n.__webglObjects.length-1;j>=0;j--){h=n.__webglObjects[j].object;k==h&&n.__webglObjects.splice(j,1)}f.__objectsRemoved.splice(0,1)}k=0;for(n=f.__webglObjects.length;k<n;k++){h=f.__webglObjects[k].object;w=void 0;j=void 0;r=void 0;if(h instanceof THREE.Mesh){j=h.geometry;for(w in j.geometryGroups){r=j.geometryGroups[w];if(j.__dirtyVertices||j.__dirtyElements||j.__dirtyUvs||j.__dirtyNormals||j.__dirtyColors||j.__dirtyTangents){M=
+c.DYNAMIC_DRAW;R=void 0;D=void 0;var ja=void 0,y=void 0,ga=void 0,ea=void 0,ia=void 0;ja=void 0;var C=void 0,E=void 0,F=void 0,Q=void 0;C=void 0;E=void 0;F=void 0;y=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;C=void 0;E=void 0;F=void 0;Q=void 0;y=void 0;ea=void 0;ga=void 0;ia=void 0;var ka=K=N=L=O=z=v=t=0,Y=0,s=0,aa=r.__vertexArray,Ja=r.__uvArray,Ka=r.__uv2Array,oa=r.__normalArray,T=r.__tangentArray,
+ca=r.__colorArray,U=r.__skinVertexAArray,V=r.__skinVertexBArray,W=r.__skinIndexArray,X=r.__skinWeightArray,ta=r.__faceArray,la=r.__lineArray,Wa=r.__needsSmoothNormals,ha=h.geometry,Ma=ha.__dirtyVertices,Na=ha.__dirtyElements,Ea=ha.__dirtyUvs,Oa=ha.__dirtyNormals,Pa=ha.__dirtyTangents,Qa=ha.__dirtyColors,ma=ha.vertices,Xa=r.faces,Ya=ha.faces,Za=ha.uvs,$a=ha.uvs2,ua=ha.colors,ya=ha.skinVerticesA,za=ha.skinVerticesB,Aa=ha.skinIndices,wa=ha.skinWeights;R=0;for(D=Xa.length;R<D;R++){ja=Xa[R];y=Ya[ja];ia=
+Za[ja];ja=$a[ja];ga=y.vertexNormals;ea=y.normal;if(y instanceof THREE.Face3){if(Ma){C=ma[y.a].position;E=ma[y.b].position;F=ma[y.c].position;aa[v]=C.x;aa[v+1]=C.y;aa[v+2]=C.z;aa[v+3]=E.x;aa[v+4]=E.y;aa[v+5]=E.z;aa[v+6]=F.x;aa[v+7]=F.y;aa[v+8]=F.z;v+=9}if(wa.length){C=wa[y.a];E=wa[y.b];F=wa[y.c];X[s]=C.x;X[s+1]=C.y;X[s+2]=C.z;X[s+3]=C.w;X[s+4]=E.x;X[s+5]=E.y;X[s+6]=E.z;X[s+7]=E.w;X[s+8]=F.x;X[s+9]=F.y;X[s+10]=F.z;X[s+11]=F.w;C=Aa[y.a];E=Aa[y.b];F=Aa[y.c];W[s]=C.x;W[s+1]=C.y;W[s+2]=C.z;W[s+3]=C.w;W[s+
+4]=E.x;W[s+5]=E.y;W[s+6]=E.z;W[s+7]=E.w;W[s+8]=F.x;W[s+9]=F.y;W[s+10]=F.z;W[s+11]=F.w;C=ya[y.a];E=ya[y.b];F=ya[y.c];U[s]=C.x;U[s+1]=C.y;U[s+2]=C.z;U[s+3]=1;U[s+4]=E.x;U[s+5]=E.y;U[s+6]=E.z;U[s+7]=1;U[s+8]=F.x;U[s+9]=F.y;U[s+10]=F.z;U[s+11]=1;C=za[y.a];E=za[y.b];F=za[y.c];V[s]=C.x;V[s+1]=C.y;V[s+2]=C.z;V[s+3]=1;V[s+4]=E.x;V[s+5]=E.y;V[s+6]=E.z;V[s+7]=1;V[s+8]=F.x;V[s+9]=F.y;V[s+10]=F.z;V[s+11]=1;s+=12}if(Qa&&ua.length){C=ua[y.a];E=ua[y.b];F=ua[y.c];ca[Y]=C.r;ca[Y+1]=C.g;ca[Y+2]=C.b;ca[Y+3]=E.r;ca[Y+
+4]=E.g;ca[Y+5]=E.b;ca[Y+6]=F.r;ca[Y+7]=F.g;ca[Y+8]=F.b;Y+=9}if(Pa&&ha.hasTangents){C=ma[y.a].tangent;E=ma[y.b].tangent;F=ma[y.c].tangent;T[K]=C.x;T[K+1]=C.y;T[K+2]=C.z;T[K+3]=C.w;T[K+4]=E.x;T[K+5]=E.y;T[K+6]=E.z;T[K+7]=E.w;T[K+8]=F.x;T[K+9]=F.y;T[K+10]=F.z;T[K+11]=F.w;K+=12}if(Oa)if(ga.length==3&&Wa)for(y=0;y<3;y++){ea=ga[y];oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}else for(y=0;y<3;y++){oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}if(Ea&&ia)for(y=0;y<3;y++){ga=ia[y];Ja[z]=ga.u;Ja[z+1]=ga.v;z+=2}if(Ea&&
+ja)for(y=0;y<3;y++){ia=ja[y];Ka[O]=ia.u;Ka[O+1]=ia.v;O+=2}if(Na){ta[L]=t;ta[L+1]=t+1;ta[L+2]=t+2;L+=3;la[ka]=t;la[ka+1]=t+1;la[ka+2]=t;la[ka+3]=t+2;la[ka+4]=t+1;la[ka+5]=t+2;ka+=6;t+=3}}else if(y instanceof THREE.Face4){if(Ma){C=ma[y.a].position;E=ma[y.b].position;F=ma[y.c].position;Q=ma[y.d].position;aa[v]=C.x;aa[v+1]=C.y;aa[v+2]=C.z;aa[v+3]=E.x;aa[v+4]=E.y;aa[v+5]=E.z;aa[v+6]=F.x;aa[v+7]=F.y;aa[v+8]=F.z;aa[v+9]=Q.x;aa[v+10]=Q.y;aa[v+11]=Q.z;v+=12}if(wa.length){C=wa[y.a];E=wa[y.b];F=wa[y.c];Q=wa[y.d];
+X[s]=C.x;X[s+1]=C.y;X[s+2]=C.z;X[s+3]=C.w;X[s+4]=E.x;X[s+5]=E.y;X[s+6]=E.z;X[s+7]=E.w;X[s+8]=F.x;X[s+9]=F.y;X[s+10]=F.z;X[s+11]=F.w;X[s+12]=Q.x;X[s+13]=Q.y;X[s+14]=Q.z;X[s+15]=Q.w;C=Aa[y.a];E=Aa[y.b];F=Aa[y.c];Q=Aa[y.d];W[s]=C.x;W[s+1]=C.y;W[s+2]=C.z;W[s+3]=C.w;W[s+4]=E.x;W[s+5]=E.y;W[s+6]=E.z;W[s+7]=E.w;W[s+8]=F.x;W[s+9]=F.y;W[s+10]=F.z;W[s+11]=F.w;W[s+12]=Q.x;W[s+13]=Q.y;W[s+14]=Q.z;W[s+15]=Q.w;C=ya[y.a];E=ya[y.b];F=ya[y.c];Q=ya[y.d];U[s]=C.x;U[s+1]=C.y;U[s+2]=C.z;U[s+3]=1;U[s+4]=E.x;U[s+5]=E.y;
+U[s+6]=E.z;U[s+7]=1;U[s+8]=F.x;U[s+9]=F.y;U[s+10]=F.z;U[s+11]=1;U[s+12]=Q.x;U[s+13]=Q.y;U[s+14]=Q.z;U[s+15]=1;C=za[y.a];E=za[y.b];F=za[y.c];Q=za[y.d];V[s]=C.x;V[s+1]=C.y;V[s+2]=C.z;V[s+3]=1;V[s+4]=E.x;V[s+5]=E.y;V[s+6]=E.z;V[s+7]=1;V[s+8]=F.x;V[s+9]=F.y;V[s+10]=F.z;V[s+11]=1;V[s+12]=Q.x;V[s+13]=Q.y;V[s+14]=Q.z;V[s+15]=1;s+=16}if(Qa&&ua.length){C=ua[y.a];E=ua[y.b];F=ua[y.c];Q=ua[y.d];ca[Y]=C.r;ca[Y+1]=C.g;ca[Y+2]=C.b;ca[Y+3]=E.r;ca[Y+4]=E.g;ca[Y+5]=E.b;ca[Y+6]=F.r;ca[Y+7]=F.g;ca[Y+8]=F.b;ca[Y+9]=Q.r;
+ca[Y+10]=Q.g;ca[Y+11]=Q.b;Y+=12}if(Pa&&ha.hasTangents){C=ma[y.a].tangent;E=ma[y.b].tangent;F=ma[y.c].tangent;y=ma[y.d].tangent;T[K]=C.x;T[K+1]=C.y;T[K+2]=C.z;T[K+3]=C.w;T[K+4]=E.x;T[K+5]=E.y;T[K+6]=E.z;T[K+7]=E.w;T[K+8]=F.x;T[K+9]=F.y;T[K+10]=F.z;T[K+11]=F.w;T[K+12]=y.x;T[K+13]=y.y;T[K+14]=y.z;T[K+15]=y.w;K+=16}if(Oa)if(ga.length==4&&Wa)for(y=0;y<4;y++){ea=ga[y];oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}else for(y=0;y<4;y++){oa[N]=ea.x;oa[N+1]=ea.y;oa[N+2]=ea.z;N+=3}if(Ea&&ia)for(y=0;y<4;y++){ga=
+ia[y];Ja[z]=ga.u;Ja[z+1]=ga.v;z+=2}if(Ea&&ja)for(y=0;y<4;y++){ia=ja[y];Ka[O]=ia.u;Ka[O+1]=ia.v;O+=2}if(Na){ta[L]=t;ta[L+1]=t+1;ta[L+2]=t+2;ta[L+3]=t;ta[L+4]=t+2;ta[L+5]=t+3;L+=6;la[ka]=t;la[ka+1]=t+1;la[ka+2]=t;la[ka+3]=t+3;la[ka+4]=t+1;la[ka+5]=t+2;la[ka+6]=t+2;la[ka+7]=t+3;ka+=8;t+=4}}}if(Ma){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLVertexBuffer);c.bufferData(c.ARRAY_BUFFER,aa,M)}if(Qa&&ua.length){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLColorBuffer);c.bufferData(c.ARRAY_BUFFER,ca,M)}if(Oa){c.bindBuffer(c.ARRAY_BUFFER,
+r.__webGLNormalBuffer);c.bufferData(c.ARRAY_BUFFER,oa,M)}if(Pa&&ha.hasTangents){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLTangentBuffer);c.bufferData(c.ARRAY_BUFFER,T,M)}if(Ea&&z>0){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLUVBuffer);c.bufferData(c.ARRAY_BUFFER,Ja,M)}if(Ea&&O>0){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLUV2Buffer);c.bufferData(c.ARRAY_BUFFER,Ka,M)}if(Na){c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,r.__webGLFaceBuffer);c.bufferData(c.ELEMENT_ARRAY_BUFFER,ta,M);c.bindBuffer(c.ELEMENT_ARRAY_BUFFER,r.__webGLLineBuffer);
+c.bufferData(c.ELEMENT_ARRAY_BUFFER,la,M)}if(s>0){c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinVertexABuffer);c.bufferData(c.ARRAY_BUFFER,U,M);c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinVertexBBuffer);c.bufferData(c.ARRAY_BUFFER,V,M);c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinIndicesBuffer);c.bufferData(c.ARRAY_BUFFER,W,M);c.bindBuffer(c.ARRAY_BUFFER,r.__webGLSkinWeightsBuffer);c.bufferData(c.ARRAY_BUFFER,X,M)}}}j.__dirtyVertices=!1;j.__dirtyElements=!1;j.__dirtyUvs=!1;j.__dirtyNormals=!1;j.__dirtyTangents=
+!1;j.__dirtyColors=!1}else if(h instanceof THREE.Ribbon){j=h.geometry;if(j.__dirtyVertices||j.__dirtyColors){h=j;w=c.DYNAMIC_DRAW;t=void 0;t=void 0;v=void 0;r=void 0;z=h.vertices;M=h.colors;O=z.length;R=M.length;L=h.__vertexArray;D=h.__colorArray;N=h.__dirtyColors;if(h.__dirtyVertices){for(t=0;t<O;t++){v=z[t].position;r=t*3;L[r]=v.x;L[r+1]=v.y;L[r+2]=v.z}c.bindBuffer(c.ARRAY_BUFFER,h.__webGLVertexBuffer);c.bufferData(c.ARRAY_BUFFER,L,w)}if(N){for(t=0;t<R;t++){color=M[t];r=t*3;D[r]=color.r;D[r+1]=
+color.g;D[r+2]=color.b}c.bindBuffer(c.ARRAY_BUFFER,h.__webGLColorBuffer);c.bufferData(c.ARRAY_BUFFER,D,w)}}j.__dirtyVertices=!1;j.__dirtyColors=!1}else if(h instanceof THREE.Line){j=h.geometry;if(j.__dirtyVertices||j.__dirtyColors){h=j;w=c.DYNAMIC_DRAW;t=void 0;t=void 0;v=void 0;r=void 0;z=h.vertices;M=h.colors;O=z.length;R=M.length;L=h.__vertexArray;D=h.__colorArray;N=h.__dirtyColors;if(h.__dirtyVertices){for(t=0;t<O;t++){v=z[t].position;r=t*3;L[r]=v.x;L[r+1]=v.y;L[r+2]=v.z}c.bindBuffer(c.ARRAY_BUFFER,
+h.__webGLVertexBuffer);c.bufferData(c.ARRAY_BUFFER,L,w)}if(N){for(t=0;t<R;t++){color=M[t];r=t*3;D[r]=color.r;D[r+1]=color.g;D[r+2]=color.b}c.bindBuffer(c.ARRAY_BUFFER,h.__webGLColorBuffer);c.bufferData(c.ARRAY_BUFFER,D,w)}}j.__dirtyVertices=!1;j.__dirtyColors=!1}else if(h instanceof THREE.ParticleSystem){j=h.geometry;(j.__dirtyVertices||j.__dirtyColors||h.sortParticles)&&b(j,c.DYNAMIC_DRAW,h);j.__dirtyVertices=!1;j.__dirtyColors=!1}}};this.setFaceCulling=function(f,k){if(f){!k||k=="ccw"?c.frontFace(c.CCW):
+c.frontFace(c.CW);if(f=="back")c.cullFace(c.BACK);else f=="front"?c.cullFace(c.FRONT):c.cullFace(c.FRONT_AND_BACK);c.enable(c.CULL_FACE)}else c.disable(c.CULL_FACE)};this.supportsVertexTextures=function(){return c.getParameter(c.MAX_VERTEX_TEXTURE_IMAGE_UNITS)>0}};

+ 3 - 3
src/renderers/WebGLRenderer.js

@@ -1909,16 +1909,16 @@ THREE.WebGLRenderer = function ( parameters ) {
 			fog = scene.fog,
 			ol;
 
-		camera.matrixAutoUpdate && camera.update();
+		if ( camera.matrixAutoUpdate && camera.parent === undefined) { camera.update( undefined, true ); }
 
+		scene.update( undefined, false, camera );
+		
 		camera.matrixWorldInverse.flattenToArray( _viewMatrixArray );
 		camera.projectionMatrix.flattenToArray( _projectionMatrixArray );
 
 		_projScreenMatrix.multiply( camera.projectionMatrix, camera.matrixWorldInverse );
 		computeFrustum( _projScreenMatrix );
 
-		scene.update( undefined, false, camera );
-
 		this.initWebGLObjects( scene );
 
 		setRenderTarget( renderTarget );